Python---tkinter---贪吃蛇(能用的)
项目分析:
构成:
蛇 Snake
食物 Food
世界 World
蛇和食物属于整个世界
class World:
self.snake
self.food
上面代码不太友好
我们用另外一个思路来分析
我们的分析思路
食物是一个独立的事物
蛇也可以认为是一个独立的事物
世界也是,但世界负责显示
------------------------------------------------
import time
from tkinter import *
import threading
import random
def __init__(self, queue):
Tk.__init__(self)
self.queue = queue
self.is_game_over = False
self.canvas = Canvas(self, width=500, height=300, bg='gray')
self.canvas.pack()
self.food = self.canvas.create_rectangle(0,0,0,0,fill='#FFCC4C', outline='#FFCC4C')
self.queue_handler()
try:
while True:
task = self.queue.get(block=False)
self.game_over()
points = [ x for point in task['move'] for x in point]
self.canvas.coords(self.snake, *points)
self.canvas.coords(self.food, *task['food'])
elif task.get('points_earned'):
self.canvas.itemconfigure(self.points_earned,
text='SCORE: {}'.format(task['points_earned']))
if not self.is_game_over:
self.canvas.after(100, self.queue_handler)
self.is_game_over = True
self.canvas.create_text(200,150, fill='white', text='Game Over')
quitbtn = Button(self, text='Quit', command=self.destroy)
rebtn = Button(self, text='Begin', command=self.__init__)
self.canvas.create_window(200, 180, anchor='nw', window=quitbtn)
def __init__(self,queue):
self.queue = queue
self.generate_food()
x = random.randrange(5,490,10)
y = random.randrange(5, 290,10)
self.exppos = x - 5, y - 5, x + 5, y + 5
self.queue.put({'food':self.exppos})
def __init__(self,gui, queue):
threading.Thread.__init__(self)
self.queue = queue
self.daemon = True
self.points_earned = 0
self.snake_points = [(495,55),(485,55), (465,55),(455,55)]
self.food = Food(queue)
self.direction = 'Left'
self.start()
if self.gui.is_game_over:
self._delete()
self.queue.put({'move': self.snake_points})
time.sleep(0.5)
self.move()
# keysym 按键名称
self.direction = e.keysym
new_snake_point = self.calculate_new_coordinates()
self.points_earned += 1
self.queue.put({'points_earned': self.points_earned})
self.food.generate_food()
else:
self.snake_points.pop(0)
self.check_game_over(new_snake_point)
self.snake_points.append(new_snake_point)
last_x, last_y = self.snake_points[-1]
if self.direction == 'Up':
new_snake_point = last_x, last_y - 10
elif self.direction == 'Down':
new_snake_point = last_x, last_y + 10
elif self.direction == 'Left':
new_snake_point = last_x - 10, last_y
elif self.direction == 'Right':
new_snake_point = last_x + 10, last_y
x,y = snake_point[0], snake_point[1]
if not -5 < x < 505 or not -5 < y < 315 or snake_point in self.snake_points:
self.queue.put({'game_over': True})
q = queue.Queue()
gui = GUI(q)
gui.title("傻傻的贪吃蛇")
#global q, gui
snake = Snake(gui,q)
gui.bind('<Key-Right>', snake.key_pressed)
gui.bind('<Key-Up>', snake.key_pressed)
gui.bind('<Key-Down>', snake.key_pressed)
gui.mainloop()
main()
Python---tkinter---贪吃蛇(能用的)的更多相关文章
- 【python】10分钟教你用python打造贪吃蛇超详细教程
10分钟教你用python打造贪吃蛇超详细教程 在家闲着没妹子约, 刚好最近又学了一下python,听说pygame挺好玩的.今天就在家研究一下, 弄了个贪吃蛇出来.希望大家喜欢. 先看程序效果: 0 ...
- 多线程的Python 教程--“贪吃蛇”
本指南的里代码可以在这里下载: threadworms.py ,或者从 GitHub.代码需要 Python 3 或 Python 2 ,同时也需要安装 Pygame . 点击查看大版本图片 ...
- 一步步教你怎么用python写贪吃蛇游戏
目录 0 引言 1 环境 2 需求分析 3 代码实现 4 后记 0 引言 前几天,星球有人提到贪吃蛇,一下子就勾起了我的兴趣,毕竟在那个Nokia称霸的年代,这款游戏可是经典中的经典啊!而用Pytho ...
- 如何用python制作贪吃蛇以及AI版贪吃蛇
用python制作普通贪吃蛇 哈喽,大家不知道是上午好还是中午好还是下午好还是晚上好! 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很 ...
- python实现贪吃蛇
贪吃蛇的算法还是比较简单的,蛇的移动我是通过不停添加一个head方块,然后判断应该加到蛇头的哪个方向,加完后删掉蛇尾就行了,如果吃到食物就不删蛇尾. 只是一个贪吃蛇只需要70行代码左右就可以了,后来又 ...
- Python实例:贪吃蛇(简单贪吃蛇编写)🐍
d=====( ̄▽ ̄*)b 叮~ Python -- 简易贪吃蛇实现 目录: 1.基本原理 2.需要学习的库 3.代码实现 1.基本原理 基本贪吃蛇所需要的东西其实很少,只需要有一块让蛇动的屏幕, 在 ...
- 【C/C++】10分钟教你用C++写一个贪吃蛇附带AI功能(附源代码详解和下载)
C++编写贪吃蛇小游戏快速入门 刚学完C++.一时兴起,就花几天时间手动做了个贪吃蛇,后来觉得不过瘾,于是又加入了AI功能.希望大家Enjoy It. 效果图示 AI模式演示 imageimage 整 ...
- Python写的贪吃蛇游戏例子
第一次用Python写这种比较实用且好玩的东西,权当练手吧 游戏说明: * P键控制“暂停/开始”* 方向键控制贪吃蛇的方向 源代码如下: 复制代码代码如下: from Tkinter import ...
- 使用Python写一个贪吃蛇
参考代码http://blog.csdn.net/leepwang/article/details/7640880 我在程序中加入了分数显示,三种特殊食物,将贪吃蛇的游戏逻辑写到了SnakeGame的 ...
- 用Python写一个贪吃蛇
最近在学Python,想做点什么来练练手,命令行的贪吃蛇一般是C的练手项目,但是一时之间找不到别的,就先做个贪吃蛇来练练简单的语法. 由于Python监听键盘很麻烦,没有C语言的kbhit(),所以这 ...
随机推荐
- docker中 devicemapper驱动挂载容器镜像文件
详解docker中容器devicemapper设备的挂载流程
- fiddler之数据分析和查看(inspectors)-抓包
在instpectors中主要是对请求和响应进行查看和分享,监听请求的响应内容.他有多个分页标签.界面分上下两部分,上面部分显示请求的相关信息:下面部分显示响应相关信息.简单说明常用的几个分页标签 一 ...
- 封装一个windows转发端口的脚本
使用方法: 1.打开文本编辑工具如(Notepad++) 2.新建文件 3.注意:修改文本的编码字符集为:gb2312 4.将下面代码 复制入文件 5.保存文件名为:transmit.bat 6.双击 ...
- Vue 渲染函数
Vue 推荐在绝大多数情况下使用模板来创建你的 HTML.然而在一些场景中,你真的需要 JavaScript 的完全编程的能力.这时你可以用渲染函数,它比模板更接近编译器. 一 项目结构 二 App组 ...
- 【HANA系列】SAP HANA STUDIO客户端升级更新
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA STUDIO客 ...
- ftp搭建mysql服务器
一.将mysql放入FTP服务器中1.安装FTP yum install -y vsftpd2.准备ftp主目录 mkdir /var/ftp/mysql57/3.官网下载yum仓库的包. ...
- 浅拷贝&深拷贝
浅拷贝新的对象指向原来对象的地址 深拷贝新的对象中,原来是可变对象,会新复制一份值指向新的地址[11,22,33]若原来的对象里含有可变对象,里面的这个可变对象也会指向新的地址['qwer', 123 ...
- 全自动网络安装centos(一)安装前准备工作
centos系统启动文件详解: 注:在centos6里需要给NetworkManager服务关闭并且禁止开机启动,6和7里都需要将selinux关闭,否则会出现网络配置异常情况,并且要将防火墙关闭. ...
- Springcloud 2.x 版本 分布式配置中心
一.什么是分布式配置中心? 就是为微服务架构中的微服务提供集中化的外部配置支持,配置中心为各个微服务应用的所有环境提供了中心化的外部配置(可能比较难理解,想知道是什么意思就要知道为什么这么配置:这么配 ...
- laravel框架之增刪改查
<?php namespace App\Http\Controllers\admin; use Illuminate\Http\Request as request; use App\Http\ ...