C语言编写简单的推箱子小游戏

走迷宫:
1、定义一个二维数组作为迷宫
2、定义老鼠的坐标
3、获取游戏开始时的时间time(NULL)
4、进入循环
1、system 清理屏幕
2、显示迷宫(遍历二维数组)
3、检查是否走出迷宫
获取游戏结束时的时间:计算出共花费多少时间
time(NULL)
是:结束程序
4、获取方向键并处理
判断接下来要走的位置是否有路
1、把新位置赋值为老鼠’@’
2、把旧位置赋值为路 ’ ’
3、把记录老鼠的坐标更新

推箱子:
1、定义角色与数值的关系:
路: 0 ’ ’
角色: 2 ‘@’
墙壁: 3 ‘#’
箱子: 4 ‘ ′ 目 标 点 : 5 ′ ∗ ′ 有 人 的 目 标 点 : 7 ′ @ ′ 有 箱 子 的 目 标 点 : 9 ′ ' 目标点:5 '*' 有人的目标点: 7 '@' 有箱子的目标点:9 ' 57@9
case 0:printf(" “);break;
case 2:printf(”@ “);break;
case 3:printf(”# “);break;
case 4:printf(”$ “);break;
case 5:printf(”* “);break;
case 7:printf(”@ “);break;
case 9:printf(”$ ");break;

2、定义地图
char map[8][8] = {
    {0,0,3,3,3,3,0,0},
    {0,0,3,5,5,3,0,0},
    {0,3,3,0,5,3,3,0},
    {0,3,0,0,4,5,3,0},
    {3,3,0,4,0,0,3,3},
    {3,0,0,3,4,4,0,3},
    {3,0,0,2,0,0,0,3},
    {3,3,3,3,3,3,3,3},  
    };
3、定义记录小人的位置坐标的变量
3、记录步数
4、进入循环 
    1、刷新屏幕
    2、显示地图
    3、检查是否胜利:判断数组中9的个数,把步数显示
    4、获取方向键并处理
        1:路
        2:墙壁
        3:箱子
            箱子前面:路
            箱子前面:墙
            箱子前面:目标点
        4、目标点

注意:
获取方向键使用getch.h头文件中的getch函数
把getch.h头文件复制到共享文件夹,然后通过获取超级管理员权限来移动到 /usr/include/
sudo cp getch.h /usr/include
sudo chmod +r /usr/include/getch.h
测试调用getch(),方向键的键值分别是多少
183 上
184 下
185 右
186 左

<stdlib.h>
system("命令名")    system("clear") 实现清屏

<time.h>
time(NULL)  获取自从1970-01-01 00:00:00 到现在过了多少秒
    #include <stdio.h>
#include <stdlib.h>
#include <getch.h>

int main(int argc,const char* argv[])
{
	char map[8][8] = {
		{0,0,3,3,3,3,0,0},	
		{0,0,3,5,5,3,0,0},	
		{0,3,3,0,5,3,3,0},	
		{0,3,0,0,4,5,3,0},	
		{3,3,0,4,0,0,3,3},	
		{3,0,0,3,4,4,0,3},	
		{3,0,0,2,0,0,0,3},	
		{3,3,3,3,3,3,3,3},	
		};	
		
	char m_x = 6,m_y = 3;
	int step = 0;

	for(;;)
	{
		int cnt = 0;
		system("clear");

		for(int i=0;i<8;i++)
		{
			for(int j=0;j<8;j++)
			{
				switch(map[i][j])
				{
					case 0:printf("  ");break;
					case 2:printf("@ ");break;
					case 3:printf("# ");break;
					case 4:printf("$ ");break;
					case 5:printf("* ");break;
					case 7:printf("@ ");break;
					case 9:printf("$ ");cnt++;break;
				}
			}
			printf("\n");
		}
		if(4 == cnt)
		{
			printf("游戏成功,共走了%d步\n",step);
			return 0;
		}
		
		//角色位置坐标的偏移
		int move_x = 0,move_y = 0;

		switch(getch())
		{
			case 183:
				move_x--;break;
			case 184:
				move_x++;break;
			case 185:
				move_y++;break;
			case 186:
				move_y--;break;
		}
		if(0 == map[m_x+move_x][m_y+move_y] 
				|| 5 == map[m_x+move_x][m_y+move_y])
		{
			map[m_x+move_x][m_y+move_y] += 2;
			map[m_x][m_y] -= 2;
			m_x += move_x;
			m_y += move_y;
		}
		else if(4 == map[m_x+move_x][m_y+move_y] 
				|| 9 == map[m_x+move_x][m_y+move_y])
		{
			if(0 == map[m_x+move_x*2][m_y+move_y*2] 
				|| 5 == map[m_x+move_x*2][m_y+move_y*2])
			{
				map[m_x+move_x*2][m_y+move_y*2] += 4;
				map[m_x+move_x][m_y+move_y] -= 2;
				map[m_x][m_y] -= 2;
				m_x += move_x;
				m_y += move_y;
			}
		}
	}
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值