震惊!一初中生爆肝三个月写出一个游戏!是兄弟就来砍我

这是一个类似于贪吃蛇嘚游戏,不过是一次性的(即吃到一个 苹果/梨/葡萄/···就结束游戏),也不存在死亡机制。(能力所限,大佬勿喷)

先不急 看(复制) 源码 让我讲讲其原理

首先是生成角色和目标的坐标(即生成四个随机数):

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; 
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值