【打灰机1.0】纯c++实现的小游戏,思路全在注释里(萌新作品,dalao勿喷)

我们不叫接箱子了,我们叫打灰机~
———————————————————————————————
最近脑子突然 一抽 转过来弯了,把360一卸,换成了火绒。然后,电脑速度嗖
嗖嗖的,小游戏弄的看不清…还好,加上了“等待”指令,闪烁又恢复正
常了。
【注】:155行“等待”指令可适当调整
———————————————————————————————
更新内容:
1.技能系统
2.退出、暂停系统
3.皮肤系统
4.调节初始界面顺序
———————————————————————————————
不多说,直接上源码:

#include
#include//for srand(time(0));种子随时间生成 
//               for rand();随机数生成 
#include//for getch();键盘直接输入
//                 for kbhit();检测键盘是否输入 
#include//for Sleep(a);等待a 个千分之一秒 
//                   for system("cls");清屏 
using namespace std;
int main()
{
//初始化部分//
    cout<<"加载中...";
	srand(time(0));//种子随时间生成
    int zbrx=5,zbry=15;//定义人的坐标 
    int fen=0;//定义分数
    int fx=4,fy=0;//定义敌机XY坐标 
    int nan;//定义nan度 
    int runan;//定义输ru用难度 
    int dx=0,dy=0;//定义子弹坐标(为毛子会有子弹?)
	int fkk;//定义敌机一维坐标
	int ree;//定义人一维坐标
	int daa;//定义子弹一维坐标X
	int jnxs;//定义技能显示坐标 
	system("cls");//数据初始化完毕 
//主界面//	
    cout<<"打灰机1.0小游戏\n\n请先切换至\n英文输入法小写(Ctrl+空格)\n\n按任意键继续...";
    getch();//按任意键继续 + 清屏 
	system("cls");
	cout<<"更新公告:\n1.技能系统\n2.退出、暂停系统\n3.皮肤、大灰机系统\n4.调节初始界面顺序\n\n按任意键继续...";
    getch();//按任意键继续 + 清屏 
	system("cls");
	cout<<"请全屏游玩!!!\n\n请输入难度\n(1~10,越高越难)\n  ";
	cin>>runan;//输入难度
	cout<<"请输入人物皮肤\n(可输入一个英文大小写字母或英文符号):\n  ";
	char rw;
	cin>>rw;
	cout<<"按任意键继续...";  
	getch();
//地图、坐标创建//	  
    while(1)
    {// 252=14*18
now:    int map[252]= {1,0,0,0,0,0,0,0,0,0,0,0,1,2,//一维数组地图创建+初始化,(可以省去部分代码)
                       1,0,0,0,0,0,0,0,0,0,0,0,1,2,//0 为 空;1 为 墙;2 为 \n(换行); 
	            	   1,0,0,0,0,0,0,0,0,0,0,0,1,2,//...... 
	             	   1,0,0,0,0,0,0,0,0,0,0,0,1,2,
	             	   1,0,0,0,0,0,0,0,0,0,0,0,1,2,
	             	   1,0,0,0,0,0,0,0,0,0,0,0,1,2,
		               1,0,0,0,0,0,0,0,0,0,0,0,1,2,
      	        	   1,0,0,0,0,0,0,0,0,0,0,0,1,2,
              		   1,0,0,0,0,0,0,0,0,0,0,0,1,2,
	              	   1,0,0,0,0,0,0,0,0,0,0,0,1,2,
	        	       1,0,0,0,0,0,0,0,0,0,0,0,1,2,
	        	       1,0,0,0,0,0,0,0,0,0,0,0,1,2,
		               1,0,0,0,0,0,0,0,0,0,0,0,1,2,
	              	   1,0,0,0,0,0,0,0,0,0,0,0,1,2,
	             	   1,0,0,0,0,0,0,0,0,0,0,0,1,2,
	             	   1,0,0,0,0,0,0,0,0,0,0,0,1,2,//这些是地图的基础设施
	             	   1,5,5,5,5,5,5,5,5,5,5,5,1,2,//   x: 1~11
                	   7,2,9,9,9,9,9,9,9,9,9,9,10,0};//  y: 0~16
        fkk=(fy*14)+fx; //敌机二维坐标转一维坐标
        ree=(zbry*14)+zbrx;//小人(误)二维坐标转一维坐标
        daa=(dy*14)+dx;//子弹二维坐标转一维坐标		      	
       	int sj=rand()%11+1;//生成1~ 11随机数用于箱子坐标 
//输入及坐标更新// 
        dy--;//子弹向上飞
    	nan=11-runan; //难度转换
    	int ddd;
    	ddd++;// 难度转换成箱子速度// 
        if((ddd%nan)==0)
            fy++;//箱子下落 
/*技能*/if(fen>=5)//技能花费分数 
		    map[250]=8;//显示技能就绪 
		    map[251]=2;
/*输入*/if(kbhit()) //重点:kbhit()函数,【非阻塞函数】:计算机执行代码至此不会暂停 
		{
			char ch=getch();//getch()函数: 【阻塞函数】计算机执行代码至此会暂停 
			if((ch=='a')&&(zbrx>1))// 左移检测 【重点】 边界判定:小人不处于边界才能此方向移动 
				zbrx--;
       	    if((ch=='d')&&(zbrx<11))//右移检测       	    
       	        zbrx++;
		    if((ch=='w')&&(zbry>0))//上移检测
			    zbry--;
			if((ch=='s')&&(zbry<15))//下移检测
			    zbry++;
			if(ch==' ')//发射子弹 
			{
				dx=zbrx;
				dy=zbry-1;
			}
		    if((ch=='f')&&(fen>=5))//技能 
			{   
			    fen-=5;//重置技能 技能只使用一次
	            fen+=1;//得一分 
		        fy=0 ;//重置箱子坐标
		        fx=sj;
	    	}
	    	if(ch=='+')//调试用 
	    	    fen++;
	    	if(ch=='p')//暂停检测 
			{
				cout<<"暂停中...\n按任意键继续...";
				getch();
			} 
			if(ch=='q')//退出检测 
			    goto ed;//跳转至 ed    	   
		}
//击败及得分系统//
       	if(fy>16)//失分判定 
       	{
       		fen--;//失一分 
			fy=0;//重置敌机坐标 
       		fx=sj;//
		}
		if((fkk==ree)||(fkk==daa))//得分判定
		{
			fen+=1;//得一分 
			fy=0 ;//重置敌机坐标 
       		fx=sj;//
       		dx=0 ;//重置子弹坐标 
			dy=0 ;//
       	}
//将数据写入地图(显示模块)//		
        map[fkk]=4;//-------------- ↓
		map[daa]=6;//  坐标转图案   ■
		map[ree]=3;//-------------- ↑
		map[fkk-15]=4;
		map[fkk-13]=4;  
		map[ree+1]=11;
		map[ree-1]=11;
		map[ree-14]=11;
		map[ree+15]=11;
		map[ree+13]=11; 
//地图(显示模块)//
    	system("cls");//日常清屏 
		cout<<"打灰机\n";
    	for(int cc=0;cc<=252;cc++)//利用for循环打印图案
	    {                 ┗━━━━━━━━━━━━━━━┓
	    	int pan=map[cc];//从map数组中提取第‘cc’个数字 【cc自增】 
	    	switch(pan)//pan定打印图案类型
	    	{
	    		case 0: cout<<" "; break;//0 输出为 空 
	    		case 1: cout<<"|"; break;// 1 输出为 | 
	    		case 2: cout<<"\n";break;//2 输出为“\n”即换行 
	    		case 3: cout<<rw;  break;//3 输出为 人物 
	    		case 4: cout<<"#"; break;//4 输出为 # 
	    		case 5: cout<<"_"; break;//5 输出为 _ 
	    		case 6: cout<<"|"; break;//6 输出为 子弹  "|"
	    		case 7: cout<<"技能:降维打击";   break;
				case 8: cout<<"就绪!!(消耗5分)\n";break; 
				case 10:cout<<"未就绪(需要5分)\n";break;
				case 11:cout<<"*"; break; 
	    	}
    	}
    	cout<<"你的分数:"<<fen<<"\n操作方法:\n使用WASD控制人物\n打到箱子即可得分\n空格发射子弹\nF键技能 Q键退出 P键暂停\n\n更新预告:\n机型选择+多种技能\n更大地图\n"<<endl;
        Sleep(30);//等待30毫秒		  
    }
//退出系统//
ed: bool opop=1;//利用布尔值判定是否退出 
			system("cls");
	        cout<<"确认退出?(AD键选择,Y键确认)\n >是<      否  \n";
	while(1)
		{
			char edpd=getch();
			if(edpd=='a')//检测 a 
			{
		    	system("cls");
			    cout<<"确认退出?(AD键选择,Y键确认)\n >是<      否  \n";
			    opop=1;
	    	}
	    	if(edpd=='d')//检测 d
	    	{
		    	system("cls");
	    		cout<<"确认退出?(AD键选择,Y键确认)\n  是      >否< ";
	    		opop=0;
			}
			if(edpd=='y')//检测 y
			{
				if(opop)
				    goto end;//跳转至 end
				else
				    goto now;//跳转至 now
			}
		 }
	end:return 0; 
}

地图有点小…下次一定!
感觉还不赖的话,留个评论或者zan再走呗~

你可能感兴趣的:(c++,小游戏,小程序,c++,游戏开发,小程序)