如何利用pygame实现贪吃蛇游戏

  介绍

这篇文章主要介绍如何利用pygame实现贪吃蛇游戏,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

创建蛇

首先,先分析一下蛇的移动,不然我们一定会吃亏的(别问,问就是自己写了一堆无效代码)。

蛇的移动其实并没有想象中那样复杂,每一个模块都需要有一个方向,按照方向进行移动。
其实实际上就是一个<强>出队的感觉,即<强>每一个元素都取代上一个元素的位置强,然后再按照贪吃蛇当前的方向,移动一下头节点即可。
蛇。py:

““““?类“““   import  pygame   class 蛇():   ,,,def  __init__(自我、snake_color snake_head_color, x, y, lattice_wh):   ,,,,,,,self.color =snake_color   ,,,,,,,self.head_color =snake_head_color   ,,,,,,,#,格子的左上角坐标   ,,,,,,,self.pos =, (x, y)   ,,,,,,,self.lattice_wh =lattice_wh   ,,,,,,,self.rect =, pygame.Rect (x, y, self.lattice_wh self.lattice_wh)      ,,,,,,,self.move_distance =, {   ,,,,,,,,,,,0:(0,0),   ,,,,,,,,,,,1:(0,-self.lattice_wh),   ,,,,,,,,,,,2:(0,,self.lattice_wh),   ,,,,,,,,,,,3:(-self.lattice_wh, 0),   ,,,,,,,,,,,4:(self.lattice_wh, 0)   ,,,,,,,}   ,,,,   ,,,def 移动(自我、方向):   ,,,,,,,self.rect.x  +=, self.move_distance(方向)[0]   ,,,,,,,self.rect.y  +=, self.move_distance(方向)[1]   ,,,,   ,,,def 预测(自我、方向):   ,,,,,,,return  (self.rect.x + self.move_distance(方向)[0],   ,,,,,,,self.rect.y + self.move_distance[方向][1])

创建蛇,需要给一个位置(坐标),同时也需要输入一个颜色。
这里为了区分头节点,我传入了两个颜色,一个为头节点的颜色,另一个为身子部分的颜色。
(其实颜色不需要给在这里,在更新传入一个即可)

蛇的主要部分就是移动,这里我给出了两个方法:

1。移动方法,是针对头节点的移动
2。预测移动位置方法,是判断下一步蛇的移动的位置,看看是否会撞到自己/墙壁,或者吃到食物。

为了方便我们针对方向进行处理,我使用了哈希的方式(其实就是字典),将每一个方向移动一次(x, y)坐标变化量记录好。

【那个方向0,是最开始我们的蛇是固定的,所以我添加了一个(0,0)】

最开始,我们在主要文件中创建一个蛇列表,来存储所有的蛇节点,并且添加了最开始的两个节点(头和第一部分的身子)

#,蛇头,1个蛇身   时间=snakes  []   snakes.append(蛇(snake_color snake_head_color lattice_wh, 24 * lattice_wh lattice_wh))   snakes.append(蛇(snake_color snake_head_color 0, 24 * lattice_wh, lattice_wh))

效果:

如何利用pygame实现贪吃蛇游戏

(主要是左下角的两个方块,紫色为头,绿色为身子,我是写完了才写的博客)

三、创建食物

这部分,主要就是随机生成一个位置,然后保证这个位置不在蛇身上即可。
食物类:
传入颜色,渲染的界面,一个格子的宽度以及坐标
另外我还提供了一个绘制圆的方法(pos为坐标,半径为直径)
圆函数参数:界面屏幕,颜色,位置(元组形式),直径、线条宽度。
这里我们将线条设置为直径,就能绘制一个圆盘。(注意宽度一定要是int类型,需要强转)

“““食物类“““   import  pygame   class 食物():   ,,,def  __init__(自我,food_color,屏幕,lattice_wh, x, y):   ,,,,,,,self.screen =,屏幕上   ,,,,,,,self.food_color =food_color   ,,,,,,,self.lattice_wh =lattice_wh   ,,,,,,,self.radius =, lattice_wh/2   ,,,,,,,,self.x self.y =x, y      ,,,def 画(自我):   ,,,,,,,pos =, (self.x + self.lattice_wh/2, self.y + self.lattice_wh/2)   ,,,,,,,pygame.draw.circle (self.screen self.food_color、pos、self.radius int (self.radius))

fuc。py中,写了一个生成食物的函数:

def  create_food (food_color、屏幕、lattice_wh、蛇):   ,,,success =0   ,,,x, y =0,0   ,,,while  not 成功:   ,,,,,,,x, y =, randint (0, 24), randint (0, 24)   ,,,,,,,x  *=lattice_wh   ,,,,,,,y  *=lattice_wh   ,,,,,,,for 小姐:拷贝蛇:   ,,,,,,,,,,,if  (x, y), !=, (i.rect.x i.rect.y):   ,,,,,,,,,,,,,,,success =1   ,,,,,,,,,,,,,,,休息   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

如何利用pygame实现贪吃蛇游戏