Переменная GRAV не работает? - PullRequest
0 голосов
/ 02 мая 2018

эта программа не работает, и я пытался изменить то, что мне показалось неправильным. Я пытаюсь просто сделать игру, в которой работает гравитация, и не знаю, нужно ли мне все менять, или просто две кавычки с двумя апострофами

from tkinter import *
HEIGHT = 500
WIDTH = 800
GRAV = 0
Q_PRESSED = False
# to make the window
window = Tk()
window.title("jumpy jump")
c = Canvas(window, width=WIDTH, height=HEIGHT, bg='white')
c.pack()
# to create the sprite
dude_id = c.create_rectangle(0, 30, 15, 100, outline='limegreen', 
fill='limegreen')
dude_id2 = c.create_rectangle(45, 30, 60, 100, outline='limegreen', 
fill='limegreen')
dude_id3 = c.create_oval(0, 0, 60, 60, outline='limegreen', 
fill='limegreen')
def is_collided_with(dude, floor):
    return self.rect.colliderect(dude.rect)
MID_X = WIDTH / 2
MID_Y = HEIGHT / 2
c.move(dude_id, MID_X, MID_Y)
c.move(dude_id2, MID_X, MID_Y)
c.move(dude_id3, MID_X, MID_Y)
floor_id = c.create_rectangle(0, 485, 800, 500, fill='black')
while Q_PRESSED != False:
    if not dude.is_collided_with(floor):
        GRAV =+ 1
        c.move(dude_id, 0, GRAV)
        c.move(dude_id2, 0, GRAV)
        c.move(dude_id3, 0, GRAV)
    if dude.is_collided_with(floor):
    GRAV =-2
    # to move
    def move_dude(event):
        if event.keysym == 'q':
            Q_PRESSED = True
        if event.keysym == 'Left':
            c.move(dude_id, -10, GRAV)
            c.move(dude_id2, -10, GRAV)
            c.move(dude_id3, -10, GRAV)
        if event.keysym == 'Right':
            c.move(dude_id, 10, GRAV)
            c.move(dude_id2, 10, GRAV)
            c.move(dude_id3, 10, GRAV)
    c.bind_all('<key>', move_dude)

У меня была некоторая помощь с книгой, для связующего ключевого материала, но она была сделана для детей или начинающих, так как я довольно новичок в Python. Любая помощь будет отличной!

1 Ответ

0 голосов
/ 03 мая 2018

Я не верю, что это исправление в одну строку, так как есть много проблем с вашим кодом, которые связаны с tkinter и не нуждаются в вашей проблеме гравитации:

  • Что такое self.rect.colliderect(), артефакт PyGame?

  • c.bind_all('<key>', move_dude), вероятно, следует использовать <Key>

  • move_dude() представляется внутренней функцией, чтобы избежать объявления Q_PRESSED global.

  • Нет звонка на mainloop().

Моя минимальная переделка вашего кода, чтобы продемонстрировать движение, которое, я полагаю, вы пытались достичь:

from tkinter import *

HEIGHT = 500
WIDTH = 800
GRAVITY = 0

def is_collided_with(dude, floor):
    return dude in c.find_overlapping(*c.bbox(floor))

def move_dude(event):
    global GRAVITY

    if is_collided_with(dude_id, floor_id):
        GRAVITY = 0
    else:
        GRAVITY += 1

    if event.keysym == 'q':
        exit()

    if event.keysym == 'Left':
        c.move(dude_id, -10, GRAVITY)
    elif event.keysym == 'Right':
        c.move(dude_id, 10, GRAVITY)

# to make the window
window = Tk()
window.title("jumpy jump")

c = Canvas(window, width=WIDTH, height=HEIGHT, bg='white')
c.pack()

# to create the sprite
dude_id = c.create_rectangle(0, 30, 15, 100, outline='green', fill='green')
c.move(dude_id, WIDTH / 2, HEIGHT / 2)

floor_id = c.create_rectangle(0, 485, 800, 500, fill='black')

c.bind_all('<Key>', move_dude)

window.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...