修练者
代码:
#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <cstdio>
using namespace std;
string map[25][25];//20*20的地图
int cho,sea,dif,g_cnt,go_pl=10; //金币初始为10(买一个炸药)
struct yy{
int x,y,h;//map[x][y]
}goa[400],pl;//金币;玩家
int main(){
// freopen("sead.txt","r",stdin);
// cin>>sea;
// fclose(stdin);
// freopen("sead.txt","w",stdout);
// int sea1;
// for(int i=1;i<=sea;i++)sea1=rand();
// cout<<sea1;
// fclose(stdout);
cout<<"请输入一个随机的地图种子\n";
cin>>sea;//地图种子
cout<<"请输入难度(1-3)\n";
cin>>dif;
int sc=5-dif,sc1=dif*400,tl=(5-dif)*50;
pl.x=1;
pl.y=1;
cout<<"生成地图中,请稍后...\n";
while(sea--){//生成地图
for(int i=1;i<=20;i++){
for(int j=1;j<=20;j++){
if(rand()%sc==1)map[i][j]="##";
else map[i][j]=" ";
}
}
}
map[1][1]=" ";
map[20][20]=" ";
cout<<"按动w/s/a/d开始游戏\n";
while(1){
cho=getch();
map[pl.x][pl.y]=" ";
for(int i=1;i<=20;i++){
for(int j=1;j<=20;j++){
if(rand()%sc1==1&&map[i][j]==" "){//生成新的金币
g_cnt++;
goa[g_cnt].x=i;
goa[g_cnt].y=j;
}
if(map[i][j]=="go")map[i][j]=" "; //取消老的金币
}
}
if(cho=='w'){
if(pl.x>1&&map[pl.x-1][pl.y]!="##")pl.x--;system("cls");
}else if(cho=='s'){
if(pl.x<20&&map[pl.x+1][pl.y]!="##")pl.x++;system("cls");
}else if(cho=='a'){
if(pl.y>1&&map[pl.x][pl.y-1]!="##")pl.y--;system("cls");
}else if(cho=='d'){
if(pl.y<20&&map[pl.x][pl.y+1]!="##")pl.y++;system("cls");
}
if(cho=='e'){//商店
system("cls");
cout<<"1.面包:2金币 (增加10体力)\n2.肉:4金币 (增加25体力)\n3.炸药:10金币 (破环以你为中心5*5的障碍)\n4.退出";
char cho1;
cho1=getch();
if(cho1=='1'&&go_pl>=2){
go_pl-=2;
tl+=10;
}else if(cho1=='2'&&go_pl>=4){
go_pl-=4;
tl+=25;
}else if(cho1=='3'&&go_pl>=10){
go_pl-=10;
for(int n=pl.x-2;n<=pl.x+2;n++){
for(int m=pl.y-2;m<=pl.y+2;m++){
map[n][m]=" ";
}
}
}
system("cls");
}
for(int i=1;i<=g_cnt;i++){
if(pl.x==goa[i].x&&pl.y==goa[i].y&&goa[i].h==0){
go_pl++;//捡金币
goa[i].h=1;//这个金币已经捡过了
}
if(goa[i].h==0)map[goa[i].x][goa[i].y]="go";
}
map[pl.x][pl.y]="Yo";
tl--;
if(tl==0){
system("cls");
cout<<"you die...";
return 0;
}
cout<<"金币:"<<go_pl<<" 体力:"<<tl<<endl;
for(int i=1;i<=20;i++){
for(int j=1;j<=20;j++){
cout<<map[i][j];
}
cout<<endl;
}
if(pl.x==20&&pl.y==20){
system("cls");
cout<<"you win!";
return 0;
}
}
return 0;
}
复制到DEV C++
马博闻在2024-11-19 21:32:19追加了内容
走迷宫0.1版测试
#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <cstdio>
#include <windows.h>
using namespace std;
string map[25][25]; //20*20的地图
int cho,g_cnt,go_pl=10; //金币初始为10(买一个炸药)
struct yy{
int x,y,h; //map[x][y]
}goa[400],pl; //金币;玩家
int win=0,lose=0;
void game(){ //走迷宫函数
int sea,dif;
cout<<"请输入一个随机的地图种子(100~999)\n";
char n1=getch();//用getch函数模拟输入(防止一群丧彪乱按导致游戏崩溃)
cout<<n1;
char n2=getch();
cout<<n2;
char n3=getch();
cout<<n3<<endl;
sea=(n1-'0')*100+(n2-'0')*10+(n3-'0');
cout<<"请输入难度(1-3)\n";
char c1=getch()-'0';
dif=c1;
cout<<dif<<endl;
int sc=5-dif,sc1=dif*400,tl=(5-dif)*50;
pl.x=1;
pl.y=1;
cout<<"生成地图中,请稍后...\n";
while(sea--){ //生成地图
for(int i=1;i<=20;i++){
for(int j=1;j<=20;j++){
if(rand()%sc==1)map[i][j]="##";
else map[i][j]=" ";
}
}
}
map[1][1]=" ";
map[20][20]=" M";
cout<<"按动w/s/a/d开始游戏\n";
while(1){
if(tl==0){
system("cls");
lose++;
cout<<"you die...\n\n";
cout<<"按任意键退出";
// Sleep(800);
char ed=getch();
return;
}
if(pl.x==20&&pl.y==20){
system("cls");
cout<<"you win!\n\n";
cout<<"按任意键退出";
win++;
// Sleep(800);
char ed=getch();
return;
}
cho=getch();
map[pl.x][pl.y]=" ";
for(int i=1;i<=20;i++){
for(int j=1;j<=20;j++){
if(rand()%sc1==1&&map[i][j]==" "){//生成新的金币
g_cnt++;
goa[g_cnt].x=i;
goa[g_cnt].y=j;
}
if(map[i][j]=="go")map[i][j]=" "; //取消老的金币
}
}
if(cho=='w'){
if(pl.x>1&&map[pl.x-1][pl.y]!="##")pl.x--;system("cls");
}else if(cho=='s'){
if(pl.x<20&&map[pl.x+1][pl.y]!="##")pl.x++;system("cls");
}else if(cho=='a'){
if(pl.y>1&&map[pl.x][pl.y-1]!="##")pl.y--;system("cls");
}else if(cho=='d'){
if(pl.y<20&&map[pl.x][pl.y+1]!="##")pl.y++;system("cls");
}
if(cho=='e'){//商店
system("cls");
cout<<"1.面包:2金币 (增加10体力)\n2.肉:4金币 (增加25体力)\n3.炸药:10金币 (破环以你为中心5*5的障碍)\n4.退出";
char cho1;
cho1=getch();
if(cho1=='1'&&go_pl>=2){
go_pl-=2;
tl+=10;
}else if(cho1=='2'&&go_pl>=4){
go_pl-=4;
tl+=25;
}else if(cho1=='3'&&go_pl>=10){
go_pl-=10;
for(int n=pl.x-2;n<=pl.x+2;n++){
for(int m=pl.y-2;m<=pl.y+2;m++){
if(n>=1&&n<=20&&m>=1&&m<=20&&map[n][m]=="##")map[n][m]=" ";
}
}
}
system("cls");
}
for(int i=1;i<=g_cnt;i++){
if(pl.x==goa[i].x&&pl.y==goa[i].y&&goa[i].h==0){
go_pl++; //捡金币
goa[i].h=1; //这个金币已经捡过了
}
if(goa[i].h==0)map[goa[i].x][goa[i].y]="go";
}
map[pl.x][pl.y]="Yo";
tl--;
cout<<"金币:"<<go_pl<<" 体力:"<<tl<<endl;
for(int i=1;i<=20;i++){
for(int j=1;j<=20;j++){
cout<<map[i][j];
}
cout<<endl;
}
}
}
string name="";
bool in(){
freopen("走迷宫.txt","r",stdin);
while(cin>>name){
cin>>win>>lose;
}
fclose(stdin);
if(name==""&&win==0&&lose==0)return 1;
return 0;
}
void gooa(){//玩家信息
system("cls");
cout<<"玩家"<<name<<endl;
cout<<"赢得"<<win<<"局游戏"<<endl;
cout<<"输了"<<lose<<"局游戏"<<endl;
cout<<endl<<"按任意键退出";
char end=getch();
return ;
}
void Ret(){//结束,存档
freopen("走迷宫.txt","w",stdout);
cout<<name<<" "<<win<<" "<<lose;
return;
}
void wel(int a){//初始画面
string s1="",s2="",s3="",s4="";
if(a==1)s1=" <<";
if(a==2)s2=" <<";
if(a==3)s3=" <<";
if(a==4)s4=" <<";
cout<<"+============+"<<endl;
cout<<"| 开始游戏 |"<<s1<<endl;
cout<<"+============+"<<endl;
cout<<endl;
cout<<"+============+"<<endl;
cout<<"| 玩家信息 |"<<s2<<endl;
cout<<"+============+"<<endl;
cout<<endl;
cout<<"+============+"<<endl;
cout<<"| 地图设置 |"<<s3<<endl;
cout<<"+============+"<<endl;
cout<<endl;
cout<<"+============+"<<endl;
cout<<"| 退出游戏 |"<<s4<<endl;
cout<<"+============+"<<endl;
}
int main(){
int now=1;
bool fl=in();//加载玩家信息
if(fl){
cout<<"请你先设置用户名!\n(输入字符'/'代表结束)\n";
char nn;
while(true){
nn=getch();
if(nn=='/')break;
name+=nn;
cout<<nn;
}
system("cls");
}
while(true){
wel(now);
char choo=getch();
if(choo=='s'&&now<4)now++;
if(choo=='w'&&now>1)now--;
if(choo=='a'){
system("cls");
if(now==1)game();
if(now==2)gooa();
if(now==3);
if(now==4){
Ret();
break;
}
}
system("cls");
}
cout<<"走迷宫游戏欢迎你下次游玩!";
return 0;
}
*复制代码
修练者
走迷宫0.0版本作品介绍:
1.进入游戏
进入游戏后你会看到这个问题:
这是你只需随机输入一个数(最好在10000以内)即可
然后就可以输入本局游戏的难度(1—3)
2.开始游戏
开始游戏后你会看到一张迷宫地图
此时只需按动"w","s","a","d"四个键就可以移动在左上角的玩家(必须用英文输入法)
游戏过程中可以捡那些"go",他们是金币,按"e"键唤出交易栏
3.胜利与失败
当你走到地图的右下角时你就胜利;当你的体力耗尽时你就失败
体力可以通过交易栏里的物品获得