【发布时间】:2019-09-17 01:55:06
【问题描述】:
编程新手。研究一个简单的乒乓克隆。开始球,但要确保窗口(500x500)的所有侧面都会让球从它反弹。我怎么能这样做?谢谢!
附:如果需要,这是我当前的代码。
import threading
import random
import time
import string
import os.path
from random import randint
from tkinter import *
class Pong:
Title = 'Pong'
Size = '500x500'
class Ball:
def __init__(self,canvas,x1,y1,x2,y2):
self.x1 =x1
self.y1 = y1
self.x2 = x2
self.y2 = y2
self.canvas = canvas
self.ball = canvas.create_oval(self.x1, self.y1, self.x2, self.y2, fill="black")
def move_ball(self):
deltax = randint(0,5)
deltay = randint(0,5)
self.canvas.move(self.ball,deltax,deltay)
self.canvas.after(50,self.move_ball)
def PongGame():
print("Moved to PongGame.")
ball1 = Ball(canvas,10,10,30,30)
ball1.move_ball()
def titleButtonClicked(event):
print("Title screen button clicked.")
btn.pack_forget()
btn.place(x=600,y=600)
msg.pack_forget()
PongGame()
root = Tk()
root.geometry(Pong.Size)
root.title(Pong.Title)
root.resizable(False,False)
msg = Label(root, text = Pong.Title, font = ("", 50))
msg.pack()
canvas = Canvas(root, width = 500, height = 500)
canvas.pack()
btn=Button(root, text = "Start")
btn.bind('<Button-1>', titleButtonClicked)
btn.place(x=220,y=300)
root.mainloop()
【问题讨论】:
-
欢迎来到 SO!这个问题有点宽泛——有很多方法可以做到这一点,所以一般推荐的方法是选择一个并尝试一下。然后,当您在实施中遇到特定问题时,您可以提出相关问题,这将成为主题。见How to Ask,祝你好运!
-
谢谢!我只需要一个与我的分辨率相匹配的简单碰撞 - 500 x 500。我一定会检查如何提问。再次感谢!
-
你知道桨和球的坐标,你知道屏幕边缘的坐标。算一算吧。
标签: python tkinter canvas collision tkinter-canvas