同理上一篇写的 http://t.csdnimg.cn/TPFwu
就是画一个地图,用二维数组,来记录X和Y轴,就可以定义到这个地图的任意位置.
目录
一.步骤解析
二.代码
三.扩展
一.步骤解析
开始函数,变量值重置为默认状态,蛇的头,尾生成位置都可以,随便更改,我这里先默认写死了,
循环等待输入,刷新地图.
这里的while和unity,ue等编辑器类似,用这些软件做的游戏,只是把输入之类的封装好了,但是本质上也是在一个while里面循环等待.
w a s d控制移动,这里为了赶时间,直接写了个按键就可以吃果子的功能,按F键,蛇的长度就会加 1.
输入一个操作字符,然后点击回车键,就行,
二.代码
#include<iostream>
using namespace std;
const int HIGH = 10; //长
const int WIGHT = 20; //宽
void start(); //开始
void map(); //地图
void GetInput(); //接收输入
void Move(int addx, int addy);//移动
int Snake[HIGH][WIGHT]; //地图数据
int SnakeA[10][2];
int SnakeLength;
void checkType(int index);
bool isPlaying;
int Toux, Touy, Weix, Weiy;
int main() {
start();
}
void start() {
isPlaying = true;
//默认小蛇
SnakeA[0][0] =5;
SnakeA[0][1] = 7;
SnakeA[1][0] = 5;
SnakeA[1][1] = 6;
SnakeA[2][0] = 5;
SnakeA[2][1] = 5;
SnakeLength = 3;
//打印地图
map();
while (isPlaying)
{
GetInput();
map();
}
}
void GetInput() {
char a;
cout << "输入下一步" << endl;
cin >> a;
switch (a)
{
case 'w':
if (Snake[Toux-1][Touy]==0)
{
Move(-1, 0);
}
break;
case 's':
if (Snake[Toux+1][Touy] == 0)
{
Move(1,0);
}
break;
case 'a':
if (Snake[Toux][Touy-1] == 0)
{
Move(0,-1);
}
break;
case 'd':
if (Snake[Toux][Touy+1] == 0)
{
Move(0,1);
}
break;
case 'f':
if (Snake[SnakeA[SnakeLength - 1][0]][SnakeA[SnakeLength-1][1]+1] == 0)
{
SnakeA[SnakeLength][0] = SnakeA[SnakeLength - 1][0];
SnakeA[SnakeLength][1] = SnakeA[SnakeLength - 1][1] + 1;
}
else
{
SnakeA[SnakeLength][0] = SnakeA[SnakeLength - 1][0];
SnakeA[SnakeLength][1] = SnakeA[SnakeLength - 1][1] - 1;
}
SnakeLength += 1;
map();
break;
default:
break;
}
}
void Move(int addx, int addy) {
if (Snake[SnakeA[0][0] + addx][SnakeA[0][1] + addy] == 0)
{
for (int i = SnakeLength-1; i >= 0; i--)
{
if (i == 0)
{
SnakeA[i][0] += addx;
SnakeA[i][1] += addy;
}
else {
SnakeA[i][0] = SnakeA[i-1][0];
SnakeA[i][1] = SnakeA[i-1][1];
}
}
}
}
void CheckSnake(){
for (int i = 0; i < HIGH; i++)
{
for (int j = 0; j < WIGHT; j++)
{
Snake[i][j] = 0;
for (int z = 0; z < SnakeLength; z++)
{
if (i == SnakeA[z][0] && j == SnakeA[z][1])
{
if (z==0)
{
Snake[i][j] = 1;
}
else {
Snake[i][j] = 2;
}
}
}
}
}
}
void map()
{
system("cls");
cout << "欢迎来到贪吃蛇" << endl;
cout << "w s a d 上下移动" << endl;
cout << endl;
CheckSnake();
for (int i = 0; i < HIGH; i++)
{
for (int j = 0; j < WIGHT; j++)
{
if (Snake[i][j] == 1)
{
cout << "$";
}
else if (Snake[i][j] == 2) {
cout << "*";
}
else {
cout << "-";
}
}
cout << endl;
}
}
void checkType(int index) {
}
三.扩展
实现自动生成果子思路.
写一个生成果子的float变量,当作cd, 然后在循环里面减去一个数,比如自减,到了一个规定的数值,比如 <0,生成一个果子.随机从地图里面去一个坐标(判断当前位置没有蛇头,蛇身),然后判断蛇头位置和果子位置重合,即蛇吃到果子,身体+1.