很多编程爱好者都编写过推箱子游戏编程吧,最近有好些朋友看见我以前的推箱子程序后,

问我是怎么做的。我一直想把这个程序的整个过程写一份详细的东西,与各位编程爱好者分享,一直没空。正好现在放假了,而且离回家还有几天。于是我就把这个程序重新写了一遍,尽量使程序的结构比较清晰好懂一些。同时写了下面的这份东西。

通过w,s,a,d实现上下左右的移动

声明画图函数

然后分别对移动位置进行情况判断:

1.如果人前面是空地。

2.如果人前面是目的地。

3.如果人前面是箱子。有以下两种情况:

如果人前面是箱子,而箱子前面是空地。

如果人的前面是箱子,而箱子前面是目的地。

4.如果人前面是已经进入某目的地的箱子。有以下两种情况:

如果人前面是已经进入某目的地的箱子,而箱子前面是空地。

如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。

5.对箱子原先位置的判断。

6.对人原先位置进行判断。

【从百科上参考查阅下载的代码,并加以整理】

[cpp] view plain copy

//此小游戏使用C语言编写,编译环境VS2008

#include

#include

#include

int i,j;

void draw_map(int map[10][12]); //声明画图函数

int main()

{

char input;

int count=0; //定义记分变量

/*下面定义一个二维数组,其中的元素是不同图像的ID号,在后面的函数中将讲解不同数字分别代表的图像元素*/

int map[10][12] = {

while (1) //死循环,等待用户命令

{

system("CLS");

for (i=0;i

{

printf("%d",i);

}

printf(" ");

/*for (i=1;i

{

printf("%d ",i);

}*/

printf(" ");

draw_map(map);

printf("当前得分:%d ",count);

//找初始位置

for (i=0;i

{

for (j=0;j

{

if (map[i][j]==6||map[i][j]==9)

break;

}

if (map[i][j]==6||map[i][j]==9)

break;

}

printf("您的当前坐标(%d,%d)",i,j);

input = getch(); //用getch()函数无需回车确认地获取用户输入,用于控制行走方向。

switch (input)

{

case'w':

//如果人前面是空地。 //0代表空地 6代表人 //3代表目的地

if(map[i-1][j]==0)

{

map[i-1][j]=6+0; //人往前走一步,ID为人的ID()加上空地的ID()。

if(map[i][j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。

map[i][j]=3; //将人往前走一步后原地的ID修改为空地ID()。

else

map[i][j]=0; //否则原地ID修改为空地ID 。

}

//如果人前面是目的地。

elseif((map[i-1][j]==3)||(map[i-1][j]==9))

{

map[i-1][j]=6+3; //人往前走一步,ID为人ID+目的地ID=9。

if(map[i][j]==9) //如果原地也是目的地(ID为)。

map[i][j]=3; //人走后把原地ID修改回目的地ID。

else

map[i][j]=0; //否则原地ID修改为为空地ID

}

//如果人前面是箱子。//4代表箱子 //7箱子进入目的地

elseif(map[i-1][j]==4)

{

//如果人前面是箱子,而箱子前面是空地。

if (map[i-2][j]==0)

{

map[i-2][j]=4; //人推箱子往前走一步,把空地ID修改为箱子ID()

//下面是对箱子原地进行判断

if(map[i-1][j]==7) //如果箱子原地为目的地。

map[i-1][j]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。

else

map[i-1][j]=6; //否则,人站在了原来的空地上,ID应该为+0=6。

//下面是对人原地进行判断

if(map[i][j]==9) //如果之前是目的地。

map[i][j]=3; //人走了之后修改回目的地ID。

else

map[i][j]=0; //否则就是空地。

}

//如果人的前面是箱子,而箱子前面是目的地。

elseif (map[i-2][j]==3)

{

map[i-2][j]=7; //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。

count++;

//下面是对箱子原先位置的判断,同上。

if(map[i-1][j]==7)

map[i-1][j]=9;

else

map[i-1][j]=6;

//下面是对人原先位置进行判断,同上。

if(map[i][j]==9)

map[i][j]=3;

else

map[i][j]=0;

}

}

//如果人前面是已经进入某目的地的箱子(ID=7)。

elseif(map[i-1][j]==7)

{

//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。

if(map[i-2][j]==0)

{

count--;

map[i-2][j]=4; //把箱子重新推到空地上,ID=箱子ID+空地ID=4。

map[i-1][j]=9; //人自然而然的就站在了原先的目的地上了。

//下面是对人原先地进行判断,方法同上。

if(map[i][j]==9)

map[i][j]=3;

else

map[i][j]=0;

}

//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。

if(map[i-2][j]==3)

{

map[i-2][j]=7; //把箱子推入了另一目的地,自然,ID也应是。

map[i-1][j]=9; //人站在了目的地上。

//下面是对人原先站立地进行判断,方法同上。

if(map[i][j]==9)

map[i][j]=3;

else

map[i][j]=0;

}

}

break;

case's':

//如果人前面是空地。

if(map[i+1][j]==0)

{

map[i+1][j]=6+0; //人往前走一步,ID为人的ID()加上空地的ID()。

if(map[i][j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。

map[i][j]=3; //将人往前走一步后原地的ID修改为空地ID()。

else

map[i][j]=0; //否则原地ID修改为空地ID 。

}

//如果人前面是目的地。

elseif(map[i+1][j]==3)

{

map[i+1][j]=6+3; //人往前走一步,ID为人ID+目的地ID=9。

if(map[i][j]==9) //如果原地也是目的地(ID为)。

map[i][j]=3; //人走后把原地ID修改回目的地ID。

else

map[i][j]=0; //否则原地ID修改为为空地ID

}

//如果人前面是箱子。

elseif(map[i+1][j]==4)

{

//如果人前面是箱子,而箱子前面是空地。

if (map[i+2][j]==0)

{

map[i+2][j]=4; //人推箱子往前走一步,把空地ID修改为箱子ID()

//下面是对箱子原地进行判断

if(map[i+1][j]==7) //如果箱子原地为目的地。

map[i+1][j]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。

else

map[i+1][j]=6; //否则,人站在了原来的空地上,ID应该为+0=6。

//下面是对人原地进行判断

if(map[i][j]==9) //如果之前是目的地。

map[i][j]=3; //人走了之后修改回目的地ID。

else

map[i][j]=0; //否则就是空地。 (加群: 571545210 学习编程,在群里获得更多的学习资料)

}

//如果人的前面是箱子,而箱子前面是目的地。

elseif (map[i+2][j]==3)

{

map[i-2][j]=7; //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。

count++;

//下面是对箱子原先位置的判断,同上。

if(map[i+1][j]==7)

map[i+1][j]=9;

else

map[i+1][j]=6;

//下面是对人原先位置进行判断,同上。

if(map[i][j]==9)

map[i][j]=3;

else

map[i][j]=0;

}

}

//如果人前面是已经进入某目的地的箱子(ID=7)。

elseif(map[i+1][j]==7)

{

//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。

if(map[i+2][j]==0)

{

count--;

map[i+2][j]=4; //把箱子重新推到空地上,ID=箱子ID+空地ID=4。

map[i+1][j]=9; //人自然而然的就站在了原先的目的地上了。

//下面是对人原先地进行判断,方法同上。

if(map[i][j]==9)

map[i][j]=3;

else

map[i][j]=0;

}

//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。

if(map[i+2][j]==3)

{

map[i+2][j]=7; //把箱子推入了另一目的地,自然,ID也应是。

map[i+1][j]=9; //人站在了目的地上。

//下面是对人原先站立地进行判断,方法同上。

if(map[i][j]==9)

map[i][j]=3;

else

map[i][j]=0;

}

}

break;

case'a':

//如果人前面是空地。

if(map[i][j-1]==0)

{

map[i][j-1]=6+0; //人往前走一步,ID为人的ID()加上空地的ID()。

if(map[i][j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。

map[i][j]=3; //将人往前走一步后原地的ID修改为空地ID()。

else

map[i][j]=0; //否则原地ID修改为空地ID 。

}

//如果人前面是目的地。

elseif(map[i][j-1]==3)

{

map[i][j-1]=6+3; //人往前走一步,ID为人ID+目的地ID=9。

if(map[i][j]==9) //如果原地也是目的地(ID为)。

map[i][j]=3; //人走后把原地ID修改回目的地ID。

else

map[i][j]=0; //否则原地ID修改为为空地ID

}

//如果人前面是箱子。

elseif(map[i][j-1]==4)

{

//如果人前面是箱子,而箱子前面是空地。

if (map[i][j-2]==0)

{

map[i][j-2]=4; //人推箱子往前走一步,把空地ID修改为箱子ID()

//下面是对箱子原地进行判断

if(map[i][j-1]==7) //如果箱子原地为目的地。

map[i][j-1]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。

else

map[i][j-1]=6; //否则,人站在了原来的空地上,ID应该为+0=6。

//下面是对人原地进行判断

if(map[i][j]==9) //如果之前是目的地。

map[i][j]=3; //人走了之后修改回目的地ID。

else

map[i][j]=0; //否则就是空地。

}

//如果人的前面是箱子,而箱子前面是目的地。

elseif (map[i][j-2]==3)

{

count++;

map[i][j-2]=7; //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。

//下面是对箱子原先位置的判断,同上。

if(map[i][j-1]==7)

map[i][j-1]=9;

else

map[i][j-1]=6;

//下面是对人原先位置进行判断,同上。

if(map[i][j]==9)

map[i][j]=3;

else

map[i][j]=0;

}

}

//如果人前面是已经进入某目的地的箱子(ID=7)。

elseif(map[i][j-1]==7)

{

//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。

if(map[i][j-2]==0)

{

count--;

map[i][j-2]=4; //把箱子重新推到空地上,ID=箱子ID+空地ID=4。

map[i][j-1]=9; //人自然而然的就站在了原先的目的地上了。

//下面是对人原先地进行判断,方法同上。

if(map[i][j]==9)

map[i][j]=3;

else

map[i][j]=0;

}

//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。

if(map[i][j-2]==3)

{

map[i][j-2]=7; //把箱子推入了另一目的地,自然,ID也应是。

map[i][j-1]=9; //人站在了目的地上。

//下面是对人原先站立地进行判断,方法同上。

if(map[i][j]==9)

map[i][j]=3;

else

map[i][j]=0;

}

}

break;

case'd':

//如果人前面是空地。

if(map[i][j+1]==0)

{

map[i][j+1]=6+0; //人往前走一步,ID为人的ID()加上空地的ID()。

if(map[i][j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。

map[i][j]=3; //将人往前走一步后原地的ID修改为空地ID()。

else

map[i][j]=0; //否则原地ID修改为空地ID 。

}

//如果人前面是目的地。

elseif(map[i][j+1]==3)

{

map[i][j+1]=6+3; //人往前走一步,ID为人ID+目的地ID=9。

if(map[i][j]==9) //如果原地也是目的地(ID为)。

map[i][j]=3; //人走后把原地ID修改回目的地ID。

else

map[i][j]=0; //否则原地ID修改为为空地ID

}

//如果人前面是箱子。

elseif(map[i][j+1]==4)

{

//如果人前面是箱子,而箱子前面是空地。

if (map[i][j+2]==0)

{

map[i][j+2]=4; //人推箱子往前走一步,把空地ID修改为箱子ID()

//下面是对箱子原地进行判断

if(map[i][j+1]==7) //如果箱子原地为目的地。

map[i][j+1]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。

else

map[i][j+1]=6; //否则,人站在了原来的空地上,ID应该为+0=6。

//下面是对人原地进行判断

if(map[i][j]==9) //如果之前是目的地。

map[i][j]=3; //人走了之后修改回目的地ID。

else

map[i][j]=0; //否则就是空地。

}

//如果人的前面是箱子,而箱子前面是目的地。

elseif (map[i][j+2]==3)

{

count++;

map[i][j+2]=7; //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。

//下面是对箱子原先位置的判断,同上。

if(map[i][j+1]==7)

map[i][j+1]=9;

else

map[i][j+1]=6;

//下面是对人原先位置进行判断,同上。

if(map[i][j]==9)

map[i][j]=3;

else

map[i][j]=0;

}

}

//如果人前面是已经进入某目的地的箱子(ID=7)。

elseif(map[i][j+1]==7)

{

//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。

if(map[i][j+2]==0)

{

count--;

map[i][j+2]=4; //把箱子重新推到空地上,ID=箱子ID+空地ID=4。

map[i][j+1]=9; //人自然而然的就站在了原先的目的地上了。

//下面是对人原先地进行判断,方法同上。

if(map[i][j]==9)

map[i][j]=3;

else

map[i][j]=0;

}

//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。

if(map[i][j+2]==3)

{

map[i][j+2]=7; //把箱子推入了另一目的地,自然,ID也应是。

map[i][j+1]=9; //人站在了目的地上。

//下面是对人原先站立地进行判断,方法同上。

if(map[i][j]==9)

map[i][j]=3;

else

map[i][j]=0;

}

}

break;

}

if(count==8) //如果分数达到分

{

system("CLS"); //清屏

draw_map(map);

break; //退出死循环

}

}

printf(" 恭喜你,过关了!! "); //过关提示

return 0;

}

void draw_map(int map[10][12])

{

for(i=0;i

{

for(j=0;j

{

switch(map[i][j])

{

case 0:

printf(" "); //数字代表道路

break;

case 1:

printf("#"); //数字代表墙壁

break;

case 2:

printf(" "); //数字是游戏边框的空白部分

break;

case 3:

printf("!"); //数字代表目的地

break;

case 4:

printf("*"); //数字代表箱子

break;

case 7:

printf("$"); //数字代表箱子进入目的地

break;

case 6:

printf("@"); //数字代表人

break;

case 9:

printf("@"); //数字代表人进入目的地

break;

}

}

printf(" "); //分行输出

}

}

android游戏编程之从零开始_纯C语言程序员写的编程新手入门基础小游戏之最炫酷推箱子...相关推荐

  1. c++语言表白超炫图形_让C/C++程序员告诉你什么叫浪漫,表白黑科技,炫酷多彩求爱利器...

    原标题:让C/C++程序员告诉你什么叫浪漫,表白黑科技,炫酷多彩求爱利器 前言 缘是美丽的邂逅,爱是心跳的感觉,情是心灵的交会,恋是甜蜜的思念,走在爱与被爱的边缘,你见或者不见,爱你的心始终不改变!C ...

  2. c语言程序员写贪吃蛇代码28,厉害了,程序员28行代码写贪吃蛇游戏,附源码!...

    对于贪吃蛇游戏,大家基本上都玩过,但是作为一个程序员,大家是否想过要自己去写一个贪吃蛇,毕竟玩别人写的游戏和自己写的游戏是两种截然不同的感受,而且也可以通过制作来提升自己的技术! 其实贪吃蛇的逻辑并不 ...

  3. python爬虫编程100例_哪种Python程序员最赚钱?爬虫数据告诉你!

    世界上有三种宝贵的东西: 知识.粮食和友谊. 那么,1 块钱,你能买到什么呢? 骑一次共享单车 买 2 包辣条 1/190 件格子衬衫 1/299 支口红 1/10099 个 iPhone XS 但是 ...

  4. python编程大赛队名_【推荐】程序员团队名称和口号word版本 (12页)

    本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除! == 本文为 word 格式,下载后可方便编辑和修改! == 程序员团队名称和口号 篇一: ( 程序员的自我 ...

  5. java程序员用代码写的情书_一位Java程序员写给女友的情书

    我能抽象出整个世界,但是我不能抽象你... 想让你成为私有常量,外部函数无法访问你... 又想让你成为全局常量,在整个生命周期随时都可以调用你... 因为世界上没有这样的常量... 所以我无法定义你. ...

  6. 小程序 const moment = require('moment')_有C语言程序员说,使用移位操作代替乘除运算效率更高,真的吗?...

    在C语言程序开发中,一些移位操作似乎可以达到与乘除法操作一样的效果.例如,4>>1 等于 2,此时右移一位相当于除以 2.类似的,2<<1 等于 4,此时左移一位相当于乘以 2 ...

  7. 程序员如何用编程套路追到女朋友的?

    最近身边的程序员总在抱怨说同学朋友都结婚了,自己连对象在哪都还不知道.程序员找女朋友真的很难吗?在本文作者看来的话,程序员找女朋友无非就是写程序的那一套:编辑.预处理.编译.连接.运行这五个阶段.下面 ...

  8. 程序员如何提高编程时打字速度的5个Tips

    文章目录 程序员如何提高编程时打字速度 前言 打字速度等级 测试编程时打字速度 提高编程时打字速度的5个Tips Tips1: 选用合适的键盘 Tips2: 保持正确的坐姿和打字姿势 Tips3: 选 ...

  9. 李笑来python自学_李笑来登顶 GitHub TOP 榜!币圈大佬要教程序员如何自学编程

    原标题:李笑来登顶 GitHub TOP 榜!币圈大佬要教程序员如何自学编程 币圈红人李笑来,何许人也? --从英语老师.作家,到比特币首富.投资人,李笑来的身上有着众多广为人知的标签.因" ...

最新文章

  1. 学习 Linux,101: 引导系统
  2. openstack-mitaka之Telemetry服务(controller安装部署)
  3. python学哪个版本-老男孩python学习用的哪个版本?
  4. JPA保存数据异常:org.hibernate.AnnotationException: @COLUMN(s) NOT allowed ON a @ManyToOne property
  5. 杭电find the night
  6. [C/C++面试题]-错题笔记与解析
  7. 机器学习(二十二)——推荐算法中的常用排序算法, Tri-training
  8. activity 点击后传递数据给fragment_Fragment 新特性 : Fragment Result API 使用以及源码分析
  9. nginx中的location指令
  10. Python把list变为str
  11. 冷门的linux设备,你可能不知道的6个冷门linux实用命令
  12. 《数据库技术原理与应用教程第2版》——3.6计算机世界与物理模型
  13. 如果买一辆二手的劳斯莱斯在三线城市跑婚车,多久能回本?
  14. c语言编写计算单词长度,编写一个程序,打印输入中单词长度的直方图
  15. 再谈UDP协议—浅入理解深度记忆
  16. docker 镜像注册【图文教程】
  17. MySQL表设计(表的关联关系)
  18. 用余子式、代数余子式和伴随 来求逆矩阵
  19. Linux lvm(pv、vg、lv)操作命令收集
  20. 周信东c语言实验二实验报告,实验三 循环结构程序设计参考答案

热门文章

  1. Java泛型用于方法,类和接口
  2. 关于解决织梦文档栏目删除后ID 从1开始的方法
  3. python_递归原理
  4. this和static
  5. 求一个数字中1的个数
  6. PHP环境安全性能检查
  7. 关于EOF,转自新浪微博
  8. 一个Excel导出类的实现过程(一):泛型与反射
  9. 使用IOUtils和FileUtils
  10. html div 知识点,HTML知识点总结之div、section标签