关于编写游戏,是博主非常向往的东西(博主喜爱游戏),编写游戏得一步一步的走!今天我简单的编写一下非常经典的游戏贪吃蛇!!!!
效果图:
首先引入pygame模块
pip install pygame
关于编写贪吃蛇有如下几个步骤!依次思考
1、设置背景大小,即游戏框大小,---像素(px)
2、设置颜色,蛇的颜色,背景颜色,豆子的颜色
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