C++简单的贪吃蛇游戏

本文介绍了一款使用C++编写的简单贪吃蛇游戏。作者通过创建围墙类、蛇类和运动类来实现游戏逻辑,记录蛇、食物和围墙的位置,并实现了蛇的运动、判断、生成食物等功能。游戏在用户输入w、a、s、d之一时开始,其余键暂停游戏。附带源码链接供下载参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初次写小游戏,本人水平有限,希望各位大神多多指正,话不多说上源码

1.源码部分

在这里插入代码片
#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>  //使用当前时间做种子;
using namespace std;
enum dir{shang,xia,zuo,you};//枚举类型enum dir;
class weiqiang//围墙类 
{
	public:
		void chushihua();//初始化墙, 
		void dayin();//打印函数 (打印蛇,墙,食物等) 
	public://公用数据 
		char a[20][40];	
}A;//定义对象 
void weiqiang::chushihua()//初始化墙, 
{
	int i,j;
	for(i=0;i<20;i++)
	{
		for(j=0;j<40;j++)
		{
			if(i==0||i==19||j==0||j==39)
			{
				a[i][j]='.';	
			}
			else
			{
				a[i][j]=' ';
			}
		}
	}	
}
void weiqiang::dayin()//打印函数 (打印蛇,墙,食物等) 
{
	int i,j;
	for(i=0;i<20;i++)
	{
		for(j=0;j<40;j++)
		{
			cout<<a[i][j];
		}
		cout<<endl;//打印一行之后要换行 
	}
}
class she//蛇类 
{
	public:
		void zengjia_head(int x0,int y0);//处理蛇头函数 
		int f_x();
		int f_y();
		void shanchu_tail();//处理蛇尾函数 
	private:
		int x,y;//
		she *prior,*next;//*prior指向前驱结点,*next指向后一个结点;
}*head=NULL,*tail =NULL;/*head头tail尾*/
void she::zengjia_head(int x0,int y0)//处理蛇头函数 
{
	she *q=new she;//增加一个新的对象并定义一个q指针使指针指向新增加的对象 
	q->x=x0; q->y=y0; //初始化这个对象中的数据 
	q->next =head; // q的后驱指向头指针 
	q->prior =NULL;//q的前驱指向空 
	if(head)//判断头指针是否为空 
	{
		head->prior =q;
	} 
	//head->prior =q;
	head=q;//使head=q 
	if(!tail)//判断尾指针是否为空 
	{
		tail=head;
	}
	//tail =head;
	A.a[x0][y0]='*';  //A对象可以在定义weijiang类时定义(这样在该函数); 且weiqiang类在she类前定义;(这样在该处即可用A对象)
} 

2.运行截图

在这里插入图片描述
在这里插入图片描述

3.总结

代码分析
我的思路是用数组把游戏每时每刻的状态记录下来(记录蛇身,食物及围墙的位置)。
先写3个类3个类的功能如下
1class weiqiang//围墙类 ,这个类中的数据包括一个二维数组(这个数组要记录蛇身,食物,及围墙的位置),且这个类中的数据都为公用的(这样做的目的是为了让后边其它类中的函数可以直接访问),该类中包含两个函数,第一个void chushihua();//初始化墙, 第二个函数void dayin();//打印函数 (打印蛇,墙,食物等)
2.class she//蛇类 ,该类作用主要是对蛇头和蛇尾进行处理,详细情况见上文源代码及代码中的注释(因为叙述太麻烦了,所以这里就不详细叙述)
3.class yundong//蛇运动类,类中的函数有void panduan();//判断函数 判断蛇吃食,撞墙,咬身void gaibian_m(char d); //改变蛇的运动方向,m是枚举变量;void shengshi();//产生食物函数 int shengshi1(int x1,int y1);// 判断食物是否在蛇身上 public://公用数据 dir m; //枚举变量m: 控制方向;int f_x;//食物的横坐标
int f_y;int N;//记录分数
主函数
先设法把游戏的初始状态打印出来,
接着进入死循环,循环体如下

while (1)
{
zifu=getch(); //getch()返回键盘上读取的字符;包含头文件
if(zifu=='w'||zifu=='s'||zifu=='a'||zifu=='d')
{
B.gaibian_m(zifu);//调用改变运动状态函数 
while(!kbhit()) //判断有没有按键落下;
{ 
system("cls");  //清屏函数; 
B.panduan();//调用判断函数 
A.dayin();//调用打印函数
Sleep(200);
}
}
} 

进入之后首先要输入一个字符,若输入的字符不是w,a,s,d,其中的一个则游戏不会开始,(你可以接着多次输入字符,直到输入的字符是w,a,s,d,其中的一个时游戏开始)若输入的是w,a,s,d,其中的一个则直接进入循环,当游戏开始之后按下w,a,s,d,之外的按键时游戏会暂停,直到输入w,a,s,d,其中一个时游戏继续。

4.源文件附件

连接:https://download.youkuaiyun.com/download/Test_lxy/12049565

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值