欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

如何用Python写贪吃蛇小游戏

程序员文章站 2022-07-13 08:35:12
...

手把手教你用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写贪吃蛇小游戏
这个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写贪吃蛇小游戏
这里有很多 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写贪吃蛇小游戏
这个时候,你再一次运行代码,就可以畅快的玩一个无敌版本的贪吃蛇了!
咦?为什么是无敌版本
相信大家都知道了,因为我们还没有定义死亡的的函数呢!

十四、定义死亡函数

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

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