游戏开发丨基于Pygame的AI版贪吃蛇小游戏

这篇具有很好参考价值的文章主要介绍了游戏开发丨基于Pygame的AI版贪吃蛇小游戏。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在前面

本期内容

  • 基于pygame的AI版贪吃蛇小游戏

所需环境

  • python
  • pycharm或anaconda
  • pygame

下载地址

  • https://download.csdn.net/download/m0_68111267/88789665

需求分析

本游戏使用Pygame模块开发,不需要玩家操纵贪吃蛇,贪吃蛇会自动吃掉屏幕上随机出现的食物,每吃一个食物贪吃蛇长度增加一节。如果贪吃蛇撞到屏幕边缘或自己的身体,则游戏结束。游戏界面包括游戏区域和得分显示区域。

程序设计

import pygame
import sys
from random import randint

# 蛇运动的场地长宽
HEIGHT = 25
WIDTH = 25

SCREEN_X = HEIGHT * 25
SCREEN_Y = WIDTH * 25

FIELD_SIZE = HEIGHT * WIDTH

# 蛇头总是位于snake数组的第一个元素
HEAD = 0

# 用来代表不同东西的数字,由于矩阵上每个格子会处理成到达食物的路径长度,
# 因此这三个变量间需要有足够大的间隔(>HEIGHT*WIDTH)
FOOD = 0
UNDEFINED = (HEIGHT + 1) * (WIDTH + 1)
SNAKE = 2 * UNDEFINED

# 由于snake是一维数组,所以对应元素直接加上以下值就表示向四个方向移动
LEFT = -1
RIGHT = 1
UP = -WIDTH
DOWN = WIDTH

# 错误码
ERR = -1111

# 用一维数组来表示二维的东西
# board表示蛇运动的矩形场地
# 初始化蛇头在(1,1)的地方,第0行,HEIGHT行,第0列,WIDTH列为围墙,不可用
# 初始蛇长度为1
board = [0] * FIELD_SIZE
snake = [0] * (FIELD_SIZE + 1)
snake[HEAD] = 1 * WIDTH + 1
snake_size = 1
……(完整代码请下载后查看)

程序分析

这段代码是一个基于Python和pygame库实现的贪吃蛇游戏的核心逻辑部分。游戏在一个25x25大小的网格上进行,其中每个格子都有一个对应的索引值,用于表示蛇的位置、食物位置以及地图上的可达性。

首先,定义了一些全局变量,如游戏区域尺寸(HEIGHT, WIDTH)、屏幕尺寸(SCREEN_X, SCREEN_Y)、场地大小(FIELD_SIZE)以及方向常量LEFT, RIGHT, UP, DOWN等。蛇和临时蛇的位置信息分别存储在一维数组snake和tmpsnake中,初始时蛇长度为1,位于(1,1)的位置。同时设置了食物food的初始位置,并且定义了FOOD、UNDEFINED和SNAKE三个特殊的数值,用来在二维矩阵board中区分食物、未探索区域及蛇体。

游戏中包含多个关键函数:

  1. is_cell_free(idx, psize, psnake):检查给定索引idx处的单元格是否为空,即不被蛇身覆盖。
  2. is_move_possible(idx, move):判断蛇能否向给定方向move移动。
  3. board_reset(psnake, psize, pboard):重置地图状态,将蛇体和食物标记出来,并将其他空地设置为可到达的未知距离。
  4. board_refresh(pfood, psnake, pboard):采用广度优先搜索算法更新地图中的路径长度,计算从每个非蛇体单元格到食物的最短距离。
  5. choose_shortest_safe_move(psnake, pboard)choose_longest_safe_move(psnake, pboard):根据当前地图数据,选择距离食物最近或最远的安全移动方向。
  6. is_tail_inside()follow_tail():通过虚拟操作判断蛇头是否可以朝蛇尾方向移动以避免死路,并找到这个方向。
  7. any_possible_move():当无明确安全方向时,随机选择一个可行的方向。
  8. shift_array(arr, size):移动数组元素,模拟蛇的身体沿指定方向移动。
  9. new_food():生成新的食物位置,确保不在蛇体内。
  10. make_move(pbest_move):执行实际的蛇移动操作,包括增加蛇长、更新蛇头位置、调整蛇身以及处理吃到食物的情况。
  11. virtual_shortest_move():进行一次虚拟移动,尝试寻找最短路径吃到食物并更新虚拟地图状态。
  12. find_safe_way():结合虚拟运行结果判断蛇与食物间的路径情况,并确定安全的下一步移动方向。

主循环中,程序不断检测用户输入事件(如退出或按下空格键重新开始),并依据上述函数计算出最佳移动方向,然后更新蛇的位置。如果蛇碰到自身或其他不可移动区域,则游戏结束,显示“YOU DEAD!”提示,并告知玩家按空格键重新开始。同时,实时显示当前分数(score)。

最后,main() 函数包含了游戏的初始化、事件处理、画面渲染和游戏逻辑更新等内容,构成了整个贪吃蛇游戏的核心框架。

运行结果

游戏开发丨基于Pygame的AI版贪吃蛇小游戏,《 Python实战项目100例 》,pygame,人工智能,python

系列文章

序号 目录 直达链接
1 入门实战丨基于Tkinter的简易计算器 https://want595.blog.csdn.net/article/details/131731173
2 入门实战丨基于Tkinter的生日管理系统 https://want595.blog.csdn.net/article/details/131731380
3 数据库实战丨基于Tkinter+MySQL的学生成绩管理系统 https://want595.blog.csdn.net/article/details/130992721
4 数据库实战丨基于Tkinter+MySQL的梅西生涯数据管理系统 https://want595.blog.csdn.net/article/details/130995564
5 Web实战丨基于Django与Bootstrap的在线计算器 https://want595.blog.csdn.net/article/details/134424381
6 Web实战丨基于django+html+css的在线购物商城 https://want595.blog.csdn.net/article/details/135466052
7 Web实战丨基于django+html+css+js的电子商务网站 https://want595.blog.csdn.net/article/details/135506809
8 Web实战丨基于Django与HTML的用户登录验证系统 https://want595.blog.csdn.net/article/details/135513413
9 Web实战丨基于django+html+css+js的学院门户网站 https://want595.blog.csdn.net/article/details/135511066
10 Web实战丨基于Django与HTML的新闻发布系统 https://want595.blog.csdn.net/article/details/135519824
11 Web实战丨基于django+html+css+js的在线博客网站 https://want595.blog.csdn.net/article/details/135536765
12 ……

写在后面

我是一只有趣的兔子,感谢你的喜欢!文章来源地址https://www.toymoban.com/news/detail-830065.html

到了这里,关于游戏开发丨基于Pygame的AI版贪吃蛇小游戏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Python pygame简易版斗兽棋小游戏源代码

    基于Python pygame简易版斗兽棋小游戏源代码 游戏规则如下: 胜利条件: 1.吃掉对方全部棋子 2.走入对方兽穴(不可进入自己洞穴) 吃法: 1.象狮虎豹狼狗猫鼠象 2.同类棋子先行者吃掉对方 3.老鼠可以进河,老鼠在河里时,岸上的动物不能捕食他,他也不能捕食岸上的动物 4.狮虎在河中没

    2023年04月09日
    浏览(90)
  • 基于Python+Pygame实现一个俄罗斯方块小游戏【完整代码】

    俄罗斯方块,一款起源于上世纪80年代的经典电子游戏,凭借简单的规则和独特的魅力,一跃成为全球家喻户晓的经典。你知道其实只需要一些基础的编程知识,就可以自己实现它吗?今天,我们将使用Python的Pygame库,一步步带你构建属于自己的俄罗斯方块小游戏! 游戏初始

    2024年02月04日
    浏览(31)
  • Python版经典小游戏愤怒的小鸟源代码,基于pygame+pymunk

    Python版经典小游戏愤怒的小鸟源代码,基于pygame+pymunk 程序依赖:pygame 2.0.1, pymunk 5.5.0 直接运行main.py 完整代码下载地址:Python版经典小游戏愤怒的小鸟源代码 tool.py 完整代码下载地址:Python版经典小游戏愤怒的小鸟源代码

    2024年02月16日
    浏览(30)
  • Python贪吃蛇小游戏

    Python贪吃蛇小游戏 若程序错误,请去终端下载random, turtle, freegames pip install random pip install turtle pip install freegames from random import randrange from turtle import * from freegames import square, vector food = vector(0, 0) snake = [vector(10, 0)] aim = vector(0, -10) def change(x, y):     \\\"\\\"\\\"Change snake direction.\\\"\\\"\\\"    

    2024年02月03日
    浏览(33)
  • 基于C#制作一个贪吃蛇小游戏

    基于C#制作一个贪吃蛇小游戏,简单耐玩,操作简单。

    2024年02月08日
    浏览(31)
  • 基于Unity+MySQL实现贪吃蛇小游戏

    【主界面控制程序】: using TMPro; using UnityEngine; using UnityEngine.UI; public class MainUIController : MonoBehaviour {     private static MainUIController _instance; //制作外部调用的方法     public static MainUIController Instance    //制作外部调用的方法     {                                        

    2023年04月15日
    浏览(35)
  • python贪吃蛇最简单代码,python代码贪吃蛇小游戏

    大家好,小编来为大家解答以下问题,python贪吃蛇游戏代码详解外加中文,python贪吃蛇最简单代码,现在让我们一起来看看吧! Source code download: 本文相关源码 import pygame import sys import random SCREEN_X=600 SCREEN_Y=600 class Snake(object): def __init__(self): self.direction=pygame.K_RIGHT self.body = []

    2024年02月21日
    浏览(33)
  • python快速实现简易贪吃蛇小游戏

    贪吃蛇(也叫做贪食蛇)游戏是一款休闲益智类游戏,有PC和手机等多平台版本。既简单又耐玩。该游戏通过控制蛇头方向吃蛋,从而使得蛇变得越来越长。  贪吃蛇游戏最初为单机模式,后续又陆续推出团战模式、赏金模式、挑战模式等多种玩法。  另外还有一种名为“贪

    2024年02月13日
    浏览(36)
  • 【用python做一个贪吃蛇小游戏】

    引言: 贪吃蛇是一款经典的小游戏,它既简单又有趣。在本文中,我们将使用Python编写一个贪吃蛇小游戏,通过这个项目来学习如何利用Python的基础知识和图形界面库来创建一个简单的游戏。 介绍: 贪吃蛇游戏的目标是控制一条蛇在屏幕上移动并吃掉食物,每吃掉一块食物

    2024年02月08日
    浏览(28)
  • Python小游戏:贪吃蛇——turtle的使用

       突然想把去年写的小游戏练习整合一下,写一个简单的教学文章吧。 该篇主要讲解利用python中turtle包制作小游戏,不涉及pygame的使用,仅用pycharm就可实现 0.理清游戏思路   要实现的效果如下图所示: 黑色是蛇,红色利用随机函数生成的苹果,蛇没吃到一个苹果,就会增

    2024年02月01日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包