2021.02.24(数组,枚举,推箱子)

这篇博客介绍了C++中数组的基本概念和使用,包括一维数组和二维数组的定义、访问及遍历。同时,通过一个推箱子游戏的实现,展示了如何在实际编程中运用数组来存储和处理地图数据,以及如何通过键盘输入控制游戏状态。文章涵盖了枚举类型的使用和游戏界面的交互逻辑。
摘要由CSDN通过智能技术生成

数组:

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

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

using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	//数组:一组数据的集合
	//数组的定义:数组类型+数组名称[元素个数]
	//int arrNum[5] = {};//数组元素之间用,隔开
	//数组元素的访问:数组名称[索引]
	//cout << arrNum[3] << endl;

	//数组的遍历
// 	for (int i = 0; i < 5; i++)
// 	{
// 		cout << arrNum[i] << endl;
// 	}

	//二维数组的定义:数组类型+数组名称[第一个维度的个数][第二个维度的个数]
	//int arrNum[2][3] = {5,6};//5,6,0,   0,0,0
	//二维数组元素的访问:数组名称[第一个维度的索引][第二个维度的索引]
	//cout << arrNum[1][1] << endl;

	int arrMap[15][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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{ 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{ 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{ 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
	};

	//二维数组的遍历
	for (int i = 0; i < 15; i++)
	{
		for (int j = 0; j < 20; j++)
		{
			if (1 == arrMap[i][j])
			{
				cout << "■";
			}
			else{
				cout << "  ";
			}
		}
		cout << endl;
	}
	system("pause");
	return 0;
}


推箱子:

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

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

using namespace std;
#define KEY_DOWN(vk_code) (GetAsyncKeyState(vk_code)&0x8000?1:0)

//枚举类型
// enum 枚举类型名称
// {
// 	枚举值,
// };

enum
{
	//枚举值的命名规范:E_开头,大写,单词间用_隔开
	//第一个枚举值如果没有给值,默认从0开始,后一个比前一个多1
	E_MENU_START,// = 8,
	E_MENU_SETTING,
	E_MENU_EXIT
};

enum
{
	E_GAME_MENU,
	E_GAME_MAP
};

int _tmain(int argc, _TCHAR* argv[])
{
	int arrMap[15][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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{ 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{ 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{ 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
		{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
	};
	int nPlayerRow = 8;
	int nPlayerCol = 9;
	
	int nMenuState = 0;//用于控制箭头的位置的
	int nGameState = 0;//用于控制界面的切换
	while (true)
	{
		if (E_GAME_MENU == nGameState)
		{
			if (KEY_DOWN(VK_UP))
			{
				nMenuState++;
				if (nMenuState > E_MENU_EXIT)
				{
					nMenuState = E_MENU_START;
				}
			}
			else if (KEY_DOWN(VK_DOWN))
			{
				nMenuState--;
				if (nMenuState < E_MENU_START)
				{
					nMenuState = E_MENU_EXIT;
				}
			}
			else if (KEY_DOWN(VK_RETURN))
			{
				//
				if (E_MENU_START == nMenuState)
				{
					nGameState = E_GAME_MAP;
				}
			}

			cout << "■■■■■■■■■■■■■■■■■■■■" << endl;
			cout << "■■■■■■■■■■■■■■■■■■■■" << endl;
			if (E_MENU_START == nMenuState)
			{
				cout << "■■■        ->游戏开始          ■■■" << endl;
				cout << "■■■          游戏设置          ■■■" << endl;
				cout << "■■■          游戏退出          ■■■" << endl;
			}
			else if (E_MENU_SETTING == nMenuState)
			{
				cout << "■■■          游戏开始          ■■■" << endl;
				cout << "■■■        ->游戏设置          ■■■" << endl;
				cout << "■■■          游戏退出          ■■■" << endl;
			}
			else{
				cout << "■■■          游戏开始          ■■■" << endl;
				cout << "■■■          游戏设置          ■■■" << endl;
				cout << "■■■        ->游戏退出          ■■■" << endl;
			}
			cout << "■■■■■■■■■■■■■■■■■■■■" << endl;
			cout << "■■■■■■■■■■■■■■■■■■■■" << endl;
		}
		else if (E_GAME_MAP == nGameState)
		{
			if (KEY_DOWN(VK_UP))
			{
				nPlayerRow--;
			}
			else if (KEY_DOWN(VK_DOWN))
			{
				nPlayerRow++;
			}
			else if (KEY_DOWN(VK_LEFT))
			{
				nPlayerCol--;
			}
			else if (KEY_DOWN(VK_RIGHT))
			{
				nPlayerCol++;
			}
			//二维数组的遍历
			for (int i = 0; i < 15; i++)
			{
				for (int j = 0; j < 20; j++)
				{
					//判断第i行第j列应该画什么
					if (1 == arrMap[i][j])
					{
						cout << "■";
					}
					else if (i == nPlayerRow && j == nPlayerCol)
					{
						cout << "人";
					}
					else{
						cout << "  ";
					}
				}
				cout << endl;
			}
		}

		system("cls");//系统清屏
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值