这是一个类似于贪吃蛇嘚游戏,不过是一次性的(即吃到一个 苹果/梨/葡萄/···就结束游戏),也不存在死亡机制。(能力所限,大佬勿喷)
先不急 看(复制) 源码 让我讲讲其原理
首先是生成角色和目标的坐标(即生成四个随机数):
srand((int)time(0));
x=rand()%(m/2-1+1)+1;
y=rand()%(m/2-1+1)+1;
int num=rand()%(m/2-1+1)+1;
int num1=rand()%(m/2-1+1)+1;
这是随机数代码模板:
(num为生成的随机数,m,n为范围,即生成[m,n]区间的随机数num)随机数教学链接
srand((int)time(0));//切记m<=n;
int num=rand()%(n-m+1)+m;
然后输入地图大小m,再char一个m*m的字符数组a;char a[m][m];
再外包一个无限循环的程序for(int i=1;;i++){}
以无限输入指令至游戏结束,但需要判断是否已结束
if(x==num && y==num){//x,y为角色坐标(下标名);num,num1为目标坐标(下标名)
win(k);
getchar();
return 0;
}
这里的win函数是一个显示过关界面的函数,后文有详细介绍;至于getchar()为了单独运行程序时不闪退。也可以使用while,但由于作者懒,就由读者自行创新喽!
然后将此地图初始化为—> <—这个 (没错,就是空格(\n));
for(int i=0;i<m;i++){
for(int j=0;j<m;j++){
a[i][j]=\n;
}
}
然后将原先角色清空,控制移动:
a[x][y]=' ';
switch(getch()){
case 'w':case 'W':x--;break;
case 'a':case 'A':y--;break;
case 's':case 'S':x++;break;
case 'd':case 'D':y++;break;
case '0':getchar();return 0;
}
全码如下:
#include<bits/stdc++.h>
#include<conio.h>
#include<windows.h>
#include<stdio.h>
int x,y;
int m=1;
char l=' ';
using namespace std;
void jm(){
system("color 0C");
printf(" \n");
printf(" \n");
printf(" \n");
printf(" ===========================================\n");
printf(" --->炫富<--- \n");
printf(" \n");
printf(" WASD控制移动 \n");
printf(" 0键结束游戏 \n");
printf(" \n");
printf(" (故事背景:作死的约翰开玩笑地偷了一 \n");
printf(" 辆车,不料它是一辆属于警察局并带有 \n");
printf(" GPS的便衣车。警察局的定位系统显示 \n");
printf(" 它位于地图上的@处。现在,请你 \n");
printf(" 驾驶α号战机找到并击碎它!!! \n");
printf(" 有钱任性 \n");
printf(" \n");
printf(" (全屏) \n");
printf(" (闪屏属于正常) \n");
printf(" (卡屏时请静候) \n");
printf(" (回车开始) \n");
printf(" ----Carl胡 \n");
printf(" ===========================================\n");
getchar();
return ;
}
void win(int k){
system("cls");
system("mode con cols=50 lines=50");
cout<<"你赢啦^_^ \n";Sleep(500);cout<<"步数:"<<k<<endl;Sleep(500);
printf(" ******************** \n");Sleep(500);
printf(" * ****************** * \n");Sleep(500);
printf("* ********** *\n");Sleep(500);
printf(" * ********** * \n");Sleep(500);
printf(" * ****** * \n");Sleep(500);
printf(" * ****** * \n");Sleep(500);
printf(" ******** \n");Sleep(500);
printf(" ************ \n");Sleep(500);
printf(" **************** \n");Sleep(500);
printf(" ******************** \n");Sleep(500);
printf("(回车结束)");
getchar();
return ;
}
int setup(int &m,char &l){
system("cls");
system("mode con cols=21 lines=21");
cout<<"请进行初始化设置:\n地图大小:(2<m<51)";
cin>>m;
cout<<"\n角色图标:(长度:1)";
cin>>l;
return m,l;
}
int main(){
jm();setup(m,l);
system("mode con cols=51 lines=51");
system("color 3a");
srand((int)time(0));
x=rand()%(m/2-1+1)+1;
y=rand()%(m/2-1+1)+1;
int num=rand()%(m/2-1+1)+1;
int num1=rand()%(m/2-1+1)+1;
/*int num=rand()%(5-1+1)+1;
int num1=rand()%(5-1+1);*//*(调试用)*/
char a[m][m];
int k=0;
for(int i=1;;i++){
for(int i=0;i<m;i++){
for(int j=0;j<m;j++){
a[i][j]=' ';
}
}
system("cls");
a[x][y]=l;
a[num][num1]='@';
for(int i=0;i<m;i++){
for(int j=0;j<m;j++){
cout<<a[i][j];
}
cout<<endl;
}
cout<<"使用步数:"<<k;
a[x][y]=' ';
switch(getch()){
case 'w':case 'W':x--;break;
case 'a':case 'A':y--;break;
case 's':case 'S':x++;break;
case 'd':case 'D':y++;break;
case '0':getchar();return 0;
}
k++;
if(x==num && y==num1){
win(k);
getchar();
return 0;
}
}
}