小游戏系列算法之二贪吃蛇算法原理

浅谈贪吃蛇的设计及算法 平时看起来小小的贪吃蛇做起来也是很需要思考的。先看下贪吃蛇游戏的一些设定: 1.地图:我们假定地图为12*12,其中中间10*10为蛇可以走的区域,其余周边为墙。 2.蛇:包括蛇头和蛇身 3.食物:路径上会出现一个食物,被吃掉后会重新随机生成。比起面向对象编程的construct2,用面向过程的C语言写起来自然更有难度。我们先用置顶向下的方法分析一下贪吃蛇程序所需的代码。0.主程序 WHIL 阅读详情

 

贪吃蛇是很常见的小游戏,大家都懂的就不介绍了。
游戏算法非常简单。先看图:

 

显然这是一个贪吃蛇,红色是蛇蓝色是食物(= =)
我们先来看看蛇的构造

 

 

可以看到,蛇其实是由1个1个正方体拼成的。每个正方体的左上角
是他们的坐标。在程序中,我们可以用一个数组表示一条蛇。数组
的每一个位置存放一个正方形的坐标
如:
snakeArr = [(10,0),(20,0),(30,0),(40,0)];
在画蛇的时候,我们只需要遍历数组,根据数组里面的坐标在画布
上画出一个一个的正方体就变成一条蛇啦。

至于蛇的行走怎么办?如下一步,蛇往上走了。

 

 

怎么样,有思路了吗?若下一步往上走,则下一个点为数组首点的横坐标不标,纵坐标+10
nextPoint = new Point(snakeArr[0].x,snakeArr[0].y+10);
接着,我们在数组的头部插入nextPoint,然后把数组尾部的数据去除。数组变成这个样子:
snakeArr = [(10,10),((10,0),(20,0),(30,0)];
是不是和数据结构里面的“队”很类似?。头位置作插入,队尾作删除。

接下里我们只要把画布清空,然后再根据蛇数组画出蛇就实现了蛇的移动啦。

关于是否吃到食物的判断也很简单,判断一下nextPoint和食物的坐标是否一样就可以了。
注意食物的生成位置就好。一般来说横坐标是随机 (画布的宽/正方形长度),然后把得到的随机数*正方形长度。 纵坐标不用我说了吧。

越界什么的,还有是否碰到自己身体什么的,我也不说了,就是简单的判断而已。

完了。


显然这是一个贪吃蛇,红色是蛇蓝色是食物(= =)
我们先来看看蛇的构造

 

贪吃蛇AI算法中的A star寻路算法 A*寻路算法 在之前的贪吃蛇游戏比赛里,计算蛇吃食物路径时要用到寻路算法,于是就去了解了一下,以下是我的算法演化过程。 1、简单寻路–按图索骥 我一开始想到的方法就是最简单的:目标在哪个方位就往哪个方位走,就和平时看地图寻路一样。这时候算法的基本思想为: 即以起点终点连线方向为正方向,与正方向越接近的方法给予更小的权值,当搜索路径时总以总权值和最小为目的进行搜索,直到搜索到终点。 但在地图上有障碍物时会发生: 所以要对地图上的点做一些处理,即把障碍物从可以搜索的地图点集合中去除。 以下是此算法的搜索结果 阅读详情

相关推荐

贪吃蛇c++程序(A*算法自动追踪功能)

目录 一、摘要 二、概述 三、方法论证和比较 1、方案一:深度学习算法 2、方案二:广度优先搜索算法 3、方案三:A*算法 四、理论分析即代码 1、贪吃蛇的设计流程图 2、初始化地图算法 3、利用键盘控制蛇的移动 4、食物的生成 6、贪吃蛇的自动追踪算法 一、摘要 贪吃蛇是一款简单益智类的大众小游戏,自诞生以来,深受广大玩家喜爱。此次设计传统的贪吃蛇小游戏,将应用所学的理论知识解决一些复杂的工程问题:通过利用键盘的方向键控制蛇的移动,实现简单的贪吃蛇基本功能。...

m0_58585940的博客 1万+

c_贪吃蛇(含小蛇移动和吃到食物增长的算法原理)

头文件以及全局变量 #include<stdio.h> #include<conio.h> #include<windows.h> #define high 26 #define width 46 int num[high][width] = {0}; //边框 int movesnake; //小蛇移动 int food_x, food_y;//食物 in...

LongKai_G 5972

Python游戏开发,pygame模块,哈密顿环算法实现自动玩贪吃蛇小游戏

前言 时隔一个月,再带大家尝试借助哈密顿环来自动玩一波贪吃蛇小游戏呗,废话不多说,让我们愉快地开始吧~ 开发工具 **Python版本:**3.6.4 相关模块: pygame模块; 以及一些python自带的模块。 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可。 原理简介 这里我们主要讲如何设计算法来自动玩贪吃蛇小游戏。先来简单介绍一下哈密顿环的定义(引自维基百科): 哈密顿图是一个无向图,由哈密顿爵士提出, 由指定的起点前往指定的终点,途中经过所有其他节点且只经过一次。 在

MC_XY的博客 630

贪吃蛇C语言源码与算法分析

文章出自个人博客https://knightyun.github.io/2018/04/24/c-gluttonous-snake,转载请申明。 经典的贪吃蛇游戏算法,无疑是一个较大的挑战,综合性较高,像我这种刚入门C语言的也差不多花了整整一周时间才差不多理解透彻,内部包含了较多的函数,数组,二维数组,循环等思想。 Github项目地址:https://github.com/knigh...

knight-yun的博客 6015

贪吃蛇小游戏的设计与实现

贪吃蛇小游戏的设计与实现 1. 背景介绍 1.1 游戏简介 贪吃蛇是一款经典的电子游戏,最早出现于1976年。游戏的目标是控制一条不断延长的蛇,吃掉游戏区域内的食物,使蛇身越来越长。玩家需要操控蛇头的移动方向,避免撞到墙壁或者蛇身自己。随着蛇身越来越长,

AI天才研究院 673

C++贪吃蛇小游戏完整实战项目

贪吃蛇游戏是一种经典的游戏形式,起源于20世纪70年代。最初在电子游戏和移动设备上流行起来,玩家控制一条不断增长的蛇,需要避免撞到自己的尾巴或游戏边界的同时,吃掉出现的食物。游戏随着时间的发展,演化出了多种版本和变体,包括多玩家模式、增强图形和动画效果等。贪吃蛇游戏的核心机制是围绕着蛇的增长和移动。随着蛇吃掉食物,玩家需要控制蛇以避免撞到自身或游戏边界。游戏结束的条件通常是蛇撞到边界或自己的身体。为了增加挑战性,游戏往往会随着时间的推移增加蛇的移动速度。

weixin_35732273的博客 1031

MATLAB的贪吃蛇小游戏

        这几天在做MATLAB的课程设计,因为时间很赶,网上借鉴了Alex的整体框架(文章链接在末尾),改了一个简单的贪吃蛇的小游戏,先来看看总体的效果吧。                游戏比较简单,整个程序也不会很复杂,通过控制上下左右按键来控制贪吃蛇的走位(要想有好成绩一定要有骚走位哦),贪吃蛇吃到食物后会增长一个长度,当贪吃蛇碰到四周的墙壁或者碰到自己的身体的时候,程序就会弹出窗口...

J_M_Chen的博客 3万+

Java贪吃蛇小游戏开发实战——基于狂神说Java教学项目

要正确使用wait()和notify(),必须理解其运行前提:它们只能在同步上下文中调用,即处于块或方法内部。这是因为这两个方法依赖于对象监视器(monitor),用于协调多个线程对共享资源的访问。在贪吃蛇实现中,通常会创建一个独立的GamePanel对象作为游戏逻辑容器,该对象内含蛇身、食物、方向等共享状态。因此,可以自然地将其自身作为锁对象:@Overridetry {// 线程在此处挂起,释放锁return;// 执行一帧游戏逻辑:移动蛇、检测碰撞、重绘。

weixin_42588877的博客 877

贪吃蛇小游戏总论

引言:一个月前完成了贪吃蛇小游戏,作为一个用来练手的项目,自己的确成长了不少,打算就这个项目写点东西,后来工作太忙,再加上一些原因,一直到现在才有空写下来,贪吃蛇小游戏分为总论,分论三篇和反思一篇,五篇文章来写,总论主要说明贪吃蛇小游戏主要实现了那些功能,以及贪吃蛇小游戏的算法分析,设计原理等等,分论主要讲贪吃蛇小游戏的各个组成部分原理,反思主要复盘自己在设计这个游戏中的错误和自我成长。 (一)贪...

尚拙的博客 3010

告别手动维护!教你用SAP BAPI批量更新生产订单BOM组件(CO02工单)

本文详细介绍了如何利用SAP BAPI实现生产订单BOM组件的批量更新,解决传统手工操作(如CO02工单)效率低下的问题。通过核心函数解析和批量处理框架设计,帮助用户大幅提升工作效率,降低错误率,适用于物料主数据变更、季节性配方调整等场景。

weixin_30844577的博客 561

Android音频子系统分析-car_audio_configuration.xml

先附上一个例子,再逐一解释。概括来说,该文件描述了车里有哪些区域,每个区域划分了多少组,每个组包含了哪些设备,每个设备接收哪些类型的音频流。

不定时记录分享一些有用没用的东西 989

c#用控制台实现贪吃蛇小游戏

写在前面: 有一天突发奇想,如果我只用算法实现基本逻辑,让控制台输出图像,不用任何组件,只用一门编程语言,能否实现一个可以人机交互的小游戏,抱着试一试的想法,博主用c#控制台程序复原了贪吃蛇玩法的小游戏。 目录 一、可视化界面 二、贪吃蛇基本逻辑 1.游戏玩法 一、可视化界面 众所周知,控制台程序通常没有可视化的界面,只是通过字符串来显示或者监控程序,在使用控制台写程序时,我们只关心数据,不在乎界面。但是,如果我们偏偏反其道而行之,用控制台可视化形式将游戏界面...

sinsted的博客 1万+

自动驾驶轨迹规划算法——Apollo Lattice Planner

Apollo Lattice Planner是百度Apollo自动驾驶系统中的一种基于采样的实时轨迹规划算法。其核心思想是在离散化的状态空间中,对终端状态进行采样,并通过多项式曲线连接当前状态与候选终端状态,形成候选轨迹集,最后基于代价函数选择最优轨迹。该算法将车辆可达状态按纵向距离、横向偏移和速度等维度规则离散化,形成"格点"状态空间。 Lattice Planner通过三个主要步骤实现轨迹规划:1)终端状态采样,在规划时域内枚举多种驾驶意图;2)轨迹生成,使用五次多项式连接起点与各终

swaggytiger的博客 1623

在windows的控制台实现贪吃蛇小游戏

void SetPos(int x, int y)//设置光标位置//将语言环境设置为中文语言,方便宽字体打印printf("欢迎来到贪吃蛇小游戏");/*介绍游戏规则*/printf("用↑ ↓ ← →控制蛇吞掉食物,F3加速,F4减速");printf("速度越快,得分越高,不要碰到墙壁,也不要吃掉自己哦\n");//如果地图扩大了,那么请将这里的指令也修改一下system("title 贪吃蛇");/*隐藏光标*//*游戏主菜单*/

2301_77239666的博客 2913

(Cascade extended state observer)级联ADRC的simulink仿真和程序---送给中国研究学者的精华版

(Cascade extended state observer)级联ADRC的simulink仿真和程序---送给中国研究学者的精华版

weixin_44312889的博客 3778

ESP-IDF 利用ESP32构建智能音乐播放器(一)---------- 实现SD卡MP3文件的解码与播放

本文详细介绍了如何利用ESP32和ESP-IDF开发框架,从零开始构建一个智能音乐播放器。文章重点讲解了如何通过SD卡模块读取MP3文件,并集成Helix MP3解码库进行软件解码,最终通过I2S接口驱动音频模块实现播放。内容涵盖硬件连接、软件环境搭建、核心解码与输出逻辑,为嵌入式音频开发提供了完整的实战指南。

weixin_29163797的博客 234

JAVA贪吃蛇小游戏分论(一)

引言:Java贪吃蛇小游戏是一款非常经典的小游戏,在总论中分析了我的贪吃蛇小游戏的运行过程,以及贪吃蛇的算法分析等等,对于贪吃蛇的移动原理,随机点的出现等有了一定的了解,那么,分论三篇将从我写的代码出发,分析贪食蛇小游戏的具体组成原理和代码实现,分论一主要说明贪吃蛇小游戏的界面设计,贪吃蛇的设计,和随机点出现等,分论二来分析贪吃蛇移动方式的分析,分论三主要介绍贪吃蛇小游戏辅助类,即圆角按钮和音乐类...

尚拙的博客 2137

手把手教你学Simulink--复杂环境适应的四足机器人领域仿真建模实例:构建一个基于Simulink的四足机器人动态平衡保持仿真模型

通过上述步骤,你可以构建一个基本的基于Simulink的四足机器人动态平衡保持仿真模型。此模型不仅有助于理解四足机器人在复杂环境中的动态平衡控制原理,也为进一步优化提供了基础。随着技术的发展,还可以探索更多高级功能,如自适应步态调整、强化学习等,以提高机器人的智能性和适应性。

MHD0815的博客 236

c的菜菜菜鸟级小游戏之贪吃蛇

Linux环境下基于Ncurse图形库的c语言小游戏。

weixin_48554101的博客 847

16、Arduino MEGA 2560 固件与电路详解

本文详细介绍了Arduino MEGA 2560的固件编程与电路设计,涵盖ATmega16U2和ATmega2560的熔丝配置、stk500v2引导加载程序的备份与恢复方法、使用Microchip Studio通过ICSP烧录固件的步骤,以及debugWIRE和JTAG调试接口的选择与配置。同时提供了电路块图解析、组件位置参考及常见问题解决方案,帮助用户深入理解硬件结构并进行高效开发与调试。

swift5iosmith的博客 194

利用baostock获取上市公司财务指标

利用baostock获取上市公司的财务指标 1、导入模块,登录baostock import baostock as bs import pandas as pd import time # 登陆系统 lg = bs.login() # 显示登陆返回信息 print('login respond error_code:'+lg.error_code) print('login respond error_msg:'+lg.error_msg) 2、查询股票代码、行业板块 # 查询股票代码 rs=.

firefox_yau的博客 2098

贪吃蛇思路详解

很多人学习编程,竟然不曾自己动手写过小游戏。 这或多或少,在编程生涯中,应该是缺少了一些乐趣的。 而没有动手写过的人,无外乎这么几种。 1,不屑。老子很牛逼,这种小儿科,浪费时间。 2,不会。思前想后,挝耳挠腮,无处下手。 3,不愿。我只对钱感兴趣,对写小游戏,没兴趣。 不知道该如何评判,也不想评判,每个人都有自己的世界观,人生观,价值观。 那么,对于那些有兴趣,却又无处下手的同学,本文将一步一...

前端之虎陈随易 8747

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

基于STM32LCD的贪吃蛇小游戏资源介绍:简单贪吃蛇,STM32微控制器与LCD显示盛宴

基于STM32LCD的贪吃蛇小游戏资源介绍:简单贪吃蛇,STM32微控制器与LCD显示盛宴 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在现代电子技术的发展浪潮中,开源项目成为了推动技术进步的重要力量。今天,我们将为您介绍一款基于STM32微控制器和LCD显示屏的贪吃蛇小游戏资源。这款游戏不仅展示了STM32的强大性能,还通过LCD的高清显示,为玩家带来了沉浸式的游...

gitblog_06777的博客 947

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

《数据结构与算法分析》课程设计——贪吃蛇问题

中国矿业大学信控学院 补一下我之前在博客园发布的内容 懒得调了,想复制完整代码直接复制最下面的,想复制分布代码去看我博客园链接吧 《数据结构与算法分析》课程设计——贪吃蛇问题 - 刷子zz - 博客园 一、问题描述# 以数据结构思想设计实现贪吃蛇小游戏。 二、需求分析# 首先需要考虑如何设计一个win运行窗口来实时显示结果 然后考虑到蛇的身子是一节一节的,此时最容易联想到的数据结构就是顺序表,链表,如果把蛇比做顺序表或者链表,在之后吃到食物的时候,身子肯定会变长,这就涉.

是抹茶味的啊的博客 1万+

贪吃蛇小游戏开源项目指南

贪吃蛇小游戏开源项目指南 项目介绍 本项目是基于Python或JavaScript实现的经典贪吃蛇游戏——“贪婪蛇”(GitHub仓库),旨在复现并扩展经典的手机游戏体验。开发者通过简洁的代码结构,展示了如何构建一个具备基础游戏逻辑、用户交互和简单升级功能的贪吃蛇游戏。它适合初学者学习基本的游戏编程概念,同时也为对游戏开发感兴趣的技术爱好者提供了一个实践平台。 项目快速启动 环境准备 确保你的开...

gitblog_00422的博客 633

单片机:实现贪吃蛇(完整源码)

单片机:实现贪吃蛇(完整源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1611
上一篇: Netty使用初步
下一篇: Linux下Web应用服务器搭建
fengsser
博客等级 码龄17年 62粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值