今天我们来设置一个星号可以在一个井号方框里上下左右移动的简单游戏
1:绘制游戏地图(*为游戏角色),首先我们要定义一个char型的二维数组,如下:
char a[100][100]={ "######", "#* #", "# #", "######", };
接着,我们要把它打出来,那么有些人肯定说用两个for循环,再cout<<a[i][j]对不对?,but,我们有一个函数:puts,它的头文件是cstdio,它的意思就是:打完一行换一行,不理解?我先上代码,你们看几遍就懂了:
for(int i=0;i<=10;i++) puts(a[i]);
好了,我们先放上打出地图的代码:
#include <iostream> #include <cstdio> using namespace std; int main(){ char a[100][100]={ "######", "#* #", "# #", "######", }; for(int i=0;i<=10;i++) puts(a[i]);
好了,地图打出来了,那么就到了游戏的高潮环节——移动角色,这下有人说一定要用什么高级的函数了吧?NO!我们一点也不需要这些!
我们移动角色的原理:每输出一个移动键就重绘一下画面,是不是听起来简单多了?那么,就开始欢乐的敲代码时间吧!
首先,我们定义一个记录角色坐标的横坐标x,纵坐标y,你们是不是觉得这没有用?那你就慢慢看,就知道有多大作用了!
int x=1,y=1;
接着,我们就为了实现按键效果,所以我们要定义一个char变量,然后电脑会判断你按的是什么键,然后绘出什么样的图,在这里,我们w上,s下,a左,d右,但是,如何让小黑框上不显示且不按回车你打入的按键呢?这个时候我们就有需要一个简单函数——getch了,它的用法是这样的:
变量名=_getch();
这样,就可以很好的解决我们之前的问题了,但要记住,还要加一个conio.h的头文件,不然会报错哦o( ̄▽ ̄)ブ
虽然我们解决了一个问题,但又有一个问题来了:怎么实现移动?
很简单,我上一段左移代码,你就基本懂了!
if(ch=='a'){ if(a[x][y-1]!='#'){ a[x][y]=' '; y--; a[x][y]='*'; } }
这里我们先判断它是什么键,然后判断它要移动的那个地方,接着把它原有的位置清空,再往要移动的位置重新打上星号,看了这个,你是不是知道其它三个键怎么写了吗?
好,但是,我们还没有重绘画面呢!
首先我们再上一个简单东,:system,而我们只要调用这个,再打个括号,输入特定的代码,即可达到清除之前画面的效果,还要记住,他有一个头文件:windows.h,看代码:
system("cls");
好了,我们再用之前的方法绘出画面:
for(int i=0;i<=10;i++) puts(a[i]);
好了,先把目前的代码放出来:
#include <iostream> #include <cstdio> #include <conio.h> #include <windows.h> using namespace std; int main(){ char a[100][100]={ "######", "#* #", "# #", "######", }; for(int i=0;i<=10;i++) puts(a[i]); char ch; int x=1,y=1; ch=_getch(); if(ch=='a'){ if(a[x][y-1]!='#'){ a[x][y]=' '; y--; a[x][y]='*'; } } if(ch=='s'){ if(a[x+1][y]!='#'){ a[x][y]=' '; x++; a[x][y]='*'; } } if(ch=='d'){ if(a[x][y+1]!='#'){ a[x][y]=' '; y++; a[x][y]='*'; } } if(ch=='w'){ if(a[x-1][y]!='#'){ a[x][y]=' '; x--; a[x][y]='*'; } } system("cls"); for(int i=0;i<=10;i++) puts(a[i]); }
运行后,我们发现之能移动一次就停止了,所以我们加上死循环:while(1)
然后,你可以在代码前面再打一个system(“title 移动小游戏”);
会有惊喜哦!
最后,兴奋地打上retrun 0;一个超简单的小游戏就完成了!(p≧w≦q)
最后,放上全代码:
#include <iostream> #include <cstdio> #include <conio.h> #include <windows.h> using namespace std; int main(){ system("title 移动小游戏"); char a[100][100]={ "######", "#* #", "# #", "######", }; for(int i=0;i<=10;i++) puts(a[i]); char ch; int x=1,y=1; while(1){ ch=_getch(); if(ch=='a'){ if(a[x][y-1]!='#'){ a[x][y]=' '; y--; a[x][y]='*'; } } if(ch=='s'){ if(a[x+1][y]!='#'){ a[x][y]=' '; x++; a[x][y]='*'; } } if(ch=='d'){ if(a[x][y+1]!='#'){ a[x][y]=' '; y++; a[x][y]='*'; } } if(ch=='w'){ if(a[x-1][y]!='#'){ a[x][y]=' '; x--; a[x][y]='*'; } } system("cls"); for(int i=0;i<=10;i++) puts(a[i]); } return 0; }
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!