一、问题
在做连连看的时候需要加一个计时器的动画,这样就完成了计时功能的设计。


二、解决
主要思路:

1、先产生一个画布,用深颜色填充满。

2、产生一个新的矩阵用来覆盖画布,背景用白色,就可以渲染出来递减的感觉

3、动态改变填充的位置,就完成增加和减少时间的动画效果

 1 # 时间画布、动画
 2 self.time_counter = tk.Canvas(self.root, width=22, height=180, bg="yellow")
 3 self.time_counter.place(x=615, y=80)
 4 
 5 # 时间显示
 6 self.show_time = tk.Label(self.root, bg="lightgrey", fg="purple", font="叶根友毛笔行书2.0版 15 bold", text=f"剩余时间\n{self.__time}s")
 7 self.show_time.place(x=590, y=20)
 8 
 9 # 计时函数
10     def counter(self):
11         """
12         计时柱的构建
13         :return:
14         """
15         try:
16             fill_line = self.time_counter.create_rectangle(1.5, 1.5, 23, 0, width=0, fill="white")
17             while self.__cycle >= 0:  # self.time 做循环量处理
18                 self.n += self.__scalar
19                 # 移动开始减少
20                 self.time_counter.coords(fill_line, (0, 0, 80, self.n))
21                 self.root.update()
22                 self.__time -= 1
23                 self.show_time.configure(text=f"剩余时间\n{self.__time}s", fg="purple")
24                 time.sleep(1.0)  # 控制进度条流动的速度 1秒一次
25                 # 时间结束  游戏结束  退出
26                 if self.__time == 0:
27                     tk.messagebox.showinfo("Tip", f"最后分数:{self.__score}")
28                     self.__game_start = False
29                     exit()
30                 self.__cycle = self.__time  # 保证了和时间的一致性
31         except Exception as e:
32             _ = e.__traceback__
33             exit()
34 
35 # 需要动态处理
36     def detail(self):
37         """
38         消完之后做加分处理  加时处理
39         :return:
40         """
41         # 加分处理
42         self.__score += self.__score_level * self.__score_base
43         self.show_score.configure(text=f"分数\n{self.__score}", fg="red")
44 
45         # 加时处理
46         # 由于一秒一减少  所以self.n的值和self.__time的值一样
47         self.__time += self.__add_time
48         self.n -= self.__scalar * self.__add_time
49         # 将溢出的全部删除
50         if self.__time >= self.__large_time:
51             self.show_time.configure(text=f"剩余时间\n{self.__large_time}s", fg="purple")
52             self.__time = self.__large_time
53             self.n = 0
54         else:
55             self.show_time.configure(text=f"剩余时间\n{self.__time}s", fg="purple")
View Code

 

三、结果呈现

 

四、总结
1、在使用的过程中,需要考虑循环的一致性,因此要采取while进行循环,而不是for。
2、为了保证在任何情况下都可以使用,因此我用速率来控制增加量
3、对游戏能否继续进行,进行判断不可以退出游戏

五、参考
如何做一个进度条,反过来就是一个时间计时器
GitHub链接:https://github.com/pzq7025/game

posted on 2019-05-19 00:26  蔚蓝色の天空  阅读(1477)  评论(0编辑  收藏  举报