python实现贪吃蛇
贪吃蛇的算法还是比较简单的,蛇的移动我是通过不停添加一个head方块,然后判断应该加到蛇头的哪个方向,加完后删掉蛇尾就行了,如果吃到食物就不删蛇尾。
只是一个贪吃蛇只需要70行代码左右就可以了,后来又加了计分,失败后重新游戏,暂停功能····结果现在代码乱成渣了。。
重新游戏部分肯定有更好的方法,我写的太乱了。。求大神指教。由于没用网格,判断吃到的时候是用范围判断的,有时候有些偏差···
代码:

1 #-*- coding: utf-8 -*-
2 import pygame, sys, random, time
3 from pygame.locals import *
4
5 pygame.init()
6 font = pygame.font.Font(u"c:\\windows\\fonts\\MSYH.ttf",30)
7 mainClock = pygame.time.Clock()
8 wsurface = pygame.display.set_mode((800,600),0,32)
9 pygame.display.set_caption("My_Snake~")
10
11 Len = 20
12 snakeRect = []
13 for i in range(10,13):
14 snakeRect.append(pygame.Rect(i * (Len) , 50 , Len, Len))
15 food = pygame.Rect(10 * (Len), 10 * (Len), Len, Len)
16 ml = False
17 mr = True
18 mu = False
19 md = False
20 score = 0
21 black = (0, 0, 0)
22 green = (0, 255, 0)
23 white = (255, 255, 255)
24 global FPSCLOCK
25 FPSCLOCK = pygame.time.Clock()
26 #####################################################
27 def judge():
28 if snakeRect[0].left - 15 <= food.left <= snakeRect[0].left + 15 and snakeRect[0].top - 15 <= food.top <= snakeRect[0].top + 15:
29 return True
30 def judge2(a, b):
31 if a.left - 15 <= b.left <= a.left + 15 and a.top - 15 <= b.top <= a.top + 15:
32 return True
33 def checkForKeyPress():
34 #checkForQuit()
35 for event in pygame.event.get([KEYDOWN, KEYUP]):
36 if event.type == KEYUP:
37 continue
38 return event.key
39 return None
40 #######################################################
41 flagg = True
42 speed = 8
43 while True:
44 for event in pygame.event.get():
45 if event.type == QUIT:
46 pygame.QUIT()
47 sys.exit()
48 if event.type == KEYDOWN:
49 if event.key == K_r:
50 snakeRect = []
51 for i in range(10,13):
52 snakeRect.append(pygame.Rect(i * (Len) , 50 , Len, Len))
53 food = pygame.Rect(10 * (Len), 10 * (Len), Len, Len)
54 ml = False
55 mr = True
56 mu = False
57 md = False
58 score = 0
59 flagg = True
60 speed = 8
61 if event.key == K_p:
62 wsurface.fill(black)
63 text_surface1 = font.render('Pause!' , True, (0, 0, 255))
64 wsurface.blit(text_surface1, (10, 50))
65 while checkForKeyPress() == None:
66 pygame.display.update()
67 FPSCLOCK.tick()
68 if event.key == K_LEFT and mr == False:
69 ml = True
70 mr = False
71 mu = False
72 md = False
73 if event.key == K_RIGHT and ml == False:
74 ml = False
75 mr = True
76 mu = False
77 md = False
78 if event.key == K_UP and md == False:
79 ml = False
80 mr = False
81 mu = True
82 md = False
83 if event.key == K_DOWN and mu == False:
84 ml = False
85 mr = False
86 mu = False
87 md = True
88 head = pygame.Rect(snakeRect[0].left,snakeRect[0].top,snakeRect[0].width,snakeRect[0].height)
89 if flagg == False:
90 continue
91 if ml == True:
92 head.right = head.left - 1
93 if mr == True:
94 head.left = head.right + 1
95 if mu == True:
96 head.bottom = head.top - 1
97 if md == True:
98 head.top = head.bottom + 1
99 snakeRect.insert(0, head)
100 #判断失败和重新游戏
101 if head.right < 0 or head.left > 800 or head.bottom < 0 or head.top > 600 or snakeRect[0] in snakeRect[1:]:
102 wsurface.fill(white)
103 text_surface2 = font.render('Press R to restart!' , True, (0, 0, 255))
104 wsurface.blit(text_surface2, (50, 80))
105 pygame.display.update()
106 while checkForKeyPress() == None:
107 pygame.display.update()
108 FPSCLOCK.tick()
109 break
110 flagg = False
111 continue
112 flagg = True
113 if judge():
114 score = score + 10
115 speed = speed + 1
116 while True:
117 flag = True
118 food.left = random.randrange(10,800)
119 food.top = random.randrange(10,600)
120 for temp in snakeRect:
121 if judge2(food, temp):
122 flag = False
123 if flag == True:
124 break
125 else:
126 snakeRect.pop()
127 wsurface.fill(black)
128 for i in range(len(snakeRect)):
129 pygame.draw.rect(wsurface,green,snakeRect[i])
130 pygame.draw.rect(wsurface,white,food)
131 text_surface = font.render(u"分数: " + str(score), True, (0, 0, 255))
132 wsurface.blit(text_surface, (10, 50))
133 pygame.display.update()
134 mainClock.tick(speed)
135
136
137
138
139

截图:

python实现贪吃蛇的更多相关文章
- 【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实例:贪吃蛇(简单贪吃蛇编写)🐍
d=====( ̄▽ ̄*)b 叮~ Python -- 简易贪吃蛇实现 目录: 1.基本原理 2.需要学习的库 3.代码实现 1.基本原理 基本贪吃蛇所需要的东西其实很少,只需要有一块让蛇动的屏幕, 在 ...
- 【C/C++】10分钟教你用C++写一个贪吃蛇附带AI功能(附源代码详解和下载)
C++编写贪吃蛇小游戏快速入门 刚学完C++.一时兴起,就花几天时间手动做了个贪吃蛇,后来觉得不过瘾,于是又加入了AI功能.希望大家Enjoy It. 效果图示 AI模式演示 imageimage 整 ...
- 用Python写一个贪吃蛇
最近在学Python,想做点什么来练练手,命令行的贪吃蛇一般是C的练手项目,但是一时之间找不到别的,就先做个贪吃蛇来练练简单的语法. 由于Python监听键盘很麻烦,没有C语言的kbhit(),所以这 ...
- Python制作AI贪吃蛇
前提:本文实现AI贪吃蛇自行对战,加上人机对战,文章末尾附上源代码以及各位大佬的链接,还有一些实现步骤,读者可再次基础上自行添加电脑VS电脑和玩家VS玩家(其实把人机对战写完,这2个都没什么了,思路都 ...
- 如何用Python写一个贪吃蛇AI
前言 这两天在网上看到一张让人涨姿势的图片,图片中展示的是贪吃蛇游戏, 估计大部分人都玩过.但如果仅仅是贪吃蛇游戏,那么它就没有什么让人涨姿势的地方了. 问题的关键在于,图片中的贪吃蛇真的很贪吃XD, ...
随机推荐
- C++的新特性for-each
C++实验课要求用for each 循环来实现关联容器 map 的输出,一开始完全萌比.查了好久的资料才整理出下面的: C++11新特性之一就是类似java的for each循环: map<in ...
- 【前端_js】理解 JavaScript 的 async/await
async 和 await 在干什么 任意一个名称都是有意义的,先从字面意思来理解.async 是“异步”的简写,而 await 可以认为是 async wait 的简写.所以应该很好理解 async ...
- grep与正则表达式使用
grep简介 grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.通常grep有三种版本grep.egrep(等同于grep -E)和fgrep.egrep为扩展的g ...
- 项目实战8.2-Linux下Tomcat开启查看GC信息
本文收录在Linux运维企业架构实战系列 转自https://www.cnblogs.com/along21/ 一.开启GC日志 1.在Tomcat 的安装路径下,找到bin/catalina.sh ...
- 【PHP】根据两地经纬度计算距离
最近做一个H5活动的项目,有个要求是必须现场玩家才能参与,所以就需要计算玩家位置和活动地点的距离来判断是否在活动现场. 以下是写的一个根据经纬度计算两地距离的方法 1 function getDist ...
- 如何使用pyinstaller打包32位的exe
说明:原来安装的python为64位,故安装的pyinstaller和打包后的exe都为64位.而64位的exe文件在32位的win7操作系统下是无法执行的,显示不兼容.网上查询发现,简单(可能不方便 ...
- day 52 Django基础一之web框架的本质
Django基础一之web框架的本质 django第一天 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于D ...
- python3 爬取汽车之家所有车型数据操作步骤(更新版)
题记: 互联网上关于使用python3去爬取汽车之家的汽车数据(主要是汽车基本参数,配置参数,颜色参数,内饰参数)的教程已经非常多了,但大体的方案分两种: 1.解析出汽车之家某个车型的网页,然后正则表 ...
- [GDOI2016][树链剖分+主席树]疯狂动物城
题面 Description Nick 是只在动物城以坑蒙拐骗为生的狐狸,儿时受到偏见的伤害,放弃了自己的理想.他被兔子 Judy 设下圈套,被迫与她合作查案,而卷入意想不到的阴谋,历尽艰险后成为搭档 ...
- AngularJS 之1-初识
摘要:本文主要记录第一次接触AngularJS的笔记,现在在我面前就是一张白纸+一点简单的html知识. 1.首先在<head>中加 <script src="一个网址(具 ...