/*
推箱子小游戏
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. Apache Storm

    作者:jiangzz 电话:15652034180 微信:jiangzz_wx 微信公众账号:jiangzz_wy 背景介绍 流计算:将大规模流动数据在不断变化的运动过程中实现数据的实时分析,捕捉到可 ...

  2. 移动端-处理后台传过来的html中图片的显示

    function DealWithImg() { var width = 0; if (window.screen.width) { width = window.screen.width; } el ...

  3. JAVA的运算符和条件结构

    一.JAVA的运算符. 1.赋值运算符 赋值就是把一个变量的值赋给另一个变量. 语法: 变量名=表达式     例如  n = m + 5 2.算术运算符      算术运算符是数学中常用的加.减.乘 ...

  4. Python3:输出当前目录所有目录和文件--walk()函数

    有了前一篇文章的介绍,再输出目录,也不过是多写一个函数的事情了,我把它封装成了类~~ 发现walk()真的是一个超级方便好用的函数.这种情况下用listdir()是搞定不了的啦 import os c ...

  5. 软件测试-培训的套路-log3

    最新的套路!我是没了解过--下图中描述-log3 Dotest-董浩 但是我知道不管什么没有白吃的午餐而且还会给钱…如果真的有,请醒醒! 当然话又回来,套路不套路,关键看你是否需要:你如果需要我觉得是 ...

  6. php跨域问题记录

    记录跨域问题 一.问题 在控制层加了如下代码: header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN'] ); header('Ac ...

  7. 项目Alpha冲刺(团队)-第三天冲刺

    格式描述 课程名称:软件工程1916|W(福州大学) 作业要求:项目Alpha冲刺(团队)-代码规范.冲刺任务与计划 团队名称:为了交项目干杯 作业目标:描述第三天冲刺的项目进展.问题困难.心得体会 ...

  8. 防盗链之URL参数签名

    一.概述 传统的 IP 禁用.referer 防盗链.User-Agent 防盗链.地区访问控制等防盗链措施已经无法完全满足用户要求,所以开发出URL参数签名方式来防盗链 二.实现 Token防盗链是 ...

  9. winform倒计时

    public partial class Form1 : Form { private int Seconds; public Form1() { InitializeComponent(); // ...

  10. vertx模块DeploymentManager部署管理器

    DeploymentManager public DeploymentManager(VertxInternal vertx) { this.vertx = vertx; loadVerticleFa ...