关于编写游戏,是博主非常向往的东西(博主喜爱游戏),编写游戏得一步一步的走!今天我简单的编写一下非常经典的游戏贪吃蛇!!!!
效果图:
首先引入pygame模块
pip install pygame
关于编写贪吃蛇有如下几个步骤!依次思考
1、设置背景大小,即游戏框大小,---像素(px)
2、设置颜色,蛇的颜色,背景颜色,豆子的颜色
python" id="highlighter_126317">
1
2
3
4
5
6
7
8
9
10
11
|
#pygame游戏库,sys操控python运行的环境 import pygame,sys,random #这个模块包含所有pygame所使用的常亮 from pygame. locals import * #1,定义颜色变量 #0-255 0黑色 255白色 redcolor = pygame.color( 255 , 0 , 0 ) #背景为黑色 blackcolor = pygame.color( 0 , 0 , 0 ) #贪吃蛇为白色 whitecolor = pygame.color( 255 , 255 , 255 ) |
3、设置蛇的初始位置和长度,豆子的初始位置及被吃后随机出现的位置(如下),及蛇的速度
4、设置按键,控制蛇的上下左右
5、设置蛇通过与豆子的位置重合判断是否吃了豆子,此时蛇长度加一,豆子消失同时随机出现
6、设置开始函数(1,,3,4,5都可以设置在开始函数里),结束函数,并判断死亡方式,及游戏结束方式(直接退出,或者游戏结束)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
def main(): #初始化pygame pygame.init() #定义一个变量来控制速度 fpsclock = pygame.time.clock() #创建pygame显示层,创建一个界面 playsurface = pygame.display.set_mode(( 640 , 480 )) pygame.display.set_caption( '贪吃蛇' ) #初始化变量 #贪吃蛇初始坐标位置 (先以100,100为基准) snakeposition = [ 100 , 100 ] #初始化贪吃蛇的长度列表中有个元素就代表有几段身体 snakebody = [[ 100 , 100 ],[ 80 , 100 ],[ 60 , 100 ]] #初始化目标方向额位置 targetposition = [ 300 , 300 ] #目标方块的标记 目的:判断是否吃掉了这个目标方块1 就是没有吃 0就是吃掉 targetflag = 1 #初始化方向 --》往右 direction = 'right' #定义一个方向变量(人为控制 按键) changedirection = direction |
1
2
3
|
def gameover(): #游戏结束 pygame.quit() sys.exit() |
关于游戏运行可以当做一个时间,通过不断地循环是蛇不断地前进(设置按键,凭个人喜好按键)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
while true: for event in pygame.event.get(): #从队列中获取事件 if event. type = = quit: pygame.quit() sys.exit() elif event. type = = keydown: if event.key = = k_d: changedirection = 'right' if event.key = = k_a: changedirection = 'left' if event.key = = k_w: changedirection = 'up' if event.key = = k_s: changedirection = 'down' #对应键盘上的esc文件 if event.key = = k_escape: pygame.event.post(pygame.event.event(quit)) |
确定方向!当蛇在运行时不可掉头!不可前后,左后!
1
2
3
4
5
6
7
8
9
|
#确定方向 if changedirection = = 'left' and not direction = = 'right' : direction = changedirection if changedirection = = 'right' and not direction = = 'left' : direction = changedirection if changedirection = = 'up' and not direction = = 'down' : direction = changedirection if changedirection = = 'down' and not direction = = 'up' : direction = changedirection |
这里通过像素的加减确定蛇头的移动向上或向下加减20px相当于向上下移动一步
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#根据方向移动蛇头 if direction = = 'right' : snakeposition[ 0 ] + = 20 if direction = = 'left' : snakeposition[ 0 ] - = 20 if direction = = 'up' : snakeposition[ 1 ] - = 20 if direction = = 'down' : snakeposition[ 1 ] + = 20 #增加蛇的长度 snakebody.insert( 0 , list (snakeposition)) #如果贪吃蛇和目标方块的位置重合 if snakeposition[ 0 ] = = targetposition[ 0 ] and snakeposition[ 1 ] = = targetposition[ 1 ]: targetflag = 0 else : snakebody.pop() if targetflag = = 0 : x = random.randrange( 1 , 32 ) y = random.randrange( 1 , 24 ) targetposition = [ int (x * 20 ), int (y * 20 )] targetflag = 1 #填充背景颜色 playsurface.fill(blackcolor) |
设置蛇与豆子的颜色长宽
1
2
3
4
5
6
7
8
|
for position in snakebody: #第一个参数serface指定一个serface编辑区,在这个区域内绘制 #第二个参数color:颜色 #第三个参数:rect:返回一个矩形(xy),(width,height) #第四个参数:width:表示线条的粗细 width0填充 实心 #化蛇 pygame.draw.rect(playsurface,redcolor,rect(position[ 0 ],position[ 1 ], 20 , 20 )) pygame.draw.rect(playsurface, whitecolor, rect(targetposition[ 0 ], targetposition[ 1 ], 20 , 20 )) |
将上面的所作为显示到桌面,通过下面的方法实现
pygame.display.flip()
判断游戏结束
1
2
3
4
5
6
|
if snakeposition[ 0 ] > 620 or snakeposition[ 0 ] < 0 : gameover() elif snakeposition[ 1 ] > 460 or snakeposition[ 1 ] < 0 : gameover() #控制游戏速度 fpsclock.tick( 2 ) |
基本的贪吃蛇步骤如上,如果要是添加得分或者开始和结束界面都凭自身能力了,大佬们肯定是洒洒水了
以下是完整代码
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
|
#pygame游戏库,sys操控python运行的环境 import pygame,sys,random #这个模块包含所有pygame所使用的常亮 from pygame. locals import * #1,定义颜色变量 #0-255 0黑色 255白色 redcolor = pygame.color( 255 , 0 , 0 ) #背景为黑色 blackcolor = pygame.color( 0 , 0 , 0 ) #贪吃蛇为白色 whitecolor = pygame.color( 255 , 255 , 255 ) #定义游戏结束的函数 def gameover(): pygame.quit() sys.exit() #定义main函数--》定义我们的入口函数 def main(): #初始化pygame pygame.init() #定义一个变量来控制速度 fpsclock = pygame.time.clock() #创建pygame显示层,创建一个界面 playsurface = pygame.display.set_mode(( 640 , 480 )) pygame.display.set_caption( '贪吃蛇' ) #初始化变量 #贪吃蛇初始坐标位置 (先以100,100为基准) snakeposition = [ 100 , 100 ] #初始化贪吃蛇的长度列表中有个元素就代表有几段身体 snakebody = [[ 100 , 100 ],[ 80 , 100 ],[ 60 , 100 ]] #初始化目标方向额位置 targetposition = [ 300 , 300 ] #目标方块的标记 目的:判断是否吃掉了这个目标方块1 就是没有吃 0就是吃掉 targetflag = 1 #初始化方向 --》往右 direction = 'right' #定义一个方向变量(人为控制 按键) changedirection = direction while true: for event in pygame.event.get(): #从队列中获取事件 if event. type = = quit: pygame.quit() sys.exit() elif event. type = = keydown: if event.key = = k_d: changedirection = 'right' if event.key = = k_a: changedirection = 'left' if event.key = = k_w: changedirection = 'up' if event.key = = k_s: changedirection = 'down' #对应键盘上的esc文件 if event.key = = k_escape: pygame.event.post(pygame.event.event(quit)) #确定方向 if changedirection = = 'left' and not direction = = 'right' : direction = changedirection if changedirection = = 'right' and not direction = = 'left' : 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 #增加蛇的长度 snakebody.insert( 0 , list (snakeposition)) #如果贪吃蛇和目标方块的位置重合 if snakeposition[ 0 ] = = targetposition[ 0 ] and snakeposition[ 1 ] = = targetposition[ 1 ]: targetflag = 0 else : snakebody.pop() if targetflag = = 0 : x = random.randrange( 1 , 32 ) y = random.randrange( 1 , 24 ) targetposition = [ int (x * 20 ), int (y * 20 )] targetflag = 1 #填充背景颜色 playsurface.fill(blackcolor) for position in snakebody: #第一个参数serface指定一个serface编辑区,在这个区域内绘制 #第二个参数color:颜色 #第三个参数:rect:返回一个矩形(xy),(width,height) #第四个参数:width:表示线条的粗细 width0填充 实心 #化蛇 pygame.draw.rect(playsurface,redcolor,rect(position[ 0 ],position[ 1 ], 20 , 20 )) pygame.draw.rect(playsurface, whitecolor, rect(targetposition[ 0 ], targetposition[ 1 ], 20 , 20 )) #更新显示到屏幕表面 pygame.display.flip() #判断是否游戏结束 if snakeposition[ 0 ] > 620 or snakeposition[ 0 ] < 0 : gameover() elif snakeposition[ 1 ] > 460 or snakeposition[ 1 ] < 0 : gameover() #控制游戏速度 fpsclock.tick( 2 ) # 启动入口函数 if __name__ = = '__main__' : main() |
运行结果:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/DonQuixote_/article/details/81748231