【接箱子3.0】纯c++实现的小游戏,思路全在注释里(萌新作品,dalao勿喷)
作者:互联网
【接箱子3.0】萌新一枚,dalao勿喷
本喵这个小萌新又来啦!(^_^)
这次又优化了一下代码
加上注释,四舍五入凑够了120行【滑稽】
很开心
———————————————————————————————
更新内容:
1.更大的地图
2.可以发射子弹(为什么会有子弹?)
3.可以满地图瞎跑了
4.修复穿墙BUG
———————————————————————————————
#include<iostream>
#include<ctime>//for srand(time(0));种子随时间生成
// for rand();随机数生成
#include<conio.h>//for getch();键盘直接输入
// for kbhit();检测键盘是否输入
#include<windows.h>//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;//定义子弹一维坐标
system("cls");//数据初始化完毕
//////////主界面//////////
cout<<"接箱子3.0小游戏\n\n请先切换至\n英文输入法(Ctrl+空格)\n请全屏游玩!!!\n\n请输入难度\n(1~10,越高越难)\n";
cin>>runan;//输入难度
system("cls");
cout<<"更新公告:\n1.更大的地图\n2.可以发射子弹(为什么会有子弹?)\n3.可以满地图瞎跑了\n4.修复穿墙BUG\n\n按任意键继续...";
getch();
//////////地图、坐标创建//////////
while(1)
{// 252=14*18
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
1,0,0,0,0,0,0,0,0,0,0,0,1,2};// y: 0~16
fkk=(fy*14)+fx; //箱子二维坐标转一维坐标
ree=(zbry*14)+zbrx;//小人(误)二维坐标转一维坐标
daa=(dy*14)+dx;//子弹二维坐标转一维坐标
//////////输入及坐标更新//////////
dy--;//子弹向上飞
nan=11-runan; //难度转换
int ddd;////////////////////
ddd++;// 难度转换成箱子速度//
if((ddd%nan)==0)////////////
fy++;//箱子下落
/*输入*/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<16))//下移检测
zbry++;
if(ch==' ')//发射子弹
{
dx=zbrx;
dy=zbry-1;
}
}
//////////击败及得分系统//////////
int sj=rand()%11+1;//生成1~ 11随机数用于箱子坐标
if(fy>17)//失分判定
{
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;//-------------- ↑
//////////地图(显示模块)//////////
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<<"@";break;//3 输出为 @
case 4: cout<<"#";break;//4 输出为 #
case 5: cout<<"_";break;//5 输出为 _
case 6: cout<<"|";break;//6 输出为 子弹 “ | ”
}
}
cout<<"你的分数:"<<fen<<"\n操作方法:\n使用WASD控制“@”\n接到箱子即可得分\n空格发射子弹\n(为什么有子弹?)\n\n功能预告:\n技能系统\n皮肤系统"<<endl;
}
return 0;
}
重点思路什么的真的都在注释里,
再看不懂就是你的问题
制作不易求赞
标签:map,fkk,dalao,system,c++,坐标,萌新,include,cls 来源: https://blog.csdn.net/A_K_L_Sing/article/details/104553988