• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

python实战之利用pygame实现贪吃蛇游戏(二)

python 搞代码 4年前 (2022-01-09) 14次浏览 已收录 0个评论
文章目录[隐藏]

一、前言

在上一篇博客中,我们实现了基本的界面搭建,这次实现一下逻辑部分。

二、创建蛇

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

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

""""🐍类"""
import pygame
class Snake():
    def __init__(self,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 move(self,direction):
        self.rect.x += self.move_distance[direction][0]
        self.rect.y += self.move_distance[direction][1]
    
    def forecast(self,direction):
        return (self.rect.x+self.move_distance[direction][0],
        		self.rect.y+self.move_distance[direction][1])

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

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

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

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

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

来&源gao@dai!ma.com搞$代^码%网最开始,我们在main文件中创建一个snakes列表,来存储所有的蛇节点,并且添加了最开始的两个节点(头和第一部分的身子)

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

效果:

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

三、创建食物

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

"""食物类"""
import pygame
class Food():
    def __init__(self,food_color,screen,lattice_wh,x,y):
        self.screen = screen
        self.food_color = food_color
        self.lattice_wh = lattice_wh
        self.radius = lattice_wh/2
        self.x,self.y = x,y

    def draw(self):
        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))

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python实战之利用pygame实现贪吃蛇游戏(二)
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址