推箱子黑框自由自在(C语言游戏开发)

 

推箱子

用win32创造一个空项目@卫聚聚   来玩推箱子吧哈哈;

推箱子代码如下

​
#include<stdio.h>
#include <windows.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int map[7][10] = {
	{ 0, 0, 0, 1, 1, 1, 1, 1, 1, 0 },
{ 0, 1, 1, 1, 0, 0, 0, 0, 1, 0 },
{ 1, 1, 3, 0, 4, 1, 1, 0, 1, 1 },
{ 1, 3, 3, 4, 0, 4, 0, 0, 0, 1 },
{ 1, 3, 3, 0, 4, 0, 4, 0, 1, 1 },
{ 1, 1, 1, 1, 1, 1, 0, 5, 1, 0 },
{ 0, 0, 0, 0, 0, 1, 1, 1, 1, 0 } };
void DrawMap()
{
	
	for (int i = 0; i < 7; i ++)
	{
		for (int j = 0; j < 10; j ++)
		{
			switch (map[i][j])
			{
			case 0:
				cout <<"  ";
				break;
			case 1:
				cout <<"■";
				break;
			case 3:
				cout <<"☆";
				break;
			case 4:
				cout <<"□";
				break;
			case 5:
				cout <<"▲";
				break;
			case 7: //4+3 箱子+目的地
				cout << "★";
				break;
			case 8: //5+3 人+目的地
				cout << "▲";
				break;
			}
		}
		cout << endl;
	}
}
void PlayGame()
{
	int row, col; //人的行 和 列
	for (int i = 0; i < 7; i ++) 
	{
		for (int j = 0; j < 10; j ++) 
		{
			if (map[i][j] == 5 || map[i][j] == 8)
			{
				row = i; //i 0-6
				col = j; //j 0-9
			}
		}
	}
	//cout << "卫聚聚分数 " << ncount << endl;
	cout << "卫聚聚坐标 (" << row + 1 << "," << col + 1 << ")" << endl;
	//wasd 字符  char
	char input; 
	input = _getch(); 
	switch (input)
	{
		
		//人能走的情况:
		//1.人的前面是空地.
		//2.人的前面是目的地.
		//3.人的前面是箱子,箱子的前面是空地.
		//4.人的前面是箱子,箱子的前面是目的地.
	case 'w': //上
		if (map[row - 1][col] == 0 || map[row - 1][col] == 3) //如果人的前面是空地或者目的地
		{
			map[row][col] -= 5; //人的ID有可能是5 也有可能是8
			map[row - 1][col] += 5;
		}
		else if (map[row - 1][col] == 4 || map[row - 1][col] == 7)//人的前面是箱子
		{
			if (map[row - 2][col] == 0 || map[row - 2][col] == 3)//箱子的前面是空地
			{
				map[row - 2][col] += 4;
				map[row - 1][col] += 1;
				map[row][col] -= 5;
			}
		}
		break;
	case 's': //下
		if (map[row + 1][col] == 0 || map[row + 1][col] == 3) //如果人的前面是空地或者目的地
		{
			map[row][col] -= 5; //人的ID有可能是5 也有可能是8
			map[row + 1][col] += 5;
		}
		else if (map[row + 1][col] == 4 || map[row + 1][col] == 7)//人的前面是箱子
		{
			if (map[row + 2][col] == 0 || map[row + 2][col] == 3)//箱子的前面是空地
			{
				map[row + 2][col] += 4;
				map[row + 1][col] += 1;
				map[row][col] -= 5;
			}
		}
		break;
	case 'a': //左
		if (map[row][col - 1] == 0 || map[row][col - 1] == 3) //如果人的前面是空地或者目的地
		{
			map[row][col] -= 5; //人的ID有可能是5 也有可能是8
			map[row][col - 1] += 5;
		}
		else if (map[row][col - 1] == 4 || map[row][col - 1] == 7)//人的前面是箱子
		{
			if (map[row][col - 2] == 0 || map[row][col - 2] == 3)//箱子的前面是空地
			{
				map[row][col - 2] += 4;
				map[row][col - 1] += 1;
				map[row][col] -= 5;
			}
		}
		break;
	case 'd': //右
		if (map[row][col + 1] == 0 || map[row][col + 1] == 3) //如果人的前面是空地或者目的地
		{
			map[row][col] -= 5; //人的ID有可能是5 也有可能是8
			map[row][col + 1] += 5;
		}
		else if (map[row][col + 1] == 4 || map[row][col + 1] == 7)//人的前面是箱子
		{
			if (map[row][col + 2] == 0 || map[row][col + 2] == 3)//箱子的前面是空地
			{
				map[row][col + 2] += 4;
				map[row][col + 1] += 1;
				map[row][col] -= 5;
			}
		}
		break;
		break;
	}
}
int main()
{
	SetConsoleTitle("卫洪宇箱推器");
	system("mode con cols=40 lines=20");
	while (1)
	{
		system("cls");
		DrawMap();
		PlayGame();
	}
	return 0;
}

​

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值