问题标题: 酷町堂:666!!!

0
0
已解决
熊智晖
熊智晖
高级天翼
高级天翼

#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<conio.h>
#include<windows.h>
#include<iomanip>
using namespace std;
#define R 10
#define C 10
void Game_Menu();//游戏菜单 
void Game_description();//操作介绍 
int DRAW_MAP();//绘制地图 
void MOVE();//移动 
int FINISH();//跳转地图
void SET_MAP(int n);
void COLOR(int m);
bool flag=true;
/*
1.墙
3.目的地
4.箱子 
5.人 
0.空地 
*/ 
int map [R][C]={0};
int map1[10][10] = {
    { 0,1,1,1,1,1,1,0 },
    { 0,1,0,3,4,0,1,0 },
    { 0,1,0,0,0,0,1,1 },
    { 1,1,4,0,4,4,3,1 },
    { 1,3,0,0,0,1,1,1 },
    { 1,1,1,5,0,1,0,0 },
    { 0,0,0,1,3,1,0,0 },
    { 0,0,0,1,1,1,0,0 }
};
//地图 2(关卡2)
int map2[10][10]={
    {1,1,1,1,1,0,0,0,0,0},
    {1,5,0,0,1,0,0,0,0,0},
    {1,0,4,0,1,0,1,1,1,0},
    {1,0,4,0,1,0,1,0,1,0},
    {1,1,1,0,1,1,1,0,1,0},
    {0,1,3,0,0,0,0,0,1,0},
    {0,1,0,4,0,3,0,0,1,0},
    {0,1,3,0,0,1,1,1,1,0},
    {0,1,1,1,1,1,0,0,0,0}
};
//地图 3(关卡3)
int map3[10][10]={
    { 0,0,0,1,1,1,1,1,1,1 },
    { 0,0,1,1,0,0,1,0,5,1 },
    { 0,0,1,0,0,0,1,0,0,1 },
    { 1,1,1,0,0,4,0,4,0,1 },
    { 1,0,0,0,4,0,4,0,0,1 },
    { 1,0,0,0,4,0,0,0,1,1 },
    { 1,3,3,3,3,3,0,0,1,0 },
    { 1,1,1,1,1,1,1,1,1,0 },
};
int pass=1; 
int main()
{
    char c;
    Game_Menu();
    Game_description();
    c=getch();
    SET_MAP(pass);
    switch(c){
        case 'Q':
        case 'q':
            return 0;
        case 'S':
        case 's':
            while(flag){
                system("cls");
                DRAW_MAP();
                MOVE();
                if(FINISH()){
                    system("cls");
                    DRAW_MAP();
                    printf("游戏胜利!\n");
                    system("pause");
                    pass++;
                    SET_MAP(pass);
                }
            }
    }
    return 0;
}
void Game_Menu(){
    system("cls");
    cout<<"***********************\n";
    cout<<"*                     *\n";
    cout<<"*      经典游戏       *\n";
    cout<<"*      十年经典       *\n";
    cout<<"*      推箱子         *\n";
    cout<<"*    按S或s开始       *\n";
    cout<<"*    退出: Q q       *\n";
    cout<<"*                     *\n";
    cout<<"***********************\n";
}
void Game_description(){
    cout<<"***********************\n";
    cout<<"*     操作提示        *\n";
    cout<<"*     上移: W w      *\n";
    cout<<"*     下移: S s      *\n";
    cout<<"*     左移: A a      *\n";
    cout<<"*     右移: D d      *\n";
    cout<<"*     按S或s开始      *\n";
    cout<<"*     退出: Q q      *\n";
    cout<<"***********************\n";
    _getch(); 
}
void MOVE(){
    int r,c; //保存人物位置
     for(int i=0;i<R;i++){//i为行值 
          for(int j=0;j<C;j++){//j为列值 
               if(map[i][j]==5||map[i][j]==8){
                r=i;
                c=j;
               }
          }
     }
     cout<<"您当前的坐标为:("<<r<<","<<c<<")"<<endl;
     int ch;//保存键盘输入的ASCII值
     ch=_getch();//接受一个任意键的输入,不用按回车就返回。该函数的返回值是所输入字符的ASCII码,且该函数的输入不会自动显示在屏幕上
     switch(ch){
          case 'W':/*上移*/
          case 'w':
          case 72:
           if(map[r-1][c]==0||map[r-1][c]==3){//人物上方是空地(0)或者目的地 (3),对应情况5和情况6 
            map[r-1][c]+=5;//人物坐标上一个坐标值为5(人物) 
            map[r][c]-=5;//人物原坐标值为0(空地) 
           } 
           else if(map[r-1][c]==4||map[r-1][c]==7){//人物上方是箱子,箱子在空格上或者箱子在目的地处,对应情况1,2,3,4 
            if(map[r-2][c]==0||map[r-2][c]==3){//箱子上方是空格或者前面是目的地,细化为情况1,2或情况3,4
                 map[r-2][c]+=4;//箱子向上移动,上一个0(空地)就变为 4(箱子)
                 map[r-1][c]+=1;//4(原箱子)+1变为 5(人物)
                 map[r][c]-=5;//5(原人物)-5变为0(空地) 
            }
           }
           break;
          case 'S':/*下移*/
          case 's':
          case 80:
           if(map[r+1][c]==0||map[r+1][c]==3){//人下方是空地或目的地 
            map[r+1][c]+=5;
            map[r][c]-=5;
           }
           else if(map[r+1][c]==4||map[r+1][c]==7){//人下方是箱子 ,箱子在空地或者目的地上 
            if(map[r+2][c]==0||map[r+2][c]==3){//箱子下方是空地和目的地
                 map[r+2][c]+=4;//箱子向下移动,下一个0(空地)就变为 4(箱子)
                 map[r+1][c]+=1;//4(原箱子)+1变为 5(人物)
                 map[r][c]-=5;//5(原人物)-5变为0(空地) 
            }
           }
           break;
          case 'A':
          case 'a':
          case 75:
           if(map[r][c-1]==0||map[r][c-1]==3){//人左方是空地或目的地 
            map[r][c-1]+=5;
            map[r][c]-=5;
           }
           else if(map[r][c-1]==4||map[r][c-1]==7){//人左方是箱子 ,箱子在空地或者目的地上
            if(map[r][c-2]==0||map[r][c-2]==3){//箱子左方是空地和目的地
                 map[r][c-2]+=4;//箱子向下移动,下一个0(空地)就变为 4(箱子)
                 map[r][c-1]+=1;//4(原箱子)+1变为 5(人物)
                 map[r][c]-=5;//5(原人物)-5变为0(空地) 
            }
           }
           break;
          case 'D':
          case 'd':
          case 77:
           if(map[r][c+1]==0||map[r][c+1]==3){//人右方是空地或目的地 
            map[r][c+1]+=5;
            map[r][c]-=5;
           }
           else if(map[r][c+1]==4||map[r][c+1]==7){//人右方是箱子 ,箱子在空地或者目的地上
            if(map[r][c+2]==0||map[r][c+2]==3){//箱子右方是空地和目的地
                 map[r][c+2]+=4;//箱子向下移动,下一个0(空地)就变为 4(箱子)
                 map[r][c+1]+=1;//4(原箱子)+1变为 5(人物)
                 map[r][c]-=5;//5(原人物)-5变为0(空地) 
            }
           }
           break; 
          case 'Q':
          case 'q':
           flag=false;
          default:
           break;
     }
     return ;
}
int DRAW_MAP(){
    cout<<"关卡:"<<pass<<endl;
    for(int i=0;i<R;i++){
        for(int j=0;j<C;j++){
            switch(map[i][j]){
                case 0:
                    COLOR(0xF);
                    cout << "  ";  //空地
                    break;
                   case 1:
                    COLOR(8);
                    cout << "■";//墙体
                    break;
                   case 3:
                    COLOR(0xE);
                    cout << "☆";//目的地
                    break;
                   case 4:
                    COLOR(4);
                    cout << "□";//箱子 
                    break;
                   case 5:
                    COLOR(3);
                    cout << "♀"; //人
                    break;
                   case 7:     //4+3   箱子到达目的地
                    COLOR(6);   
                    cout << "★";
                    break;
                   case 8:     //5+3  人与目的地重合
                    COLOR(3);
                    cout << "♀";
                    break;
                   default:
                break;
            }
        }
        cout<<endl; 
    } 
}
int FINISH(){
    for(int i=0;i<R;i++){
        for(int j=0;j<C;j++){
            if(map[i][j]==4){
                return 0;
            }
        }
    }
    return 1;

void SET_MAP(int n){
    if(n==1){
    memcpy(map,map1,sizeof(map1)); 
    }    
    if(n==2){
    memcpy(map,map2,sizeof(map2)); 
    }    
    if(n==3){
    memcpy(map,map3,sizeof(map3)); 
    }    
    return ;    

void COLOR(int m){
    HANDLE consolehend;
    consolehend = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(consolehend,m);
    return ;
}

熊智晖在2021-06-05 19:21:01追加了内容

在不?很好玩的游戏


0
已采纳
江齐悦
江齐悦
高级光能
高级光能

很好玩

谢谢你了

学到了

0
0
我要回答