11818|13

9

帖子

1

TA的资源

一粒金砂(初级)

楼主
 

python写的简易版贪吃蛇 [复制链接]

  1. __author__ = 'ChenYan'

  2. from tkinter import *
  3. import threading
  4. import queue
  5. import time
  6. import random


  7. class GUI(Tk):
  8.     '''class GUI use to create the gui'''

  9.     def __init__(self, queue):
  10.         Tk.__init__(self)
  11.         self.queue = queue
  12.         self.is_game_over = False
  13.         self.canvas = Canvas(self, width=495, height=305, bg='#000000')
  14.         self.canvas.pack()
  15.         self.snake = self.canvas.create_line((0,0),(0,0), fill='#FFFF00', width=10)
  16.         self.food = self.canvas.create_rectangle(0,0,0,0, fill='#00FF00', outline='#00FF00')
  17.         self.point_score = self.canvas.create_text(455, 15, fill='white', text='score:0')
  18.         self.queue_handler()

  19.     def restart(self):
  20.         self.destroy()
  21.         main()

  22.     def queue_handler(self):
  23.         try:
  24.             while True:
  25.                 task = self.queue.get(block=False)
  26.                 if task.get('game_over'):
  27.                     self.game_over()
  28.                 elif task.get('move'):
  29.                     points = [x for point in task['move'] for x in point]
  30.                     self.canvas.coords(self.snake, *points)
  31.                 elif task.get('food'):
  32.                     self.canvas.coords(self.food, *task['food'])
  33.                 elif task.get('points_score'):
  34.                     self.canvas.itemconfigure(self.point_score,
  35.                                               text='score:{}'.format(task['points_score']))
  36.                     self.queue.task_done()
  37.         except queue.Empty:
  38.             if not self.is_game_over:
  39.                 self.canvas.after(100, self.queue_handler)

  40.     def game_over(self):
  41.         self.is_game_over = True
  42.         self.canvas.create_text(220, 150, fill='white',text='Game Over!')
  43.         quitbtn = Button(self, text='Quit', command=self.destroy)
  44.         retbtn = Button(self, text='Resume', command=self.restart)
  45.         self.canvas.create_window(230, 180, anchor=W, window=quitbtn)
  46.         self.canvas.create_window(200, 180, anchor=E, window=retbtn)


  47. class Food():
  48.     '''class Food use to make food'''

  49.     def __init__(self, queue):
  50.         self.queue = queue
  51.         self.make_food()

  52.     def make_food(self):
  53.         x = random.randrange(5, 480, 10)
  54.         y = random.randrange(5, 295, 10)
  55.         self.position = x,y
  56.         self.exppos = x-5,y-5,x+5,y+5
  57.         self.queue.put({'food':self.exppos})

  58. class Snake(threading.Thread):
  59.     '''class Snake use to create snake and response action'''

  60.     def __init__(self, gui, queue):
  61.         threading.Thread.__init__(self)
  62.         self.gui = gui
  63.         self.queue = queue
  64.         self.daemon = True
  65.         self.points_score = 0
  66.         self.snake_points = [(495,55),(485,55),(475,55),(465,55),(455,55)]
  67.         self.food = Food(queue)
  68.         self.direction = 'Left'
  69.         self.start()

  70.     def run(self):
  71.         if self.gui.is_game_over:
  72.             self._delete()
  73.         while not self.gui.is_game_over:
  74.             self.queue.put({'move':self.snake_points})
  75.             time.sleep(0.2)
  76.             self.move()

  77.     def key_pressed(self,e):
  78.         self.direction = e.keysym

  79.     def move(self):
  80.         new_snake_point = self.calculate_new_coordinates()
  81.         if self.food.position == new_snake_point:
  82.             add_snake_point = self.calculate_new_coordinates()
  83.             self.snake_points.append(add_snake_point)
  84.             self.points_score += 1
  85.             self.queue.put({'points_score':self.points_score})
  86.             self.food.make_food()
  87.         else:
  88.             self.snake_points.pop(0)
  89.             self.check_game_over(new_snake_point)
  90.             self.snake_points.append(new_snake_point)

  91.     def calculate_new_coordinates(self):
  92.         last_x,last_y = self.snake_points[-1]
  93.         if self.direction == 'Up':
  94.             new_snake_point = last_x,last_y-10
  95.         elif self.direction == 'Down':
  96.             new_snake_point = last_x,last_y+10
  97.         elif self.direction == 'Left':
  98.             new_snake_point = last_x-10,last_y
  99.         elif self.direction == 'Right':
  100.             new_snake_point = last_x+10,last_y
  101.         return new_snake_point

  102.     def check_game_over(self, snake_point):
  103.         x,y = snake_point[0],snake_point[1]
  104.         if not -5 < x < 505 or not -5 < y < 315 or snake_point in self.snake_points:
  105.             self.queue.put({'game_over':True})


  106. def main():
  107.     q = queue.Queue()
  108.     gui = GUI(q)
  109.     gui.title("我的贪吃蛇")
  110.     snake = Snake(gui, q)
  111.     gui.bind('<Key-Left>', snake.key_pressed)
  112.     gui.bind('<Key-Right>', snake.key_pressed)
  113.     gui.bind('<Key-Up>', snake.key_pressed)
  114.     gui.bind('<Key-Down>', snake.key_pressed)
  115.     gui.mainloop()


  116. if __name__ == '__main__':
  117.     main()
复制代码


此帖出自编程基础论坛

最新回复

GUI后面括号里的(TK)是什么   详情 回复 发表于 2017-7-12 10:58
点赞 关注(2)
 

回复
举报

11

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
此帖出自编程基础论坛
 
 
 

回复

335

帖子

0

TA的资源

纯净的硅(初级)

板凳
 
棒,来个截图
此帖出自编程基础论坛
 
 
 

回复

9

帖子

1

TA的资源

一粒金砂(初级)

4
 
哈哈,贴图只能以附件的形式上传!

1.png (29.6 KB, 下载次数: 0)

1.png

2.jpg (15.91 KB, 下载次数: 0)

2.jpg
此帖出自编程基础论坛
 
 
 

回复

1228

帖子

0

TA的资源

纯净的硅(高级)

5
 
求详细过程,如何运行?
TI Chronos手表有个上位机程序运行老说缺少dll
此帖出自编程基础论坛
 
个人签名

喝最烈的酒,..DIY最实用的东西

 
 

回复

9

帖子

1

TA的资源

一粒金砂(初级)

6
 
机器装了PYTHON就能用,我这个是PYTHON写的
此帖出自编程基础论坛

点评

居然一次就成功了,非常感谢 这个您帮忙看下为什么老说找不到dll  详情 回复 发表于 2014-9-25 08:58
 
 
 

回复

1228

帖子

0

TA的资源

纯净的硅(高级)

7
 
chenyan2010521 发表于 2014-9-24 17:28
机器装了PYTHON就能用,我这个是PYTHON写的

居然一次就成功了,非常感谢
这个您帮忙看下为什么老说找不到dll
GUI Sources.zip (1.97 MB, 下载次数: 13)

此帖出自编程基础论坛

点评

另外你要看下,运行时具体缺少什么库  详情 回复 发表于 2014-9-26 14:57
没太明白你的意思,你那是用C++写的,你那用的动态库肯定不行,你运行是什么上面运行呢,是PC吗?  详情 回复 发表于 2014-9-26 14:55
 
个人签名

喝最烈的酒,..DIY最实用的东西

 
 

回复

9

帖子

1

TA的资源

一粒金砂(初级)

8
 
lidonglei1 发表于 2014-9-25 08:58
居然一次就成功了,非常感谢
这个您帮忙看下为什么老说找不到dll

没太明白你的意思,你那是用C++写的,你那用的动态库肯定不行,你运行是什么上面运行呢,是PC吗?
此帖出自编程基础论坛
 
 
 

回复

9

帖子

1

TA的资源

一粒金砂(初级)

9
 
lidonglei1 发表于 2014-9-25 08:58
居然一次就成功了,非常感谢
这个您帮忙看下为什么老说找不到dll

另外你要看下,运行时具体缺少什么库
此帖出自编程基础论坛

点评

你给我的源码不完整,编译时缺少头文件  详情 回复 发表于 2014-9-26 15:08
 
 
 

回复

9

帖子

1

TA的资源

一粒金砂(初级)

10
 
chenyan2010521 发表于 2014-9-26 14:57
另外你要看下,运行时具体缺少什么库

你给我的源码不完整,编译时缺少头文件
此帖出自编程基础论坛

点评

文件中的eZ430-Chronos CC 1_1.tcl是我向您说的不能运行的脚本程序 DLL文件里是运行eZ430-Chronos CC 1_1.tcl时报错缺少的dll生成 eZ430-Chronos CC 1_1.tcl是上位机程序 DLL里的工程是底层驱动,好像能运行  详情 回复 发表于 2014-9-26 15:30
 
 
 

回复

1228

帖子

0

TA的资源

纯净的硅(高级)

11
 
chenyan2010521 发表于 2014-9-26 15:08
你给我的源码不完整,编译时缺少头文件

文件中的eZ430-Chronos CC 1_1.tcl是我向您说的不能运行的脚本程序
DLL文件里是运行eZ430-Chronos CC 1_1.tcl时报错缺少的dll生成


eZ430-Chronos CC 1_1.tcl是上位机程序
DLL里的工程是底层驱动,好像能运行

https://bbs.eeworld.com.cn/thread-440831-1-1.html
此帖出自编程基础论坛
 
个人签名

喝最烈的酒,..DIY最实用的东西

 
 

回复

9

帖子

1

TA的资源

一粒金砂(初级)

12
 
你看脚本里报错,缺少TTK,TK
此帖出自编程基础论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

13
 
开头在GUI后面的TK是什么?
此帖出自编程基础论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

14
 
GUI后面括号里的(TK)是什么
此帖出自编程基础论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表