首页 > 其他分享 >c语言 推箱子小游戏二次开发

c语言 推箱子小游戏二次开发

时间:2024-03-06 23:35:48浏览次数:29  
标签:case 箱子 map break 小游戏 https blog 二次开发 3398597

内容来源:CSDN(额………………):https://blog.csdn.net/m0_71832999/article/details/128050830?ops_request_misc=&request_id=&biz_id=102&utm_term=c++推箱子小游戏&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-2-128050830.142v99pc_search_result_base6&spm=1018.2226.3001.4187
运行环境:Visual Studio 2022
原代码:

点击查看代码
#include <stdio.h>  
#include <conio.h>
#include<stdlib.h> 
int map[9][11] = {
{0,1,1,1,1,1,1,1,1,1,0},  //0代表空地
{0,1,0,0,0,1,0,0,0,1,0},  //1代表墙
{0,1,0,4,4,4,4,4,0,1,0},  //3代表目的地
{0,1,0,4,0,4,0,4,0,1,1},  //4代表箱子
{0,1,0,0,0,0,0,0,4,0,1},  //5代表人 
{1,1,0,1,1,1,1,0,4,0,1},
{1,0,8,3,3,3,3,1,0,0,1},  //2 3 4 5 6 7 8 9 1 0
{1,0,3,3,3,3,3,0,0,1,1},
{1,1,1,1,1,1,1,1,1,1,0} };
//绘制地图  //二维数组+switch()
void DrawMap()
{
    //遍历二维数组  //0 打印空格  //1 墙   //3 目的地  //什么结构?
    for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 11; j++)
        {
            //if  else  switch
            switch (map[i][j])
            {
            case 0:
                printf("  ");
                break;
            case 1:
                printf("■");
                break;
            case 3:
                printf("☆");
                break;
            case 4:
                printf("□");
                break;
            case 5:
                printf("♀");  //5人
                break;
            case 7:     //4 + 3  箱子在目的地中
                printf("★");
                break;
            case 8:     // 5 + 3  人在目的地当中   人?
                printf("♀");
                break;
            }
        }
        printf("\n");
    }
}
void PlayGame()
{
    int r, c;  //人的下标  //
    for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 11; j++)
        {
            if (map[i][j] == 5 || map[i][j] == 8)   //i j 人的下标?
            {
                r = i;
                c = j;
            }
        }
    }
    char ch;  //字符变量
    ch = _getch();  //键盘的输入保存到字符中
    // getch()     getchar()  接收键盘字符
    // getch()直接接收 不显示回文   getchar()显示回文可以修改 enter键结束
     //根据不同的按键  改变不同的值. 分支.
    switch (ch)
    {
    case 'W':  //W A S D方向   72  80  75  77 虚拟键值 ascii  windowVK_UP VK_TAB VK_RETUNE
    case 'w':
    case 72:
        if (map[r - 1][c] == 0 || map[r - 1][c] == 3)
        {
            map[r - 1][c] += 5;
            map[r][c] -= 5;
        }
        else if (map[r - 1][c] == 4 || map[r - 1][c] == 7)
        {
            if (map[r - 2][c] == 0 || map[r - 2][c] == 3)
            {
                map[r - 2][c] += 4;
                map[r - 1][c] += 1;
                map[r][c] -= 5;
            }
        }

        break;
    case 'S':  //enter按键的作用  确认 返回
    case 's':
    case 80:
        if (map[r + 1][c] == 0 || map[r + 1][c] == 3)
        {
            map[r + 1][c] += 5;
            map[r][c] -= 5;
        }
        else if (map[r + 1][c] == 4 || map[r + 1][c] == 7)
        {
            if (map[r + 2][c] == 0 || map[r + 2][c] == 3)
            {
                map[r + 2][c] += 4;
                map[r + 1][c] += 1;
                map[r][c] -= 5;
            }
        }
        break;
    case 'A':
    case 'a':
    case 75:
        if (map[r][c - 1] == 0 || map[r][c - 1] == 3)
        {
            map[r][c - 1] += 5;
            map[r][c] -= 5;
        }
        else if (map[r][c - 1] == 4 || map[r][c - 1] == 7)
        {
            if (map[r][c - 2] == 0 || map[r][c - 2] == 3)
            {
                map[r][c - 2] += 4;
                map[r][c - 1] += 1;
                map[r][c] -= 5;
            }
        }
        break;
    case 'D':
    case 'd':
    case 77:
        if (map[r][c + 1] == 0 || map[r][c + 1] == 3)
        {
            map[r][c + 1] += 5;
            map[r][c] -= 5;
        }
        else if (map[r][c + 1] == 4 || map[r][c + 1] == 7)
        {
            if (map[r][c + 2] == 0 || map[r][c + 2] == 3)
            {
                map[r][c + 2] += 4;
                map[r][c + 1] += 1;
                map[r][c] -= 5;
            }
        }
        break;
    }
}
int main()  //主函数
{
    while (1)
    {
        system("cls");
        DrawMap();
        PlayGame();
    }
    return 0;
}
//通过按键来实现游戏  ---> 通过按键来改变二维数组的排列顺序.
//思考一个问题? 地图是二维数组来决定的. 人在哪里  二维数组来决定?
/************************************************
//人推箱子
可以动.    怎么办.  改变元素
    1.人的前面是空地
    2.人的前面是目的地
    3.人的前面是箱子
        3.1 箱子的前面是空地
        3.2 箱子的前面是目的地
        //盘断二维数组中有几个7
        //没有目的地  不对..  人站在目的地
        //有没有4.
****************************************/
运行结果: ![](/i/l/?n=24&i=blog/3398597/202403/3398597-20240306221528888-1578678002.png) 问题改善: 1.人机交互不够好,没有操作提示 2.没有重启按键,一旦走错无法重置游戏 3.完成游戏后无通关标识 新代码: 1.操作提示: ![](/i/l/?n=24&i=blog/3398597/202403/3398597-20240306230550182-6878356.png) 2.重置游戏: ![](/i/l/?n=24&i=blog/3398597/202403/3398597-20240306230642365-418880966.png) ![](/i/l/?n=24&i=blog/3398597/202403/3398597-20240306231422275-2054479452.png) 3.通关标识: ![](/i/l/?n=24&i=blog/3398597/202403/3398597-20240306230803416-1240862349.png) 测试截图: 1. ![](/i/l/?n=24&i=blog/3398597/202403/3398597-20240306230853325-896906524.png) 2. ![](/i/l/?n=24&i=blog/3398597/202403/3398597-20240306231653228-927424065.png) 3. ![](/i/l/?n=24&i=blog/3398597/202403/3398597-20240306231605313-2000793399.png) 总结:玩游戏应该从玩家舒适的角度进行考虑,使程序趋向于方便玩家游玩,要有较好的人机交互。因此思考逆向软件工程,应该代入到使用者的角度,而非创作者的角度。

标签:case,箱子,map,break,小游戏,https,blog,二次开发,3398597
From: https://www.cnblogs.com/bgrcy/p/18057892

相关文章

  • 飞机大战小游戏改进与创新
    飞机大战小游戏来源:[https://github.com/WindrunnerMax/AirplaneWar]运行环境:visualstudio2019运行截图如下:对源文件的各项代码,我进行了一些修改和创新,Bomb.cpp文件中,我发现以下问题:魔法数值硬编码:在Draw函数中出现了数字12和10,应该将这些魔法数值定义成常量或者宏以提高......
  • 第一周-软件二次开发
    项目来源本次作业的项目来源于本人在GitHub上面找到的一个简单的酒店管理系统。运行环境Python3.10.7运行结果基础页面图功能样例图查询样例图主要问题程序的主要问题有:不做任何交互也会导致程序退出交互时不清屏,造成查看结果困难录入酒店信息的数据验证出现问......
  • 基于蜘蛛纸牌游戏的二次开发
    摘要:蜘蛛纸牌是一款广为人知的单人纸牌游戏,但在实践中发现了一些存在的缺陷。本文将首先介绍蜘蛛纸牌游戏的规则,然后列举其存在的缺陷,最后提出了针对这些缺陷的二次开发解决方案,旨在提升游戏体验。引言蜘蛛纸牌游戏是一种使用两副牌(共104张扑克牌)进行的单人纸牌游戏,其目标是通......
  • 基于c语言的扫雷系统的二次开发
    原代码扫雷基本流程一、基本思路首先创建二维数组,来表示地图每一个格子要表示的信息:未翻开状态(草地)和已翻开状态(数字)该格子是地雷或者不是地雷(1表示是地雷,0表示不是地雷)使用两个二维数组来表示以上两组状态:第一组二维数组:charshowMap[9][9];表示每个格子的翻开和未翻开状......
  • 图书管理系统二次开发
    图书管理系统以下为源代码:includeincludeincludeusingnamespacestd;classuser;classcommon;classvip;classhonored;classbook{protected:stringbook_name;stringauthor;stringpublisher;doubleprice;book*next;public:book():next(NULL){};void......
  • 基于C语言中国象棋项目的二次开发
    这是一个由C语言所编写的中国象棋项目,以下给出原项目的链接、代码、运行截图。原项目链接:https://blog.csdn.net/weixin_45590872/article/details/109308798原C语言代码如下:点击查看代码#include<stdio.h>#include<conio.h>#include<string.h>#include<stdlib.h>#includ......
  • C语言-猜拳游戏二次开发
    引言当探究猜拳游戏的魅力时,人们往往会陶醉于其古老的历史和简单的规则之中。作为一种源远流长的竞技娱乐活动,猜拳游戏早已深入人们的生活,成为一种普遍且愉快的社交互动方式。然而,这看似简单的游戏背后却蕴含了深刻的智慧。在短暂的选择过程中,参与者不仅在思考自己的选择,更需要推......
  • 基于图书购买系统的二次开发
    这是大一学习c++的一位同学的大作业,里面存在着诸多缺点,我对其中的一部分进行了改进,增加了一部分功能,但是还是有一些bug我至今修复不了。这是系统原本的功能。在此基础上我添加了书籍排序,查找书籍和删除书籍的功能,并且对增加书籍进行了修改。首先我先讲讲对增加书籍的修改可......
  • Python实现五子棋人机对战的二次开发
    Python实现人机对战的二次开发    在网上找到了一个使用python实现五子棋游戏,其中通过加入一个简单的AI算法实现了人机对战的功能,我觉得这个人机对战还是蛮有意思的,下面我分析一下五子棋游戏的规则、棋盘表示方法、AI算法的实现原理以及代码实现过程。最后二次开发时引入新的......
  • 基于unity和c#的障碍跑酷游戏的二次开发
    一、设计背景近年来,虚拟现实技术取得了突飞猛进的发展,为游戏行业带来了新的机遇。通过将跑酷游戏与虚拟现实技术相结合,可以为玩家提供更加真实、沉浸式的游戏体验,让玩家仿佛置身于现实世界中的跑酷场景中。现代游戏越来越注重玩家之间的互动和竞技。跑酷游戏可以设置多人在线模......