/*
推箱子小游戏
1.定义绘制样式
用二维数组的方式
2.绘制图像
3.找出当前位置
4.逻辑判断,制造动作
根据数学xy轴的规律,这里使用ij
上移,行轴上升,行数减少
下移,行数下降,函数增加
左移,列数向左,列数减少
右移,列数向右,列数增加
*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define ROWS 8 //行数
#define COLS 9 //列数 int i = ; //行轴
int j = ; //列轴 //定义绘制样式
/*
0 代表 空地
1 代表 墙壁
3 代表 目的地
4 代表 箱子
5 代表 推箱子的人
7 代表 目的地上的箱子
8 代表 目的地上的人
*/
int cMap[ROWS][COLS] = {
{ , , , , , , , , },
{ , , , , , , , , },
{ , , , , , , , , },
{ , , , , , , , , },
{ , , , , , , , , },
{ , , , , , , , , },
{ , , , , , , , , },
{ , , , , , , , , }
}; //绘制图像
int GreatMap()
{ for (int i = ; i < ROWS;i++)
{
for (int j = ; j < COLS; j++)
{
switch (cMap[i][j])
{
case :
printf(" ");
break;
case :
printf("■");
break;
case :
printf("△");
break;
case :
printf("◎");
break;
case :
printf("♀");
break;
case :
printf("●");
break;
case :
printf("♀");
break;
default:
break;
}
}
printf("\n");
} return ;
} //找出人的当前位置
int FindManIndex()
{
for (i = ; i < ROWS;i++)
{
for (j = ; j < COLS;j++)
{
if (cMap[i][j] == || cMap[i][j] == )
break;
}
if (cMap[i][j] == || cMap[i][j] == )
break;
}
printf("人的坐标:[%d,%d]",j,i); return ;
} //制造动作
int CreateActions()
{
char cAction = _getch(); //输入字符不用回车
switch (cAction)
{
case 'W':
case 'w':
//----------------------------------上移
//如果上方是空地或者目的地
if (cMap[i - ][j] == || cMap[i - ][j] == )
{
cMap[i - ][j] += ;
cMap[i][j] -= ;
}
//如果上方是箱子或者目的地上的箱子,同时更上方是空地或者目的地
if ((cMap[i - ][j] == || cMap[i - ][j] == ) &&
(cMap[i - ][j] == || cMap[i - ][j] == ))
{
cMap[i - ][j] += ; cMap[i - ][j] += ;
cMap[i][j] -= ;
} break;
case 'A':
case 'a':
//----------------------------------左移
//如果左方是空地或者目的地
if (cMap[i][j-] == || cMap[i][j-] == )
{
cMap[i][j-] += ;
cMap[i][j] -= ;
}
//如果左方是箱子或者目的地上的箱子,同时更左方是空地或者目的地
if ((cMap[i][j-] == || cMap[i ][j-] == ) &&
(cMap[i][j-] == || cMap[i ][j-] == ))
{
cMap[i][j-] += ;
cMap[i][j-] += ;
cMap[i][j] -= ;
}
break;
case 'S':
case 's':
//----------------------------------下移
//如果下方是空地或者目的地
if (cMap[i + ][j] == || cMap[i + ][j] == )
{
cMap[i + ][j] += ;
cMap[i][j] -= ;
}
//如果下方是箱子或者目的地上的箱子,同时更下方是空地或者目的地
if ((cMap[i + ][j] == || cMap[i + ][j] == ) &&
(cMap[i + ][j] == || cMap[i + ][j] == ))
{
cMap[i + ][j] += ;
cMap[i + ][j] += ;
cMap[i][j] -= ;
}
break;
case 'D':
case 'd':
//----------------------------------右移
//如果右方是空地或者目的地
if (cMap[i][j + ] == || cMap[i][j + ] == )
{
cMap[i][j + ] += ;
cMap[i][j] -= ;
}
//如果右方是箱子或者目的地上的箱子,同时更右方是空地或者目的地
if ((cMap[i][j + ] == || cMap[i][j + ] == ) &&
(cMap[i][j + ] == || cMap[i][j + ] == ))
{
cMap[i][j + ] += ;
cMap[i][j + ] += ;
cMap[i][j] -=;
}
break;
}
return ;
} int main()
{ while ()
{
GreatMap();
FindManIndex(); CreateActions();
system("cls");
} system("pause");
return ;
}

完整版本的推箱子小游戏,最简单的纯C语言打造的更多相关文章

  1. C++ 控制台推箱子小游戏

              // 游戏菜单.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #in ...

  2. 推箱子小游戏《格鲁的实验室》13关 - bfs最短路径

    下载了一款推箱子小游戏,第13关的时候怎么也破不了最佳纪录(最少步数是9而我们最好的方案是10步),因为数据比较小(6*8的方阵),所以写了个BFS来找最短路. 游戏的目标是把小黄人推到黄色球,小绿人 ...

  3. C/C++编程笔记:C语言写推箱子小游戏,大一学习C语言练手项目

    C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...

  4. 每个人都可以用C语言写的推箱子小游戏!今天你就可以写出属于自己项目~

    C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...

  5. 用C#制作推箱子小游戏

    思路分析: 一.制作一个地图 二.地图中放置墙.箱子.人.目标等 三.让小人动起来完成推箱子动作 游戏制作: 1.按照上述地图制作一个地图  (12行×13列) 地图可以看做是行和列组成的,即可以看做 ...

  6. c++、c实现推箱子小游戏

    经过四次的修改和优化,终于将推箱子这个游戏完整的写出来了,今天就像大家分享一下这个游戏的编写. 这个游戏界面的编写总的来说不困难,主要是推动箱子的算法. (1)利用数组和windows api 即可写 ...

  7. 【面试笔试算法】Program 5 : 推箱子 (网易游戏笔试题)

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 推箱子是一款经典游戏.如图所示,灰色格子代表不能通过区域,蓝色方格是箱子,黑色圆形代表玩家,含有圆点的格子代表目标点. 规 ...

  8. 经典数独游戏+数独求解器—纯C语言实现

    "心常乐数独小游戏"(下面简称"本软件")是一款windows平台下的数独游戏软件. 本软件是开源.免费软件. 本软件使用纯C语言编写,MinGW编译,NSIS ...

  9. 《C++ Qt 设计模式》8|15拼图 小游戏的简单实现。拜托,别乱点!

    第零章:介绍 看到这个游戏了,感觉蛮好玩的,实现了一下. 界面如下: 游戏玩法:在3×*3的矩阵中,每个按钮都可以点击,如果按钮四周有一个是空白,则点击此按钮则会移动到这个空白.按钮字母顺序变成“AB ...

随机推荐

  1. Java 实现TCP/IP协议的收发数据(服务端)

    功能如下: 注: 只有服务端,没有客户端,测试时采用第三方软件作为客户端的. 收发数据目前能正常收发数据,只是中文的会变成乱码显示. 采用Thread类实现一个收发数据的线程. 服务端代码: impo ...

  2. 【题解】狼抓兔子—BZOJ1001。

    (胡扯时间)今天炒鸡无聊就打算BZOJ开始从第一道题开始顺着打,这样未来一段时间内也就有事干了.结果发现A+B切掉后就遭遇了一个"小小"的瓶颈(真不友好. 好了说题说题.看题第一眼 ...

  3. 第一天学JAVA,下载JDK,配置JAVA环境变量!!!

    步骤一:下载JDK https://www.oracle.com 我们首先进入到这个网站下载我们运行JAVA的所必须的JDK 进入到这个网站按照图示进入到下一个页面 因为刚学JAVA,我们的JDK版本 ...

  4. vue较深入的知识点

    1 理解何为虚拟节点 虚拟dom是什么? 虚拟dom就是通过js对象来模拟描述dom树,包括tag,attr, children等属性来代表标签名,属性,子元素等.由于不需要有操作dom的方法,所以比 ...

  5. vue.js学习系列-第一篇(代码)

    <html> <head> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"> ...

  6. opencv基础教程 之 图像基础和绘图

    1,教程:感谢小强 2,用argparse传参数来显示一张图片 #!/usr/bin/python #linux系统 #coding=utf-8 import cv2 import argparse ...

  7. tp5.0 queue 队列操作

    检查是否安装redis(没有请自行百度安装): phpinfo: 配置thinkphp-queue,没有请执行 composer require topthink/think-queue 加入: 创建 ...

  8. sed 修改文本

    修改文本是指将所匹配的文本行利用新文本替代,sed编辑命令的修改文本符号为 c\, [ sed]$ more input [ sed]$ more aa.sed #!/bin/sed -f //c\ ...

  9. css 生成图片添加的十字

    <span class="add" title="继续上传"></span> .add { display: inline-block; ...

  10. DGTween 控制物体移动并且播放相应的动画

    假设有以上的状态,咱们不动的时候需要播放发呆的动画,然后任意时刻会进行Run的行动.于是有了以上的状态机. 为了完成目标追踪,比如跟随咱们的光标,这时候就需要将如以下代码: ani = gameObj ...