3.10游戏积分
最后我们处理一下,游戏结束时,给用户积分。
1、选择一种您认为合理的积分规则。
2、根据规则进行代码实现。
实现代码如下:
self.score=0
while 1:
if closeornot==1:
racket.draw()
ball.draw()
else:
canvas.create_text(400,420,text=“游戏结束”,fill=‘red’,font=(‘Times’,110))
canvas.create_text(200,220,text="您的得分:”+str(ball.score),
fill=‘red’,font=(‘Times’,30))
break
tk.update_idletasks()
tk.update()
time.sleep(0.05)
ball.score+=1
在这里,我们积分的方法是:每更新一次,就加1分。这样,坚持的时间越长积分就越多。读者朋友们还可以想想更多的积分方法。
将代码整合起来,整合后完整代码如下:
#-- coding:GBK --
from tkinter import *
import time
import random
import tkinter.messagebox #messagebox
closeornot=1
position=[1,1,1,1]
tk = Tk()
tk.title(“雷雷的弹球游戏”)
tk.resizable(0, 0)
tk.wm_attributes("-topmost", 1)
canvas = Canvas(tk, width=800, height=800, bd=0, highlightthickness=0)
canvas.pack()
tk.update()
class racket:
def init(self,canvas,color,ball):
self.canvas=canvas
self.x=0
self.id=canvas.create_rectangle(400, 600, 500, 620, fill =color)
self.canvas.bind_all(’’, self.turn_left)
self.canvas.bind_all(’’, self.turn_right)
self.ball=ball
def turn_left(self,evt):
self.x=-5
def turn_right(self, evt):
self.x = 5
def draw(self):
global closeornot
pos = self.canvas.coords(self.id)
if pos[0] <= 0:
self.x = 0
closeornot=0
if pos[0]>=700:
self.x=0
closeornot=0
self.canvas.move(self.id,self.x,0)
if self.collision(pos)==True:
self.ball.y=-5
def collision(self,pos):
posball = self.canvas.coords(self.ball.id)
if posball[1]<=pos[3] and posball[2]>=pos[0] and \
posball[0]<=pos[2] and posball[3]>=pos[1]:
return True
return False
class ball:
def init(self,canvas,color):
self.canvas=canvas
self.a=random.randint(50,600)
self.b=random.randint(50,200)
self.id=canvas.create_oval(self.a, self.b, self.a+20, self.b+20, fill =color)
starts = [-3, -2, -1, 1, 2, 3]
random.shuffle(starts)
self.x = starts[0]
self.y=5
self.score=0
def draw(self):
global direction,closeornot
position=canvas.coords(self.id)
if position[3]>=800:
closeornot=0
if position[1]<=0:
self.y=5
if position[0]<=0:
self.x=3
if position[2]>=800:
self.x=-3
self.canvas.move(self.id,self.x,self.y)
ball=ball(canvas,‘red’)
racket=racket(canvas,‘green’,ball)
while 1:
if closeornot==1:
racket.draw()
ball.draw()
else:
canvas.create_text(400,420,text=“游戏结束”,fill=‘red’,font=(‘Times’,110))
canvas.create_text(200,220,text="您的得分:”+str(ball.score),
fill=‘red’,font=(‘Times’,30))
break
tk.update_idletasks()
tk.update()
time.sleep(0.05)
ball.score+=1
运行这段代码,当游戏结束时,出现提示:您的得分:260。见图3-28
图3-28