用c++写一个简单的推箱子游戏

本文将介绍如何使用C++编程语言开发一个经典的推箱子游戏。通过构建游戏地图,实现玩家移动及箱子推拉逻辑,详细讲解游戏规则的编程实现。
摘要由CSDN通过智能技术生成

用c++写游戏----简单的推箱子游戏


用的是vs2013新建的一个win32控制台程序

// 2019.7.19.1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <windows.h>
#include <iostream>

enum GameState
{
   
	E_STATE_MENUE,
	E_STATE_MAP,
	E_STATE_PASS,
};
enum MenuState
{
   
	E_MENU_START,
	E_MENU_OVER,
	E_MENU_EXIT,
};

struct SPlayer
{
   
	SPlayer(int nInRow,int nInCol){
   
		nRow = nInRow;
		nCol = nInCol;
		nRowBk = nInRow;
		nColBk = nInCol;
	}
	int nRow;
	int nCol;
	int nRowBk;
	int nColBk;
};
SPlayer g_Player1(2, 2);
SPlayer g_Player(1,1);
struct SBox
{
   
	int nRow;
	int nCol;
	int nRowBk;
	int nColBk;
};
SBox g_arrBox[3];
struct SBonus
{
   
	int nRow;
	int nCol;
	int nRowBk;
	int nColBk;
};
SBonus g_arrBonus[3];
using namespace std;
#define KEY_DOWN(vk_code)(GetAsyncKeyState(vk_code)&0x8000?1:0)
//人物和箱子不能绑定在地图上
int _tmain(int argc, _TCHAR* argv[])
{
   
	int nMenuState = E_MENU_START;
	int nGameState = E_STATE_MENUE;
	int arrMap[20][20] = {
   
		{
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
		{
    1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{
    1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{
    1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1 },
		{
    1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1 },
		{
    1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1 },
		{
    1, 0, 0, 0, 0
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
推箱子小游戏一个比较经典的游戏,以下是一个简单的推箱子小游戏 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() 函数获取用户输入,根据用户输入来移动人物和箱子,每次移动后都重新绘制地图。最后,判断是否达到胜利条件,如果是则输出胜利信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值