IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 推箱子小游戏的代码优化和easyx图形工具库 -> 正文阅读

[游戏开发]推箱子小游戏的代码优化和easyx图形工具库

一:功能点

1、对之前的推箱子代码进行优化。
2、新增使用了easyx图形工具库。

二:最终效果动图

在这里插入图片描述

三:代码优化

在网上看到了别人写的代码才发现自己的代码有很多不足的地方。所以参考别人的代码进行了优化。由于代码中都做了注释,所以代码就不进行详细说明了,只说明一点,就是最主要的控制行走部分的代码,只用把一个方向的代码弄清楚了,剩下的三个方向的代码都差不多是一样的。这里直接附上代码。

#include <stdio.h>
#include <conio.h>  //键盘输入函数库
#include <stdlib.h> //这个头文件包含了清屏函数system("cls");
#include <graphics.h> //调用easyx图形库时所需增加的头文件
int map[10][10] = {1,1,1,1,1,1,1,1,1,1,
                   1,0,0,0,0,0,3,0,0,1,
                   1,0,0,5,4,0,0,0,0,1,
                   1,0,0,1,1,0,0,0,0,1,
                   1,0,1,0,0,0,1,0,0,1,
                   1,0,0,4,0,0,1,0,0,1,
                   1,0,0,0,0,0,0,0,0,1,
                   1,0,0,3,0,0,0,0,0,1,
                   1,0,0,0,0,0,0,0,0,1,
                   1,1,1,1,1,1,1,1,1,1,
                };

IMAGE img[6];		//6张图片,6个名字
void loadResource()
{
	loadimage(img + 0, "0.bmp", 50, 50);//50表示图片长宽,可以自己调的
	loadimage(img + 1, "1.bmp", 50, 50);
	loadimage(img + 2, "3.bmp", 50, 50);
	loadimage(img + 3, "4.bmp", 50, 50);
	loadimage(img + 4, "5.bmp", 50, 50);
	loadimage(img + 5, "7.bmp", 50, 50);
}




void PrintMap()
{
    int i, j;
    for (i = 0; i < 10; i++)
    {
        for (j = 0; j < 10; j++)
        {
			int x,y;
			x = j * 50;
			y = i * 50;
            switch (map[i][j])
            {             
            //0:空地 1:墙 3:箱子要放的位置 4:箱子 5:人   7:箱子到达目的地       8:人到达目的地
            /*case 0: printf("  "); break;
            case 1: printf("■"); break;
            case 3: printf("☆"); break;
            case 4: printf("□"); break;

            case 5:
            case 8:
                printf("♀");
                break;
            case 7: printf("★"); break;
			*/
			case 0: putimage(x, y, img + 0); break; //把图片打印在控制台,从坐标点x,y开始显示图片
			case 1: putimage(x, y, img + 1); break;
			case 3: putimage(x, y, img + 2); break;
			case 4: putimage(x, y, img + 3); break;

			case 5:
			case 8: putimage(x, y, img + 4); break; 

            case 7: putimage(x, y, img + 5); break;
			default:
                break;
            }
        }
        printf("\n");
    }
}


void PlayGame()
{
    char temp;
    //遍历整个地图,找到人所在的坐标,并把坐标值赋给i,j这两个变量。
    int x,y;
    int i,j;
    for(x=0;x<10;x++)
    {
        for(y=0;y<10;y++)
        {
            if(map[x][y] == 5 || map[x][y] == 8)
            {
                i=x;
                j=y;
            }
        }
    }

    temp = _getch();//键盘输入无回显函数

    switch (temp)
    {
        case 'W':
		case 'w':
        if (map[i - 1][j] == 0 || map[i - 1][j] == 3) //如果下一步是空地 或者是 箱子要放的位置
        {
            map[i][j] -= 5;
            map[i - 1][j] += 5;
        }
        if (map[i - 1][j] == 4 || map[i - 1][j] == 7)//如果下一步是箱子 或者是 箱子到达目的地
        {
            if (map[i - 2][j] == 0 || map[i - 2][j] == 3)//如果继续下一步是空地 或者是 箱子要放的位置
            {
                map[i][j] -= 5;
                map[i - 1][j] += 1;
                map[i - 2][j] += 4;
            }
        }
        break;

		case 'S':
		case 's':
        if (map[i + 1][j] == 0 || map[i + 1][j] == 3)
        {
            map[i][j] -= 5;
            map[i + 1][j] += 5;
        }
        if (map[i + 1][j] == 4 || map[i + 1][j] == 7)
        {
            if (map[i + 2][j] == 0 || map[i + 2][j] == 3)
            {
                map[i][j] -= 5;
                map[i + 1][j] += 1;
                map[i + 2][j] += 4;
            }
        }
        break;

		case 'A':
		case 'a':
        if (map[i][j - 1] == 0 || map[i][j - 1] == 3)
        {
            map[i][j] -= 5;
            map[i][j - 1] += 5;
        }
        if (map[i][j - 1] == 4 || map[i][j - 1] == 7)
        {
            if (map[i][j - 2] == 0 || map[i][j - 2] == 3)
            {
                map[i][j] -= 5;
                map[i][j - 1] += 1;
                map[i][j - 2] += 4;
            }
        }
        break;

		case 'D':
		case 'd':
        if (map[i][j + 1] == 0 || map[i][j + 1] == 3)
        {
            map[i][j] -= 5;
            map[i][j + 1] += 5;
        }
        if (map[i][j + 1] == 4 || map[i][j + 1] == 7)
        {
            if (map[i][j + 2] == 0 || map[i][j + 2] == 3)
            {
                map[i][j] -= 5;
                map[i][j + 1] += 1;
                map[i][j + 2] += 4;
            }
        }
        break;

    default:
        break;
    }
}

int gamePass() //游戏通关
{
    //地图上没有箱子就可以结束
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            if (map[i][j] == 4)
            {
                return 0;
            }
        }
    }
    return 1;
}

int  main()
{
	loadResource();//加载资源函数
	initgraph(500, 500);//创建一个大小为500 x 500 的窗口
    while (!gamePass())
    {
        PrintMap();
        PlayGame();
        system("cls");
    }
	closegraph();//关闭窗口
    printf("恭喜通关\r\n");
    return 0;
}




代码参考文章:https://blog.csdn.net/qq_40655454/article/details/108046333

四:easyx图形工具库

这个图形工具库的作用请直接看下图:
在这里插入图片描述

easyx的下载链接:https://easyx.cn/
点击这里圈起来的下载EasyX就可以下载了。
在这里插入图片描述

适用编译环境:Visual C++ 6.0,Visual Studio 2008 至 Visual Studio 2019

安装流程:点击下一步,只带最后到这个画面,点击安装即可。我电脑上装了vc++6.0,所以才能安装,如果没有的vc++6.0或者Visual Studio话是不能安装的。
在这里插入图片描述
如何使用这个图形工具库:
第一:可在程序中申明#include <graphics.h> 头文件,从而来使用有关easyx的功能函数。可以参考文章https://blog.csdn.net/ych9527/article/details/111666487
第二:图片素材需要与c程序文件放在同一个目录下。

ps:如果有需要代码和图片素材,可以在评论区留下邮箱,我看到了就会回复。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-07-30 13:04:32  更:2021-07-30 13:04:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 18:56:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码