You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Otree(Python库)实现双人简易计分器的技术咨询

在Otree中实现双人每轮+10分的计分器

我来帮你一步步实现这个Otree里的双人计分器功能,先完成每轮结束后加10分的基础功能,后续你可以再扩展特定条件的判断逻辑:

1. 完善models.py中的Player类

首先我们需要给Player模型添加存储分数的字段,再实现专门的加分方法,方便后续调用:

from otree.api import BasePlayer, models, BaseSubsession

class Player(BasePlayer):
    # 初始化分数为0,用于存储玩家累计得分
    score = models.IntegerField(initial=0)

    def add_round_points(self):
        # 每轮结束后增加10分
        self.score += 10
        # 保存更新后的分数到数据库
        self.save()

class Subsession(BaseSubsession):
    def creating_session(self):
        # 游戏初始化时,将玩家按2人一组分配(适配双人游戏)
        if self.round_number == 1:
            self.group_randomly()

这里的Subsession配置是为了确保两名玩家能分到同一组,方便后续获取对方的分数。

2. 在pages.py中调用加分函数并配置结果页

接下来我们要在答题页的跳转钩子中调用加分方法,同时配置结果页来展示两人的分数:

from otree.api import Page, WaitPage
from .models import Player

class QuizPage(Page):
    # 这是你的答题页面,假设这里有玩家需要完成的题目表单
    form_model = 'player'
    # 示例:如果有答题字段,在这里定义,比如:
    # question_answer = models.StringField(label="请回答问题:")

    def before_next_page(self):
        # 玩家完成答题并点击下一页时,执行加分操作
        self.player.add_round_points()

class ResultsPage(Page):
    # 展示本轮结束后的分数结果
    def vars_for_template(self):
        # 把当前玩家和组内另一位玩家的分数传递给模板
        return {
            'my_score': self.player.score,
            'opponent_score': self.player.get_others_in_group()[0].score
        }

# 页面顺序:先答题,再看结果
page_sequence = [QuizPage, ResultsPage]

before_next_page是Otree的内置钩子函数,会在页面跳转前执行,非常适合用来处理每轮结束后的分数更新逻辑。

3. 编写结果页的HTML模板

最后创建对应的结果页模板(路径一般是templates/你的app名称/ResultsPage.html),用来直观展示分数:

{% extends "global/Page.html" %}
{% load otree %}

{% block title %}
本轮得分结果
{% endblock %}

{% block content %}
    <div class="score-display">
        <p>你的当前总分:<strong>{{ my_score }}</strong></p>
        <p>对手的当前总分:<strong>{{ opponent_score }}</strong></p>
    </div>

    {% next_button %}
{% endblock %}

这样玩家完成每轮答题后,就能看到自己和对手的累计分数了。

额外提示

  • 如果后续需要改成“特定条件下才加分”,只需要修改add_round_points方法,比如加入判断逻辑:
    def add_round_points(self):
        # 示例:只有当玩家答对题目时才加分
        if self.question_answer == "正确答案":
            self.score += 10
            self.save()
    
  • 测试时可以用Otree的runserver预览模式,创建两名玩家来验证分数是否正确累加。

内容的提问来源于stack exchange,提问作者Parseltongue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:08:58