0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何用C语言实现推箱子游戏项目

C语言编程学习基地 来源:C语言编程学习基地 作者:C语言编程学习基地 2021-11-09 16:28 次阅读

这篇文章主要为大家详细介绍了C语言实现——《推箱子项目》,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下!

本项目结合了分支,循环,数组的结合,并且对逻辑也是有一定的要求,但是这些在我们项目源码里面都会有注释,大家到时候学习的时候千万不要忽略注释,注释可以更好地帮你理解代码,尤其是C语言初学者。

本项目编译环境:VS2019/VS2013;

插件:图形库插件easyX;

源代码示例

1.头文件

#include#include#include  //easyX图形库头文件#include

2.关卡设置(这里我们定义一个三维数组,三维数组大家可以理解为多个二维数组)

int cas = 0;IMAGE img0, img1, img2, img3, img4, img5;int map[3][8][8] ={0, 0, 1, 1, 1, 0, 0, 0,0, 0, 1, 3, 1, 0, 0, 0,0, 0, 1, 0, 1, 1, 1, 1,1, 1, 1, 4, 0, 4, 3, 1,1, 3, 0, 4, 5, 1, 1, 1,1, 1, 1, 1, 4, 1, 0, 0,0, 0, 0, 1, 3, 1, 0, 0,0, 0, 0, 1, 1, 1, 0, 0,0, 0, 1, 1, 1, 0, 0, 0,0, 0, 1, 3, 1, 0, 0, 0,0, 0, 1, 0, 1, 1, 1, 1,1, 1, 1, 4, 0, 4, 3, 1,1, 3, 0, 4, 5, 1, 1, 1,1, 1, 1, 1, 4, 1, 0, 0,0, 0, 0, 1, 3, 1, 0, 0,0, 0, 0, 1, 1, 1, 0, 0,0, 0, 1, 1, 1, 0, 0, 0,0, 0, 1, 3, 1, 0, 0, 0,0, 0, 1, 0, 1, 1, 1, 1,1, 1, 1, 4, 0, 4, 3, 1,1, 3, 0, 4, 5, 1, 1, 1,1, 1, 1, 1, 4, 1, 0, 0,0, 0, 0, 1, 3, 1, 0, 0,0, 0, 0, 1, 1, 1, 0, 0,};

3.绘制推箱子地图

void drawmap(){for (int i = 0; i < 8; i++){for (int j = 0; j < 8; j++){int x = j * 64;int y = i * 64;switch (map[cas][i][j]){case 0:  //空地putimage(x, y, &img0);//printf("  ");break;case 1:  //墙putimage(x, y, &img1);//printf("█");break;case 3:  //目的地:篮筐putimage(x, y, &img2);//printf("☆");break;case 4:  //箱子:篮球putimage(x, y, &img3);//printf("★");break;case 5:  //人:CXKcase 8:putimage(x, y, &img4);//printf("人");break;case 7:  //把箱子推进目的地:鸡putimage(x, y, &img5);//printf("⊙");break;}}printf("
");}}

4.游戏过程(这部分是整个游戏的核心部分,也是最难理解的部分,大家要仔细解读)

void playGame(){//按键操作:游戏过程//找人:找CXK:遍历二维数组--->元素= 5||8int i, j;for (i = 0; i < 8; i++){for (j = 0; j < 8; j++){//找人if (map[cas][i][j] == 5 || map[cas][i][j] == 8){break;//break只能跳出一层循环}}//找人if (map[cas][i][j] == 5 || map[cas][i][j] == 8){break;//break只能跳出一层循环}}//已经找到人了//通过键盘操作人物char userKey = _getch();switch (userKey){//那几个键移动:wsad 箭头:小键盘 键码值:72 80 75 77case 'w':case 'W':case 72://移动的原理:改变二维数组元素的值//移动的步骤://1.先让人移动  map[cas][i-1][j]=0||map[cas][i-1][j]=3if (map[cas][i - 1][j] == 0 || map[cas][i - 1][j] == 3){//人移动的原理:元素的值map[cas][i][j] -= 5;map[cas][i - 1][j] += 5;}//2.推箱子,让箱子移动//先找到(固定)箱子if (map[cas][i - 1][j] == 4 || map[cas][i - 1][j] == 7){//篮球,箱子移动的条件if (map[cas][i - 2][j] == 0 || map[cas][i - 2][j] == 3){//推箱子的原理:移动元素值map[cas][i][j] -= 5;map[cas][i - 1][j] += 5;map[cas][i - 1][j] -= 4;map[cas][i - 2][j] += 4;}}break;case 's':case 'S':case 80://1.先让人移动  map[cas][i-1][j]=0||map[cas][i-1][j]=3if (map[cas][i + 1][j] == 0 || map[cas][i + 1][j] == 3){//人移动的原理:元素的值map[cas][i][j] -= 5;map[cas][i + 1][j] += 5;}//2.推箱子,让箱子移动//先找到(固定)箱子if (map[cas][i + 1][j] == 4 || map[cas][i + 1][j] == 7){//篮球,箱子移动的条件if (map[cas][i + 2][j] == 0 || map[cas][i + 2][j] == 3){//推箱子的原理:移动元素值map[cas][i][j] -= 5;map[cas][i + 1][j] += 5;map[cas][i + 1][j] -= 4;map[cas][i + 2][j] += 4;}}break;case 'a':case 'A':case 75://1.先让人移动  map[cas][i-1][j]=0||map[cas][i-1][j]=3if (map[cas][i][j - 1] == 0 || map[cas][i][j - 1] == 3){//人移动的原理:元素的值map[cas][i][j] -= 5;map[cas][i][j - 1] += 5;}//2.推箱子,让箱子移动//先找到(固定)箱子if (map[cas][i][j - 1] == 4 || map[cas][i][j - 1] == 7){//篮球,箱子移动的条件if (map[cas][i][j - 2] == 0 || map[cas][i][j - 2] == 3){//推箱子的原理:移动元素值map[cas][i][j] -= 5;map[cas][i][j - 1] += 5;map[cas][i][j - 1] -= 4;map[cas][i][j - 2] += 4;}}break;case 'd':case 'D':case 77://1.先让人移动  map[cas][i-1][j]=0||map[cas][i-1][j]=3if (map[cas][i][j + 1] == 0 || map[cas][i][j + 1] == 3){//人移动的原理:元素的值map[cas][i][j] -= 5;map[cas][i][j + 1] += 5;}//2.推箱子,让箱子移动//先找到(固定)箱子if (map[cas][i][j + 1] == 4 || map[cas][i][j + 1] == 7){//篮球,箱子移动的条件if (map[cas][i][j + 2] == 0 || map[cas][i][j + 2] == 3){//推箱子的原理:移动元素值map[cas][i][j] -= 5;map[cas][i][j + 1] += 5;map[cas][i][j + 1] -= 4;map[cas][i][j + 2] += 4;}}break;}}int gameOver(){int flag = 0;//遍历二维数组元素-->目的地:球框for (int i = 0; i < 8; i++){for (int j = 0; j < 8; j++){if (map[cas][i][j] == 3){flag = 1;}}}return flag;}

5.主函数部分

int main(){loadimage(&img0, L"0.bmp");  //64*64loadimage(&img1, L"1.bmp");  //64*64loadimage(&img2, L"3.bmp");  //64*64loadimage(&img3, L"4.bmp");  //64*64loadimage(&img4, L"5.bmp");  //64*64loadimage(&img5, L"7.bmp");  //64*64initgraph(64 * 8, 64 * 8);while (1){drawmap();playGame();if (!gameOver()){cas++;if (cas == 3)break;}system("cls");}//initgraph(600,600);//窗口:宽度*高度////贴图:基本贴图威廉希尔官方网站
////1.定义图片变量//IMAGE img;////2.加载图片//loadimage(&img, L"timg.jpg", 600, 600);////3.显示图片//putimage(0, 0, &img);while (1);  //防止闪屏closegraph();  //关闭窗口return 0;}

整个项目的源码已经分享,这是一个三关完善的推箱子游戏,大家如果有兴趣可以自己去试试做更多的关卡来玩!

如果学习的过程中有什么问题,以及本项目有什么不懂的地方,都可以来找我交流,我来帮你!

那么今天的分享就到这里了,后续会更新更多精彩项目的,大家要好好学C语言C++哟~

写在最后:对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

责任编辑:haq
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136722
  • 源代码
    +关注

    关注

    96

    文章

    2945

    浏览量

    66734

原文标题:C语言项目实战:《推箱子》零基础项目!270 行源码注释示例

文章出处:【微信号:cyuyanxuexi,微信公众号:C语言编程学习基地】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于FPGA实现图像直方图设计

    直方图统计的原理 直方图统计从数学上来说,是对图像中的像素点进行统计。图像直方图统计常用于统计灰度图像,表示图像中各个灰度级出现的次数或者概率。统计直方图的实现采用C/C++或者其他高级语言实
    的头像 发表于 12-24 10:24 29次阅读
    基于FPGA<b class='flag-5'>实现</b>图像直方图设计

    使用C语言实现函数模板

      用C语言能不能实现一个通用的函数,既能完成整数的相加,又能完成浮点数的相加?
    的头像 发表于 11-09 11:38 379次阅读

    C语言与Java语言的对比

    C语言和Java语言都是当前编程领域中的重要成员,它们各自具有独特的优势和特点,适用于不同的应用场景。以下将从语法特性、内存管理、跨平台性、性能、应用领域等多个方面对C
    的头像 发表于 10-29 17:31 319次阅读

    何用 S7-200 实现 Modbus 通信?

    电子发烧友网站提供《如何用 S7-200 实现 Modbus 通信?.pdf》资料免费下载
    发表于 09-14 10:22 1次下载

    PLC编程语言C语言的区别

    在工业自动化和计算机编程领域中,PLC(可编程逻辑控制器)编程语言C语言各自扮演着重要的角色。尽管两者都是编程语言,但它们在多个方面存在显著的区别。本文将从多个维度深入探讨PLC编程
    的头像 发表于 06-14 17:11 2790次阅读

    何用C语言实现高效查找(二分法)

    今天给分享一下使用C语言实现二分算法,主要包含以下几部分内容:二分查找算法介绍二分查找算法使用场景二分查找算法代码实现二分查找算法实现过程用C
    的头像 发表于 06-04 08:04 1108次阅读
    如<b class='flag-5'>何用</b><b class='flag-5'>C</b><b class='flag-5'>语言实现</b>高效查找(二分法)

    使用C语言实现的CRC计算单元的例子

    使用C语言实现的CRC计算单元的例子
    的头像 发表于 05-16 16:16 965次阅读

    嵌入式编程,如何用 C 语言实现状态机设计?

    状态机模式是一种行为模式,通过多态实现不同状态的调转行为的确是一种很好的方法,只可惜在嵌入式环境下,有时只能写纯C代码,并且还需要考虑代码的重入和多任务请求跳转等情形,因此实现起来着实需要一番考虑
    发表于 04-23 11:00

    C语言实现Web参数传递

    电子发烧友网站提供《C语言实现Web参数传递.docx》资料免费下载
    发表于 03-24 09:14 2次下载

    嵌入式系统中C语言结构体的基础实现与应用

    C语言中的数组只能允许程序员定义存储相同类型数据。但是结构是C语言编程中允许您存储不同数据类型的数据。
    发表于 03-12 14:29 497次阅读
    嵌入式系统中<b class='flag-5'>C</b><b class='flag-5'>语言</b>结构体的基础<b class='flag-5'>实现</b>与应用

    c语言,c++,java,python区别

    C语言C++、Java和Python是四种常见的编程语言,各有优点和特点。 C语言
    的头像 发表于 02-05 14:11 2375次阅读

    vb语言c++语言的区别

    VB语言C++语言是两种不同的编程语言,虽然它们都属于高级编程语言,但在设计和用途上有很多区别。下面将详细比较VB
    的头像 发表于 02-01 10:20 2269次阅读

    ADUC7061如何使用C语言实现EEPROM功能?

    我使用ADUC7061做的信号采集,现在客户需要实现EEPROM功能来保存3-5个数据,请问如何使用C语言实现?不使用外部EEPROM 专用IC。
    发表于 01-12 06:56

    单轴PSO视觉飞拍与精准输出:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(七)

    正运动威廉希尔官方网站 EtherCAT控制卡在VS平台采用C#语言实现的各种PSO功能。
    的头像 发表于 01-03 09:50 1041次阅读
    单轴PSO视觉飞拍与精准输出:EtherCAT超高速实时运动控制卡XPCIE1032H上位机<b class='flag-5'>C</b>#开发(七)

    怎么写出效率高、思路清晰的C语言程序?

    要用C语言的思维方式来进行程序的构架构建 要有良好的C语言算法基础,以此来实现程序的逻辑构架 灵活运用
    的头像 发表于 01-02 14:20 563次阅读