文章目录

  • 摘要
  • 从数据库概念基础出发
  • 从数据库到游戏
  • 游戏中的广义背包系统
    • 概念
    • 意义
    • 交互逻辑
  • 总结

摘要

  • 背包系统作为游戏中常见的一个系统,它的实现基本有迹可循。相比于其他内容它的实现思路具有较大的普适性。
  • 在平时的开发练习中,曾用过许多种设计思路去实现背包系统。根据这些练习的经验总结,可以知道各种背包系统设计的基本思路都是大相径庭的。
  • 因此打算就一般思路进行一次总结

从数据库概念基础出发

  • 其实很多程序,不止游戏,也包括网站等。它们都会使用数据库功能。
  • 一般来说,程序中大量的数据都会存储在数据库的一张张表中。而对于数据库操作,大体上可以分为查询和更新两部分。而在更新中,又有增、删、查、改四种基本操作。
  • 一般来说,如果要将网站上的某个数据存储到用户个人账户上,例如收藏文章。那么就会使用“增加”功能,将该文章的id加入到用户自己的专门存储收藏栏的表中。
  • 这就是数据库的基本操作。

从数据库到游戏

  • 虽然不同设计模式或者程序框架下,对于“数据表”有着不同的设计和对接要求。但说到底,每一个可以存储”物品“的对象都存在一张”数据表“用于存放物品的id或者对象引用。
  • 就游戏而言,一般会将所有的物品数据存储在内置数据库或者实例化对象的字典或列表中。这些表通常存储着物品的共同信息和特定信息。共同信息包括id,名称,描述,价值,是否可堆叠等。而特定信息一般用于存储装备、道具等的特殊信息。
  • 而背包系统则是存储持有道具的id或对象引用以及数量等。
  • 而游戏中的任何物品的存储和转移行为,如掉落物,采集物,购买,出售。在后端都可以按照增删逻辑来实现,只不过一般来说商店的存储方式和玩家背包的存储方式不同。

游戏中的广义背包系统

概念

  • 我个人认为,游戏中各种具有物品存储和转移性质的系统或对象,都可以称之为背包系统。而这些背包系统和传统的玩家背包有所不同,因此我称之为广义背包系统。
  • 广义背包系统可以分为值背包系统和引用背包系统。这里我借用了编程语言中的”值“和”引用“的概念。
  • 值背包系统即与数据库分开存储和管理的背包系统,如玩家背包,通常它不仅仅是存储一个物品的引用,还包括其他与”实例化“相关的信息,例如持有数,如果有诸如能量损耗,则还包括当前能量存储值。
  • 引用背包系统则是与数据库相关联的背包系统,它仅仅保存对数据库中物品的引用,例如只有存储了物品id的列表。如商店,怪物掉落物等。

意义

  • 从显示的角度上看,无论是值背包还是引用背包,都可以采用同一套前端逻辑进行显示(特殊需求除外)
  • 一般来说,值背包是动态的,引用背包是静态的。当然实际开发中的需求比较复杂,可能不能对系统的性质进行二值判断。不过在开发中也不需要太过在意它是”值“类型的背包还是”引用“类型的背包。
  • 一般来说,引用背包只会和值背包进行交互,而值背包则可以和引用或值背包交互

交互逻辑

  • 从对方获取物品时,如果自己背包没有,就拷贝一份,并设置计数量,否则计数+N,同时付出代价。
  • 给予对方物品时,如果自己物品数大于需求,则计数-N,若物品数等于需求,则移除物品。否则不可给予。给予成功时,则得到回报。

总结

  • 以上主要阐述了对背包系统的后端逻辑的观点。而前端交互则需要具体问题具体分析。一般前端交互涉及很多手感、体验上的非业务需求。因此不在这里赘述。

【UI界面开发】背包系统一般思路相关推荐

  1. 【UI界面开发】基本组件概述

    文章目录 摘要 基本交互方式 基本交互内容 指针信号 按键信号 摘要 UI界面开发离不开各种UI组件的组合以及相互配合,实现需求.而各种各样的UI组件都有它们的共同特点. 本文将总结UI组件的基本特点 ...

  2. MFC识别XBox游戏手柄,并进行UI界面开发

    一.效果展示 直接上效果图: 二.利用XInput实现获取XBox游戏手柄数据 在网上搜寻了很久,发现方法可以对游戏手柄进行测试,但是MFC版本以及完全版的很少有比较完全的资料,因此作为新手的我,正在 ...

  3. QT学习开发笔记(项目实战之智能家居物联 UI 界面开发 )

    智能家居物联 UI 界面开发 项目路径为 4/01_smarthome/01_smarthome/01_smarthome.pro,先看项目界面.项目界面如 下,采用暗黑主题设计,结合黄色作为亮色,让 ...

  4. 安卓开发——UI界面开发

    功能说明 开发一个类似微信的主页面框架,UI布局为上中下结构,包含4个tab界面: 页面顶部为页面标题 页面底部为导航栏 页面中部为内容展示界面 开发技术 layout xml,控件,监听,fragm ...

  5. HarmonyOS开发详解(四)——鸿蒙Page Ability功能及UI界面开发详解

    HarmonyOS里面的界面通过Page Ability和Java UI一起来实现:讲述Page Ability就离不开Ability.在HarmonyOS里面把各种具备的能力进行抽象,叫做Abili ...

  6. 【UI界面开发】基本组件——按钮

    文章目录 摘要 Button基本要素 UGUI之Button 自定义Button 利用鼠标接口 自定义的键盘操作 摘要 本章就Button组件的一些知识进行总结.除了总结Unity自带的Button组 ...

  7. 【UI界面开发】基本组件——滑杆

    文章目录 摘要 Slider基本要素 UGUI之Slider Unity预设Slider组成分析 Inspector窗口参数 Slider常用成员 自制Slider 摘要 本文章是关于UGUI组件Sl ...

  8. 工作中的UI界面开发的知识点1

    1.//字符串转枚举 SceneType type = (SceneType)Enum.Parse(typeof(SceneType), sceneName); 2.鼠标移动图片 RectTransf ...

  9. QT5.12 Ui界面开发项目:QOpenGLShaderProgram::uniformLocation(model): shader program is not linked

    1. 版本介绍: (1)QT版本:QT5.12 +QT Creator 4.8 (2)编译器版本:windows msvc2017 32bit / 64bit 2. 问题描述: QOpenGLShad ...

  10. 安卓开发——微信UI界面

    一.功能说明 本次作业开发的是类似微信的主页面框架,UI布局为上中下结构,用户可通过点击底部导航栏切换板块内容,其中共包含四个板块,分别是"微信"."通讯录". ...

最新文章

  1. 在 Azure 上部署 Asp.NET Core Web App
  2. 面试官问:生成订单30分钟未支付,则自动取消,该怎么实现?
  3. oracle备份镜像,Oracle RMAN两种备份方式 – 备份集备份与镜像复制备份
  4. ASP.NET Core2调用Azure云上的PowerBI报表展示
  5. hadoop +hbase +zookeeper 完全分布搭建 (版本一)
  6. linux文件名通配符:* ? [:digit:]数字 [:lower:]小写字母 [:upper:]大写字母
  7. SAP常见问题与解决办法 2
  8. 《剑指offer》-- 数组中的逆序对、最小的K个数、从1到n整数中1出现的次数、正则表达式匹配、数值的整数次方
  9. 求两个数的最小公约数和最小公倍数
  10. 为什么那么好的女孩子还单身?
  11. 女生心中的理想男生!这些条件你符合几条?
  12. python插入排序_python 插入排序,选择排序
  13. PagerAdapter学习
  14. 深入解读Docker底层技术cgroup系列(2)——cgroup的初始化
  15. 浏览器无法浏览flv文件的问题
  16. 2022年中式烹调师(技师)考试题库及答案
  17. LabVIEW用高速数据流盘
  18. 检验新买内存条的真假
  19. 小米手机android目录在哪里设置字体,[小米手机]小米手机MIUI自己制作.MTZ字体包方法 无需ROOT权限...
  20. 验证计算机名出现一般性网络错误,一般性网络错误请检查网络文档

热门文章

  1. sspanel v3 配置的完整教程(转)
  2. java的fprintf_fprintf不接受一个字符数组吗?
  3. 实验一:VLAN实验
  4. 关于wifi密码破解之路-1
  5. blos硬盘启动台式计算机,戴尔台式机bios设置硬盘启动教程
  6. (原创)分享一下最近搞的tiny210V2从nand启动支持(K9GAG08U0F).
  7. WooyunWifi路由器
  8. python经典例题及答案_python经典例题100道
  9. 浅谈系统实现层面稳定性保障
  10. IMU与GPS传感器ESKF融合定位(转载)