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 目录定义,linux根目录定义

linux根目录定义发布时间:2011-04-15 13:07:46来源:红联作者:www.saxue.com操作系统里面的根目录是非常重要的&#xff0c;linux的根目录&#xff0c;类似于windows下的我的电脑&#xff0c;是所有文件系统的父目录&#xff0c;根目录也也与开机&#xff0c;还原&#xff0c;系…

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

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

linux setarch 命令,6.22. Util-linux-2.23.1

安装的程序&#xff1a;addpart, agetty, blkid, blockdev, cal, cfdisk, chcpu,chrt, col, colcrt, colrm, column, ctrlaltdel, cytune, delpart,dmesg, eject, fallocate, fdformat, fdisk, findfs, findmnt,flock, fsck, fsck.cramfs, fsck.minix, fsfreeze, fstrim, getop…

linux里临时设置hbase参数,在centos下配置hbase环境并简单使用hbase shell

操作系统版本:centos7jdk版本:jdk-8u151-linux-x64.rpmhbase版本:hbase-1.2.6以单机模式安装运行配置centos为静态IP配置静态ipvi /etc/sysconfig/network-scripts/ifcfg-eth0IPADDR192.168.109.130NETMASK255.255.255.0配置网关vi /etc/sysconfig/networkGATEWAY192.168.109.2…

linux系统下定时备份,在Linux系统中简单地实现定时备份的方法 -电脑资料

运行一个简单的脚本假设你有一个脚本叫&#xff1a;/usr/local/bin/myscript. &#xff0c;你想要每隔一小时就运行一次&#xff0c;Service 文件第一步&#xff0c;创建一个service文件&#xff0c;根据你Linux的发行版本放到相应的系统目录(在Arch中&#xff0c;这个目录是/e…

activemq使用linux内核机制,activemq基础之:(四)CentOS7 Linux搭建activemq

1、上传软件包/home/jdk-8u172-linux-x64.tar.gz/home/apache-activemq-5.15.8-bin.tar.gz2、解压tar -zxvf jdk-8u172-linux-x64.tar.gz -C /opttar -zxvf apache-activemq-5.15.8-bin.tar.gz -C /opt3、设置JDKvim /etc/profile加入&#xff1a;JAVA_HOME/opt/jdk1.8.0_172JR…

专栏订阅须知《必读》

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

linux闹钟软件下载,电量充满警示闹铃

电量充满警示闹铃中的服务功能非常贴心&#xff0c;不仅可以让用户随时查看自己手机的充电情况&#xff0c;而且充满后会有充电提示&#xff0c;让你更快速的了解手机电量状态&#xff0c;电量充满警示闹铃软件中最重要的就是警示功能&#xff0c;当用户的手机丢失或者被盗&…

Java Swing专栏订阅须知《必读》

订阅前请先花2分钟阅读一下本篇文章 作者介绍 Hello 我是奥斯卡、CSDN Java领域优质创作者、潜力新星、原力计划周榜前三作者 全网粉丝20W、阅读超百W、希望大家关注指导小奥、一起进步 专栏介绍&#xff1a; 本专栏是JavaSwing项目实战、目前作者还在更新整理、每一套都是经过…

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;在下面的打钩…

万年历c语言大作业实验,用C语言写的一个万年历

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。编程之家小编现在分享给大家&#xff0c;也给大家做个参考。#include#includeint input();void re_year(int year);void output(int year,int leap,int dis_day,int para);void main(){int year,leap,dis_day,para;while(1…

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

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

基于JavaSwing ATM取款机系统的设计和实现

本项目演示地址链接 》 前言: 本项目是使用Java swing开发,可实现ATM系统/银行系统的基本登陆、转账、查询余额、存取款业务。界面设计比较简介、适合作为Java课设设计以及学习技术使用。 需求分析: 随着生活水平的提高,消费量的增大,开销也越来越大,自然离不开的就是钱…

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坦克大战游戏的设计和实现

本项目演示地址链接 》 还记得传说中的经典90坦克大战吗?那些怀旧的记忆,伴随着我们一起走过来的经典坦克大战,刚开始那战战兢兢,屡屡被敌人坦克击毁的情景历历在目。现在好了,再也不用担心敌人坦克了,可以横冲直撞,横扫敌人坦克了。作为程序员的我刚好可以利用所学…

二级c语言程序设计翻译,C语言程序设计报错英文翻译

C语言程序设计报错英文翻译C出错提示英汉对照表 来源&#xff1a; 杨赫的日志Ambiguous operators need parentheses -----------不明确的运算需要用括号括起- Ambiguous symbol xxx ----------------不明确的符号-Argument list syntax error ----------------参数表语法错误-…