贪吃蛇 c++实现

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

周末无聊,尝试写了下贪吃蛇。先上代码

#include<iostream>
#include<conio.h>
#include<Windows.h>
#include<stdlib.h>
#include<ctime>
#include<queue>
using namespace std;

#define UP 72;
#define DOWN 80;
#define LEFT 75;
#define RIGHT 77;
struct xyVal
{
	int x;
	int y;
};

queue<xyVal> Que;

int main() {
	int level = 1;
	clock_t levelTime = 10 * 1000;
	//新建并初始化工作空间
	char playSpace[22][22];
	for (int i = 1; i < 21; i++)
		for (int j = 1; j < 21; j++)
			playSpace[i][j] = 0;
	for (int i = 0; i < 22; i++)
	{
		playSpace[0][i] = '@';
		playSpace[21][i] = '@';
	}
	for (int i = 1; i < 21; i++)
	{
		playSpace[i][0] = '@';
		playSpace[i][21] = '@';
	}
	//核心
	//生成头部*和一个果实$
	int xVal, yVal, xFood, yFood;
	srand(time(0));
	xVal = rand() % 14 + 3;
	yVal = rand() % 14 + 3;
	playSpace[xVal][yVal] = '*';
	Que.push(xyVal{ xVal, yVal });


	do {
		xFood = rand() % 20 + 1;
		yFood = rand() % 20 + 1;
	} while (xFood == xVal && yFood == yVal);
	playSpace[xFood][yFood] = '$';

	for (int i = 0; i < 22; i++)
	{
		for (int j = 0; j < 22; j++)
			cout << playSpace[i][j] << " ";
		cout << endl;
	}

	//初始的移动方向
	int move;
	int movei = rand() % 4 + 1;
	switch (movei)
	{
	case 1:
		move = 72; break;
	case 2:
		move = 75; break;
	case 3:
		move = 77; break;
	case 4:
		move = 80; break;
	}
	//移动
	while (1) {
		xyVal temp;
		switch (move)
		{
		case 72:
			xVal--; break;
		case 80:
			xVal += 1; break;
		case 75:
			yVal -= 1; break;
		case 77:
			yVal += 1; break;
		}
		if (playSpace[xVal][yVal] == '@' || playSpace[xVal][yVal] == '*')
			break;
		switch (playSpace[xVal][yVal])
		{
		case 0:
			playSpace[xVal][yVal] = '*';
			Que.push(xyVal{ xVal, yVal });

			temp = Que.front();
			Que.pop();
			playSpace[temp.x][temp.y] = 0;
			break;
		case '$':
			playSpace[xVal][yVal] = '*';
			temp.x = xVal;
			temp.y = yVal;
			Que.push(temp);

			do {
				xFood = rand() % 20 + 1;
				yFood = rand() % 20 + 1;
			} while (playSpace[xFood][yFood] != 0);
			playSpace[xFood][yFood] = '$';
			break;
		}

		//输出此刻的状态
		for (int i = 0; i < 22; i++)
		{
			for (int j = 0; j < 22; j++)
				cout << playSpace[i][j] << " ";
			cout << endl;
		}
		//Sleep(1 * 2000);
		//输入键盘控制
		if (clock() > levelTime)
		{
			level++;
			levelTime *= 2;
		}
		if (level > 4)
			level = 4;
		clock_t timeBegin = clock();
		char ch;
		while (1)
		{
			if (kbhit())
			{
				ch = getch();
			}
			else if (clock() - timeBegin >= 1000 / level)
				break;
		}
		if (ch == 72 || ch == 75 || ch == 77 || ch == 80)
			move = ch;
		ch = 0;
		
	}
	cout << "FAILED" << endl;

	system("pause");
	return 0;
}

思路

  1. 贪吃蛇是一个二维像素游戏。因为使用一个char类型的二维数组来实现。
  2. 使用cout函数不断的有间隔时间的打印这个二维数组,实现贪吃蛇的移动效果。
  3. 使用一个队列来存储“贪吃蛇”这条蛇所有元素的“坐标”,也就是相应元素在二维数组中的索引。
  4. 通过clock()函数,来给用户一定时间输入控制。

要点

贪吃蛇 头部下一个节点的处理

根据贪吃蛇的移动方向,头部的下一个节点可能有三种情况:

1. 是墙壁或蛇自身。此时游戏失败,结束进程。代码仅需跳出循环,输出“FAILED”即可。

2. 是果实。此时果实变成蛇的头部,将这个坐标push到队列Que中。此外还需要另外生成一个果实。

3. 是空的。此时下一个节点称为蛇的头部,而蛇的尾部节点的坐标放在Que的队首。使用Que.front()获得这个需要删除的节点的坐标, 将这个坐标对应的二维数组值设为0,然后pop出队列。

果实、头部生成的注意点

1. 使用rand结合srand、time(0)生成的随机数来产生果实和头部的随即坐标。

2. 注意,果实、头部的坐标只能生成在“空位”,如果这个位置不是空的,就需要重新生成坐标。

限时输入与屏幕的刷新

1. 使用kbhie()函数来检测是否有键盘输入,getch()来获取键盘输入。

2. 使用一个循环嵌套一个时间条件来实现“限时”。(之前用Sleep()来做的时候发生一些意外,究其原因,sleep是将整个程序暂停,暂停期间用户的输入是不会被程序接受的。而这个循环可以一直等待用户输入)

3. 使用一个时间函数来实现level(难度)随时间增长的特性。

存在的问题

眼花。尤其的难度增高以后,把我看哭了。。。。

用C++做一个贪吃蛇小游戏(Dev-C++5.11亲测有用) 此文章为本人休闲时创作的贪吃蛇。 阅读详情

相关推荐

C++入门——实现贪吃蛇游戏

参考 《C和C++游戏趣味编程》 贪吃蛇游戏 键盘控制小蛇上、下、左、右移动,迟到食物后长度加1;蛇头碰到自身或窗口边缘,游戏失败 程序框架 #include <graphics.h> #include <conio.h> #include <stdio.h> // 全局变量定义 void startup() // 初始化函数 { } void show() // 绘

beilizhang的博客 1万+

【项目实战】轻松实现C/C++大作业:贪吃蛇大作战游戏!

这是一个贪吃蛇大作战类游戏,修改特性为 AI 不互杀; 该程序有四个类:蛇基类 SnakeBase,玩家类 Player,AI 类,Game 类;SnakeBase 和 AI 均继承自 SnakeBase,SnakeBase 提供基础接口;

致力于C语言C++知识分享! 2919

贪吃蛇C++实现

贪吃蛇 计划实现 实现蛇的前进 根据输入改变方向 设置墙的范围 实现加速 实现UI界面(暂未) 移动光标 参考博客 - COORD 可以理解成一个链表,可以用来记录坐标.具体为: typedef struct COORD{ short X; short Y; }COORD,*PCOORD; 项目中通过以下函...

budding0828 1195

C语言C++图形库---贪吃蛇大作战【附源码】

这一节中,我们来做一款经典小游戏,贪吃蛇。先看看最终效果图 在开始之前,我们把窗体创建好。 创建一个800 * 600的窗体。这一次我们使用默认的原点和坐标轴:原点在窗体左上角,X轴正方向向右,Y轴正方向向下。背景色设置为RGB(164, 225, 202),最后调用cleardevice函数,使用背景色清空整个窗体。 #include<easyx.h> #include<stdio.h> intmain() { initgraph(800,600...

kxtxdy的博客 1万+

C++编程实现贪吃蛇小游戏

面向对象编程(Object-Oriented Programming, OOP)是目前主流的软件开发方法之一,它以现实世界的概念和关系为基础构建计算机程序。C++作为一种支持面向对象编程的语言,在软件开发中扮演着重要角色。Snake类的成员变量和函数定义了它的行为和状态。以下是一些关键的成员变量和函数的设计考虑:成员变量:需要包含蛇身体的每个部分的位置、蛇的长度、移动方向和速度等。成员函数:应该包含处理用户输入、移动蛇身、增长、检查自身碰撞和食物碰撞、以及游戏结束条件等。

weixin_35903223的博客 823

QTC++贪吃蛇大作战

QT,C++,不是传统贪吃蛇,简易贪吃蛇大作战游戏,鼠标控制方向三百六十度旋转,有ai蛇,可以寻找吃的自动躲避。

用C++实现经典的贪吃蛇游戏

六一儿童节到了,无论是大朋友还是小朋友,相信大家心里都藏有一颗向往浪漫的童真的心。贪吃蛇是一款经典的单机小游戏,大家在小时候应该都接触过。今天,我将用C++来复刻这款游戏,并祝福所有大朋友小朋友六一儿童节快乐,永远童心未泯。我们需要定义游戏整个场景的大小,蛇的朝向所代表的数值,蛇的速度,蛇的每一个结点大小,食物的大小。//定义场景大小//定义食物以及蛇的大小//定义蛇的朝向//蛇的速度(用在睡眠函数里面)如果您觉得本篇文章不错的话,不如将它分享出去吧!让更多的人感受这份童真快乐。

记录了个人在学习生活中的所思所想,在反思自己的同时希望也能够帮到你 1万+

Matlab结果性能评价---rms函数(计算矩阵、数组和向量元素均方根)

实例1:创建一个向量(正弦波)并计算其均方根值 实例2:创建一个二维矩阵并计算其均方根值 实例3:计算二维矩阵沿指定维度的均方根值 本例程配套完整源码下载 均方根(Root-Mean-Square Level): 向量x的均方根值为沿着指定的维度执行求和: 语法描述: y = rms(x)返回输入x的均方根值。如果x是行或列向量,y是实数值标量。对于大小尺寸大于1矩阵x,y包含沿x的第一个数组维度计算的均方根值。例如,如果x是N > 1的N*M矩阵,那么y是1*M行向量,对应x矩..

qq_32809093的博客 3万+

c++实现贪吃蛇

游戏中的实现元素 游戏中元素分为:墙壁,蛇,事物以及蛇的可行区域和右侧的版本号和游戏玩法提示 墙壁 *号表示,代表一个区域范围,也就是蛇的可移动区域,蛇如果碰到墙壁视为死亡, 蛇 分为蛇头,蛇身,蛇头用@符号表示,蛇身用=等号表示,当蛇吃到食物时候,蛇身+1,一意为着长度变长,贪吃蛇可以通过不断地吃食物来增加自己的身体 食物 #井号表示,蛇碰到食物会将食物吃掉 可移动区域 空格 表示,代表蛇可以移...

LXY的博客 5万+

从“破解”到应用:三菱数控系统M80协议逆向分析与工业数据采集网关搭建指南

本文深入解析三菱数控系统M80协议的逆向分析方法与工业数据采集网关搭建技术。通过TCP协议实现跨平台通信,详细介绍了M80协议的数据包结构、多语言实现方案(C#、Java、C/C++)以及Linux数据采集网关的架构设计与容器化部署。为工业自动化领域的开发者提供从协议分析到企业级数据采集落地的完整解决方案。

weixin_29228781的博客 1212

【医学影像】Deep Learning for Automatic Pneumonia Detection

写在前面的话: 这篇论文是北美放射学会(RSNA)在Kaggle平台上托管的肺炎区域检测挑战赛取得第二名成绩的解决方案。因为笔者需要用到其中的图像增强方案,因此本篇博客只介绍了数据集和图像增强,关于模型的改进和其它改进点没有涉及。 论文地址:https://arxiv.org/abs/2005.13899 代码地址:https://github.com/tatigabru/kaggle-rsna 比赛地址:https://www.kaggle.com/c/rsna-pneumonia-detection-c

chenzhoujian_的博客 1566

c++实现贪吃蛇游戏

本文将介绍以C++编写贪吃蛇游戏的过程,包括游戏规则、设计思路、主要功能的实现以及注意事项。最后,我们给出了完整的C++代码,供读者参考和学习。

aliyonghang的博客 2298

手机直连卫星上网,3GPP R17/R18到底做了哪些技术升级?(IoT/NR NTN详解)

本文深入解析了3GPP R17/R18标准中手机直连卫星上网的技术升级,重点介绍了IoT NTN与NR NTN两项关键技术。R17通过星历辅助补偿算法和多普勒频移控制,实现了智能手机直连卫星的突破;R18则进一步优化移动性、支持高频段和星上本地交换,提升用户体验。这些技术为物联网和5G/6G通信开辟了新可能。

weixin_33701251的博客 617

贪吃蛇的C++实现

一、实现的功能 1、介绍程序内容 2、选择控制方式(WASD或者方向键盘) 3、地图选择 4、速度选择 二、实现思路 既然刚学完C++,我们就要使用面向对象的方法来编程实现。创建唯一也是核心的类CentralWork,在其中实现所有功能。 贪吃蛇实现主要有四个步骤:食物的随机产生、蛇的移动显示、蛇移动方向的控制、蛇吃到食物与牺牲的判定。现在阐述实现思路。 1、食物的随机产生: 食物只存在一个,一个被吃后才会产生下一个随机食物。所以食物是否...

qq_56341866的博客 8487

告别Qt Creator?手把手教你用VSCode+MinGW调试QT项目(附完整launch.json配置)

本文详细介绍了如何在VSCode中配置完整的QT开发环境,特别是针对使用MinGW编译器的用户。从环境搭建到调试配置,包括生成.pro文件、Makefile,以及配置task.json和launch.json文件,帮助开发者高效调试QT项目。

weixin_27180827的博客 185

模型压缩技术:剪枝、量化与知识蒸馏实战

模型压缩技术:剪枝、量化与知识蒸馏实战,在深度学习领域,模型的性能往往与模型的规模紧密相关,更大的模型通常能学习到更复杂的模式,从而在任务中取得更好的效果。然而,随着模型规模的不断增大,其在实际应用中面临着诸多挑战,如内存占用高、计算资源需求大、推理速度慢等问题,这使得在资源受限的设备(如移动设备、嵌入式设备)上部署变得困难重重。模型压缩技术应运而生,它旨在在尽可能保持模型性能的前提下,通过各种方法减少模型的参数数量和计算量,提高模型的效率和可部署性。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 5万+

C++实现贪吃蛇(含源代码)—基于easyx图形库

本文为作者暑假学完C++的基础知识后,突然间灵感炸现! 然后写下的贪吃蛇C++版本つ _ つ(o゜▽゜)o☆ 作者认为还是有很多地方可以优化的,这也只是个简单版本,后续会持续完善, 或许会写贪吃蛇大作战?(*❦ω❦)

B1ue还在专注 4620

BES2810_best1702_best1702_ibrt_三者关系深度解析

一颗芯片的三个名字:BES2810、best1702 与 best1702_ibrt 关系深度解析

weixin_42162924的博客 349

[C++]C++实现贪吃蛇

转载自http://blog.youkuaiyun.com/ckcz123/article/details/8204365     /************************贪吃蛇***********************/ /**********************2012-11-20*********************/ #include &lt;iostream&gt; ...

1万+

2025必备:C#上位机自动更新方案,支持断点续传与版本回滚(附完整源码)

摘要:工业上位机自动更新方案解析 本文针对工业现场上位机更新效率低下、风险高的问题,提出了一套完整的自动更新解决方案。该方案包含四个核心模块:版本检测(后台比对版本)、断点下载(支持网络中断续传)、安装更新(自动备份旧版本)和版本回滚(更新失败快速恢复)。通过独立更新工具与主程序解耦的设计,实现了"不影响生产+有退路"的工业级更新要求。方案基于.NET Framework开发,采用HTTP协议通信,包含详细的代码实现和工业场景适配说明,解决了U盘更新效率低、网络不稳定导致下载失败、更新后

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 955

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

用C++语言实现贪吃蛇游戏

写在前面 用C++语言写游戏再适合不过了,当然不是因为用它写起来简单,(相反那并不简单),但是其性能绝对是其他语言没法比的。所以这里我会用C++实现一个贪吃蛇的游戏。当然我可能有意隐瞒了你,因为我们不仅仅是用C++纯语言来干这件事,那会很别扭,因为我们需要图像渲染、声音、甚至是碰撞检测(我最喜欢的一个版块)!所以仅仅用语言是不够的。 (注:在文章最后我会给出两个版本的贪吃蛇源码及涉及到的一些资源

razorEdge的博客 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

贪吃蛇详细教程-C++实现

和小白一起做贪吃蛇吧!会C++就可以上车! 小白第一次写文章,如有不足之处,欢迎大家指出! 因为本人是新手,所以尽量使用通俗易懂的话,没有太多专业术语,不太会用目录,大佬还请多多包涵! 前言:本文所有的方向用8,2,4,6表示,对应小键盘上的↑,↓,←,→,这么做可以直观地看出方向,方便程序的编写。 考虑到有读者可能不了解一些游戏必备的函数,所以我做了简要的介绍,大佬请跳过*部分。 首先,我们定义一个Snake类封装贪吃蛇游戏,并声明一些基本的变量和成员函数: class Snake { private:

m0_55464171的博客 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

经典游戏---贪吃蛇从C++代码实现

小时候都玩过贪吃蛇这个经典的小游戏,在我们的普通手机里似乎都是必备的。它伴随着我们的童年,经历了好多好多时光。它带给我们了许多的乐趣。 学习了c++这门编程语言后,我就想着能不能把它做出来,在我查看了相关知识后,明白了其中的道理,就尝试着自己写出这个小游戏来,而且加入了许多可玩性的东西,包括等级选择,暂停/继续和分数制。整个程序采用了类和数组的相关知识实现。 //=====================================

Shawn Hou 18万+

C++贪吃蛇的简单实现版

近期看完C++Primer,决定小试身手,碰巧看到某博主用C++实现了贪吃蛇,所以我也决定试一试。 C++编程的核心思想之一就是OO思维(面向对象思维),需要一定的抽象能力,同样还需要更好的封装。

coderhuhy的专栏 1万+
上一篇: linux虚拟机下配置本地yum源
下一篇: C语言的restrict关键字
熬夜是一种修养
博客等级 码龄9年 12粉丝 34原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值