C++推箱子小游戏(一)

推箱子游戏总共就分为两部分

一、游戏的初始界面

91778f6e20074251b7a37f531249610a.png

二、游戏的界面

33c07209391943cb9563daa3e285cab2.png

三、我先写初始界面(因为我也还没写完,纯粹就是归纳一下)

nSelect初始值定义的是0,这个主要是对选项的选择,总共就分为三个:开始、设置、退出

            if (0 == nSelect)
			{
				cout << "--> 开始" << endl;
				cout << "    设置" << endl;
				cout << "    退出" << endl;
			}
			else if (1 == nSelect)
			{
				cout << "    开始" << endl;
				cout << "--> 设置" << endl;
				cout << "    退出" << endl;
			}
			else if (2 == nSelect)
			{
				cout << "    开始" << endl;
				cout << "    设置" << endl;
				cout << "--> 退出" << endl;
			}

这块主要是对键盘的监听,通过上下犍来移动初始界面的箭头指向

            if (Key_Listen(VK_UP))
			{
				nSelect--;
				if (nSelect<0)
				{
					nSelect = 2;
				}
			}
			else if (Key_Listen(VK_DOWN) & 0x8000)
			{
				nSelect++;
				if (nSelect > 2)
                {
					nSelect = 0;
				}
			}
			else if (Key_Listen(VK_RETURN) & 0x8000)
			{
				nScene = 1;
				nClearScene = 1;
			}

上面中Key_Listen()不是库里的函数,是我宏定义的一个按钮监听的一个函数吧(不知准不准确,我也只知道他的作用)

#define Key_Listen(code) (GetAsyncKeyState(code) & 0x8000)

 所有代码都得放在whiel的死循环当中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
推箱子小游戏是一个比较经典的游戏,以下是一个简单的推箱子小游戏 C 代码示例: ```c #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <windows.h> #define ROW 10 #define COLUMN 10 #define WALL '#' //墙 #define MAN 'M' //人 #define BOX '$' //箱子 #define DEST 'D' //目的地 #define SPACE ' ' //空地 #define UP 72 #define DOWN 80 #define LEFT 75 #define RIGHT 77 int map[ROW][COLUMN] = { {1,1,1,1,1,1,1,1,1,1}, {1,0,0,0,0,0,0,0,0,1}, {1,0,0,0,0,0,0,0,0,1}, {1,0,0,0,0,0,0,0,0,1}, {1,0,0,0,0,0,0,0,0,1}, {1,0,0,0,0,0,0,0,0,1}, {1,0,0,0,0,0,0,0,0,1}, {1,0,0,0,0,0,0,0,0,1}, {1,0,0,0,0,0,0,0,0,1}, {1,1,1,1,1,1,1,1,1,1} }; void display() { int i,j; system("cls"); //清空屏幕 for (i = 0; i < ROW; i++) { for (j = 0; j < COLUMN; j++) { switch (map[i][j]) { case 1: printf("%c", WALL); break; case 2: printf("%c", MAN); break; case 3: printf("%c", BOX); break; case 4: printf("%c", DEST); break; case 0: printf("%c", SPACE); break; default: break; } } printf("\n"); } printf("Use Arrow keys to move the man.\n"); printf("Press Q to quit."); } void move_man(int x, int y) { if (map[x][y] == 0 || map[x][y] == 4) { map[x][y] = 2; map[x+1][y] = 0; } } void move_box(int x, int y, int dx, int dy) { if (map[x][y] == 3 && map[dx][dy] == 0) { map[x][y] = 2; map[dx][dy] = 3; map[x+1][y] = 0; } } int check_win() { int i,j; for (i = 0; i < ROW; i++) { for (j = 0; j < COLUMN; j++) { if (map[i][j] == 3) { return 0; } } } return 1; } int main() { int man_x = 1, man_y = 1; int c = 0; display(); while (1) { c = getch(); switch (c) { case UP: { if (map[man_x-1][man_y] == 0 || map[man_x-1][man_y] == 4) { move_man(man_x-1, man_y); man_x--; } else if (map[man_x-1][man_y] == 3 && (map[man_x-2][man_y] == 0 || map[man_x-2][man_y] == 4)) { move_box(man_x-1, man_y, man_x-2, man_y); move_man(man_x-1, man_y); man_x--; } break; } case DOWN: { if (map[man_x+1][man_y] == 0 || map[man_x+1][man_y] == 4) { move_man(man_x+1, man_y); man_x++; } else if (map[man_x+1][man_y] == 3 && (map[man_x+2][man_y] == 0 || map[man_x+2][man_y] == 4)) { move_box(man_x+1, man_y, man_x+2, man_y); move_man(man_x+1, man_y); man_x++; } break; } case LEFT: { if (map[man_x][man_y-1] == 0 || map[man_x][man_y-1] == 4) { move_man(man_x, man_y-1); man_y--; } else if (map[man_x][man_y-1] == 3 && (map[man_x][man_y-2] == 0 || map[man_x][man_y-2] == 4)) { move_box(man_x, man_y-1, man_x, man_y-2); move_man(man_x, man_y-1); man_y--; } break; } case RIGHT: { if (map[man_x][man_y+1] == 0 || map[man_x][man_y+1] == 4) { move_man(man_x, man_y+1); man_y++; } else if (map[man_x][man_y+1] == 3 && (map[man_x][man_y+2] == 0 || map[man_x][man_y+2] == 4)) { move_box(man_x, man_y+1, man_x, man_y+2); move_man(man_x, man_y+1); man_y++; } break; } case 'q': case 'Q': { exit(0); break; } default: break; } if (check_win()) { printf("You Win!\n"); getch(); //等待用户输入 exit(0); } display(); } return 0; } ``` 这个游戏代码比较简单,主要实现了人物移动和箱子移动的功能。游戏地图用二维数组存储,1表示墙,0表示空地,2表示人物,3表示箱子,4表示目的地。通过 getch() 函数获取用户输入,根据用户输入来移动人物和箱子,每次移动后都重新绘制地图。最后,判断是否达到胜利条件,如果是则输出胜利信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小新不吃辣

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

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

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

打赏作者

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

抵扣说明:

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

余额充值