|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
05.03.2021, 14:55 | #1 |
Новичок
Джуниор
Регистрация: 05.03.2021
Сообщений: 2
|
Проблема в проекте на python tkinter
Я совсем недавно стал заниматься с python и написал игру (по туториалу) ping-pong, но игра работает не корректно.
Код игры: from tkinter import * WIDTH = 900 #ширина HEIGHT = 300 #высота # по горизонтали BALL_X_CHANGE = 20 # по вертикали BALL_Y_CHANGE = 0 PAD_SPEED = 15 #скорость движения ракетки LEFT_PAD_SPEED = 0 #скорость левой ракетки RIGHT_PAD_SPEED = 0 #скорость правой ракетки INITIAL_SPEED = 20 BALL_MAX_SPEED = 40 # Начальная скорость по горизонтали BALL_X_SPEED = INITIAL_SPEED # Начальная скорость по вертикали BALL_Y_SPEED = 0 # Добавим глобальную переменную отвечающую за расстояние right_line_distance = WIDTH-30 # до правого края игрового поля root = Tk() c = Canvas(root,width=WIDTH,height=HEIG HT,background="#003300") #игровая область c.pack() c.create_line(WIDTH/2,0,WIDTH/2,HEIGHT,fill="white") #центральная линия c.create_line(30,0,30,HEIGHT,fill=" white") #левая линия c.create_line(WIDTH-30,0,WIDTH-30,HEIGHT,fill="white") #правая линия BALL = c.create_oval(WIDTH/2-15,HEIGHT/2-15,WIDTH/2+15,HEIGHT/2+15,fill="white") #создаем мяч LEFT_PAD = c.create_line(15,0,15,100,width=30, fill="blue") #создаем левую ракетку RIGHT_PAD = c.create_line(WIDTH-15,0,WIDTH-15,100,width=30,fill="blue") #создаем правую ракетку def move_ball(): #функция движения мяча ball_left, ball_top, ball_right, ball_bot = c.coords(BALL) #получил координаты мяча ball_center = (ball_top + ball_bot) / 2 #нашел координату центра мяча if ball_right < right_line_distance and ball_left > 30: #проверяем не достиг ли шмяч границ поля, если нет то просто двигаем c.move(BALL, BALL_X_SPEED, BALL_Y_SPEED) elif ball_right == right_line_distance or ball_left == 30: if ball_right > WIDTH/2: #проверяем находится ли он на правой стороне if c.coords(LEFT_PAD)[1] < ball_center < c.coords(LEFT_PAD)[3]: #проверяем находится ли мяч в пределах правой ракетки c.move(BALL,-BALL_X_SPEED,BALL_Y_SPEED) #то меняем скорость на противоположную def move_pads(): #функция движения ракеток c.move(LEFT_PAD, 0, LEFT_PAD_SPEED) if c.coords(LEFT_PAD)[1] < 0: c.move(LEFT_PAD, 0, -c.coords(LEFT_PAD)[1]) elif c.coords(LEFT_PAD)[3] > HEIGHT: c.move(LEFT_PAD, 0, HEIGHT-c.coords(LEFT_PAD)[3]) c.move(RIGHT_PAD, 0, RIGHT_PAD_SPEED) if c.coords(RIGHT_PAD)[1] < 0: c.move(RIGHT_PAD, 0, -c.coords(RIGHT_PAD)[1]) elif c.coords(RIGHT_PAD)[3] > HEIGHT: c.move(RIGHT_PAD, 0, HEIGHT-c.coords(RIGHT_PAD)[3]) def main(): move_ball() move_pads() root.after(30, main) c.focus_set() def movement_handler(event): #функция считывания нажатий клавиш global LEFT_PAD_SPEED,RIGHT_PAD_SPEED if event.keysym == 'w': LEFT_PAD_SPEED = -PAD_SPEED elif event.keysym == 's': LEFT_PAD_SPEED = PAD_SPEED elif event.keysym == 'Up': RIGHT_PAD_SPEED = -PAD_SPEED elif event.keysym == 'Down': RIGHT_PAD_SPEED = PAD_SPEED c.bind("", movement_handler) def stop_pad(event): #функция считывания отпускания клавиш global RIGHT_PAD_SPEED,LEFT_PAD_SPEED if event.keysym == 'w': LEFT_PAD_SPEED = 0 elif event.keysym == 's': LEFT_PAD_SPEED = 0 elif event.keysym == 'Up': RIGHT_PAD_SPEED = 0 elif event.keysym == 'Down': RIGHT_PAD_SPEED = 0 c.bind("", stop_pad) main() root.mainloop() |
05.03.2021, 20:26 | #2 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,063
|
I am not a wizard, I am just learning.
|
06.03.2021, 10:01 | #3 |
Новичок
Джуниор
Регистрация: 05.03.2021
Сообщений: 2
|
|
06.03.2021, 13:45 | #4 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,063
|
Посмотрите статью Пин-понг на Python, код примерно как в теме. Там же есть ссылка гит с полным текстом кода, для не желающих вникать в механизм.
I am not a wizard, I am just learning.
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Python/PyQt5/PostgreSQL/Tkinter | C_i_K_a_D_a | Python | 1 | 20.06.2019 20:45 |
Функция y=sin(x) в Python (Tkinter) | klyukina2901 | Python | 0 | 18.03.2019 13:40 |
Калькулятор на Python. Библиотека tkinter | Bob123 | Python | 2 | 29.12.2017 17:20 |
Python. Tkinter. Диалог выбора файлов | БалаШагаЛ | Python | 0 | 16.06.2013 13:22 |