该程序设置了物体移动区域,并通过按键wsad对物体的移动进行控制,但未实现物体朝一个方向的自动移动(后续会进行完善)。本代码的最终目的是写出游戏贪吃蛇,代码未进行简化,后续有时间会进行改良简化。
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<conio.h>
#define M 10
#define N 20
int main()
{
int i,j;//背景数组下标
int a,b;//前置数组随机下标
int count=0;//移动计数
char back[M][N],front[3]= {"[]"};
int input;//接收指令
int k=1;//控制输入
int c,d;//目标随机下标
//设置背景
for(i=0; i<M; i++)
{
for(j=0; j<N; j++)
{
//边界设为 *
if(i==0||j==0||i==M-1||j==N-1)
{
back[i][j]='*';
}
//可移动区域设为空格
else
{
back[i][j]=' ';
}
}
}
//随机初始化物体在边界内的位置
srand(time(NULL));
a=rand()%(M-2)+1;//物体左半部分所在行
b=rand()%(N-3)+1;//物体左半部分所在列
back[a][b]=front[0],back[a][b+1]=front[1];
//打印初始状态
for(i=0; i<M; i++)
{
for(j=0; j<N; j++)
{
printf("%c",back[i][j]);
}
printf("\n");
}
//对输入指令做出移动,并打印已移动次数
do{
do{
srand(time(NULL));
c=rand()%(M-2)+1;//目标左半部分所在行
d=rand()%(N-3)+1;//目标左半部分所在列
}while(d==b||d==b+1);
back[c][d]='~';
while(a!=c||(b!=d&&b+1!=d))
{
printf("得分:%d",count);
printf("\n");
back[a][b]=' ',back[a][b+1]=' ';
//输入指令进行移动
input=getch();
switch(input)
{
case 'w':
case 'W':
a-=1;
if(a>=1)
back[a][b]=front[0],back[a][b+1]=front[1];
else k=0;
break;
case 'a':
case 'A':
b-=1;
if(b>=1)
back[a][b]=front[0],back[a][b+1]=front[1];
else k=0;
break;
case 'd':
case 'D':
b+=1;
if(b<N-2)
back[a][b]=front[0],back[a][b+1]=front[1];
else k=0;
break;
case 's':
case 'S':
a+=1;
if(a<M-1)
back[a][b]=front[0],back[a][b+1]=front[1];
else k=0;
break;
default:
{
printf("错误输入!");
exit(0);
}
}
if(k==0) break;
//是否触及边界
if(k)
{
system("cls");
for(i=0; i<M; i++)
{
for(j=0; j<N; j++)
{
printf("%c",back[i][j]);
}
printf("\n");
}
if(a==c)
{
if(b==d||b+1==d)
{
count++;
}
}
}
}
}while(k);
printf("触及边界!");
return 0;
}