C++之逃离后室游戏

· · 休闲·娱乐

这,就是C++的尽头?

传统wsad上下左右移动,躲避‘G’的抓捕,拿到钥匙‘K’,然后用子弹(小键盘8246对应子弹上下左右)消灭‘G’,最后从门‘D’逃脱,简单小游戏,水作不易之作,求赞

#include <iostream>
#include <windows.h>
#include <cstdlib>
#include <ctime>
#include <conio.h>
using namespace std;
char mapa[11][11];
// 设置控制台光标位置
void gotoxy(int x, int y) {
    COORD coord;
    coord.X = x;
    coord.Y = y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
bool canmove(int x,int y){
    if(x>0&&x<11&&y>0&&y<11&&mapa[x][y]!='#')return true;
    return false;
}
void writemap(){
    for(int i=1;i<=10;i++){
        for(int j=1;j<=10;j++){
            mapa[i][j]='.';
        }
    } 
    int startx,starty,keyx,keyy,badx,bady,doorx,doory;
    startx=rand()%10+1;
    starty=rand()%10+1;
    mapa[startx][starty]='S';
    do{
        keyx=rand()%10+1;
        keyy=rand()%10+1;
    }while(keyx==startx&&keyy==starty);
    mapa[keyx][keyy]='K';
    do{
        badx=rand()%10+1;
        bady=rand()%10+1;
    }while((badx==startx&&bady==starty)||(badx==keyx&&bady==keyy));
    mapa[badx][bady]='B';
    do{
        doorx=rand()%10+1;
        doory=rand()%10+1;
    }while((doorx==startx&&doory==starty)||(doorx==keyx&&doory==keyy)||(doorx==badx&&doory==bady));
    mapa[doorx][doory]='D';
    for(int i=1;i<=10;i++){
        for(int j=1;j<=10;j++){
            int b=rand()%8+1;
            if(b==1)mapa[i][j]='#';
        }
    }
}
int main(){
    srand(time(NULL));
    system("cls");
    writemap();
    int x,y,ex,ey,gx,gy,gx2,gy2,zx,zy;
    int usez=0;
    for(int i=1;i<=10;i++){
        for(int j=1;j<=10;j++){
            if(mapa[i][j]=='S'){
                x=i;
                y=j;
            }
            else if(mapa[i][j]=='D'){
                ex=i;
                ey=j;
            }else if(mapa[i][j]=='B'){
                gx=i;
                gx2=i;
                gy=j;
                gy2=j;
            }
        }
    }
    bool havekey=0;
    int dead1=0,dead2=0;
    int gmove=0;
    while((x!=ex||y!=ey||havekey!=1||dead1!=5||dead2!=5)&&(x!=gx||y!=gy||dead1!=5)&&(x!=gx2||y!=gy2||dead2!=5)){
        if(!usez){
            zx=x;
            zy=y;
        }
        for(int i=1;i<=10;i++){
            for(int j=1;j<=10;j++){
                if(i==x&&j==y)cout<<"○ ";
                else if(i==zx&&j==zy)cout<<"ヾ ";
                else if((i==gx&&j==gy&&dead1!=5)||(i==gx2&&j==gy2&&dead2!=5))cout<<"T_T";
                else if(mapa[i][j]=='#')cout<<"□ ";
                else if(mapa[i][j]=='D')cout<<"╔ ";
                else if(mapa[i][j]=='K')cout<<"▲ ";
                else if(mapa[i][j]=='S')cout<<"█ "; 
                else cout<<"空 ";
            }
            cout<<endl;
        }
        if(_kbhit()){
            char oct=_getch();
            switch(oct){
                case 'a':
                    if(canmove(x,y-1))y--;
                    cout<<"左"<<endl;
                    break;
                case 'd':
                    if(canmove(x,y+1))y++;
                    cout<<"右"<<endl;
                    break;
                case 'w':
                    if(canmove(x-1,y))x--;
                    cout<<"上"<<endl;
                    break;
                case 's':
                    if(canmove(x+1,y))x++;
                    cout<<"下"<<endl;
                    break;
                case '8':
                    if(!usez)usez=1;
                    cout<<"biu"<<endl;
                    break;
                case '2':
                    usez=2;
                    if(!usez)cout<<"biu"<<endl;
                    break;
                case '4':
                    if(!usez)usez=3;
                    cout<<"biu"<<endl;
                    break;
                case '6':
                    if(!usez)usez=4;
                    cout<<"biu"<<endl;
                    break;
            }
        }
        if(gmove%5==0){
            int t=rand()%400+1;
            if(t>=1&&t<=100){
                if(canmove(gx,gy-1)&&mapa[gx][gy-1]!='S')gy--;
            }
            if(t>=101&&t<=200){
                if(canmove(gx,gy+1)&&mapa[gx][gy+1]!='S')gy++; 
            }
            if(t>=201&&t<=300){
                if(canmove(gx-1,gy)&&mapa[gx-1][gy]!='S')gx--;
            }
            if(t>=301&&t<=400){
                if(canmove(gx+1,gy)&&mapa[gx+1][gy]!='S')gx++;
            }
            t=rand()%400+1;
            if(t>=1&&t<=100){
                if(canmove(gx2,gy2-1)&&mapa[gx2][gy2-1]!='S')gy2--;
            }
            if(t>=101&&t<=200){
                if(canmove(gx2,gy2+1)&&mapa[gx2][gy2+1]!='S')gy2++; 
            }
            if(t>=201&&t<=300){
                if(canmove(gx2-1,gy2)&&mapa[gx2-1][gy2]!='S')gx2--;
            }
            if(t>=301&&t<=400){
                if(canmove(gx2+1,gy2)&&mapa[gx2+1][gy2]!='S')gx2++;
            }
        }
        Sleep(50);
        gotoxy(0,0);
        gmove++;
        if(gmove%2==0&&usez){
            if(usez==1)zx--;
            if(usez==2)zx++;
            if(usez==3)zy--;
            if(usez==4)zy++;
            if(zx==gx&&zy==gy&&dead1!=5)dead1++;
            if(zx==gx2&&zx==gy2&&dead2!=5)dead2++;
            if(mapa[zx][zy]=='#'||zx<1||zx>10||zy<1||zy>10)usez=0;
        }
        if(mapa[x][y]=='K'){
           havekey=1;
           cout<<"钥匙"<<endl;
        }
        if(mapa[x][y]=='D'&&havekey!=1){
            cout<<"上锁的门"<<endl;
        }
    }
    if(x==ex&&y==ey)cout<<"获胜"<<endl;
    else cout<<"失败"<<endl;
    return 0;
}

违规紫衫

如果你感兴趣的话也可以看看我的其他作品

贪吃蛇

乒乓球游戏

口袋奇兵

扫雷

求关QAQ