问题标题: 走迷宫0.0版本

1
0
已解决
马博闻
马博闻
修练者
修练者

代码:

#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;
}

*复制代码


1
已采纳
吴子轩
吴子轩
高级守护
高级守护

a没有终点吗

不应该设一个终点(或者说传送门,回到主界面,重新选关卡)

1
吴子轩
吴子轩
高级守护
高级守护

或者搞一个数组,记一下最高分数

0
马博闻
马博闻
修练者
修练者

走迷宫0.0版本作品介绍:

1.进入游戏
进入游戏后你会看到这个问题:


这是你只需随机输入一个数(最好在10000以内)即可
然后就可以输入本局游戏的难度(1—3)

 

2.开始游戏
开始游戏后你会看到一张迷宫地图


此时只需按动"w","s","a","d"四个键就可以移动在左上角的玩家(必须用英文输入法)
游戏过程中可以捡那些"go",他们是金币,按"e"键唤出交易栏

 

3.胜利与失败
当你走到地图的右下角时你就胜利;当你的体力耗尽时你就失败
体力可以通过交易栏里的物品获得

0
林鄧天樂
林鄧天樂
中级光能
中级光能

怎么多代码是你复制的吗?

0
马博闻
马博闻
修练者
修练者

注意:

本游戏完全为个人原创,代码都是自己写的。

请大家不要抄袭!

谢谢。

0
0
马博闻
马博闻
修练者
修练者

正版已经在酷丁平台上发布

请大家多点赞!

谢谢。

0
0
0
谈睿
谈睿
初级光能
初级光能

走迷宫0.0版本作品介绍:

1.进入游戏
进入游戏后你会看到这个问题:

0
0
马博闻
马博闻
修练者
修练者

走迷宫0.1版本开始测试,请大家找bug,提意见!
地图编辑器还没做。。。

代码详见追问内容

0
马博闻
马博闻
修练者
修练者

规则与0.0版基本相同,增加了主菜单和数据存档

我要回答