в python черепаха мой игрок в понг1 не падает - PullRequest
1 голос
/ 17 июня 2020

Я новичок в разработке игр python. Я использую python 3.8. Я пишу код, используя модуль python turtle, но когда он запущен, все работает нормально, но моя левая панель, которая является игроком 1, не работает » t перемещается вниз после нажатия клавиши 's', но перемещается вверх при нажатии клавиши 'w'. Это даже не выдает ошибки. Это просто структура. Пожалуйста, помогите мне!

import turtle
import time
import random

#variabals
delay=0.05

#screen
wn=turtle.Screen()
wn.bgcolor('black')
wn.title('pong')
wn.setup(height=700,width=600)
wn.tracer(0)


#left player
lbar=turtle.Turtle()
lbar.speed(0)
lbar.direction='stop'
lbar.color('white')
lbar.shape('square')
lbar.shapesize(6,1)
lbar.up()
lbar.goto(-270,100)


#right player
rbar=turtle.Turtle()
rbar.speed(0)
rbar.direction='stop'
rbar.color('white')
rbar.shape('square')
rbar.shapesize(6,1)
rbar.up()
rbar.goto(270,-270)

#pong ball
ball=turtle.Turtle()
ball.speed(0)
ball.shape('circle')
ball.color('red')
ball.shapesize(0.5)
ball.up()
ball.goto(0,0)

#functions
def move():
    if rbar.direction=='up':
        y=rbar.ycor()
        rbar.sety(y+20)

    if rbar.direction=='down':
        y=rbar.ycor()
        rbar.sety(y-20)

    if lbar.direction=='up':
        lbar.sety(lbar.ycor()+20)

    if lbar.direction=='down':
        y=lbar.ycor()
        lbar.sety(y-20)

def rup():
    rbar.direction='up'

def rdown():
    rbar.direction='down'

def lup():
    lbar.direction='up'

def ldown():
    lbar.directon='down'

#inputs
wn.listen()
wn.onkey(lup,'w')
wn.onkey(ldown,'s')
wn.onkey(rup,'Up')
wn.onkey(rdown,'Down')

#gameloop
while True:
    wn.update()
    move()
    time.sleep(delay)
wn.mainloop()

1 Ответ

1 голос
/ 18 июня 2020

моя левая полоса, которая является игроком 1, не опускается вниз после нажатия клавиши s

Думаю, это из-за опечатки в следующей функции:

def ldown():
    lbar.directon='down'

lbar.directon -> lbar.direction

Это должно было появиться в вашей консоли как сообщение об ошибке.

Моя переработка вашего кода для решения вышеуказанного и некоторых других вопросы:

from turtle import Screen, Turtle

# constants
DELAY = 50  # milliseconds

# functions
def move():
    if rbar.direction == 'up':
        rbar.sety(rbar.ycor() + 20)
    elif rbar.direction == 'down':
        rbar.sety(rbar.ycor() - 20)

    if lbar.direction == 'up':
        lbar.sety(lbar.ycor() + 20)
    elif lbar.direction == 'down':
        lbar.sety(lbar.ycor() - 20)

def rup():
    rbar.direction = 'up'

def rdown():
    rbar.direction = 'down'

def lup():
    lbar.direction = 'up'

def ldown():
    lbar.direction = 'down'

def gameloop():
    screen.update()
    move()
    screen.ontimer(gameloop, DELAY)

# screen
screen = Screen()
screen.bgcolor('black')
screen.title('pong')
screen.setup(height=700, width=600)
screen.tracer(False)

# left player
lbar = Turtle()
lbar.color('white')
lbar.shape('square')
lbar.shapesize(6, 1)
lbar.penup()
lbar.goto(-270, 100)

lbar.direction = 'stop'

# right player
rbar = lbar.clone()
rbar.goto(270, -270)

rbar.direction = 'stop'

# pong ball
ball = Turtle()
ball.shape('circle')
ball.color('red')
ball.shapesize(0.5)
ball.penup()

# inputs
screen.onkey(lup, 'w')
screen.onkey(ldown, 's')
screen.onkey(rup, 'Up')
screen.onkey(rdown, 'Down')
screen.listen()

gameloop()

screen.mainloop()
...