大富翁开发日记

一个大胆的尝试:使用巨型lua协程来表示整个“一局”流程。

lua协程是一个很另类的功能,有并发的影子但又不是真的并发,所以真正拿它来做大功能框架的范例不多,通常用于一些小型trick式设计。但这次我在大富翁里把它用到了“极致”:整个一局游戏,就是全部跑在一个协程里的!

简单的说:在开始按钮的点击响应函数里(自然是在“主协程”中),创建出用于新一局游戏的“run协程”,然后在这里面启动这一局的while大循环,共3层:第1层为每个回合,第2层为每个玩家,第3层为每个指令。每当要等待一个指令时,run协程挂起,控制返回主协程,也就使主线程处于应用程序自身的“while(1){ getMessage }"状态!在得到相应的ui消息或是网络消息时(分别对应于己方操作或对方操作),将其“喂”给run协程使之往前跑一段,直至遇到下一个指令等待而挂起。如此周而复始,直到一局结束。

通常,类似的系统都会用状态机来实现:依游戏逻辑设定数十个状态,再设定每种状态下每一种输入的响应函数。虽然同样可以达到“等待—前进”的效果,但相比于协程方案,弱点有:一、流程的推进在形式上不再有一个完整直观的线索,而是散布在数十处各异的函数里,对流程的说明只能通过额外的文档补充;二、每一次挂起都对应当次响应函数返回,而下一次的响应函数如要与之共享信息,只能通过状态机级别的全局变量,这会导致大量繁琐的管理消耗。在协程方案里,整个流程处于一个函数内的三层while循环表示下,非常集中直观,看起来简直就是一个特事特办、不怕阻塞的专用线程;而所谓等待并不真的阻塞只是将自身挂起,一旦恢复,仅仅是完成了一个函数调用,之前的状态——局部变量全部都在,毫无额外负载!

大富翁开发日记

时间: 2024-09-30 16:41:00

大富翁开发日记的相关文章

微信小程序开发日记——高仿知乎日报(上)

本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该教程分为以下三篇 微信小程序开发日记--高仿知乎日报(上) 微信小程序开发日记--高仿知乎日报(中) 微信小程序开发日记--高仿知乎日报(下) 三篇分别讲不同的组件和功能块 这篇要讲 API分析 启动页 轮播图 日报列表 浮动按钮 侧滑菜单 API分析 以下是使用到的具体API,更加详细参数和返回结

车联网开发日记4

今天是车联网开发的第四天,继续昨天的进展,对项目的主要功能方面的代码进行学习和整理,今天主要是百度地图的显示和定位,和android 服务端的实现.而且我们规定了编码项目的api和android的版本. 百度地图的显示和定位都可以实现,但是由于电脑安卓虚拟机无法连接网路,所以无法在安卓虚拟机中实现,但是我们在真机上验证,可以实现(需要连接网路). 地图API的应用查看(车联网开发日记2) android服务端的搭建主要有两种方法:xml格式的webservice,json格式的webservic

【Android开发日记】妙用 RelativeLayout 实现3 段布局

在设计过程中,我们经常会遇到这样的需求: 把一条线3控制,左对齐左控制,右侧控制右对齐,中间控制,以填补剩余空间. 或者一列内放3个控件,上面的与顶部对齐,以下的沉在最底部,中间控件是弹性的.充满剩余空间. 情况一:水平布局 图示: 这是第一种情形.因为涉及到ImageView.想保持图片原比例不便使用LinearLayout的weight属性. 解决的方法: 1.外层套一个RelativeLayout 2.三个控件分别装进3个LinearLayout中.假如id分别为leftlayout,mi

【原创】shadowebdict开发日记:基于linux的简明英汉字典(三)

全系列目录: [原创]shadowebdict开发日记:基于linux的简明英汉字典(一) [原创]shadowebdict开发日记:基于linux的简明英汉字典(二) [原创]shadowebdict开发日记:基于linux的简明英汉字典(三) [原创]shadowebdict开发日记:基于linux的简明英汉字典(四) 项目的github地址 承接上文. 现在来进行response模块的开发. 这一模块所完成的任务是,如果本地的词库中没有用户需要查询的词汇,那么就去网络上寻找到相应的词条作为

【原创】shadowebdict开发日记:基于linux的简明英汉字典(四)

全系列目录: [原创]shadowebdict开发日记:基于linux的简明英汉字典(一) [原创]shadowebdict开发日记:基于linux的简明英汉字典(二) [原创]shadowebdict开发日记:基于linux的简明英汉字典(三) [原创]shadowebdict开发日记:基于linux的简明英汉字典(四) 项目的github地址 实习的工作都这么忙,真是的.. 好不容易有时间写点博客,一鼓作气完成算了 承接上文 本文完成对本地数据库模块的开发. 由于只是非常轻量级的应用,就不劳

【Android的从零单排开发日记】之入门篇(四)——Android四大组件之Activity

在Android中,无论是开发者还是用户,接触最多的就算是Activity.它是Android中最复杂.最核心的组件.Activity组件是负责与用户进行交互的组件,它的设计理念在很多方面都和Web页面类似.当然,这种相似性主要体现在设计思想上.在具体实现方面,Android的Activity组件有自己的设计规范,同时,它能够更简便地使用线程.文件数据等本地资源. 一.Activity 的生命周期 Activity 的生命周期是被以下的函数控制的. 1 public class Activity

【Android的从零单排开发日记】之入门篇(六)——Android四大组件之Broadcast Receiver

广播接受者是作为系统的监听者存在着的,它可以监听系统或系统中其他应用发生的事件来做出响应.如设备开机时,应用要检查数据的变化状况,此时就可以通过广播来把消息通知给用户.又如网络状态改变时,电量变化时都可以通过广播来通知用户.要做比喻的话,广播就像是我们的感官,能够有效且快速的从外界获取信息来反馈给自身. 一.广播的功能和特征 广播的生命周期很短,经过 调用对象—实现onReceive—结束 整个过程就结束了.从实现的复杂度和代码量来看,广播无疑是最迷你的Android 组件,实现往往只需几行代码

【Android的从零单排开发日记】之入门篇(三)——Android目录结构

本来的话,这一章想要介绍的是Android的系统架构,毕竟有了这些知识的储备,再去看实际的项目时才会更清楚地理解为什么要这样设计,同时在开发中遇到难题,也可以凭借着对Android的了解,尽快找出哪些模块和设计能够帮助解决该问题.但想了一下,这毕竟是入门篇,若没有实际项目开发经验的人看了之后肯定是一头雾水,所以就决定将其搁浅到大家熟悉Android之后再为大家介绍. 那么今天的主题是Android的目录结构,将系统架构比作人的骨骼架构的话,目录结构就像是人的各个器官,彼此功能各不相同,却能有序地

安卓app开发日记

1,确定安卓程序结构 主要4块 main.xml这个就是手机界面的UI结构 R,java 系统资源列表,相当于硬件的system文件(具体怎么生成的待查) AndroidManifest.xml 系统功能列表,加功能要往里面写代码(不知道除了activity之类的其他类是不是也要往里面写) mainactivity.java你biancheng 的地方 2,安卓程序流程 Activity类只是一个包含一些基本窗口功能的类,启动后实际是一个空白框, 需要在其中加入自己的设计,下面是一个空项目的ac