/*
推箱子小游戏
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. MySQL学习11 - MySQL创建用户和授权

    权限管理 权限管理 我们知道我们的最高权限管理者是root用户,它拥有着最高的权限操作.包括select.update.delete.update.grant等操作.那么一般情况在公司之后DBA工程师 ...

  2. jquery的datatables第二次加载报错

    "destroy":true, "scrollX": true, "ordering": false, "sScrollXInne ...

  3. Spring ES

    elasticsearchTemplate 和 ElasticsearchRepository JPA中有个ElasticsearchRepository可以做Elasticsearch的相关增删改查 ...

  4. C# - 设计模式 - 模板模式

    模板模式 问题场景 咖啡和茶派生于抽象类饮料,咖啡和茶都具有烧水的方法,所以可以将烧水的方法提取到抽象类饮料中去实现,而咖啡具有一个向杯子加咖啡粉的方法,茶具有一个向杯子加茶叶的方法,看起来两个方法是 ...

  5. 【译】索引进阶(十一):SQL SERVER中的索引碎片【上篇】

    原文链接:传送门. 第十章节我们分析了索引的内部结构.有了这些关于索引结构的知识,我们便可以分析索引碎片了:其产生的原因,如何防止,以及何时可以不去关注它们. 一些背景知识 / 复习 以下知识对于理解 ...

  6. java学习笔记02-Eclipse IDE配置

    Eclipse是java的ide工具,ide是集成开发工具.实际开发中都需要使用ide工具.eclipse下载 java代码在运行时,是需要先进行编译,然后才能运行.可以直接在IDE工具里运行,它会帮 ...

  7. 深度探索C++对象模型

    深度探索C++对象模型 什么是C++对象模型: 语言中直接支持面向对象程序设计的部分. 对于各个支持的底层实现机制. 抽象性与实际性之间找出平衡点, 需要知识, 经验以及许多思考. 导读 这本书是C+ ...

  8. mybatis:SQL拦截器

    打印执行的SQL语句 import java.sql.Connection; import java.text.DateFormat; import java.util.Date; import ja ...

  9. 统计信息不准导致sql性能下降

    某局的预生产系统一条sql语句20分钟执行完,上线以后2个小时没执行出来,在预生产执行计划是hash join在生产是nested loop,通过awr基表wri$_optstat_tab_histo ...

  10. 无法为具有固定名称“System.Data.SqlClient”的 ADO.NET 提供程序加载在应用程序配置文件中注册的实体框架提供程序类型“System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer”。请确保使用限定程序集的名称且该程序集对运行的应用程序可用。有关详细信息,请参阅 http://go.m

    Windows服务中程序发布之后会如下错误: 无法为具有固定名称“System.Data.SqlClient”的 ADO.NET 提供程序加载在应用程序配置文件中注册的实体框架提供程序类型“Syste ...