c++小游戏——推箱子(低级版)

背景描述:

有一个同学做大作业做不完了,让我帮他看看,但是代码没加注释,又全部混在一坨,于是我看了半个小时过后无果,当即狠下心自己写一个。于是花费了两个小时,就有了这篇文章。(第一次写小游戏,贼好玩)

复制代码必看:

1.地图可以自己设置,看define就知道地图构成了

2.地图的规格是7 * 7,不要越界(我自己也没试过)

3.游戏通关判定只有两个箱子和两个终点(不要整多了,不然自己改通关判断)

4.游戏一共是3关,想多一点自己改一下结束条件,自己写几个地图

5.由于是clion上面写的,有可能存在字符编码问题(我自己也没有解决),建议大家也用clion,教程CSDN一搜一大把

6.头文件是万能头,没有的自己改

7.好像没啥补充的了。。。想起了再补充吧

下面是代码:

#include "bits/stdc++.h"

using namespace std;

#define  a 0	//
#define  b 1	//■
#define  c 2	//木
#define  d 3	//囗
#define  e 5	//困
#define  f 6	//人
#define  g 9	//囚

int my_map[3][7][7] = {                 //地图初始化
                1,1,1,1,1,1,1,
                1,3,0,0,3,0,1,
                1,1,0,0,0,1,1,
                1,0,0,6,0,0,1,
                1,1,2,0,2,0,1,
                1,1,0,0,0,0,1,
                1,1,1,1,1,1,1,

                1,1,1,1,1,1,1,
                1,3,2,0,3,0,1,
                1,0,0,0,2,1,1,
                1,1,0,6,0,0,1,
                1,1,0,0,0,0,1,
                1,1,0,0,0,1,1,
                1,1,1,1,1,1,1,

                1,1,1,1,1,1,1,
                1,3,2,0,3,0,1,
                1,1,0,0,2,1,1,
                1,0,0,6,0,0,1,
                1,1,0,0,0,0,1,
                1,1,0,0,1,1,1,
                1,1,1,1,1,1,1

        };

int x = 3,y = 3;        //初始位置

void drawing_map(int part) {  //绘制地图
    for(int i = 0;i < 7;i++) {
        for(int j = 0;j < 7;j++) {
            if(my_map[part][i][j] == 0) {
                cout << " ";
            } else if(my_map[part][i][j] == 1) {
                cout << "■";
            } else if(my_map[part][i][j] == 2) {
                cout << "木";
            } else if(my_map[part][i][j] == 3) {
                cout << "口";
            } else if(my_map[part][i][j] == 5) {
                cout << "困";
            } else if(my_map[part][i][j] == 6) {
                cout << "人";
            } else if(my_map[part][i][j] == 9) {
                cout << "囚";
            }
        }
        cout << endl;
    }
    cout << endl;
}

void step(int *judge,int part) {           //每一步操作
    char key = getchar();        //键盘输入
    switch (key) {                 //判断输入是什么以及是否正确
        case 'D' :
        case 'd' :
            if (my_map[part][x][y + 1] == 0) {    //是否为空
                if (my_map[part][x][y] == 9) {  //是否当前为囚
                    my_map[part][x][y + 1] = 6;
                    my_map[part][x][y] = 3;
                    y++;
                } else {
                    my_map[part][x][y + 1] = 6;
                    my_map[part][x][y] = 0;
                    y++;
                }
            } else if (my_map[part][x][y + 1] == 1) {  //是否为墙
                cout << "Wrong move!" << endl;
            } else if (my_map[part][x][y + 1] == 2) {  //是否为木
                if (my_map[part][x][y] == 9) {      //是否当前为囚
                    if (my_map[part][x][y + 2] == 0) {
                        my_map[part][x][y + 2] = 2;
                        my_map[part][x][y + 1] = 6;
                        my_map[part][x][y] = 3;
                        y++;
                    } else if (my_map[part][x][y + 2] == 3) {
                        my_map[part][x][y + 2] = 5;
                        my_map[part][x][y + 1] = 6;
                        my_map[part][x][y] = 0;
                        y++;
                    } else {
                        cout << "Wrong move!" << endl;
                    }
                } else {
                    if (my_map[part][x][y + 2] == 0) {
                        my_map[part][x][y + 2] = 2;
                        my_map[part][x][y + 1] = 6;
                        my_map[part][x][y] = 0;
                        y++;
                    } else if (my_map[part][x][y + 2] == 3) {
                            my_map[part][x][y + 2] = 5;
                            my_map[part][x][y + 1] = 6;
                            my_map[part][x][y] = 0;
                            y++;
                        } else {
                            cout << "Wrong move!" << endl;
                        }
                    }
                } else if (my_map[part][x][y + 1] == 3) {  //是否为目的地
                    if (my_map[part][x][y] == 9) {      //是否当前为囚
                        my_map[part][x][y + 1] = 9;
                        my_map[part][x][y] = 9;
                        y++;
                    } else {
                        my_map[part][x][y + 1] = 9;
                        my_map[part][x][y] = 0;
                        y++;
                    }
                } else {
                    cout << "Wrong move!" << endl;
                }
                break;
                case 'w':
                case 'W' :
                    if (my_map[part][x - 1][y] == 0) {    //是否为空
                        if (my_map[part][x][y] == 9) {  //是否当前为囚
                            my_map[part][x - 1][y] = 6;
                            my_map[part][x][y] = 3;
                            x--;
                        } else {
                            my_map[part][x - 1][y] = 6;
                            my_map[part][x][y] = 0;
                            x--;
                        }
                    } else if (my_map[part][x - 1][y] == 1) {  //是否为墙
                        cout << "Wrong move!" << endl;
                    } else if (my_map[part][x - 1][y] == 2) {  //是否为木
                        if (my_map[part][x][y] == 9) {      //是否当前为囚
                            if (my_map[part][x - 2][y] == 0) {
                                my_map[part][x - 2][y] = 2;
                                my_map[part][x - 1][y] = 6;
                                my_map[part][x][y] = 3;
                                x--;
                            } else if (my_map[part][x - 2][y] == 3) {
                                my_map[part][x - 2][y] = 5;
                                my_map[part][x - 1][y] = 6;
                                my_map[part][x][y] = 0;
                                x--;
                            } else {
                                cout << "Wrong move!" << endl;
                            }
                        } else {
                            if (my_map[part][x - 2][y] == 0) {
                                my_map[part][x - 2][y] = 2;
                                my_map[part][x - 1][y] = 6;
                                my_map[part][x][y] = 0;
                                x--;
                            } else if (my_map[part][x - 2][y] == 3) {
                                my_map[part][x - 2][y] = 5;
                                my_map[part][x - 1][y] = 6;
                                my_map[part][x][y] = 0;
                                x--;
                            } else {
                                cout << "Wrong move!" << endl;
                            }
                        }
                    } else if (my_map[part][x - 1][y] == 3) {  //是否为目的地
                        if (my_map[part][x][y] == 9) {      //是否当前为囚
                            my_map[part][x - 1][y] = 9;
                            my_map[part][x][y] = 9;
                            x--;
                        } else {
                            my_map[part][x - 1][y] = 9;
                            my_map[part][x][y] = 0;
                            x--;
                        }
                    } else {
                        cout << "Wrong move!" << endl;
                    }
            break;
        case 'a' :
        case 'A' :
            if (my_map[part][x][y - 1] == 0) {    //是否为空
                if (my_map[part][x][y] == 9) {  //是否当前为囚
                    my_map[part][x][y - 1] = 6;
                    my_map[part][x][y] = 3;
                    y--;
                } else {
                    my_map[part][x][y - 1] = 6;
                    my_map[part][x][y] = 0;
                    y--;
                }
            } else if (my_map[part][x][y - 1] == 1) {  //是否为墙
                cout << "Wrong move!" << endl;
            } else if (my_map[part][x][y - 1] == 2) {  //是否为木
                if (my_map[part][x][y] == 9) {      //是否当前为囚
                    if (my_map[part][x][y - 2] == 0) {
                        my_map[part][x][y - 2] = 2;
                        my_map[part][x][y - 1] = 6;
                        my_map[part][x][y] = 3;
                        y--;
                    } else if (my_map[part][x][y - 2] == 3) {
                        my_map[part][x][y - 2] = 5;
                        my_map[part][x][y - 1] = 6;
                        my_map[part][x][y] = 0;
                        y--;
                    } else {
                        cout << "Wrong move!" << endl;
                    }
                } else {
                    if (my_map[part][x][y - 2] == 0) {
                        my_map[part][x][y - 2] = 2;
                        my_map[part][x][y - 1] = 6;
                        my_map[part][x][y] = 0;
                        y--;
                    } else if (my_map[part][x][y - 2] == 3) {
                        my_map[part][x][y - 2] = 5;
                        my_map[part][x][y - 1] = 6;
                        my_map[part][x][y] = 0;
                        y--;
                    } else {
                        cout << "Wrong move!" << endl;
                    }
                }
            } else if (my_map[part][x][y - 1] == 3) {  //是否为目的地
                if (my_map[part][x][y] == 9) {      //是否当前为囚
                    my_map[part][x][y - 1] = 9;
                    my_map[part][x][y] = 9;
                    y--;
                } else {
                    my_map[part][x][y - 1] = 9;
                    my_map[part][x][y] = 0;
                    y--;
                }
            } else {
                cout << "Wrong move!" << endl;
            }
            break;
        case 's' :
        case 'S' :
            if (my_map[part][x + 1][y] == 0) {    //是否为空
                if (my_map[part][x][y] == 9) {  //是否当前为囚
                    my_map[part][x + 1][y] = 6;
                    my_map[part][x][y] = 3;
                    x++;
                } else {
                    my_map[part][x + 1][y] = 6;
                    my_map[part][x][y] = 0;
                    x++;
                }
            } else if (my_map[part][x + 1][y] == 1) {  //是否为墙
                cout << "Wrong move!" << endl;
            } else if (my_map[part][x + 1][y] == 2) {  //是否为木
                if (my_map[part][x][y] == 9) {      //是否当前为囚
                    if (my_map[part][x + 2][y] == 0) {
                        my_map[part][x + 2][y] = 2;
                        my_map[part][x + 1][y] = 6;
                        my_map[part][x][y] = 3;
                        x++;
                    } else if (my_map[part][x + 2][y] == 3) {
                        my_map[part][x + 2][y] = 5;
                        my_map[part][x + 1][y] = 6;
                        my_map[part][x][y] = 0;
                        x++;
                    } else {
                        cout << "Wrong move!" << endl;
                    }
                } else {
                    if (my_map[part][x + 2][y] == 0) {
                        my_map[part][x + 2][y] = 2;
                        my_map[part][x + 1][y] = 6;
                        my_map[part][x][y] = 0;
                        x++;
                    } else if (my_map[part][x + 2][y] == 3) {
                        my_map[part][x + 2][y] = 5;
                        my_map[part][x + 1][y] = 6;
                        my_map[part][x][y] = 0;
                        x++;
                    } else {
                        cout << "Wrong move!" << endl;
                    }
                }
            } else if (my_map[part][x + 1][y] == 3) {  //是否为目的地
                if (my_map[part][x][y] == 9) {      //是否当前为囚
                    my_map[part][x + 1][y] = 9;
                    my_map[part][x][y] = 9;
                    x++;
                } else {
                    my_map[part][x + 1][y] = 9;
                    my_map[part][x][y] = 0;
                    x++;
                }
            } else {
                cout << "Wrong move!" << endl;
            }
            break;
    }
    int counter = 0;
    for(int i = 0;i < 7;i++) {     //判断是否通关
        for(int j = 0;j < 7;j++) {
            if(my_map[part][i][j] == 5) {
               counter++;
            }
        }
    }
    if(counter == 2) {
        *judge = 1;
    }
}

void gaming(int part) {         //游戏主体程序
    system("cls");
    int judge = 0;
    cout << "Part " << part + 1 << ": " << endl;
    while(judge == 0) {
        drawing_map(part);
        step(&judge,part);
    }
    x = 3;      //重置!!!很重要
    y = 3;
}



int main() {
    int part = 0;        //关卡计数
    while(true) {
        if(part == 3) {
            cout << "恭喜你通关了!" << endl;
            break;
        }
        gaming(part);
        part++;
    }
    return 0;
}

Ps : 代码中step函数写得很冗余,我自己都看得眼花缭乱,鉴于我水平就那样,将就看吧

(不是屎山!!!可以改动的!!!但是你要有足够的耐心和细致力)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jellyfish Knight

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值