linux推箱子脚本,【编程例题】标准C语言实现推箱子游戏!附解析!

今天我来分享一道对于初学C语言的同学非常有启发作用的编程例题,是用C语言实现单张地图推箱子的小游戏。

这个游戏是基于Linux环境下编程的,所用工具为ubuntu、和gcc编译器。

首先推箱子的地图,我们根据经典游戏推箱子中的其中一幅地图来自做,图片如下。

3cd92035629781a3e8f815bcc1f80cc0.png

用图片形式实现这张图片对于初学编程的同学来说,难以实现,所以我们选择用字符代替的形式来实现这张地图。

我们采用2为数组的方式来存储这张地图,具体的数字与字符含义转换如下:

0 printf(" "); 路

2 printf("@"); 人

3 printf("#"); 墙

4 printf("$"); 箱子

5 printf("O"); 目标点

7 printf("@"); 人

9 printf("$"); 箱子

代码如下:

#include

#include

#include

#include

int mx = 0;

int my = 0;

int step = 0;

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}

};

void show_map(void)

{

for(int i=0;i<8;i++)

{

for(int j=0;j<8;j++)

{

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

{

printf(" ");

}

else if(2 == map[i][j])

{

printf("@ ");

}

else if(3 == map[i][j])

{

printf("# ");

}

else if(4 == map[i][j])

{

printf("$ ");

}

else if(5 == map[i][j])

{

printf("O ");

}

else if(7 == map[i][j])

{

printf("@ ");

}

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

{

printf("$ ");

}

}

printf("\n");

}

}

void up(void)

{

for(int i=0; i<8;i++)

{

for(int j=0; j<8;j++)

{

if(2 == map[i][j] || 7 == map[i][j])

{

mx =i;

my =j;

}

}

}

if(3 == map[mx-1][my])

{

return;

}

else if(0 == map[mx-1][my] || 5 == map[mx-1][my])

{

map[mx-1][my] += 2;

map[mx][my] -= 2;

step++;

}

else if(4 == map[mx-1][my] || 9 == map[mx-1][my])

{

if(0 == map[mx-2][my])

{

map[mx-2][my] += 4;

map[mx-1][my] -= 2;

map[mx][my] -= 2;

step++;

}

else if(5 == map[mx-2][my])

{

map[mx-2][my] += 4;

map[mx-1][my] -= 2;

map[mx][my] -= 2;

step++;

}

else

{

return;

}

}

}

void down(void)

{

for(int i=0; i<8;i++)

{

for(int j=0; j<8;j++)

{

if(2 == map[i][j] || 7 == map[i][j])

{

mx =i;

my =j;

}

}

}

if(3 == map[mx+1][my])

{

return;

}

else if(0 == map[mx+1][my] || 5 == map[mx+1][my])

{

map[mx+1][my] += 2;

map[mx][my] -= 2;

step++;

}

else if(4 == map[mx+1][my] || 9 == map[mx+1][my])

{

if(0 == map[mx+2][my])

{

map[mx+2][my] += 4;

map[mx+1][my] -= 2;

map[mx][my] -= 2;

step++;

}

else if(5 == map[mx+2][my])

{

map[mx+2][my] += 4;

map[mx+1][my] -= 2;

map[mx][my] -= 2;

step++;

}

else

{

return;

}

}

}

void left(void)

{

for(int i=0; i<8;i++)

{

for(int j=0; j<8;j++)

{

if(2 == map[i][j] || 7 == map[i][j])

{

mx =i;

my =j;

}

}

}

if(3 == map[mx][my-1])

{

return;

}

else if(0 == map[mx][my-1] || 5 == map[mx][my-1])

{

map[mx][my-1] += 2;

map[mx][my] -= 2;

step++;

}

else if(4 == map[mx][my-1] || 9 == map[mx][my-1])

{

if(0 == map[mx][my-2])

{

map[mx][my-2] += 4;

map[mx][my-1] -= 2;

map[mx][my] -= 2;

step++;

}

else if(5 == map[mx][my-2])

{

map[mx][my-2] += 4;

map[mx][my-1] -= 2;

map[mx][my] -= 2;

step++;

}

else

{

return;

}

}

}

void right(void)

{

for(int i=0; i<8;i++)

{

for(int j=0; j<8;j++)

{

if(2 == map[i][j] || 7 == map[i][j])

{

mx =i;

my =j;

}

}

}

if(3 == map[mx][my+1])

{

return;

}

else if(0 == map[mx][my+1] || 5 == map[mx][my+1])

{

map[mx][my+1] += 2;

map[mx][my] -= 2;

step++;

}

else if(4 == map[mx][my+1] || 9 == map[mx][my+1])

{

if(0 == map[mx][my+2])

{

map[mx][my+2] += 4;

map[mx][my+1] -= 2;

map[mx][my] -= 2;

step++;

}

else if(5 == map[mx][my+2])

{

map[mx][my+2] += 4;

map[mx][my+1] -= 2;

map[mx][my] -= 2;

step++;

}

else

{

return;

}

}

}

void start_soko(void)

{

FILE* frp = fopen("soko.bin","r");

if(NULL == frp)

{

printf("数据加载错误!\n");

return;

}

fread(map,1,64,frp);

fclose(frp);

}

void exit_soko(void)

{

FILE* fwp = fopen("soko.bin","w");

printf("____");

if(NULL == fwp)

{

printf("数据保存错误!\n");

}

fwrite(map,1,64,fwp);

fclose(fwp);

}

int main()

{

start_soko();

while(true)

{

system("clear");

//显示地图

show_map();

//判定是否游戏结束

int cnt = 0;

for(int i=0; i<8; i++)

{

for(int j=0; j<8;j++)

{

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

{

cnt++;

}

}

}

if(4 == cnt)

{

printf("游戏结束,共使用%d步!\n",step);

return 0;

}

printf("%d\n",cnt);

//获取方向键

switch(getch())

{

case 'w':up();break;

case 's':down();break;

case 'a':left();break;

case 'd':right();break;

case 'q':exit_soko();return 0;

default:

puts("输入指令有误!");

}

}

exit_soko();

}

本文地址:https://blog.csdn.net/weixin_48994377/article/details/107324818

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/562239.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于JavaSwing+mysql的图书管理系统设计和实现

前言&#xff1a; 项目是使用Java swing开发&#xff0c;可实现基础数据维护、图书类型管理和维护、图书信息管理和维护、注销退出、关于作者简介等功能。界面设计比较简介、适合作为Java课设设计以及学习技术使用。 引言 随着计算机及网络技术的飞速发展&#xff0c;Intranet …

linux的vi把文件合并一行,学习Vim合并行的方法和技巧

刚接触 Vim 会觉得它的学习曲线非常陡峭&#xff0c;要记住很多命令。所以这个系列的分享&#xff0c;不会教你怎么配置它&#xff0c;而是教你怎么快速的使用它。在开发时为了代码美观&#xff0c;经常会把属性用换行的方式显示。title"批量编辑所属组织":visible.s…

基于JavaSwing+mysql的学生社团管理系统设计和实现

前言&#xff1a; 项目是使用Java swingmysql开发&#xff0c;可实现基础数据维护、用户登录注册、社团信息列表查看、社团信息添加、社团信息修改、社团信息删除以及退出注销等功能、界面设计比较简单易学、适合作为Java课设设计以及学习技术使用。 引言 随着全球信息化的迅猛…

linux dhcp服务软包,dpkg包管理器详解

使用Debian或Ubuntu的linux用户肯定都用过或听过dpkg命令。“dpkg ”是“Debian Packager ”的简写。为 “Debian” 专门开发的套件管理系统&#xff0c;方便软件的安装、更新及移除。所有源自“Debian”的“Linux ”发行版都使用 “dpkg”。我的问题先说先我使用时的疑问。在使…

专栏订阅须知《必读》

作者介绍 专栏介绍&#xff1a; 本专栏是JavaWeb项目实战实战100套合集、目前作者还在更新整理、每一套都是经过作者精心测试运行调整无bug、订阅前先私聊博主、目前专栏列表还在慢慢整理更新中、部分精品私人定制项目在Java项目实战也能看见、需要的话可以联系博主 你能获取什…

lbp2900打印机linux驱动下载,佳能LBP2900打印机驱动

佳能LBP2900打印机驱动佳能LBP2900打印机驱动是一款由佳能官方推出的佳能LBP2900打印机驱动程序&#xff0c;佳能LBP2900打印机驱动操作简单、功能实用&#xff0c;能够有效解决打印机无法识别设备的问题&#xff0c;保证您进行正常的打印工作&#xff0c;是用户不可缺少的打印…

windows安装MySQL数据库【附安装文档和安装包】

MySQL下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1LE7jpBgcZFaQyLwYdXvvJQ&shflsharepset 提取码&#xff1a;ksx3 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 1,双击安装程序&#xff0c;进入安装页面&#xff1a;在下面的打钩…

基于java springboot博客管理系统设计和实现

文末可参与投票哟 &#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java李阳勇 公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345; 欢迎点赞 &#x1f44d; 收藏…

c语言成绩等级switch语句,请高手 帮忙做一道c语言题 编程,把百分制成绩转换成5级记分制,要求用switch语句。 90分以上(包括90):...

请高手 帮忙做一道c语言题 编程&#xff0c;把百分制成绩转换成5级记分制&#xff0c;要求用switch语句。 90分以上(包括90)&#xff1a;关注:243 答案:6 mip版解决时间 2021-02-04 20:52提问者巴黎左岸2021-02-03 20:52编程&#xff0c;把百分制成绩转换成5级记分制&#xf…

JavaSwing+mysql的图书管理系统设计实现

本项目演示地址链接 》 前言: 项目是使用Java swing开发,可实现基础数据维护、图书类型管理和维护、图书信息管理和维护、注销退出、关于作者简介等功能。界面设计比较简介、适合作为Java课设设计以及学习技术使用。 引言 随着计算机及网络技术的飞速发展,…

通信原理实验c语言,基于LabVIEW软件的通信原理实验教学平台设计方案

1.引言本文引用地址&#xff1a;http://www.eepw.com.cn/article/201809/388499.htm《通信原理》课程是我校通信工程专业、电子信息工程专业的一门专业基础课&#xff0c;学生对本门课程的掌握程度直接影响到后续专业课程的学习。在实际教学中认识到由于其理论性比较强&#xf…

android 菜单 功能键,Android交互体验必知:功能按键事件

【51CTO独家译文】本文为翻译自外文网站tutsplus.com的《Android交互体验必知&#xff1a;功能按键事件》。以下为全部译文&#xff1a;开始学习每一种Android设备一般都会提供除字母和数字外的物理功能按键&#xff0c;这一般是根据不同的Android制造商而有所不同&#xff0c;…

基于java springboot博客交流平台系统设计和实现

本项目演示连接地址》 前言 博客&#xff0c;又译为网络日志、 部落格或部落阁等&#xff0c;是一种通常由个人管理、不定期张贴新的文章的网站。 博客上的文章通常根据张贴时间&#xff0c; 以倒序方式由新到旧排列。 许多博客专注在特定的课题上提供评论或新闻&…

基于JavaWeb SSM mybatis 私人健身房系统管理平台设计和实现以及文档报告

本项目演示链接地址》 主要技术&#xff1a;Java 、springmvc、mybatis、jQuery 数据库&#xff1a;mysql 主要功能模块&#xff1a;登录、管理员列表、会员用户列表、健身课程信息、教练信息、器材信息、训练信息等 部分功能截图如下&#xff1a; 登录&#xff1a; 系统首…

基于 java springboot+layui仓库管理系统设计和实现

本项目演示链接地址》 主要功能模块 1.用户模块管理&#xff1a;用户登录、用户注册、用户的查询、添加、删除操作、 2.客户信息管理&#xff1a;.客户列表的展示、添加、修改、删除操作、 3.供应商管理&#xff1a;供应商详情列表的查看、添加、删除等操作、 4.退货管理和…

基于jsp+mysql+Spring+hibernate+的SSH在线学习交流论坛平台

本项目演示链接地址》 主要功能模块设计&#xff1a; 管理员角色包含以下功能&#xff1a;管理员登录,发布公告,修改资料,查看新帖,查看精华帖请求,封锁用户,创建讨论区等功能。 用户角色包含以下功能&#xff1a;按分类查看,用户登录,查看帖子详情,查看我的帖子,提交帖子,资料…

Java--Mybatis万字长文经典面试题王者笔记《收藏版》

前言&#xff1a; 前段时间一直和大家在分享java项目实战的内容、今天趁着周末给大家整理了Java工程师在面试中经常被问到持久层框架的面试题《Java--Mybatis》篇、希望大家喜欢、支持。后期也会继续整理其他的知识点、比如、ZooKeeper、Dubbo、Redis、MySQL、Spring、…

基于javaweb(springboot+mybatis)宠物医院预约管理系统设计和实现

本项目演示链接地址》 项目使用java SpringMVC、springboot mybatis、layui为核心技术编写 多的不说&#xff0c;直接上一部分效果图吧 首页登录有可爱的小猫咪 系统主页主要功能有会员信息、宠物管理、预约管理和统计分析等 预约列表 医院管理 宠物档案管理 下载订阅地址 相…

基于JavaWEB SSM SpringBoot婚纱影楼摄影预约网站设计和实现

本项目演示链接地址 》 主要功能设计&#xff1a; 运行环境: java jdk 1.8环境&#xff1a;IDEAtomcat环境&#xff1a; Tomcat 7.x,8主要功能说明&#xff1a; 管理员角色包含以下功能&#xff1a;管理员登录,订单管理,摄影师管理,级别管理,标签管理,摄影地点管理,客片管理,轮…

android 通知传值,Android消息通知(notification)和PendingIntent传值

Android支持Toast和NotificationManager两种通知方式&#xff0c;前者相当于一个定时关闭的对话框&#xff0c;后者是在状态栏上显示一条消息。Toast和Notification都可以随时取消。ToastA toast is a view containing a quick little message for the user. The toast class h…