c语言小游戏-推箱子

 (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)

之前做了很多与easyx相关的游戏,这次我们之间用控制台做游戏试试看吧

就以推箱子游戏为例

首先就是引用头文件

#include<stdio.h>
#include<conio.h>//按键控制 
#include<stdlib.h>

 然后就是要定义相关变量,在推箱子游戏中,涉及到的元素有

//空地 0 墙 1 目的地 2 箱子 3 玩家 4
#define SPACE 0
#define WALL 1
#define DEST 2
#define BOX 3
#define PLAYER 4 

因为控制台程序没有easyx图形库的坐标那样方便, 我们要想绘制图形,只能用二维数组来实现

//制作基本框架

int map[10][10] =
{
    0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,1,1,1,0,0,0,
    0,0,0,0,1,2,1,0,0,0,
    0,0,0,1,1,0,1,0,0,0,
    0,1,1,1,0,3,1,1,1,0,
    0,1,2,0,3,4,3,2,1,0,
    0,1,1,1,1,3,1,1,1,0,
    0,0,0,0,1,2,1,0,0,0,
    0,0,0,0,1,1,1,0,0,0,
    0,0,0,0,0,0,0,0,0,0,
};

为了便于变量的运算,我们这里将变量i,k作为全局变量

int i = 0;
int k = 0; 

接下来就是图像的绘制了,如果只是用1234来表示图形未免太抽象了吧O(∩_∩)O哈哈~

void draw()//画基本框架
{
    for (int i = 0; i < 10; i++)
    {
        for (int k = 0; k < 10; k++)
        {
            switch (map[i][k])
            {
            case SPACE:
                printf("  ");
                break;
            case WALL:
                printf("l ");
                break;
            case DEST:
                printf("* ");
                break;
            case BOX:
                printf("& ");
                break;
            case PLAYER:
                printf("@ ");
                break;
            case BOX + DEST://箱子与目的地相碰后变成另一个字符
                printf("# ");
            }
        }
        printf("\n");
    }

画完基本框架,接下来就是对玩家进行移动

首先要先找到玩家的位置,才能对玩家进行移动,找到以后,用goto函数跳出循环

这里以向上为例:当玩家向上移动时,首先要判断玩家是否能移动,如果玩家的上面是墙,就不能移动,如果玩家的上面是箱子或者是空地,就可以移动,当玩家上面是箱子时,在玩家向上移动的同时,箱子也要跟着向上移动,当箱子上面也是墙时,箱子和玩家都不能再向上移动

getch使计算机可以直接读取键盘,这个在我之前的游戏中都有讲到。

void move()//移动
{
    
    //先找到玩家
    for (i = 0; i < 10; i++)
    {
        for (k = 0; k < 10; k++)
        {
            if (map[i][k] == PLAYER)
            {
                goto end;
            }
        }
    }
end:;
    char key = _getch();
    switch (key)
    {
    case'W':
    case'w':
    case 72://上
        //先判断玩家能不能动,玩家的前面是空地或者箱子才能动
        if (map[i - 1][k] == SPACE || map[i - 1][k] == DEST)
        {
            //先把人物移动到前面,再把原来的消除
            map[i - 1][k] += PLAYER;
            map[i][k] -= PLAYER;
        }
        //玩家前面是箱子
        else if (map[i - 1][k] == BOX || map[i - 1][k] == BOX + DEST)
        {
            //箱子是否可以动
            if (map[i - 2][k] == SPACE || map[i - 2][k] == DEST)
            {
                map[i - 2][k] += BOX;//移动箱子到前面
                map[i - 1][k] -= BOX;//取消原来的箱子
                map[i - 1][k] += PLAYER;
                map[i][k] -= PLAYER;
            }
        }
        break;
    case'S':
    case's':
    case 80://下
        //先判断玩家能不能动,玩家的前面是空地或者箱子才能动
        if (map[i+1][k] == SPACE || map[i+1][k] == DEST)
        {
            //先把人物移动到前面,再把原来的消除
            map[i+1][k] += PLAYER;
            map[i][k] -= PLAYER;
        }
        //玩家前面是箱子
        else if (map[i+1][k] == BOX || map[i+1][k] == BOX + DEST)
        {
            //箱子是否可以动
            if (map[i+2][k] == SPACE || map[i+2][k] == DEST)
            {
                map[i+2][k] += BOX;//移动箱子到前面
                map[i+1][k] -= BOX;//取消原来的箱子
                map[i+1][k] += PLAYER;
                map[i][k] -= PLAYER;
            }
        }
        break;
    case'A':
    case'a':
    case 75://左
        if (map[i][k - 1] == SPACE || map[i][k - 1] == DEST)
        {
            //先把人物移动到前面,再把原来的消除
            map[i][k - 1] += PLAYER;
            map[i][k] -= PLAYER;
        }
        else if (map[i][k - 1] == BOX || map[i][k - 1] == BOX + DEST)
        {
            if (map[i][k - 2] == SPACE || map[i][k - 2] == DEST)
            {
                map[i][k - 2] += BOX;//移动箱子到前面
                map[i][k - 1] -= BOX;//取消原来的箱子
                map[i][k - 1] += PLAYER;
                map[i][k] -= PLAYER;
            }
        }
        break;
    case'D':
    case'd':
    case 77://右
        if (map[i][k + 1] == SPACE || map[i][k + 1] == DEST)
        {
            map[i][k + 1] += PLAYER;
            map[i][k] -= PLAYER;
        }
        else if (map[i][k + 1] == BOX|| map[i][k + 1]==BOX+DEST)
        {
            if (map[i][k + 2] == SPACE || map[i][k + 2] == DEST)
            {
                map[i][k + 2] += BOX;
                map[i][k + 1] -= BOX;
                map[i][k + 1] += PLAYER;
                map[i][k] -= PLAYER;
            }
        }
        break;
    }

接下来就是要判断是否通关

//判断是否通关
int jude()
{
    for (int i = 0; i < 10; i++)
    {
        for (int k = 0; k < 10; k++)
        {
            if (map[i][k] == BOX)
            {
                return 0;
            }
        }
    }
    return 1;
}

最后将其全部输入主函数中

int main()
{
    while (1)
    {
        system("cls");
        draw();
        if (jude())
        {
            printf("通关");
            return 0;
        }
        move();
    }
    return 0;

具体代码如下,如果大家发现bug或者有更好的方法 ,欢迎大家一起来讨论,一起加油吧

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<conio.h>//按键控制 
#include<stdlib.h>
//空地 0 墙 1 目的地 2 箱子 3 玩家 4
#define SPACE 0
#define WALL 1
#define DEST 2
#define BOX 3
#define PLAYER 4 
//推箱子需要通过二维数组实现
//初始化变量,制作基本框架
int map[10][10] =
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,2,1,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1,1,0,3,1,1,1,0,0,1,2,0,3,4,3,2,1,0,0,1,1,1,1,3,1,1,1,0,0,0,0,0,1,2,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
};
int i = 0;
int k = 0;
void draw()//画基本框架
{for (int i = 0; i < 10; i++){for (int k = 0; k < 10; k++){switch (map[i][k]){case SPACE:printf("  ");break;case WALL:printf("l ");break;case DEST:printf("* ");break;case BOX:printf("& ");break;case PLAYER:printf("@ ");break;case BOX + DEST:printf("# ");}}printf("\n");}
}
void move()//移动
{//先找到玩家for (i = 0; i < 10; i++){for (k = 0; k < 10; k++){if (map[i][k] == PLAYER){goto end;}}}
end:;char key = _getch();switch (key){case'W':case'w':case 72://上//先判断玩家能不能动,玩家的前面是空地或者箱子才能动if (map[i - 1][k] == SPACE || map[i - 1][k] == DEST){//先把人物移动到前面,再把原来的消除map[i - 1][k] += PLAYER;map[i][k] -= PLAYER;}//玩家前面是箱子else if (map[i - 1][k] == BOX || map[i - 1][k] == BOX + DEST){//箱子是否可以动if (map[i - 2][k] == SPACE || map[i - 2][k] == DEST){map[i - 2][k] += BOX;//移动箱子到前面map[i - 1][k] -= BOX;//取消原来的箱子map[i - 1][k] += PLAYER;map[i][k] -= PLAYER;}}break;case'S':case's':case 80://下//先判断玩家能不能动,玩家的前面是空地或者箱子才能动if (map[i+1][k] == SPACE || map[i+1][k] == DEST){//先把人物移动到前面,再把原来的消除map[i+1][k] += PLAYER;map[i][k] -= PLAYER;}//玩家前面是箱子else if (map[i+1][k] == BOX || map[i+1][k] == BOX + DEST){//箱子是否可以动if (map[i+2][k] == SPACE || map[i+2][k] == DEST){map[i+2][k] += BOX;//移动箱子到前面map[i+1][k] -= BOX;//取消原来的箱子map[i+1][k] += PLAYER;map[i][k] -= PLAYER;}}break;case'A':case'a':case 75://左if (map[i][k - 1] == SPACE || map[i][k - 1] == DEST){//先把人物移动到前面,再把原来的消除map[i][k - 1] += PLAYER;map[i][k] -= PLAYER;}else if (map[i][k - 1] == BOX || map[i][k - 1] == BOX + DEST){if (map[i][k - 2] == SPACE || map[i][k - 2] == DEST){map[i][k - 2] += BOX;//移动箱子到前面map[i][k - 1] -= BOX;//取消原来的箱子map[i][k - 1] += PLAYER;map[i][k] -= PLAYER;}}break;case'D':case'd':case 77://右if (map[i][k + 1] == SPACE || map[i][k + 1] == DEST){map[i][k + 1] += PLAYER;map[i][k] -= PLAYER;}else if (map[i][k + 1] == BOX|| map[i][k + 1]==BOX+DEST){if (map[i][k + 2] == SPACE || map[i][k + 2] == DEST){map[i][k + 2] += BOX;map[i][k + 1] -= BOX;map[i][k + 1] += PLAYER;map[i][k] -= PLAYER;}}break;}
}
//判断是否通关
int jude()
{for (int i = 0; i < 10; i++){for (int k = 0; k < 10; k++){if (map[i][k] == BOX){return 0;}}}return 1;
}
int main()
{while (1){system("cls");draw();if (jude()){printf("通关");return 0;}move();}return 0;
}

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

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

相关文章

c语言 实现推箱子小游戏

此推箱子游戏可以实现人物移动&#xff0c;箱子移动&#xff0c;人物不出框&#xff0c;自义定文件关卡&#xff0c;重新开始以及回退复位等功能的实现&#xff0c;由于系统或版本问题&#xff0c;关卡和人物及物体未做美化处理&#xff0c;希望美化的可自行美化。 1.所用到的…

C++推箱子小游戏(2.0)

不多说&#xff0c;直接上源码&#xff1a; #include <iostream> #include <conio.h> #include <cstdlib> #include <Windows.h> #include <bits/stdc.h> using namespace std;int m 0;//关卡/*推箱子游戏*/#define HANG 20 //地图的行数 #defi…

c语言写一个简单的小游戏-推箱子

在学习C语言之后&#xff0c;写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力。 推箱子作为手机上最常见的简单游戏&#xff0c;其代码也相对简单&#xff0c;想法也比较简单&#xff0c;下面为其代码和运行图。 /********************************************…

【飞行棋】多人游戏-微信小程序开发流程详解

可曾记得小时候玩过的飞行棋游戏&#xff0c;是90后的都有玩过吧&#xff0c;现在重温一下&#xff0c;这是一个可以二到四个人参与的游戏&#xff0c;通过投骰子走棋&#xff0c;一开始靠运气&#xff0c;后面还靠自己选择&#xff0c;谁抢占先机才能赢&#xff0c;还可以和小…

游戏陪玩小程序开发制作

游戏陪玩小程序开发制作 该项目是一个线上下单线下陪玩项目&#xff0c;主要功能有游戏陪玩大神展示&#xff0c;陪玩大神入驻&#xff0c;用户预约陪玩大神&#xff0c;陪玩大神接单等功能。陪玩大神收益可以提现等功能。 主要功能有聊天室、和平精英陪玩、英雄联盟、绝地求…

微信小程序 | 游戏开发之接宝石箱子游戏

1、什么是微信小游戏 微信小游戏是小程序的一个类目&#xff0c;小游戏是微信开放给小程序的更多的能力&#xff0c;让小程序开发者有了开发游戏的能力。微信小游戏是在小程序的基础上添加了游戏库API。微信小游戏只能运行在小程序环境中&#xff0c;微信小游戏没有小程序中WX…

微信小程序| 做一款多人实时线上的五指棋联机游戏

&#x1f4cc;个人主页&#xff1a;个人主页 ​&#x1f9c0; 推荐专栏&#xff1a;小程序开发成神之路 --【这是一个为想要入门和进阶小程序开发专门开启的精品专栏&#xff01;从个人到商业的全套开发教程&#xff0c;实打实的干货分享&#xff0c;确定不来看看&#xff1f; …

游戏陪玩小程序怎么开发-游戏陪玩小程序功能

目前游戏陪玩行业已经占据了很大的市场所在&#xff0c;拥有一款完善的陪玩软件可以帮助很多用户实现更好的实现游戏陪玩的寻找&#xff0c;当然开发陪玩小程序也是要注意很多方面。下面说一下如果开发和核心功能 如何开发&#xff1f; 开发无非就是几种 1、自己懂技术慢慢学…

Unity游戏上传到微信小程序

一、注册 地址&#xff1a; 微信小程序 补充信息&#xff08;类目需要选择游戏方面&#xff0c;不然后面调试不了&#xff09; - 注意AppID 二、下载插件 地址&#xff1a;Unity转微信小程序 三、转换项目 四丶 下载微信开发工具并导入项目 微信开发者工具 打包好会生…

微信小程序项目实例——2048小游戏

今日推荐&#x1f481;‍♂️ 第一次听廖俊涛的歌是他首次出现在明日之子舞台上的那首《谁》 到现在这首歌成了我网易云收藏的十几首歌中的一首&#xff0c;也是听的最多的一首 怎么形容呢&#x1f914;算不上惊艳&#xff0c;却百听不厌&#x1f442; &#x1f52e;&#x1…

蛋白互作常用的研究方法

蛋白质是生物功能最直接的执行者&#xff0c;虽然一些蛋白质可以独立的完成他的使命&#xff0c;但是大部分的蛋白都是需要一些伴侣分子的协助一起完成任务或者形成复合物之后才能充分发挥他的功能。所以&#xff0c;了解蛋白质与蛋白质之间的相互作用&#xff0c;能够帮助我们…

OpenAL联合创始人Ilya:你要与AI较劲吗?

AlexNet、AlphaGo、GPT、CLIP、DALL-E、Codex&#xff0c;一个个在AI界夺目闪耀&#xff0c;又影响深远的杰作&#xff0c;其背后都镌刻了一个人的名字。 在2012年博士毕业后的10年里&#xff0c;其论文被引次数超过25万次&#xff0c;领导开发了划时代的GPT系列&#xff0c;成…

改写中文句子的软件-修改文章句子的软件

免费语句改写软件 您是否在写博客、新闻稿或者其他需要大量文本的场合中觉得无从下手&#xff1f;您是否为修改一段语句上耗费大量时间感到困扰&#xff1f;如果您有这样的烦恼&#xff0c;那么我向您介绍我们的免费语句改写软件&#xff0c;可以帮助您快速批量语句改写&#x…

去中心化开源社交平台Misskey

本文是应网友 anthony084 的要求写的&#xff1b; 什么是 Misskey &#xff1f; Misskey 是一个开源、去中心化的社交媒体平台&#xff0c;发帖方式类似于微博和推特。 去中心化则意味着一个 Misskey 实例可以与其他 Misskey 实例进行相互连接&#xff0c;在 Fediverse (Activi…

讯图科技数据网关解决方案

一、方案定位&#xff1a; 一套高可用&#xff0c;支持高并发的数据服务分发系统&#xff1b;一套可配置的动态数据服务开发调试框架&#xff1b;整合alibaba spring cloud、dubbo&#xff0c;支持熔断、限流&#xff1b;可扩展定制go、C#、java开发SDK等。 二、系统架构图 三…

未来5年,生产力的底层逻辑变了,影响所有企业

上周&#xff0c;K哥带领20多位企业家、技术高管参访了阿里钉钉&#xff0c;学习AI大模型如何应用到企业生产经营和组织管理当中&#xff0c;以及企业如何使用新生产力工具实现降本增效。 通过这次参访&#xff0c;我对AI大模型如何驱动企业管理变革有了新的认识&#xff0c;三…

字节发年终奖了

❤️点击上方&#xff0c;选择星标或置顶&#xff0c;每天给你送上干货❤️ 作者 | godweiyang 出品 | 公众号&#xff1a;算法码上来&#xff08;ID&#xff1a;GodNLP&#xff09; - BEGIN - 好久没写文章了&#xff0c;上一次发文章还是2.14情人节了&#xff0c;一转眼两个多…

AIGC狂飙,能否成为娱乐社交应用的狂欢?

4 月 22 日&#xff0c;PMTalk 社交娱乐产品增长与运营新玩法线下沙龙在广州举行&#xff0c;网易云信娱乐社交行业解决方案专家姚柱围绕 AIGC 与娱乐社交玩法融合&#xff0c;分享了《AIGC 狂飙背后的娱乐社交产品趋势与实践》&#xff0c;以下为演讲整理实录。 目前&#xf…

干货篇:如何从 0 到 1 落地你的第一个开源项目?破局分享!

前言 大家好&#xff0c;我是 「周三不Coding」。最近马上就要到秋招提前批啦&#xff0c;相信很多小伙伴都在忙着复习八股文、刷算法题、准备简历中。 最近我也关注到了很多同学都在问一个问题&#xff0c;如何做一个自己的项目。 项目的重要性想必大家都清楚&#xff0c;如…

chatgpt赋能python:Python中让所有单词的首字母变成大写的SEO文章

Python中让所有单词的首字母变成大写的SEO文章 作为一种开源编程语言&#xff0c;Python已经在各个领域崭露头角。伴随着搜索引擎优化&#xff08;SEO&#xff09;的发展&#xff0c;Python也成为了一个极其有用的工具&#xff0c;尤其是当涉及到优化网站上的关键词时。 在本…