如何用Python写贪吃蛇小游戏

发布时间:2022-08-19 12:05

手把手教你用Python写一个简单的贪吃蛇小游戏

人生苦短,我用Python!

hello 大家好!我是Mark,一个姓马名克的中国人。

最近呢突然特别想玩一个贪吃蛇的小游戏,可是家里管得严,电脑上面,手机上面都不让下载,可是,对于会Python的我,这根本不是问题。
今天,我们就来看看,如何通过Python来写一个贪吃蛇小游戏!

注意一下,本文适合稍微有一点Python基础的朋友,如果你点进来只是想体验一下Python写的小游戏,可以直接拉到文章最后,有惊喜哟!

首先,我这里调用pygame模块
安装:

pip install pygame

安装完成之后输入

python
import pygame

如果没有报错,说明安装成功。

接下来,我们就开始撸代码啦!

一、导入模块

import pygame, time, random, sys

time模块用于控制时间,sys模块用于退出程序,random模块用于随机生成食物。

二、初始化游戏窗口

'''初始化游戏'''
pygame.init()

# 初始化游戏窗口
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption('贪吃蛇小游戏')

这里创建了一个640 × 480的长方形窗口。
同时,将窗口上方的名称设定为“贪吃蛇小游戏”

三、定义一些需要用的变量名

# 定义速度
fpsclock = pygame.time.Clock()

# 定义字体
font = pygame.font.Font('C:/Windows/Fonts/ARLRDBD.TTF', 80)

# 定义颜色
red = pygame.Color(255, 0, 0)
blue = pygame.Color(0, 0, 255)
balck = pygame.Color(0, 0, 0)
white = pygame.Color(255, 255, 255)
grey = pygame.Color(130, 130, 130)

定义字体的位置,当中有一个“C:/Windows/Fonts/ARLRDBD.TTF”,这个是字体文件的位置,后面的80是字体的大小。

另外注意,下面的颜色,用的是RGB光学三原色,这个只做了解。

四、定义贪吃蛇和食物的基本信息。

'''初始化贪吃蛇和食物'''
# 贪吃蛇的位置
snake_head = [100, 100]

# 贪吃蛇的身体
snake_body = [[80, 100], [60, 100], [40, 100]]

# 定义贪吃蛇的开始方向
direction = 'right'

# 食物标记
food_flag = 1

# 第一个食物的位置
food_position = [300, 300]

相信大家注意到了,食物标记 这个东西,当食物标记为1,就代表食物没有被吃掉,当食物标记为2,就代表已经被吃掉了。

注意一下这里的坐标
如何用Python写贪吃蛇小游戏_第1张图片
这个pygame的坐标方式和正常的不太一样,如图所示。

五、开启游戏主循环

while True:
    # 屏幕用黑色填充
    screen.fill(0)

	'''检测事件'''
    for event in pygame.event.get():
        # 检测退出
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

这里注意一下了,一定要检测退出,不然点击退出按钮的时候就会一直转圈圈,无法退出。

六、检测按键是否按下

        # 检测按键是否按下
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP and direction != 'down':
                direction = 'up'

            elif event.key == pygame.K_DOWN and direction != 'up':
                direction = 'down'

            elif event.key == pygame.K_RIGHT and direction != 'left':
                direction = 'right'

            elif event.key == pygame.K_LEFT and direction != 'right':
                direction = 'left'

注意一下,这里的缩进级别和上一个 if 的级别相等,
连起来看是这样的
如何用Python写贪吃蛇小游戏_第2张图片
这里有很多 if 语句,拆开来看其实不难。

七、移动贪吃蛇
一样的,直接上代码

    '''移动贪吃蛇'''
    if direction == 'up':
        snake_head[1] -= 20

    if direction == 'down':
        snake_head[1] += 20

    if direction == 'right':
        snake_head[0] += 20

    if direction == 'left':
        snake_head[0] -= 20
   
   	# 将蛇的头部当前的位置加入到蛇身的列表中
    snake_body.insert(0, list(snake_head))

这几个语句都很简单,自行理解。

八、判定食物是否被吃

    # 判定食物是否被吃
    if snake_head[1] == food_position[1] and snake_head[0] == food_position[0]:
        food_flag = 2

    else:
        snake_body.pop()

这个也很简单,就是说,一旦蛇头与食物坐标一致,食物标记就变成了被吃的状态。

九、随机生成食物
话不多说,上代码

    # 随机生成食物
    if food_flag == 2:
        x = random.randrange(1, 32)
        y = random.randrange(1, 24)
        food_position = [int(x * 20), int(y * 20)]
        food_flag = 1

这个很好理解,随机生成 x 和 y 然后将食物标记归零。

十、绘制贪吃蛇
当你写完了以上代码,你会发现,咦?为什么我这个屏幕一片黑色?
因为呀,你的贪吃蛇都没有画出来呢!

# 画出贪吃蛇
def snake(Snake_body):
    for i in Snake_body:
        pygame.draw.rect(screen, white, (i[0], i[1], 20, 20))

这里看一下这个方法

pygame.draw.rect(surf 也就是你要画的屏幕, color 颜色, (x横轴, y纵轴, int长, int宽)

如果是旧版本的pygame,可以将代码改成这样

# 画出贪吃蛇
def snake(Snake_body):
    for i in Snake_body:
        pygame.draw.rect(screen, white, Rect(i[0], i[1], 20, 20))

十一、绘制食物
接下来,我们就让食物也出现在屏幕上面吧

# 画出食物
def food(food_Position):
    pygame.draw.rect(screen, red, (food_Position[0], food_Position[1], 20, 20))

如果是旧版本的pygame,把代码改成这样

# 画出食物
def food(food_Position):
    pygame.draw.rect(screen, red, Rect(food_Position[0], food_Position[1], 20, 20))

十二、绘制分数
代码如下

# 打印分数
def drawscore(score):
    # 设置分数的颜色
    score_surf = font.render('%s' % score, True, grey)

    # 设置分数的位置
    score_rect = score_surf.get_rect()
    score_rect.midtop = (320, 240)

    # 绑定以上句柄
    screen.blit(score_surf, score_rect)

十三、在屏幕上绘制贪吃蛇和食物
好了,绘制贪吃蛇和绘制食物的函数都定义完成了,接下来,让我们把他添加到主循环当中去。
在屏幕用黑色填充之后,加入以下代码

    # 画出角色
    snake(snake_body)
    food(food_position)
    drawscore(len(snake_body) - 3)

    # 刷新屏幕
    pygame.display.flip()

    fpsclock.tick(10)

注意了,一定要添加到填充屏幕的后面,看起来是这样的
如何用Python写贪吃蛇小游戏_第3张图片
这个时候,你再一次运行代码,就可以畅快的玩一个无敌版本的贪吃蛇了!
咦?为什么是无敌版本
相信大家都知道了,因为我们还没有定义死亡的的函数呢!

十四、定义死亡函数

def game_over():
    # 设置文字颜色
    game_over_surf = font.render('Game Over!', True, grey)

    # 设置文字位置
    game_over_rect = game_over_surf.get_rect()
    game_over_rect.midtop = (320, 10)

    # 绑定以上句柄
    screen.blit(game_over_surf, game_over_rect)

    pygame.display.flip()
    time.sleep(3)
    pygame.quit()
    sys.exit()

函数定义完成了,接下来,把它添加到主循环里面去。

十五、完成游戏

    '''判定死亡'''
    # 碰到边缘
    if snake_head[0] < 0 or snake_head[0] > 620:
        game_over()

    elif snake_head[1] < 0 or snake_head[1] > 460:
        game_over()

    # 贪吃蛇碰到自己
    for i in snake_body[1:]:
        if snake_head[0] == i[0] and snake_head[1] == i[1]:
            game_over()

OK啦!
你的贪吃蛇小游戏完成啦!
现在去试一试吧,一定会非常有意思的!

十六、福利环节
是的,你没有看错,这就是福利环节,专门给来打酱油的人提供的环节。
我已经将源代码打包成了一个exe,供无聊人士使用
这里提供几个下载地址:
百度网盘:链接: https://pan.baidu.com/s/10uG7lF3pIQ03jLVQGBzEkg 提取码: wrss

蓝奏云:https://wws.lanzous.com/ip8lddkqxuh

CSDN下载:https://download.csdn.net/download/zhugezuoyuan/12516509

使用方法:
下载压缩包,解压,双击里面的ARLRDBD.TTF字体文件进行安装,不然程序无法运行,源代码就是压缩包当中的源码.py

好了,今天的分享就到这里,再见!

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号