这是我的第一篇可移动类游戏
游戏名:
小蝌蚪找妈妈
玩法:
(w,s,a,d)控制小蝌蚪移动至妈妈的位置
创作分析:
这种游戏我打算用递归来做(我分不清递归和递推)。
由于我整天都泡在洛谷里,所以连清屏都不会······
我只能换行清屏······
我们可以吧1看做蝌蚪,9看做妈妈,其余的空白部分用0代替。
递归函数定义:
void aa(int ii,int jj,int xx,int yy)//ii,jj表示蝌蚪的坐标;xx,yy表示妈妈的坐标
注意随机生成ii,jj,xx,kk;
递归入口:
aa(ii,jj,xx,yy)
递归出口:
if(ii==xx&&jj==yy)
{
cout<<"you win!!!"<<endl;
cout<<"是否继续?1:是 0:否"<<endl;
return ;
}
完整代码:
#include<bits/stdc++.h>
using namespace std;
int a[200][200];
int n;
int ii,jj,xx,yy;
void aa(int ii,int jj,int xx,int yy)
{
memset(a,0,sizeof(a));//将所有的地方都设为0,重置
a[ii][jj]=1;//特殊位置重新赋值
a[xx][yy]=9;
if(ii==xx&&jj==yy)//递归出口
{
cout<<"you win!!!"<<endl;
cout<<"是否继续?1:是 0:否"<<endl;
return ;
}
else
{
for(int i=0;i<20;i++)//我设的是20*20的地图(下标从0开始)
{
for(int j=0;j<20;j++)
{
cout<<a[i][j];
}
cout<<endl;//换行
}
cout<<endl;
char s;
cin>>s;//输入行走方向
if(s=='w')//判断
{
a[ii][jj]=0;//因为蝌蚪的位置改变了,重置当前这个位置
ii--;
}
if(s=='s')
{
a[ii][jj]=0;
ii++;
}
if(s=='a')
{
a[ii][jj]=0;
jj--;
}
if(s=='d')
{
a[ii][jj]=0;
jj++;
}
cout<<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";//清屏hh
aa(ii,jj,xx,yy);//递归下一个位置
}
}
int main()
{
cout<<"wsad移动"<<endl<<endl; //操纵提示
ii=rand()%20;//随机生成0...20的整数
jj=rand()%20;
xx=rand()%20;
yy=rand()%20;
aa(ii,jj,xx,yy);//开始递归
while(cin>>n)
{
if(n==1)//是否继续游戏
{
cout<<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";//清屏hh
ii=rand()%20;//随机生成0...20的整数
jj=rand()%20;
xx=rand()%20;
yy=rand()%20;
aa(ii,jj,xx,yy);//开始递归
}
else
{
return 0;//结束游戏
}
}
return 0;
}
bug说明:
这个代码中ii,xx;jj,yy可能一开始就生成在一个地方,导致游戏还没开始就赢了······
结束啦~~~