python小游戏,pygame手写贪吃蛇

简介: python小游戏,pygame手写贪吃蛇

Pygame 是一组用来开发游戏软件的 Python 程序模块,基于 SDL 库的基础上开发。允许你在 Python 程序中创建功能丰富的游戏和多媒体程序,Pygame 是一个高可移植性的模块可以支持多个操作系统。用它来开发小游戏非常适合。

今天是用pygame写贪吃蛇这个小游戏。

SCREEN_WIDTH = 600      # 屏幕宽度
SCREEN_HEIGHT = 480     # 屏幕高度
SIZE = 20               # 小方格大小
LINE_WIDTH = 1          # 网格线宽度

# 游戏区域的坐标范围
SCOPE_X = (0, SCREEN_WIDTH // SIZE - 1)
SCOPE_Y = (2, SCREEN_HEIGHT // SIZE - 1)

# 食物的分值及颜色
FOOD_STYLE_LIST = [(10, (255, 100, 100)), (20, (100, 255, 100)), (30, (100, 100, 255))]

LIGHT = (100, 100, 100)
DARK = (200, 200, 200)      # 蛇的颜色
BLACK = (0, 0, 0)           # 网格线颜色
RED = (200, 30, 30)         # 红色,GAME OVER 的字体颜色
BGCOLOR = (40, 40, 60)      # 背景色

首先开始写代码,我们需要把一些的变量都定义好,其中包括屏幕大小,蛇的颜色,食物的颜色,背景色等重要游戏元素。


# 初始化蛇
def init_snake():
    snake = deque()
    snake.append((2, SCOPE_Y[0]))
    snake.append((1, SCOPE_Y[0]))
    snake.append((0, SCOPE_Y[0]))
    return snake

我们需要初始化蛇,这里的蛇我们用的数据结构是一个队列,蛇就是一条队,这个比较容易理解。

def create_food(snake):
    food_x = random.randint(SCOPE_X[0], SCOPE_X[1])
    food_y = random.randint(SCOPE_Y[0], SCOPE_Y[1])
    while (food_x, food_y) in snake:
        # 如果食物出现在蛇身上,则重来
        food_x = random.randint(SCOPE_X[0], SCOPE_X[1])
        food_y = random.randint(SCOPE_Y[0], SCOPE_Y[1])
    return food_x, food_y

然后我们需要写创建食物的代码。这个食物有一个前提,那就是食物和蛇的位置不能重叠,所以需要遍历蛇的身体,确保随机出来的食物位置没有与蛇重叠。

 if not game_over:
            curTime = time.time()
            if curTime - last_move_time > speed:
                if not pause:
                    b = True
                    last_move_time = curTime
                    next_s = (snake[0][0] + pos[0], snake[0][1] + pos[1])
                    if next_s == food:
                        # 吃到了食物
                        snake.appendleft(next_s)
                        score += food_style[0]
                        speed = orispeed - 0.03 * (score // 100)
                        food = create_food(snake)
                        food_style = get_food_style()
                    else:
                        if SCOPE_X[0] <= next_s[0] <= SCOPE_X[1] and SCOPE_Y[0] <= next_s[1] <= SCOPE_Y[1] \
                                and next_s not in snake:
                            snake.appendleft(next_s)
                            snake.pop()
                        else:
                            game_over = True

上面这一段是核心代码,就是当游戏还没有结束的时候,需要一直循环,上面那段代码就是在while里面发生的。然后定时监测数据,看看是否吃了食物,刷新食物。

总的来说游戏逻辑并非太难,有兴趣的同学可以关注公众号:诗一样的代码,找我一起讨论学习。

相关文章
|
10天前
|
定位技术 Python
【python】python基于pygame坦克大战游戏设计(源码+图像+操作说明)【独一无二】
【python】python基于pygame坦克大战游戏设计(源码+图像+操作说明)【独一无二】
|
10天前
|
Linux iOS开发 MacOS
【Python】Python基于Pygame疯狂赛车游戏设计(源码+报告)【独一无二】
【Python】Python基于Pygame疯狂赛车游戏设计(源码+报告)【独一无二】
|
8天前
|
机器学习/深度学习 存储 算法
【Python】 基于Q-learning 强化学习的贪吃蛇游戏(源码+论文)【独一无二】
【Python】 基于Q-learning 强化学习的贪吃蛇游戏(源码+论文)【独一无二】
|
9天前
|
Python
【python】python基于pygame弹珠游戏设计(源码)【独一无二】
【python】python基于pygame弹珠游戏设计(源码)【独一无二】
|
10天前
|
算法 数据安全/隐私保护 UED
【python】python基于Pygame扫雷游戏设计实现(源码+报告)【独一无二】
【python】python基于Pygame扫雷游戏设计实现(源码+报告)【独一无二】
|
1月前
|
UED Python
python编写小游戏
【7月更文挑战第6天】
36 1
|
2月前
|
开发框架 Python
Python的`pygame`库用于2D游戏开发,涵盖图形、音频和输入处理。
【6月更文挑战第21天】Python的`pygame`库用于2D游戏开发,涵盖图形、音频和输入处理。要开始,先通过`pip install pygame`安装。基本流程包括:初始化窗口、处理事件循环、添加游戏元素(如玩家和敌人)、响应用户输入、更新游戏状态及结束条件。随着项目发展,可逐步增加复杂性。
70 1
|
2月前
|
索引 Python
技术好文共享:用Python的Pygame包做飞行棋
技术好文共享:用Python的Pygame包做飞行棋
|
3月前
|
存储 人工智能 算法
使用 Python 和 Pygame 制作游戏:第九章到第十章
使用 Python 和 Pygame 制作游戏:第九章到第十章
82 0
使用 Python 和 Pygame 制作游戏:第九章到第十章