获取中...

-

Just a minute...

贪吃蛇

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import pygame,sys,time,random
#从pygame模块导入常用的函数和常量
from pygame.locals import *
# 颜色设置
redColour = pygame.Color(255,0,0)#红色吃的
blackColour = pygame.Color(0,0,0)#背景
whiteColour = pygame.Color(255,255,255)#白蛇
greyColour = pygame.Color(150,150,150)#灰色提示
#分数,格式设置
def gameOver(playSurface,score):
#设置提示字体的格式
gameOverFont = pygame.font.SysFont('arial.ttf',54)
#设置提示字体的颜色
gameOverSurf = gameOverFont.render('Game Over!', True, greyColour)
#设置提示位置
gameOverRect = gameOverSurf.get_rect()
gameOverRect.midtop = (300, 10)
#把上面的设置到句柄
playSurface.blit(gameOverSurf, gameOverRect)
#设置分数字体的格式
scoreFont = pygame.font.SysFont('arial.ttf',54)
#设置分数字体的格式
scoreSurf = scoreFont.render('Score:'+str(score), True, greyColour)
scoreRect = scoreSurf.get_rect()
#设置分数的位置
scoreRect.midtop = (300, 50)
playSurface.blit(scoreSurf, scoreRect)
#提示运行信息
pygame.display.flip()
#等待3秒
time.sleep(3)
#退出游戏
pygame.quit()
#退出程序
sys.exit()
def main():
# 初始化pygame,是使用硬件前的准备
pygame.init()
fpsClock = pygame.time.Clock()
# 创建窗口
playSurface = pygame.display.set_mode((600,460))
#设置窗口标题
pygame.display.set_caption('娄阳制作的贪吃蛇小游戏')
# 初始化变量
snakePosition = [100,100] #贪吃蛇 蛇头的位置
snakeSegments = [[100,100],[80,100],[60,100]] #贪吃蛇 蛇的身体,初始三
raspberryPosition = [300,300] #食物的初始位置
raspberrySpawned = 1 #食物的个数为1
direction = 'right' #初始方向为右
changeDirection = direction
score = 0 #初始得分
#进行游戏
while True:
# 检测到按键
for event in pygame.event.get():
if event.type == QUIT:
#接受到退出事件后退出程序
pygame.quit()
sys.exit()
elif event.type == KEYDOWN:
# 判断键盘事件
#向右
if event.key == K_RIGHT or event.key == ord('d'):
changeDirection = 'right'
#向左
if event.key == K_LEFT or event.key == ord('a'):
changeDirection = 'left'
#向上
if event.key == K_UP or event.key == ord('w'):
changeDirection = 'up'
#向下
if event.key == K_DOWN or event.key == ord('s'):
changeDirection = 'down'
if event.key == K_ESCAPE:
pygame.event.post(pygame.event.Event(QUIT))
# 判断移动的方向是不是相反,按键的方向和蛇运动方向相反是,蛇运动的方向不变
if changeDirection == 'right' and not direction == 'left':
direction = changeDirection
if changeDirection == 'left' and not direction == 'right':
direction = changeDirection
if changeDirection == 'up' and not direction == 'down':
direction = changeDirection
if changeDirection == 'down' and not direction == 'up':
direction = changeDirection
# 按键方向和蛇运动方向不是相反的时候,根据方向改变蛇的移动方向
if direction == 'right':
snakePosition[0] += 20
if direction == 'left':
snakePosition[0] -= 20
if direction == 'up':
snakePosition[1] -= 20
if direction == 'down':
snakePosition[1] += 20
# 增加蛇的长度
snakeSegments.insert(0,list(snakePosition))
# 判断蛇吃没吃食物
if snakePosition[0] == raspberryPosition[0] and snakePosition[1] == raspberryPosition[1]:
raspberrySpawned = 0
else:
snakeSegments.pop()
# 如果吃掉食物了,重新生成个食物
if raspberrySpawned == 0:
#随机生成食物的坐标x,y
x = random.randrange(1,30)
y = random.randrange(1,23)
#然后放大20倍
raspberryPosition = [int(x*20),int(y*20)]
raspberrySpawned = 1
#吃掉食物后分数加1
score += 1
#制作游戏显示窗口
playSurface.fill(blackColour)
for position in snakeSegments:
pygame.draw.rect(playSurface,whiteColour,Rect(position[0],position[1],20,20))
pygame.draw.rect(playSurface,redColour,Rect(raspberryPosition[0], raspberryPosition[1],20,20))
#刷新游戏显示窗口
pygame.display.flip()
# 判断蛇死没死
if snakePosition[0] > 600 or snakePosition[0] < 0:
gameOver(playSurface,score)
if snakePosition[1] > 460 or snakePosition[1] < 0:
gameOver(playSurface,score)
for snakeBody in snakeSegments[1:]:
if snakePosition[0] == snakeBody[0] and snakePosition[1] == snakeBody[1]:
gameOver(playSurface,score)
# 控制游戏速度
fpsClock.tick(5)

if __name__ == "__main__":
main()
相关文章
评论
分享
  • 万年历

    python课老师让做万年历,之前用C写过,这次用python写个带视窗的,哈哈哈 12345678910111213141516171819202122232425262728293031323334353637383940414...

    万年历
  • 网鼎杯部分wp

    pwnboom1分析远程已经打不通了,远程的偏移和本地的偏移不一样,只能复现一下本地的了。 首先看到流程图,代码量很大,有很大的switch语句和嵌套结构,可能是虚拟机或者是解析器。 从下图看出是一个C语言的解析器。 然后看了...

    网鼎杯部分wp
  • 网络设备配置与管理

    Linux网络设备与管理大作业 下图为某企业网络拓扑图,接入层采用二层交换机2960,汇聚和核心层使用了一台三层交换机3560 24PS,局域网边缘采用一台路由器LanRouter用于连接到外部网络的Isp Router两台路由器...

    网络设备配置与管理
Please check the parameter of comment in config.yml of hexo-theme-Annie!