Форум программистов, компьютерный форум, киберфорум
Python: Tkinter
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/75: Рейтинг темы: голосов - 75, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 17.05.2018
Сообщений: 1

Пинг-понг на Tkinter

17.05.2018, 05:45. Показов 15298. Ответов 1

Студворк — интернет-сервис помощи студентам
Здравсвуйте, видел в интернете много вариантов пинг понга с ракетками по бокам. Хотел сделать ракеетки наверху, но возникли проблемы с отскоком шарика, пожалуйста, посмотрите код и скажите, где ошибка!!

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
from tkinter import *
import random
root = Tk()
root.title('Арканоид')
def keypress(event):
    if event.keycode == 37:
        c1.move(one,-10,0)
        if c1.coords(one)[0]<0:
            c1.move(one, -c1.coords(one)[0], 0)
    if event.keycode == 39:
        c1.move(one,10, 0)
        if c1.coords(one)[2]>800:
            c1.move(one, 800-c1.coords(one)[2], 0)
    if event.keycode == 90:
        c1.move(two, -10,0)
        if c1.coords(two)[0]<0:
            c1.move(two, -c1.coords(two)[0], 0)
    if event.keycode == 67:
        c1.move(two, 10, 0)
        if c1.coords(two)[2]>800:
            c1.move(two, 800-c1.coords(two)[2], 0)
 
SPEED_X = 1
SPEED_Y = 1
SPEED_UP = 1.1
TOP_DISTANCE = 10
 
 
# Максимальная скорость мяча
SPEED_MAX = 30
# Начальная скорость мяча
SPEED_MIN = 20
 
# Отскок мяча от ракеток
def bounce(act):
    global SPEED_X, SPEED_Y
    if act =='strike':
        SPEED_Y = random.randrange(-10,10)
        if abs(SPEED_X)< SPEED_MAX:
            SPEED_X *= -SPEED_UP
        else:
            SPEED_X = -SPEED_X
def tick():
    ball_left, ball_top, ball_right, ball_bottom = c1.coords(ball)
    ball_center = (ball_top + ball_bottom)/2
    #Горизонтальный отскок
    if ball_right + SPEED_X < 800 and ball_left + SPEED_X > 0:
        bounce('ricochet')
    #Вертикальный отскок
    #Если далеко от горизонтальных границ
    if ball_top + SPEED_Y > TOP_DISTANCE and ball_bottom + SPEED_Y<390:
        c1.move(ball, SPEED_X, SPEED_Y)
    elif ball_top == TOP_DISTANCE or ball_bottom == 390:
        if ball_top<line_divide:
            if c1.coords(two)[1]< ball_center< c1.coords(two)[3]:
                bounce('strike')
            else:
                new_score('top')
                new_ball()
        else:
            if c1.coords(one)[1]< ball_center<c1.coords(one)[3]:
                bounce('strike')
            else:
                new_score('bottom')
                new_ball()
    else:
        if ball_top > line_divide:
            c1.move(ball,  SPEED_X, 390 - ball_top)
        else:
            c1.move(ball, SPEED_X, 10 + ball_bottom)
 
    root.after(30, tick)
    c1.move(ball, 10, 10)
# Функция подсчета очков
 
def new_score(player):
    global PLAYER1, PLAYER2
    if player == 'bottom':
        PLAYER1 +=1
        c1.itemconfig(p1, text = PLAYER1)
    else:
        PLAYER2+=1
        c1.itemconfig(p2, text = PLAYER2)
 
def new_ball():
    global SPEED_Y
    c1.coords(ball, 370,170,430,230)
    SPEED_Y = -(SPEED_Y * -20) / abs(SPEED_Y)
c1 = Canvas(root, width = 800, heigh = 400, cursor = 'pencil', bg = '#D8BFD8')
c1.pack()
# две разделительные линии
line_top = c1.create_line(0, 10, 800, 10, fill = 'white')
line_bottom =  c1.create_line(0,390,800,390, fill = 'white')
 
# Создаем линию-разделитель поля
line_divide = c1.create_line(0, 200, 800, 200, fill = 'white')
 
# создаем мяч
ball = c1.create_oval(370,180,410,220, fill = 'yellow', outline = '#FF4500', width = 1)
 
# создаем платформы
one = c1.create_rectangle(300, 400, 470, 390, fill = '#7B68EE', outline = '#9932CC')
two = c1.create_rectangle(300, 0, 470, 10, fill = '#FF6347', outline = '#B22222')
root.bind('<Key>', keypress)
#Подсчет очков
PLAYER1 = 0
PLAYER2 = 0
p1 = c1.create_text(660, 50, text = PLAYER1)
p2 = c1.create_text(130, 50, text = PLAYER2)
#Запуск мяча
tick()
root.mainloop()
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.05.2018, 05:45
Ответы с готовыми решениями:

Игра пинг-понг в Tkinter. Ошибка с отскакиванием объекта
Привет. Начал изучать python и появилось желание написать игру, пишу по гайду, но с небольшими изменениям, но столкнулся с проблемой -...

Как сделать так, чтобы при использовании модуля из tkinter не открывалось окно tkinter?
Как сделать так, чтобы при использовании модуля из tkinter не открывалось окно tkinter? Я пишу приложение на kivy но использую ...

Виджеты tkinter и tkinter.ttk (используется Python 3.5.2)
1) Проблема с виджетом Scale (ползунок) модуля tkinter. Я создал ползунок от 1 до 50 (как на первой картинке). По умолчанию стоит на 1....

1
0 / 0 / 0
Регистрация: 20.02.2018
Сообщений: 18
19.05.2018, 09:16
дарова вадим
привет тебе от дианы9797
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.05.2018, 09:16
Помогаю со студенческими работами здесь

Пинг-понг
Приветствую. Как сделать так, чтобы шарик нормально рисовался и красная платформа при движении в правую сторону не оставляла следов? ...

Пинг-понг
? есть ниже в коде комментарием unit tennis; interface uses

Пинг Понг в C#
Кто знает как сделать пинг понг в C#

2D пинг-понг
Доброго времени суток! Нашел в интернете урок по созданию двумерного пинг-понга. Урок хороший, но автор не исправляет одну ошибку, а...

Пинг-Понг
Допоможидь реализовать: При падении шарика на нижний край формы, игра останавливались и показывается сообщение. При отражении 15-ти...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru