哈喽大家好我是yumir

文字冒险游戏一直是一个广受欢迎的游戏类型,有小可爱问我有没有文字冒险游戏的制作思路,今天就分享一下,做一个简单的文字冒险游戏,只需要128行代码~

这次我只做了文字显示和分支选择的部分(已经足够用来制作一个游戏了),实际上不管有多少元素,按着我这个思路都是可以实现的。下图是当前的游戏效果:

我的思路是把系统分为三个部分:视图搭建:界面上所有的元素,比如:角色名称、立绘、对话等等元素,需要在场景中搭建制作好预制体。

数据结构:根据游戏内容设计需要填充的数据,对应以上比如:角色名、立绘图片名称、对话内容等等,除此之外需要一个字段“ID”作为句子的唯一标识。

业务逻辑:将读取到的数据(“2”的数据结构中的内容)和“1”的界面元素一一对应编写逻辑。

一、视图搭建

根据需求搭建界面,因人而异,我在场景中放了:背景、对话框和选项框。

背景是一张图片,对话框是在图片中加上文本,选项框稍微复杂,你需要新建一个空的UI物体,调整到合适的大小布局,然后在该物体上加上“Grid Layout Group”组件,设置如下(尺寸自行调整)。

然后在该物体中新建一个子物体作为选项的预制体,我的选项特简单,就是底图加文字组成的按钮,选项预制体需要写一个对文字内容赋值用的脚本:

public Text text;

public int number;

public void Start()

{

GetComponent().onClick.AddListener(()=> { TalkWin.instance.WhenSwitchNodeGetAnswer(number); });

}

public void SetAnswerUI(string s,int i)

{

text.text = s;

number = i;

}

二、数据结构

为了方便填充剧情,我们需要把所有可控条件(文本、图片名称、是否特效等等)都用一个一个的对象存储起来,针对需求定制不同的类。

根据我的需求,游戏中对话有两种情况,而所有游戏对话又有同质内容,所以我将他们提炼到父类中,他们之间的关系如下(类图):

之所以这么写纯粹是因为写重复的字段很累,为了进一步偷懒(不使用额外的文件)在声明的类的前面加上[System.Serializable]。

using System;

[Serializable]

public class CommonTalkNode : TalkNode

{

public int nextID;

public CommonTalkNode(int ID, string nameText, string talkText, double charSpeed, int nextID) : base(ID, nameText, talkText, charSpeed)

{

this.nextID = nextID;

}

}

这样一来就可以直接在面板上填写数据了。

三、业务逻辑

我需要一个打字机的动画效果,而DOTween正好有现成的,所以直接封装一个方法来更新对话框部分的UI刷新逻辑:

public void UpdateTalkWinShow(string nameText,string talkText, float charSpeed)

{

this.nameText.text = nameText;

this.talkText.text = "";

this.talkText.DOText(talkText, charSpeed * talkText.Length);

}

为了知道每次持有的是哪个对话对象,我们需要在系统中声明一个int值类型的字段,作为当前“对话”的指针,初始值是第一个对话对象的ID,也就是“1001”。在每次播放当前对话内容之后将该值替换为实现设置好的“nextID”。

写一个点击事件根据不同的ID进行判断:

if (textID>1000&&textID<2000)

{

UpdateTalkWinShow(commonDic[textID].nameText, commonDic[textID].talkText, (float)commonDic[textID].charSpeed);

textID = commonDic[textID].nextID;

}

else if (textID > 2000 && textID < 3000)

{

UpdateTalkWinShow(switchDic[textID].nameText, switchDic[textID].talkText, (float)switchDic[textID].charSpeed);

CreateAnswerUI(switchDic[textID].switchText);

GetComponent().interactable = false;

}

再回到场景中点击运行,欸,这么简单就完成了?

提取码:8mus

——照例的分割线——

欢迎加入游戏开发群欢乐搅基:610475807

python写文字冒险游戏手机版_用128行代码实现一个文字冒险游戏相关推荐

  1. 三百行python代码的项目_使用300行代码创建一个分布式系统

    使用 300 行代码创建一个分布式系统 构建一个分布式系统是很困难的. 它需要可扩展性. 容错性. 高可用性. 一致性. 可伸缩以及高效.为了达到这些目的,分布式系统需要很多复杂的组件以一 种 复杂的 ...

  2. 用javascript实现以下功能!_用python80行代码实现一个微信消息撤回捕捉功能

    自从微信出了这个消息撤回功能小编我都已经快被折磨死了,小编本来就是个好奇心比较重的人,微信出了这个功能之后小编感觉身体一天不如一天了,每次看着女神发来的信息又撤回,可谓是心里痒痒啊.所以小编就写了一个 ...

  3. python写文字冒险游戏手机版_将用户输入转换为小写文字冒险游戏python3

    我为另一个简单的问题道歉,但我真的被卡住了-我正在尝试添加一个.lower()方法来将任何用户输入(无论是大写.小写还是组合)转换为小写.在 我只是不知道在哪里添加.lower()?在 这是游戏的主要 ...

  4. python制作表白软件手机版_用Python做一个情人节表白神器

    思路来自于「Python 编程时光」,我在其之上改进了一下,主要是通过tkinter编写一个界面方便使用,大家可以关注「Python 编程时光」这一良心公众号. 本文最后给出了打包好的软件,无需安装P ...

  5. python 2048游戏的设计_Python练习:100行代码实现一个简易的2048游戏

    一.任务目标 1.一个在命令行下的2048游戏 2.主要实现功能:判断游戏是否结束:在随机空白位置生成新的数字:上下左右四个方向上进行平移数字并将能合并的数字进行合并:接收键盘输入:将数字阵列显示到命 ...

  6. 我只会python、怎么搞个软件出来-python---很多行代码做一个自动打开软件的程序...

    这里我要推荐一个可以控制鼠标和键盘的库,pyautogui,据它的官方文档,PyAutoGUI的目的是为人类的 GUI自动化提供跨平台的Python模块. 既然能控制了,只要安排好逻辑就可以使其按照我 ...

  7. python myqr制作二维码生成器_用Python生成动态二维码,只要5行代码,拥有你的个性二维码!...

    原标题:用Python生成动态二维码,只要5行代码,拥有你的个性二维码! 前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. P ...

  8. python 翻译代码_python200行代码实现一个翻译软件

    python200行代码实现一个翻译软件 心血来潮写一个命令行的翻译软件方便使用(基于百度翻译api), 话不多说上代码-_- 支持从文件输入输出 支持从剪切板输入输出 #!/home/fyang/. ...

  9. python 250行代码开发一个贪吃蛇

    python 250行代码开发一个贪吃蛇 1. 前提工作准备 2. 全局变量的定义与包的导入 3. 游戏开始界面初始化 4. 游戏界面的设置 4.1 游戏界面,使用一个Point类进行划分 4.2 预 ...

最新文章

  1. 田志刚:致《你的知识需要管理》读者
  2. 关于 Angular view Query 的 id 选择器问题的单步调试
  3. 怎么给自己的python换源_windows/linux下如何更换Python的pip源
  4. mysql主祝福hi_MySql - GROUP BY 和 HAVING关键字
  5. 软件测试正交表用在哪里,使用正交试验法设计测试用例中的一些常用的正交表...
  6. linux 手动修复分区表,分区表修复
  7. ⅰcp经济模型_新经济地理学基本模型及其扩展综述_刘亚军
  8. 使用matlab画图中图
  9. RSF-Center,集群模式下-协调数据结构
  10. pwd python 安装 模块_在windows上安装pwd模块时出错
  11. 真真正正解决VScode不能安装插件问题、无法连接到应用商城问题
  12. Oracle数据仓库参考架构
  13. 哨兵二号数据offline_科学网—利用ENVI 5.3读取哨兵2号(Sentinel-2)L1C数据 - 朱永超的博文...
  14. Linux下at命令的使用!
  15. 线性代数学习笔记——第二十一讲——矩阵秩的等式
  16. Linux命令·rmdir
  17. 全国邮编区号大全和从word中读取内容保存到msql中的源程序
  18. mysql的基本内容介绍简书_MySQL 基本内容
  19. win10显示我的电脑图标
  20. Android中的跨进程回调

热门文章

  1. APS高级计划排程 基本概念
  2. 基于ESP8266的遥控小车
  3. 万字长文:编写 Dockerfiles 最佳实践
  4. 电脑工作人员如何保护眼睛
  5. 【Matlab】如何规范地编写一个MATLAB函数文件
  6. 大学英语四级考试必读必备
  7. html制作图片动画效果代码,HTML5 Canvas:制作动画特效
  8. 什么软件能把蓝底换白底
  9. STM32CubeMonitor监控程序目标变量并导出结果为csv格式
  10. missingno错误不显示图片,pycharm