应用

在oTree(和Django)中,app是一个包含Python和HTML代码的文件夹。当您创建oTree项目时,它会预先加载各种应用程序,例如 public_goodsdictator。会话基本上是一个接一个显示的应用程序序列。

创建应用

输入:

这将基于oTree模板创建一个新的app文件夹,其中大部分结构已经为您设置。

关键文件是models.py,pages.py和templates /文件夹下的HTML文件。

您可以将其视为可以根据需要添加的骨架。 您可以添加自己的类,函数,方法和属性,也可以导入任何第三方模块。

然后转到settings.py并在SESSION_CONFIGS中为您的应用创建一个与其他条目类似的条目。

组合应用

在您的SESSION_CONFIGS中,您可以通过设置组合应用程序'app_sequence'

在应用程序之间传递数据

请参阅participant.vars和session.vars。

回合

您可以通过在models.py中设置Constants.num_rounds来使游戏运行多轮。 例如,如果您的Session配置的app_sequence是['app1','app2'],其中app1的num_rounds = 3且app2的num_rounds = 1,那么您的会话将包含4个子会话。

回合数

您可以使用self.round_number (此属性出现在subsession,group,player和page对象上)来获取当前的轮数。回合数字从1开始。

在轮次或应用程序之间传递数据

每轮都有单独的Subsession,Group和Player对象。 例如,假设您在第1轮中设置self.player.my_field = True。在第2轮中,如果您尝试访问self.player.my_field,您会发现其值为None(假设这是该字段的默认值)。 这是因为第1轮中的Player对象与第2轮中的Player对象是分开的。

要访问上一轮或应用程序中的数据,您可以使用下面描述的技术之一。

in_rounds,in_previous_rounds,in_round等

Player,group和subsession对象具有以下方法,它们的工作方式类似:

  • in_previous_rounds()
  • in_all_rounds()
  • in_rounds()
  • in_round()

player.in_previous_rounds()和player.in_all_rounds()每个都返回一个代表相同应用前几轮中同一参与者的玩家列表。 区别在于in_all_rounds()包括当前回合的玩家。

例如,如果您想计算参与者对所有前几轮游戏的收益,加上当前游戏的收益:

player.in_rounds(m,n)返回表示从轮次m到n的同一参与者的玩家列表。

player.in_round(m)只返回第m轮的玩家。 例如,要获得上一轮玩家的回报,你可以使用self.player.in_round(self.round_number - 1).payoff。

类似地,subsession对象具有以相同方式工作的方法in_previous_rounds(),in_all_rounds(),in_rounds(m,n)和in_round(m)。

组对象也有方法in_previous_rounds(),in_all_rounds(),in_rounds(m,n)和in_round(m),但请注意,如果在轮之间重新组合组,则这些方法可能不会返回任何有意义的内容。

participant.vars

如果要在不同应用程序之间传递数据,则应将此数据存储在参与者中,该数据在应用程序中保留(请参阅参与者)。 (in_all_rounds()仅在您需要访问同一应用程序的上一轮数据时才有用。)

participant.vars是一个可以存储任何数据的字典。 例如,您可以设置如下属性:

稍后在会话中(例如在单独的应用程序中),您可以像这样检索它:

如在这里所述,可以从页面或玩家访问当前参与者:

只要您检索Player实例(例如,使用get_players()或get_player_by_role()等),您也可以从Group或Subsession访问它。

如果您的key可能存在,也可能不存在,您可以使用.get()方法。 例如,self.participant.vars.get('my_var',DEFAULT_VALUE)。 更多这里。

或者您可以在self.participant.vars中测试'my_var'是否与'my_var'一起存在。

注意:participant.vars不包含在Excel / CSV数据导出中,也不包含在会话管理员的“数据”选项卡中。 如果需要,可以在player上创建一个StringField(例如,名为participant_vars_dump),然后在会话结束时指定:

(同样的概念适用于下面的session.vars。)

session.vars 

对于会话中所有参与者相同的全局变量,可以使用self.session.vars。 这是一个像participant.vars一样的字典。 不同之处在于,如果在self.session.vars中设置变量,它将应用于会话中的所有参与者,而不仅仅是一个。

如此处所述,可以从Page对象或任何模型(Player,Group,Subsession等)访问会话对象。

可变轮数

如果你想要一个可变数量的轮数,考虑设置num_rounds 为某个高数字,然后在你的应用程序中,有条件地隐藏 元素,这样用户就无法进入下一页。{% next_button %}

oTree学习教程(七)Apps rounds相关推荐

  1. oTree学习教程(二)Models

    Models models.py 是您定义应用程序数据模型的位置: Subsession Group Player Player是Group的一部分,这是Subsession的一部分.请参阅概念概述. ...

  2. oTree学习教程(一)概念性概述

    概念概述 Sessions 在oTree中,会话是指多个参与者参与一系列任务或游戏的事件.会话的一个例子是: "许多参与者将来到实验室并进行公共产品游戏,然后进行问卷调查.参与者获得的奖金为 ...

  3. oTree学习教程(六)Multiplayer games

    组 oTree的群组系统允许您将玩家分成小组并让玩家与同一组中的其他玩家互动.这通常用于多人游戏.(如果您只需要"治疗组"意义上的团体,其中玩家实际上并不相互交流,那么请参阅处理. ...

  4. oTree学习教程(四)Templates

    模板 您应用的templates/文件夹将包含显示给玩家的HTML模板. 模板语法 变量 您可以显示如下变量: 模板中提供以下变量: player:当前正在查看该页面的玩家 group:当前玩家所属的 ...

  5. oTree学习教程(五)Forms

    oTree中的每个页面都可以包含一个表单,玩家应通过单击"下一步"按钮填写并提交该表单.要创建表单,首先需要Player在models.py中的类中使用字段.然后,在您的Page类 ...

  6. oTree学习教程(八)Bots

    您可以编写模拟参与者播放应用程序的"机器人",以便您可以测试它是否正常运行. 很多oTree用户都跳过写机器人,因为他们认为这很复杂,或者因为他们太忙于为他们的应用程序编写代码.但 ...

  7. oTree学习教程(三)Pages

    Pages 玩家看到的每个页面都是由一个Page类定义的pages.py. 您pages.py必须有一个page_sequence 给出页面顺序的变量.例如: 如果您的游戏有多轮,则会重复此顺序.有关 ...

  8. akka学习教程(十四) akka分布式实战

    akka系列文章目录 akka学习教程(十四) akka分布式实战 akka学习教程(十三) akka分布式 akka学习教程(十二) Spring与Akka的集成 akka学习教程(十一) akka ...

  9. 【STM32】标准库与HAL库对照学习教程外设篇--超声波测距传感器

    [STM32]标准库与HAL库对照学习教程外设篇--超声波测距传感器 一.前言 二.准备工作 三.超声波测距传感器 1.原理说明 2.使用说明 四.标准库使用传感器 1.实验程序 2.实验效果 五.H ...

最新文章

  1. 想知道spring boot+cloud+docker的微服务体系架构如何使用吗?
  2. DSP48E Slice
  3. android 收起下拉菜单,Android 展开/折叠 系统下拉通知栏
  4. Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图
  5. Org设置让DataLoader导入数据时能导入创建日期
  6. MapReduce 进阶:Partitioner 组件
  7. php获取d盘,软件装c盘和d盘的区别
  8. 利用 GregorianCalendar 制作当前月的月历
  9. 微服务有麻烦吗? Lagom在这里为您提供帮助。 尝试一下!
  10. 数学家告诉你什么时候结束单身?!
  11. TensorFlow 深度学习中文第二版·翻译完成
  12. mysql ascii ord_MySQL ORD()函数使用实例介绍
  13. 【C++ 与 STL】栈:stack
  14. ZMQ中线程之间发送命令
  15. Windows许可证过期(‘slmgr.vbs‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件)
  16. IT行业都有什么职位?
  17. 大话墨香泰坦版服务端架设及客户端IP修改
  18. RabbitMQ之消息确认机制(事务+Confirm) - 朱小厮的博客 - CSDN博客
  19. 平面设计自学能学会吗?学习平面设需要学多久?
  20. css让四个div并排显示,css如何让两个div并排显示?

热门文章

  1. 基于云服务创建实时运营数据分析服务(二)
  2. App内嵌H5活动页面携带用户token
  3. 无线网络-何为ISM频段?
  4. 从《人民的名义》看声纹识别技术在案件侦查中的应用
  5. 泰凌微8258入门教程 基础篇⑤——发送数据流程
  6. 分布式锁1 Java常用技术方案
  7. 三星R463无线网卡驱动,声卡驱动,FN快捷键驱动,Easy_Display_Manager
  8. frame-reday
  9. 布局练习——网易新闻
  10. PLC通讯实现-C#实现欧姆龙以太网通讯FINS(二)