构建思路
一 迷宫框架
事先构建好迷宫形状(已定)
使用打印函数将其构建打印
效果如下图
但如果只是这样的话很难对已经打印的函数进行改变
所以我们可以使用二维数组
结合输出
效果跟上面一样
此外还应标记小球的初始位置和终点位置
x,y为小球初始位置的行列下标
p,q,为终点位置的行列下标(当到达时游戏停止)
随机生成(我还不会)
二 如何移动
既然是游戏,就很容易想到用键盘上的键位来控制o的移动
这里要借用一个输入函数getch()
该函数输入字符后不在屏幕上显示你的输入,即没有外显
如果‘d’控制向右移动,则改为a[x][y+1]!='#' y++
其他情况不一一描述
初步实现
由上述
对于多次输入改变位置可以使用while
while(x!=p || y!=q)
q,p为出口的行列下标,注意都是下标
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
int main()
{
char arr[10][10]={"######",
"#o # ",
"# ## #",
"# # #",
"# # #",
"######"
};//定义迷宫
int i,x,y,p,q;
x=1,y=1,p=1,q=5;//注意每个量代表的含义
for(int i=0;i<=5;i++)
{
puts(arr[i]);//打印迷宫
}
char ch;
while(x!=p || y!=q)//循环输入,注意终止条件
{
ch=getch();
if(ch=='s')
{
if(arr[x+1][y]!='#')
{
arr[x][y]=' ';
x++;
arr[x][y]='o';
}
}
if(ch=='w')
{
if(arr[x-1][y]!='#')
{
arr[x][y]=' ';
x--;
arr[x][y]='o';
}
}
if(ch=='a')
{
if(arr[x][y-1]!='#')
{
arr[x][y]=' ';
y--;
arr[x][y]='o';
}
}
if(ch=='d')
{
if(arr[x][y+1]!='#')
{
arr[x][y]=' ';
y++;
arr[x][y]='o';
}
}
system("cls");//每次移动完记得清屏以便于下次的打印
for(i=0;i<=5;i++)
puts(arr[i]);//打印移动后的状态
}
system("cls");//游戏结束时清一下
sleep(5000);
return 0;
}
这是优化后的,因为每次移动后都要重新打印一下
使用system("cls"); 这玩意的作用就是清屏,(实际分两种情况作用不同)
sleep(); 该函数可以理解为暂停,单位是毫秒,
以上两个函数记得加上头文件