初次写小游戏,本人水平有限,希望各位大神多多指正,话不多说上源码
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