React学习-推箱子游戏

2023-11-15

游戏效果图(共100关)
代码地址:https://download.csdn.net/download/qq_20698983/12740361
在这里插入图片描述
目录

  • 简述
  • 游戏布局
  • 按键监听
  • 推动箱子和移动人物
  • 判断胜利
  • 步数器/上一关/下一关/返回上一步

简述

本游戏抛去贴图,可以将游戏界面看成是一个二维数组,游戏的人物、墙、箱子等物体的坐标都是事先定好的,我称它为地图,故本游戏还没开始做时,我就在网上找了两样东西,一是游戏的素材(草地、人物、箱子等图片),二是游戏地图(一个二维数组)。

游戏布局

布局-数据部分
地图上的每个格子都包含几个属性,即:坐标、格子宽高、贴图、层级(在其它元素上方/下方),其中坐标就是游戏地图中的坐标,格子宽高是自定义的,贴图上面已经说过了是在网上找的,层级根据元素值去决定,例:箱子肯定要在草地的上面(不能被草地挡住),所以箱子的层级肯定要比草地高。

加载到游戏地图的二维数组后,对数组进行遍历,定义一个mapNodes变量,将所有坐标保存起来,除此之外,整张地图都需要有草地的贴图,故草地部分需要全部保存。

游戏地图
在这里插入图片描述
坐标保存逻辑
在这里插入图片描述

布局-元素部分
经过上面的步骤,准备好了数据后,我们开始进行元素布局,我单独定义了一个box组件,用于渲染组件,有一个position属性值得注意,我通过这个属性将所有元素都设置成共用一个中心点,通过设置top和left,计算出该元素所要位移的距离,最终形成整个地图
Box组件逻辑
在这里插入图片描述
定义好该组件后,我们只需要将数据部分准备好的mapNodes的值全部遍历,生成地图即可,除此之外我还在游戏地图下方定义了一些按钮,具体内容见下图
在这里插入图片描述

按键监听

按键监听极其简单,至于处理逻辑,接着往后看
在这里插入图片描述

推动箱子和移动人物

注册按键监听后,会调用到 this.keyClickEvent 方法,我在这个方法中处理哪些键进行响应(这里只监听wasd和右边的键盘方向键),具体看逻辑
在这里插入图片描述
人物如何移动只需要根据方向改变坐标就行了,但移动往往没这么简单,比如说前面是箱子,就需要连着箱子一起推动,前面是空地就只需要人物进行移动,我们先看如何根据方向改变坐标
在这里插入图片描述
根据要移动的位置,分别区分有箱子和无箱子的移动法(细心的朋友可以看到我在移动的时候进行了计数和记录历史步骤的逻辑)

无箱子的移动其实就是改变人物的坐标为要到达的坐标
有箱子的移动则是箱子到达目标位置+1,而人物只需要到达目标位置
在这里插入图片描述

判断胜利

判断胜利的方法极其简单,因为有两个条件是已知的,使用计数法相当的方便
在这里插入图片描述

步数器/上一关/下一关/返回上一步

步数器: 在移动箱子那一节已经讲过了,逻辑异常简单就不在复述
上一关和下一关: 根据当前关卡,加一或减一,重新获取地图数据就行了
返回一上步: 该功能在移动箱子时就已经将当前地图存进了historyStep数组中,在此处则只需要取一下最后一步的数据,将数据塞给当前地图并同时将人物的坐标初始化即可
在这里插入图片描述

总结

推箱子游戏主要是为了自己学习React而做的一个小游戏,通过实践清楚的明白了constructor、componentDidMount、render的加载顺序,并通过查阅资料对react整个生命周期也进行了了解,其次是通过提取Box组件,让整个调用逻辑看起来比较清晰简单,后续会通过象棋游戏对React加深了解。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React学习-推箱子游戏 的相关文章

随机推荐

  • linux环境安装php fileinfo扩展

    linux环境安装php fileinfo扩展 windows环境安装扩展比较简单 只需要把dll拷贝到扩展目录 修改php ini中相应的扩展就好了 下面来介绍一下linux环境下的php扩展安装 以centos6 5和php7 1为例
  • C++ OpenCV制作九宫格拼图游戏

    学更好的别人 做更好的自己 微卡智享 本文长度为2498字 预计阅读7分钟 前言 上一篇 C OpenCV生成九宫格图像 介绍了如何将图片分割城九宫格 然后重新打乱了顺序显示出来 本篇就来说一下怎么制作一个九宫格的拼图游戏 项目的重新创建了
  • JAVA是什么意思

    JAVA的意思是计算机的编程语言 Java通过面向对象的编程语言 它不仅吸收了C 语言的优点 而且摒弃了C 中难于理解的多继承和指针的概念 具有简单性 功能强大 分布式 健壮性 安全性 平台独立与可移植性 多线程及动态性的特点 Java语言
  • 第二十一课,几何着色器(基础篇)

    几何着色器的作用 输入 输入类型 从顶点着色器接收下列任何一个图元值 类型 数组大小 points 绘制GL POINTS图元时 1 lines 绘制GL LINES或GL LINE STRIP时 2 lines adjacency GL
  • seaborn学习笔记(二):散点图、线图

    html font family sans serif ms text size adjust 100 webkit text size adjust 100 body margin 0 article aside details figc
  • Spring Cloud Gateway替代zuul作为API网关(一)

    本文简要介绍如何使用Spring Cloud Gateway 作为API 网关 不是使用zuul作为网关 关于Spring Cloud Gateway和zuul的性能比较本文不再赘述 基本可以肯定Spring Cloud Finchley版
  • matlab 中.*和*有什么区别

    和 的区别 在进行数之间的运算时 和 是没有区别的 都是表示普通的乘法运算 例 m 2 n 3 m n 6 m n 6 在进行矩阵之间的运算时 和 的意义就有所不同了 假设a b表示两个矩阵 a b表示矩阵a与矩阵b进行矩阵相乘 a b表示
  • 微软服务器dda,实战DDA硬件直通:Hyper-V虚拟机直通NVMe固态硬盘

    虚拟机可以把一台电脑模拟成许多台完整的系统 并在他们当中安装运行各自的操作系统和软件应用 在使用虚拟机的时候我们既可以利用NVMe固态硬盘的性能 同时承载多个虚拟机的读写请求 也可以让其中某个需要重负载读写的虚拟机独享它的性能 这时就需要用
  • VsCode搭建Windows C++ (MSVC)开发环境

    由于最近的学习需求 折腾起了vscode 毕竟是跨平台 对以后项目的拓展也很方便 至于为什么不用mingw tdm gcc一类 主要因为毕竟是Windows平台 使用自家的MSVC开发环境一来可以放心 少出BUG 二来能够增强Windows
  • kmeans算法原理以及实践操作

    原文 http www cnblogs com dudumiaomiao p 5839905 html kmeans算法原理以及实践操作 多种k值确定以及如何选取初始点方法 kmeans一般在数据分析前期使用 选取适当的k 将数据聚类后 然
  • springboot搭建文件预览解决方案,支持目前主流格式office文件,txt文件,png,jpg等图片以及压缩文件的在线预览功能

    应用场景及实现思路 应用场景 给定一个网址 输入网址后立即显示预览文件 实现思路 1 将文件下载到本地 存储到某个指定目录 2 进行文件转换 此处是重点 3 进行文件展示 实现过程 首先 搭建一个springboot项目 搭建完毕后项目结构
  • ovsdb <10> Ops-cli结合ovsdb部分流程及接口分析

    4 6Ops cli结合ovsdb部分流程及接口分析 Ops中对于ovsdb的应用主要是基于上述的ovsdb的简单用法上的一个扩展和函数封装 现在就其与之前不同的地方做补充说明并就各个函数的使用做相应的说明 根据前面的ovsdb的数据结构描
  • 素数表

    2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 1
  • C#条码设计-CODE93

    由于最近一段时间在忙考试 一直也没有时间接着写 现在考完试了 慢慢将其他的编码规则发上来 希望对各位能有所帮助 今天要跟大家分享的CODE93编码规则 一 了解一下CODE93的发展 1 Code 93於1982年 基於code 39之上而
  • Ubuntu14.04 64位机上配置OpenCV3.4.2+OpenCV_Contrib3.4.2+Python3.4.3操作步骤

    Ubuntu 14 04 64位上默认安装了两个版本的python 一个是python2 7 6 另外一个是python3 4 3 这里使用OpenCV最新的稳定版本3 4 2在Ubuntu上安装python3 4 3支持OpenCV的操作
  • 1.10 throws和throw:声明和抛出异常

    Java 中的异常处理除了捕获异常和处理异常之外 还包括声明异常和拋出异常 实现声明和抛出异常的关键字非常相似 它们是 throws 和 throw 可以通过 throws 关键字在方法上声明该方法要拋出的异常 然后在方法内部通过 thro
  • 构建微服务技术中台,SpringCloud和Kubernetes该如何选型?【最优:Kubernetes+Nacos+SpringBoot,不用SpringCloud】

    前言 中台架构一词最近在技术圈内比较火 波波基于自己的经验和视角 也来凑个热闹聊聊什么是中台架构 中台架构实际由若干个层次组成 其中微服务技术中台是构建中台架构的重要组成部分 SpringCloud和Kubernetes 是目前互联网企业构
  • C语言练习题(10)求函数返回值,传入 -1 ,则在64位机器上函数返回(非常详细的讲解)

    1 求函数返回值 传入 1 则在64位机器上函数返回 int func int x int count 0 while x count x x x 1 与运算 return count A 死循环 B 64 C 32 D 16 解析 C 1
  • BurpSuite插件HaE与Authz用法

    HaE与Authz均为BurpSuite插件生态的一员 两者搭配可以避免 越权 未授权 两类漏洞的重复测试行为 适用于业务繁杂 系统模块功能多的场景 两个插件都可以在store里安装 安装完后 点击Filter Settings勾选Show
  • React学习-推箱子游戏

    游戏效果图 共100关 代码地址 https download csdn net download qq 20698983 12740361 目录 简述 游戏布局 按键监听 推动箱子和移动人物 判断胜利 步数器 上一关 下一关 返回上一步