📅  最后修改于: 2020-05-20 03:11:10             🧑  作者: Mango
Python是一种多用途语言,几乎可以在所有开发领域中使用。Python也可以用于开发不同类型的游戏。让我们尝试使用Python和TKinter 开发一个简单的接球游戏。
游戏很简单。游戏窗口底部有一个栏,可使用游戏窗口中的按钮向左或向右移动。红球会从上到下连续下落,并且可以从任意x轴距离开始。任务是通过向左或向右移动将该杆移到合适的位置,以使红色球落在该杆上(将球捕获到杆上)而不是在地面上。如果玩家将球接在杆上,则得分将增加,该球将消失,并且新的红色球将从随机x轴距离开始从上到下下降。如果玩家错过了在球杆上接球的机会,那么您将输掉比赛,最后计分卡将出现在比赛窗口中。
方法:
w = Canvas ( master, option=value, ... )
参数:
master-这代表父窗口。
options-此小部件最常用的选项列表。
这些选项可以用作以逗号分隔的键/值对。
示例-宽度,高度等
canvas.create_oval
创建圆。create_oval
在给定的坐标处创建一个圆或一个椭圆。它需要两对坐标。椭圆的边界矩形的左上角和右下角。语法:
oval = canvas.create_oval(x0, y0, x1, y1, options
create_rectangle
在给定的坐标处创建一个矩形。它需要两对坐标。左上角和右下角坐标。语法:
oval = canvas.create_rectangle(x0, y0, x1, y1, options)
move=canvas.move(name of object, x, y)
注意: *将 x = 0仅沿垂直方向移动球,将y = 0仅沿水平方向移动球。*当球接触canvas.delete(object)时,使球与地面或杆分离。
Python代码:
# 用于接球的Python代码
# 导入合适的包
from tkinter import Tk,Button,Label
from tkinter import Canvas
from random import randint
# 从Tkinter定义Tk
root = Tk()
root.title("Catch the ball Game")
root.resizable(False,False)
# 用于定义画布
canvas = Canvas(root, width=600, height=600)
canvas.pack()
# 球移动的垂直距离#的变量
limit = 0
# 变量距x轴的水平距离的变量
dist = 5
# 分数变量
score = 0
# 创造和移动球类
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 = "red",tags = 'dot1')
# 用于移动球
def move_ball(self):
# 定义偏移
offset = 10
global limit
# 检查球是否落在地面或杆上
if limit >= 510:
global dist,score,next
# 检查球落在杆上
if(dist - offset <= self.x1 and
dist + 40 + offset >= self.x2):
# 增加分数
score += 10
# 消失的球
canvas.delete('dot1')
# 调用该函数以再次创建球对象
ball_set()
else:
# 消失的球
canvas.delete('dot1')
bar.delete_bar(self)
# 显示分数
score_board()
return
# 使球移动的垂直距离增量
limit += 1
# 通过取x = 0和y = deltay在垂直方向上移动球
self.canvas.move(self.ball,0,1)
# for continuous moving of ball again call move_ball
self.canvas.after(10,self.move_ball)
# 创建和移动栏的类
class bar:
# 创建栏的方法
def __init__(self,canvas,x1,y1,x2,y2):
self.x1 = x1
self.y1 = y1
self.x2 = x2
self.y2 = y2
self.canvas = canvas
# for creating bar using create_rectangle
self.rod=canvas.create_rectangle(self.x1, self.y1, self.x2, self.y2,
fill="yellow",tags='dot2')
# 条移动方法
def move_bar(self,num):
global dist
# 检查前进或后退按钮
if(num == 1):
# 通过获取x轴正距离并获取垂直距离y = 0来向前移动bar
self.canvas.move(self.rod,20,0)
# 从x轴增加bar的距离
dist += 20
else:
# 通过取x轴负距离并取垂直距离y = 0向后移动bar
self.canvas.move(self.rod,-20,0)
# 减少bar与x轴的距离
dist-=20
def delete_bar(self):
canvas.delete('dot2')
# 定义球尺寸的功能
def ball_set():
global limit
limit=0
# 从球开始掉落的位置开始的随机x轴距离
value = randint(0,570)
# define the dimensions of the ball
ball1 = Ball(canvas,value,20,value+30,50)
# 球移动的函数
ball1.move_ball()
# 游戏结束后显示分数的功能
def score_board():
root2 = Tk()
root2.title("Catch the ball Game")
root2.resizable(False,False)
canvas2 = Canvas(root2,width=300,height=300)
canvas2.pack()
w = Label(canvas2,text="\nOOPS...GAME IS OVER\n\nYOUR SCORE = "
+ str(score) + "\n\n")
w.pack()
button3 = Button(canvas2, text="PLAY AGAIN", bg="green",
command=lambda:play_again(root2))
button3.pack()
button4 = Button(canvas2,text="EXIT",bg="green",
command=lambda:exit_handler(root2))
button4.pack()
# 处理再次播放请求的函数
def play_again(root2):
root2.destroy()
main()
# 处理退出请求的函数
def exit_handler(root2):
root2.destroy()
root.destroy()
# 主函数
def main():
global score,dist
score = 0
dist = 0
# 定义钢筋的尺寸
bar1=bar(canvas,5,560,45,575)
# 定义按钮的文本,颜色以及通过单击适当的方法在单击按钮后定义操作
button = Button(canvas,text="==>", bg="green",
command=lambda:bar1.move_bar(1))
# 将按钮放置在画布上的适当位置
button.place(x=300,y=580)
button2 = Button(canvas,text="<==",bg="green",
command=lambda:bar1.move_bar(0))
button2.place(x=260,y=580)
# 调用定义球尺寸的函数
ball_set()
root.mainloop()
# 测试代码
if(__name__=="__main__"):
main()