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

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

用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,
创建一个简单推箱子游戏(也称为" Sokoban "游戏)在C++中涉及到基本的图形用户界面、数据结构以及游戏逻辑。以下是一个简化的步骤说明: 1. **项目设置**: - 创建一个新的C++控制台应用项目。 2. **数据结构**: - 使用二维数组或`std::vector`来表示地图,其中0代表空地,1代表墙,2代表箱子,3代表玩家的位置。 3. **类设计**: - 定义一个 `Box` 类来描述箱子,包含位置信息; - 定义一个 `Player` 类,记录玩家的位置,并有移动的能力; - 可能还需要一个 `Map` 类,负责地图的管理和更新。 4. **函数实现**: - 游戏主循环中,获取用户的输入(上下左右),然后更新地图和玩家位置。 - 检查是否成功将箱子推到目标位置(通常是地图边缘)。如果成功,标记为胜利;若无法继续,标记为失败。 - 添加检查碰撞的功能,防止玩家和箱子进入墙壁。 5. **图形表示**: - 如果你想做更复杂的UI,可以考虑使用ASCII艺术或者其他文本渲染库,如ncurses(仅限于支持此功能的操作系统)。 6. **游戏结束处理**: - 当游戏结束后,显示最终结果并询问是否再玩一次,或者退出程序。 ```cpp #include <iostream> #include <vector> class Map { public: void moveBox(int x, int y); // ...其他成员函数... }; class Player { private: std::pair<int, int> position; public: void move(Map& map); // ...其他成员函数... }; void main() { Map map; Player player; while (true) { // 获取用户输入,更新map和player // 检查游戏状态,显示结果 } } // 推箱子函数示例 void Map::moveBox(int x, int y) { // 检查边界和碰撞等条件 } // 玩家移动函数示例 void Player::move(Map& map) { // 根据用户输入移动,处理可能的结果 } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值