from os import set_inheritable from otree.api import * from otree.models import player from scipy.stats import bernoulli from random import choice,shuffle from scipy.stats import bernoulli from collections import Counter c = Currency doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'control_revise_6' #組別 players_per_group = 3 num_group = 2 players_per_group_but_yourself=players_per_group-1 #表格數目 num_game_cell_per_row=6 num_game_cell=int(num_game_cell_per_row*num_game_cell_per_row) # num_game_cell_per_row=int(num_game_cell** 0.5) width= 10 #表格時間 timeout_seconds_remember=2 timeout_seconds_write=10 #方案被選中機率 probability_die_for_x=0.25 probability_die_for_y=0.15 probability_die_for_x_text="25%" probability_die_for_y_text="15%" #方案損失報酬機率 probability_death_loss_x=0.5 probability_death_loss_y=0.5 # probability_death_gain_for_game=0.1 probability_death_loss_x_text="50%" probability_death_loss_y_text="50%" #報酬 exchange_rate=1.5 attendance_fee=100 #回合數 num_vote_round=1 num_game_round=1 num_cycle=3 num_subsession=3 num_vote_round_per_subsession=num_vote_round*num_cycle num_game_round_per_subsession=num_game_round*num_cycle num_rounds=(num_vote_round+num_game_round)*num_cycle*num_subsession index_all_round = list(range(1, num_rounds+1)) num_round_per_cycle=num_vote_round+num_game_round index_vote_round = list(range(1,num_rounds,num_round_per_cycle)) index_game_round=list(set(index_all_round) - set(index_vote_round)) index_fifth_game_round=list(range(num_round_per_cycle,num_rounds+1,num_round_per_cycle)) index_final_round=list(range(num_round_per_cycle*num_cycle,num_rounds+1,num_round_per_cycle*num_cycle)) index_first_vote_round=list(range(1,num_rounds,num_round_per_cycle*num_cycle)) index_game_cell_answer=list(range(1,num_game_cell+1)) index_second_and_third_vote_round=list(set(index_vote_round) - set(index_first_vote_round)) index_first_cycle_fifth_game_round=list(range(num_round_per_cycle,num_rounds,num_round_per_cycle*num_cycle)) index_second_and_third_cycle_fifth_game_round=list(set(index_fifth_game_round) - set(index_first_cycle_fifth_game_round)) # index_first_game_round=list(range(num_vote_round+1,num_rounds,num_round_per_cycle)) index_first_game_round=list(range(num_vote_round+1,num_rounds+1,num_round_per_cycle)) index_first_cycle_first_game_round=list(range(num_vote_round+1,num_rounds,num_round_per_cycle*num_cycle)) index_second_and_third_cycle_first_game_round=list(set(index_first_game_round) - set(index_first_cycle_first_game_round)) instructions_template2 = 'control_revise_6/instructions2.html' class Subsession(BaseSubsession): vote_result_group1 = models.StringField() vote_result_group2 = models.StringField() num_death_group1 = models.IntegerField() num_death_group2 = models.IntegerField() num_death_group1_per_cycle = models.IntegerField() num_death_group2_per_cycle = models.IntegerField() num_death_all= models.IntegerField(initial=0) class Group(BaseGroup): num_vote_x = models.IntegerField() num_vote_y = models.IntegerField() vote_result = models.IntegerField(min=0,max=2,initial= 2) vote_result_str = models.StringField(initial='X') num_correct_per_game = models.IntegerField() num_death_per_cycle = models.IntegerField(initial=0) num_death= models.IntegerField(initial=0) game_cell1_answer = models.IntegerField() game_cell2_answer = models.IntegerField() game_cell3_answer = models.IntegerField() game_cell4_answer = models.IntegerField() game_cell5_answer = models.IntegerField() game_cell6_answer = models.IntegerField() game_cell7_answer = models.IntegerField() game_cell8_answer = models.IntegerField() game_cell9_answer = models.IntegerField() game_cell10_answer = models.IntegerField() game_cell11_answer = models.IntegerField() game_cell12_answer = models.IntegerField() game_cell13_answer = models.IntegerField() game_cell14_answer = models.IntegerField() game_cell15_answer = models.IntegerField() game_cell16_answer = models.IntegerField() game_cell17_answer = models.IntegerField() game_cell18_answer = models.IntegerField() game_cell19_answer = models.IntegerField() game_cell20_answer = models.IntegerField() game_cell21_answer = models.IntegerField() game_cell22_answer = models.IntegerField() game_cell23_answer = models.IntegerField() game_cell24_answer = models.IntegerField() game_cell25_answer = models.IntegerField() game_cell26_answer = models.IntegerField() game_cell27_answer = models.IntegerField() game_cell28_answer = models.IntegerField() game_cell29_answer = models.IntegerField() game_cell30_answer = models.IntegerField() game_cell31_answer = models.IntegerField() game_cell32_answer = models.IntegerField() game_cell33_answer = models.IntegerField() game_cell34_answer = models.IntegerField() game_cell35_answer = models.IntegerField() game_cell36_answer = models.IntegerField() class Player(BasePlayer): is_fifth_game_round=models.BooleanField() is_group1=models.BooleanField(initial=False) is_final_round=models.BooleanField(initial=False) is_all_died=models.BooleanField(initial=False) is_died_last_time=models.BooleanField(initial=False) is_all_died_last_time= models.BooleanField(initial=False) is_group_all_died_last_time= models.BooleanField(initial=False) is_other_group_all_died_last_time= models.BooleanField(initial=False) is_group_all_died_for_first_cycle=models.BooleanField(initial=False) is_group_all_died_for_second_cycle=models.BooleanField(initial=False) # is_vote_round=models.BooleanField(initial=False) # is_game_round=models.BooleanField(initial=False) is_died = models.BooleanField(initial=False) group_accumulate_pay = models.FloatField(initial=0) group_pay_for_died=models.FloatField(initial=0) # death_loss = models.FloatField(initial=0) num_correct_per_game = models.IntegerField() personal_accumulate_pay = models.FloatField(initial=0) # extra_pay_for_died = models.FloatField(initial=0) # extra_pay_for_died_accumulate= models.FloatField(initial=0) # accumulate_for_died = models.FloatField() # total_accumulate_pay= models.FloatField(initial=0) # total_pay_subsession_for_died= models.FloatField(initial=0) total_pay_subsession = models.FloatField(initial=0) is_prtsc=models.BooleanField(initial=False) game_cell1_input = models.IntegerField(label='請輸入數字',) game_cell2_input = models.IntegerField(label='請輸入數字',) game_cell3_input = models.IntegerField(label='請輸入數字',) game_cell4_input = models.IntegerField(label='請輸入數字',) game_cell5_input = models.IntegerField(label='請輸入數字',) game_cell6_input = models.IntegerField(label='請輸入數字',) game_cell7_input = models.IntegerField(label='請輸入數字',) game_cell8_input = models.IntegerField(label='請輸入數字',) game_cell9_input = models.IntegerField(label='請輸入數字',) game_cell10_input = models.IntegerField(label='請輸入數字',) game_cell11_input = models.IntegerField(label='請輸入數字',) game_cell12_input = models.IntegerField(label='請輸入數字',) game_cell13_input = models.IntegerField(label='請輸入數字',) game_cell14_input = models.IntegerField(label='請輸入數字',) game_cell15_input = models.IntegerField(label='請輸入數字',) game_cell16_input = models.IntegerField(label='請輸入數字',) game_cell17_input = models.IntegerField(label='請輸入數字',) game_cell18_input = models.IntegerField(label='請輸入數字',) game_cell19_input = models.IntegerField(label='請輸入數字',) game_cell20_input = models.IntegerField(label='請輸入數字',) game_cell21_input = models.IntegerField(label='請輸入數字',) game_cell22_input = models.IntegerField(label='請輸入數字',) game_cell23_input = models.IntegerField(label='請輸入數字',) game_cell24_input = models.IntegerField(label='請輸入數字',) game_cell25_input = models.IntegerField(label='請輸入數字',) game_cell26_input = models.IntegerField(label='請輸入數字',) game_cell27_input = models.IntegerField(label='請輸入數字',) game_cell28_input = models.IntegerField(label='請輸入數字',) game_cell29_input = models.IntegerField(label='請輸入數字',) game_cell30_input = models.IntegerField(label='請輸入數字',) game_cell31_input = models.IntegerField(label='請輸入數字',) game_cell32_input = models.IntegerField(label='請輸入數字',) game_cell33_input = models.IntegerField(label='請輸入數字',) game_cell34_input = models.IntegerField(label='請輸入數字',) game_cell35_input = models.IntegerField(label='請輸入數字',) game_cell36_input = models.IntegerField(label='請輸入數字',) game_cell1_is_correct = models.BooleanField() game_cell2_is_correct = models.BooleanField() game_cell3_is_correct = models.BooleanField() game_cell4_is_correct = models.BooleanField() game_cell5_is_correct = models.BooleanField() game_cell6_is_correct = models.BooleanField() game_cell7_is_correct = models.BooleanField() game_cell8_is_correct = models.BooleanField() game_cell9_is_correct = models.BooleanField() game_cell10_is_correct = models.BooleanField() game_cell11_is_correct = models.BooleanField() game_cell12_is_correct = models.BooleanField() game_cell13_is_correct = models.BooleanField() game_cell14_is_correct = models.BooleanField() game_cell15_is_correct = models.BooleanField() game_cell16_is_correct = models.BooleanField() game_cell17_is_correct = models.BooleanField() game_cell18_is_correct = models.BooleanField() game_cell19_is_correct = models.BooleanField() game_cell20_is_correct = models.BooleanField() game_cell21_is_correct = models.BooleanField() game_cell22_is_correct = models.BooleanField() game_cell23_is_correct = models.BooleanField() game_cell24_is_correct = models.BooleanField() game_cell25_is_correct = models.BooleanField() game_cell26_is_correct = models.BooleanField() game_cell27_is_correct = models.BooleanField() game_cell28_is_correct = models.BooleanField() game_cell29_is_correct = models.BooleanField() game_cell30_is_correct = models.BooleanField() game_cell31_is_correct = models.BooleanField() game_cell32_is_correct = models.BooleanField() game_cell33_is_correct = models.BooleanField() game_cell34_is_correct = models.BooleanField() game_cell35_is_correct = models.BooleanField() game_cell36_is_correct = models.BooleanField() other_game_cell1_is_correct = models.BooleanField() other_game_cell2_is_correct = models.BooleanField() other_game_cell3_is_correct = models.BooleanField() other_game_cell4_is_correct = models.BooleanField() other_game_cell5_is_correct = models.BooleanField() other_game_cell6_is_correct = models.BooleanField() other_game_cell7_is_correct = models.BooleanField() other_game_cell8_is_correct = models.BooleanField() other_game_cell9_is_correct = models.BooleanField() other_game_cell10_is_correct = models.BooleanField() other_game_cell11_is_correct = models.BooleanField() other_game_cell12_is_correct = models.BooleanField() other_game_cell13_is_correct = models.BooleanField() other_game_cell14_is_correct = models.BooleanField() other_game_cell15_is_correct = models.BooleanField() other_game_cell16_is_correct = models.BooleanField() other_game_cell17_is_correct = models.BooleanField() other_game_cell18_is_correct = models.BooleanField() other_game_cell19_is_correct = models.BooleanField() other_game_cell20_is_correct = models.BooleanField() other_game_cell21_is_correct = models.BooleanField() other_game_cell22_is_correct = models.BooleanField() other_game_cell23_is_correct = models.BooleanField() other_game_cell24_is_correct = models.BooleanField() other_game_cell25_is_correct = models.BooleanField() other_game_cell26_is_correct = models.BooleanField() other_game_cell27_is_correct = models.BooleanField() other_game_cell28_is_correct = models.BooleanField() other_game_cell29_is_correct = models.BooleanField() other_game_cell30_is_correct = models.BooleanField() other_game_cell31_is_correct = models.BooleanField() other_game_cell32_is_correct = models.BooleanField() other_game_cell33_is_correct = models.BooleanField() other_game_cell34_is_correct = models.BooleanField() other_game_cell35_is_correct = models.BooleanField() other_game_cell36_is_correct = models.BooleanField() # both_game_cell1_is_correct = models.BooleanField() # both_game_cell2_is_correct = models.BooleanField() # both_game_cell3_is_correct = models.BooleanField() # both_game_cell4_is_correct = models.BooleanField() # both_game_cell5_is_correct = models.BooleanField() # both_game_cell6_is_correct = models.BooleanField() # both_game_cell7_is_correct = models.BooleanField() # both_game_cell8_is_correct = models.BooleanField() # both_game_cell9_is_correct = models.BooleanField() # both_game_cell10_is_correct = models.BooleanField() # both_game_cell11_is_correct = models.BooleanField() # both_game_cell12_is_correct = models.BooleanField() # both_game_cell13_is_correct = models.BooleanField() # both_game_cell14_is_correct = models.BooleanField() # both_game_cell15_is_correct = models.BooleanField() # both_game_cell16_is_correct = models.BooleanField() # both_game_cell17_is_correct = models.BooleanField() # both_game_cell18_is_correct = models.BooleanField() # both_game_cell1_is_correct = models.BooleanField() # both_game_cell2_is_correct = models.BooleanField() # both_game_cell3_is_correct = models.BooleanField() # both_game_cell4_is_correct = models.BooleanField() # both_game_cell5_is_correct = models.BooleanField() # both_game_cell6_is_correct = models.BooleanField() # both_game_cell7_is_correct = models.BooleanField() # both_game_cell8_is_correct = models.BooleanField() # both_game_cell9_is_correct = models.BooleanField() # both_game_cell1_is_correct = models.BooleanField() # both_game_cell2_is_correct = models.BooleanField() # both_game_cell3_is_correct = models.BooleanField() # both_game_cell4_is_correct = models.BooleanField() # both_game_cell5_is_correct = models.BooleanField() # both_game_cell6_is_correct = models.BooleanField() # both_game_cell7_is_correct = models.BooleanField() # both_game_cell8_is_correct = models.BooleanField() # both_game_cell9_is_correct = models.BooleanField() num_subsession = models.IntegerField(initial=0) vote_round=models.IntegerField(initial=0) game_round=models.IntegerField(initial=0) #vote_round = models.IntegerField(initial=0) #game_round = models.IntegerField(initial=0) is_vote_round= models.BooleanField(initial=0) vote = models.IntegerField( label="你想要投X或Y方案?", choices=[ [0, 'X 方案'],[1, 'Y 方案'],], widget=widgets.RadioSelect, initial=2 ) img_choice = models.StringField(label="你想要投X或Y方案?",initial='None') start_timestamp = models.FloatField() end_timestamp = models.FloatField() num_subsession_for_final_pay= models.IntegerField() total_pay_session= models.FloatField(initial=0) total_pay_session_yuan= models.IntegerField() vote_result = 0 def form_product(group: Group): if group.round_number in Constants.index_second_and_third_cycle_first_game_round: prev_group = group.in_round(group.round_number - 2) else: prev_group = group.in_round(group.round_number - 1) is_dieds= [p.is_died for p in prev_group.get_players()] num_death_alls= [p.subsession.num_death_all for p in prev_group.get_players()] total_pay_subsessions= [p.total_pay_subsession for p in prev_group.get_players()] for p in group.get_players(): p.subsession.num_death_all=num_death_alls[p.id_in_group-1] if p.subsession.num_death_all==Constants.players_per_group*Constants.num_group: p.is_all_died_last_time = True p.is_died=is_dieds[p.id_in_group-1] p.total_pay_subsession=total_pay_subsessions[p.id_in_group-1] # if p.round_number in Constants.index_game_round: # p.is_game_round=True # else: # p.is_game_round=False l=[i for i in range(1,Constants.num_game_cell+1)] shuffle(l) group.game_cell1_answer=l[0] group.game_cell2_answer=l[1] group.game_cell3_answer=l[2] group.game_cell4_answer=l[3] group.game_cell5_answer=l[4] group.game_cell6_answer=l[5] group.game_cell7_answer=l[6] group.game_cell8_answer=l[7] group.game_cell9_answer=l[8] group.game_cell10_answer=l[9] group.game_cell11_answer=l[10] group.game_cell12_answer=l[11] group.game_cell13_answer=l[12] group.game_cell14_answer=l[13] group.game_cell15_answer=l[14] group.game_cell16_answer=l[15] group.game_cell17_answer=l[16] group.game_cell18_answer=l[17] group.game_cell19_answer=l[18] group.game_cell20_answer=l[19] group.game_cell21_answer=l[20] group.game_cell22_answer=l[21] group.game_cell23_answer=l[22] group.game_cell24_answer=l[23] group.game_cell25_answer=l[24] group.game_cell26_answer=l[25] group.game_cell27_answer=l[26] group.game_cell28_answer=l[27] group.game_cell29_answer=l[28] group.game_cell30_answer=l[29] group.game_cell31_answer=l[30] group.game_cell32_answer=l[31] group.game_cell33_answer=l[32] group.game_cell34_answer=l[33] group.game_cell35_answer=l[34] group.game_cell36_answer=l[35] # for p in group.get_players(): # p.game_cell1_answer=l[0] # p.game_cell2_answer=l[1] # p.game_cell3_answer=l[2] # p.game_cell4_answer=l[3] # p.game_cell5_answer=l[4] # p.game_cell6_answer=l[5] # p.game_cell7_answer=l[6] # p.game_cell8_answer=l[7] # p.game_cell9_answer=l[8] # p.game_cell10_answer=l[9] # p.game_cell11_answer=l[10] # p.game_cell12_answer=l[11] # p.game_cell13_answer=l[12] # p.game_cell14_answer=l[13] # p.game_cell15_answer=l[14] # p.game_cell16_answer=l[15] def num_form(group:Group): global total_pay total_compare=[] for p in group.get_players(): if p.is_died==False: #compare=[abs(p.game_cell1_input -p.group.game_cell1_answer),abs(p.game_cell2_input-p.group.game_cell2_answer),abs(p.game_cell3_input-p.group.game_cell3_answer),abs(p.game_cell4_input-p.group.game_cell4_answer),abs(p.game_cell5_input-p.group.game_cell5_answer),abs(p.game_cell6_input-p.group.game_cell6_answer),abs(p.game_cell7_input-p.group.game_cell7_answer),abs(p.game_cell8_input-p.group.game_cell8_answer),abs(p.game_cell9_input-p.group.game_cell9_answer)] compare=[abs(p.game_cell1_input-p.group.game_cell1_answer),abs(p.game_cell2_input-p.group.game_cell2_answer),abs(p.game_cell3_input-p.group.game_cell3_answer),abs(p.game_cell4_input-p.group.game_cell4_answer),abs(p.game_cell5_input-p.group.game_cell5_answer),abs(p.game_cell6_input-p.group.game_cell6_answer),abs(p.game_cell7_input-p.group.game_cell7_answer),abs(p.game_cell8_input-p.group.game_cell8_answer),abs(p.game_cell9_input-p.group.game_cell9_answer),abs(p.game_cell10_input-p.group.game_cell10_answer),abs(p.game_cell11_input-p.group.game_cell11_answer),abs(p.game_cell12_input-p.group.game_cell12_answer),abs(p.game_cell13_input-p.group.game_cell13_answer),abs(p.game_cell14_input-p.group.game_cell14_answer),abs(p.game_cell15_input-p.group.game_cell15_answer),abs(p.game_cell16_input-p.group.game_cell16_answer), abs(p.game_cell17_input-p.group.game_cell17_answer),abs(p.game_cell18_input-p.group.game_cell18_answer),abs(p.game_cell19_input-p.group.game_cell19_answer),abs(p.game_cell20_input-p.group.game_cell20_answer),abs(p.game_cell21_input-p.group.game_cell21_answer),abs(p.game_cell22_input-p.group.game_cell22_answer),abs(p.game_cell23_input-p.group.game_cell23_answer),abs(p.game_cell24_input-p.group.game_cell24_answer),abs(p.game_cell25_input-p.group.game_cell25_answer),abs(p.game_cell26_input-p.group.game_cell26_answer),abs(p.game_cell27_input-p.group.game_cell27_answer),abs(p.game_cell28_input-p.group.game_cell28_answer),abs(p.game_cell29_input-p.group.game_cell29_answer),abs(p.game_cell30_input-p.group.game_cell30_answer),abs(p.game_cell31_input-p.group.game_cell31_answer),abs(p.game_cell32_input-p.group.game_cell32_answer), abs(p.game_cell33_input-p.group.game_cell33_answer),abs(p.game_cell34_input-p.group.game_cell34_answer),abs(p.game_cell35_input-p.group.game_cell35_answer),abs(p.game_cell36_input-p.group.game_cell36_answer)] #compare=[abs(p.num1-p.group.a),abs(p.num2-p.group.b),abs(p.num3-p.group.c),abs(p.num4-p.group.d),abs(p.num5-p.group.e),abs(p.num6-p.group.f),abs(p.num7-p.group.g),abs(p.num8-p.group.h),abs(p.num9-p.group.i),abs(p.num10-p.group.j),abs(p.num11-p.group.k),abs(p.num12-p.group.l),abs(p.num13-p.group.m),abs(p.num14-p.group.n),abs(p.num15-p.group.o),abs(p.num16-p.group.p),abs(p.num17-p.group.q),abs(p.num18-p.group.r),abs(p.num19-p.group.s),abs(p.num20-p.group.t),abs(p.num21-p.group.u),abs(p.num22-p.group.v),abs(p.num23-p.group.w),abs(p.num24-p.group.x),abs(p.num25-p.group.y),abs(p.num26-p.group.z),abs(p.num27-p.group.a1),abs(p.num28-p.group.a2),abs(p.num29-p.group.a3),abs(p.num30-p.group.a4),abs(p.num31-p.group.a5),abs(p.num32-p.group.a6),abs(p.num33-p.group.a7),abs(p.num34-p.group.a8),abs(p.num35-p.group.a9),abs(p.num36-p.group.a10)] #total_compare.append(compare) p.num_correct_per_game=compare.count(0) personal_total_game_cell_is_correct=[] for i in range(0,Constants.num_game_cell): if compare[i]==0: personal_total_game_cell_is_correct.append(True) else: personal_total_game_cell_is_correct.append(False) else: compare=[1]*Constants.num_game_cell compare_for_die=[abs(p.game_cell1_input-p.group.game_cell1_answer),abs(p.game_cell2_input-p.group.game_cell2_answer),abs(p.game_cell3_input-p.group.game_cell3_answer),abs(p.game_cell4_input-p.group.game_cell4_answer),abs(p.game_cell5_input-p.group.game_cell5_answer),abs(p.game_cell6_input-p.group.game_cell6_answer),abs(p.game_cell7_input-p.group.game_cell7_answer),abs(p.game_cell8_input-p.group.game_cell8_answer),abs(p.game_cell9_input-p.group.game_cell9_answer),abs(p.game_cell10_input-p.group.game_cell10_answer),abs(p.game_cell11_input-p.group.game_cell11_answer),abs(p.game_cell12_input-p.group.game_cell12_answer),abs(p.game_cell13_input-p.group.game_cell13_answer),abs(p.game_cell14_input-p.group.game_cell14_answer),abs(p.game_cell15_input-p.group.game_cell15_answer),abs(p.game_cell16_input-p.group.game_cell16_answer), abs(p.game_cell17_input-p.group.game_cell17_answer),abs(p.game_cell18_input-p.group.game_cell18_answer),abs(p.game_cell19_input-p.group.game_cell19_answer),abs(p.game_cell20_input-p.group.game_cell20_answer),abs(p.game_cell21_input-p.group.game_cell21_answer),abs(p.game_cell22_input-p.group.game_cell22_answer),abs(p.game_cell23_input-p.group.game_cell23_answer),abs(p.game_cell24_input-p.group.game_cell24_answer),abs(p.game_cell25_input-p.group.game_cell25_answer),abs(p.game_cell26_input-p.group.game_cell26_answer),abs(p.game_cell27_input-p.group.game_cell27_answer),abs(p.game_cell28_input-p.group.game_cell28_answer),abs(p.game_cell29_input-p.group.game_cell29_answer),abs(p.game_cell30_input-p.group.game_cell30_answer),abs(p.game_cell31_input-p.group.game_cell31_answer),abs(p.game_cell32_input-p.group.game_cell32_answer), abs(p.game_cell33_input-p.group.game_cell33_answer),abs(p.game_cell34_input-p.group.game_cell34_answer),abs(p.game_cell35_input-p.group.game_cell35_answer),abs(p.game_cell36_input-p.group.game_cell36_answer)] #print(compare_for_die) p.num_correct_per_game=compare_for_die.count(0) #print(p.num_correct_per_game) personal_total_game_cell_is_correct=[] for i in range(0,Constants.num_game_cell): if compare_for_die[i]==0: personal_total_game_cell_is_correct.append(True) else: personal_total_game_cell_is_correct.append(False) #print(total_game_cell_for_die_is_correct) p.game_cell1_is_correct=personal_total_game_cell_is_correct[0] p.game_cell2_is_correct=personal_total_game_cell_is_correct[1] p.game_cell3_is_correct=personal_total_game_cell_is_correct[2] p.game_cell4_is_correct=personal_total_game_cell_is_correct[3] p.game_cell5_is_correct=personal_total_game_cell_is_correct[4] p.game_cell6_is_correct=personal_total_game_cell_is_correct[5] p.game_cell7_is_correct=personal_total_game_cell_is_correct[6] p.game_cell8_is_correct=personal_total_game_cell_is_correct[7] p.game_cell9_is_correct=personal_total_game_cell_is_correct[8] p.game_cell10_is_correct=personal_total_game_cell_is_correct[9] p.game_cell11_is_correct=personal_total_game_cell_is_correct[10] p.game_cell12_is_correct=personal_total_game_cell_is_correct[11] p.game_cell13_is_correct=personal_total_game_cell_is_correct[12] p.game_cell14_is_correct=personal_total_game_cell_is_correct[13] p.game_cell15_is_correct=personal_total_game_cell_is_correct[14] p.game_cell16_is_correct=personal_total_game_cell_is_correct[15] p.game_cell17_is_correct=personal_total_game_cell_is_correct[16] p.game_cell18_is_correct=personal_total_game_cell_is_correct[17] p.game_cell19_is_correct=personal_total_game_cell_is_correct[18] p.game_cell20_is_correct=personal_total_game_cell_is_correct[19] p.game_cell21_is_correct=personal_total_game_cell_is_correct[20] p.game_cell22_is_correct=personal_total_game_cell_is_correct[21] p.game_cell23_is_correct=personal_total_game_cell_is_correct[22] p.game_cell24_is_correct=personal_total_game_cell_is_correct[23] p.game_cell25_is_correct=personal_total_game_cell_is_correct[24] p.game_cell26_is_correct=personal_total_game_cell_is_correct[25] p.game_cell27_is_correct=personal_total_game_cell_is_correct[26] p.game_cell28_is_correct=personal_total_game_cell_is_correct[27] p.game_cell29_is_correct=personal_total_game_cell_is_correct[28] p.game_cell30_is_correct=personal_total_game_cell_is_correct[29] p.game_cell31_is_correct=personal_total_game_cell_is_correct[30] p.game_cell32_is_correct=personal_total_game_cell_is_correct[31] p.game_cell33_is_correct=personal_total_game_cell_is_correct[32] p.game_cell34_is_correct=personal_total_game_cell_is_correct[33] p.game_cell35_is_correct=personal_total_game_cell_is_correct[34] p.game_cell36_is_correct=personal_total_game_cell_is_correct[35] #print(compare) total_compare.append(compare) #if p.is_died==False: min_game_cell_value=[] total_game_cell_value=[] for i in range(0,Constants.num_game_cell): for j in range(0,Constants.players_per_group): total_game_cell_value.append(total_compare[j][i]) min_game_cell_value.append(min(total_game_cell_value[Constants.players_per_group*i:Constants.players_per_group*(i+1)])) group.num_correct_per_game=min_game_cell_value.count(0) # total_player_is_correctcs_list=[] # for p in group.get_players(): # player_is_correctcs_list=[ # p.game_cell1_is_correct,p.game_cell2_is_correct,p.game_cell3_is_correct,p.game_cell4_is_correct, # p.game_cell5_is_correct,p.game_cell6_is_correct,p.game_cell7_is_correct,p.game_cell8_is_correct, # p.game_cell9_is_correct,p.game_cell10_is_correct,p.game_cell11_is_correct,p.game_cell12_is_correct, # p.game_cell13_is_correct,p.game_cell14_is_correct,p.game_cell15_is_correct,p.game_cell16_is_correct, # p.game_cell17_is_correct,p.game_cell18_is_correct,p.game_cell19_is_correct,p.game_cell20_is_correct, # p.game_cell21_is_correct,p.game_cell22_is_correct,p.game_cell23_is_correct,p.game_cell24_is_correct, # p.game_cell25_is_correct,p.game_cell26_is_correct,p.game_cell27_is_correct,p.game_cell28_is_correct, # p.game_cell29_is_correct,p.game_cell30_is_correct,p.game_cell31_is_correct,p.game_cell32_is_correct, # p.game_cell33_is_correct,p.game_cell34_is_correct,p.game_cell35_is_correct,p.game_cell36_is_correct # ] # total_player_is_correctcs_list.append(player_is_correctcs_list) for p in group.get_players(): other_game_cell_value=[] min_other_game_cell_value=[] for i in range(0,Constants.num_game_cell): for j in range(0,Constants.players_per_group): if j != p.id_in_group-1: other_game_cell_value.append(total_compare[j][i]) # print(other_game_cell_value) min_other_game_cell_value.append(min(other_game_cell_value[(Constants.players_per_group-1)*i:(Constants.players_per_group-1)*(i+1)])) # print(min_other_game_cell_value) other_game_cell_is_correct=[] for i in range(0,Constants.num_game_cell): if min_other_game_cell_value[i]==0: other_game_cell_is_correct.append(True) else: other_game_cell_is_correct.append(False) # total_game_cell_is_correct=[] # for i in range(0,Constants.num_game_cell): # if min_game_cell_value[i]==0: # total_game_cell_is_correct.append(True) # else: # total_game_cell_is_correct.append(False) # for p in group.get_players(): # if p.is_died==False: #3*3 p.other_game_cell1_is_correct=other_game_cell_is_correct[0] p.other_game_cell2_is_correct=other_game_cell_is_correct[1] p.other_game_cell3_is_correct=other_game_cell_is_correct[2] p.other_game_cell4_is_correct=other_game_cell_is_correct[3] p.other_game_cell5_is_correct=other_game_cell_is_correct[4] p.other_game_cell6_is_correct=other_game_cell_is_correct[5] p.other_game_cell7_is_correct=other_game_cell_is_correct[6] p.other_game_cell8_is_correct=other_game_cell_is_correct[7] p.other_game_cell9_is_correct=other_game_cell_is_correct[8] #4*4 p.other_game_cell10_is_correct=other_game_cell_is_correct[9] p.other_game_cell11_is_correct=other_game_cell_is_correct[10] p.other_game_cell12_is_correct=other_game_cell_is_correct[11] p.other_game_cell13_is_correct=other_game_cell_is_correct[12] p.other_game_cell14_is_correct=other_game_cell_is_correct[13] p.other_game_cell15_is_correct=other_game_cell_is_correct[14] p.other_game_cell16_is_correct=other_game_cell_is_correct[15] #5x5 p.other_game_cell17_is_correct=other_game_cell_is_correct[16] p.other_game_cell18_is_correct=other_game_cell_is_correct[17] p.other_game_cell19_is_correct=other_game_cell_is_correct[18] p.other_game_cell20_is_correct=other_game_cell_is_correct[19] p.other_game_cell21_is_correct=other_game_cell_is_correct[20] p.other_game_cell22_is_correct=other_game_cell_is_correct[21] p.other_game_cell23_is_correct=other_game_cell_is_correct[22] p.other_game_cell24_is_correct=other_game_cell_is_correct[23] p.other_game_cell25_is_correct=other_game_cell_is_correct[24] #6x6 p.other_game_cell26_is_correct=other_game_cell_is_correct[25] p.other_game_cell27_is_correct=other_game_cell_is_correct[26] p.other_game_cell28_is_correct=other_game_cell_is_correct[27] p.other_game_cell29_is_correct=other_game_cell_is_correct[28] p.other_game_cell30_is_correct=other_game_cell_is_correct[29] p.other_game_cell31_is_correct=other_game_cell_is_correct[30] p.other_game_cell32_is_correct=other_game_cell_is_correct[31] p.other_game_cell33_is_correct=other_game_cell_is_correct[32] p.other_game_cell34_is_correct=other_game_cell_is_correct[33] p.other_game_cell35_is_correct=other_game_cell_is_correct[34] p.other_game_cell36_is_correct=other_game_cell_is_correct[35] # print(p.other_game_cell1_is_correct) # print(p.other_game_cell2_is_correct) # group.game_cell1_is_correct=total_game_cell_is_correct[0] # group.game_cell2_is_correct=total_game_cell_is_correct[1] # group.game_cell3_is_correct=total_game_cell_is_correct[2] # group.game_cell4_is_correct=total_game_cell_is_correct[3] # group.game_cell5_is_correct=total_game_cell_is_correct[4] # group.game_cell6_is_correct=total_game_cell_is_correct[5] # group.game_cell7_is_correct=total_game_cell_is_correct[6] # group.game_cell8_is_correct=total_game_cell_is_correct[7] # group.game_cell9_is_correct=total_game_cell_is_correct[8] # #4*4 # group.game_cell10_is_correct=total_game_cell_is_correct[9] # group.game_cell11_is_correct=total_game_cell_is_correct[10] # group.game_cell12_is_correct=total_game_cell_is_correct[11] # group.game_cell13_is_correct=total_game_cell_is_correct[12] # group.game_cell14_is_correct=total_game_cell_is_correct[13] # group.game_cell15_is_correct=total_game_cell_is_correct[14] # group.game_cell16_is_correct=total_game_cell_is_correct[15] # #5*5 # group.game_cell17_is_correct=total_game_cell_is_correct[16] # group.game_cell18_is_correct=total_game_cell_is_correct[17] # group.game_cell19_is_correct=total_game_cell_is_correct[18] # group.game_cell20_is_correct=total_game_cell_is_correct[19] # group.game_cell21_is_correct=total_game_cell_is_correct[20] # group.game_cell22_is_correct=total_game_cell_is_correct[21] # group.game_cell23_is_correct=total_game_cell_is_correct[22] # group.game_cell24_is_correct=total_game_cell_is_correct[23] # group.game_cell25_is_correct=total_game_cell_is_correct[24] # #6*6 # group.game_cell26_is_correct=total_game_cell_is_correct[25] # group.game_cell27_is_correct=total_game_cell_is_correct[26] # group.game_cell28_is_correct=total_game_cell_is_correct[27] # group.game_cell29_is_correct=total_game_cell_is_correct[28] # group.game_cell30_is_correct=total_game_cell_is_correct[29] # group.game_cell31_is_correct=total_game_cell_is_correct[30] # group.game_cell32_is_correct=total_game_cell_is_correct[31] # group.game_cell33_is_correct=total_game_cell_is_correct[32] # group.game_cell34_is_correct=total_game_cell_is_correct[33] # group.game_cell35_is_correct=total_game_cell_is_correct[34] # group.game_cell36_is_correct=total_game_cell_is_correct[35] if group.round_number in Constants.index_second_and_third_cycle_first_game_round: prev_group = group.in_round(group.round_number - 2) else: prev_group = group.in_round(group.round_number - 1) # total_pays_subsession= [p.total_pay_subsession for p in prev_group.get_players()] # death_losses= [p.death_loss for p in prev_group.get_players()] personal_accumulate_pays=[p.personal_accumulate_pay for p in prev_group.get_players()] group_accumulate_pays= [p.group_accumulate_pay for p in prev_group.get_players()] is_prtscs= [p.is_prtsc for p in prev_group.get_players()] for p in group.get_players(): if p.is_prtsc==False: p.is_prtsc=is_prtscs[p.id_in_group-1] p.group_accumulate_pay= round(group.num_correct_per_game+group_accumulate_pays[p.id_in_group-1],1) p.personal_accumulate_pay= round(p.num_correct_per_game+personal_accumulate_pays[p.id_in_group-1],1) for p in group.get_players(): if p.round_number in Constants.index_second_and_third_cycle_fifth_game_round: prev_group_2 =group.in_round(group.round_number - Constants.num_round_per_cycle) is_dieds= [p.is_died for p in prev_group_2.get_players()] if is_dieds.count(1)==Constants.players_per_group: p.is_group_all_died_last_time = True num_death_per_cycle=[] is_dead_Y = bernoulli.rvs(size=1,p=Constants.probability_die_for_y) for p in group.get_players(): if p.is_died == True: p.is_died = True p.is_died_last_time=True else: if p.round_number in Constants.index_fifth_game_round: p.is_fifth_game_round= True prev_group_2 = group.in_round(group.round_number - Constants.num_game_round) group.vote_result=prev_group_2.vote_result group.vote_result_str=prev_group_2.vote_result_str #is_dead_Y = bernoulli.rvs(size=1,p=0.08) if p.group.vote_result == 0: is_dead_X = bernoulli.rvs(size=1,p=Constants.probability_die_for_x) if is_dead_X == 1: p.is_died = True num_death_per_cycle.append(1) # p.death_loss=round(Constants.probability_death_loss_x*p.group_accumulate_pay,1) # p.accumulate_pay_by_this_round=round(p.group_accumulate_pay- p.death_loss,1) # p.total_accumulate_pay=round(p.group_accumulate_pay- p.death_loss+p.personal_accumulate_pay,1) # p.total_pay_subsession=int(p.total_accumulate_pay+0.5) else: p.is_died = False num_death_per_cycle.append(0) # p.death_loss=0 else: if is_dead_Y == 1: p.is_died = True num_death_per_cycle.append(1) # p.accumulate_pay= round(p.group.num_correct_per_game+group_accumulate_pays[p.id_in_group-1],1) # p.death_loss=round(Constants.probability_death_loss_y*p.group_accumulate_pay,1) # p.accumulate_pay_by_this_round=round(p.accumulate_pay- p.death_loss,1) # p.total_pay_subsession=int(p.accumulate_pay-p.death_loss+0.5) # p.accumulate_pay= p.group.num_correct_per_game+accumulate_pays[p.id_in_group-1] # p.total_pay_subsession=0 # p.death_loss=p.accumulate_pay else: p.is_died = False num_death_per_cycle.append(0) # p.accumulate_pay= round(p.group.num_correct_per_game+accumulate_pays[p.id_in_group-1],1) # p.death_loss=0 # p.accumulate_pay_by_this_round=round(p.accumulate_pay- p.death_loss,1) # p.total_pay_subsession=int(p.accumulate_pay+0.5) group.num_death_per_cycle = num_death_per_cycle.count(1) else: p.is_fifth_game_round= False # p.accumulate_pay= round(p.group.num_correct_per_game+accumulate_pays[p.id_in_group-1],1) # p.death_loss=0 # p.accumulate_pay_by_this_round=round(p.accumulate_pay- p.death_loss,1) # p.total_pay_subsession=int(p.accumulate_pay+0.5) # p.group_pay_for_died=round(p.group_accumulate_pay-p.death_loss,1) # p.total_accumulate_pay=round(p.group_accumulate_pay+p.personal_accumulate_pay,1) # p.total_pay_subsession_for_died=round(p.group_accumulate_pay-p.death_loss+p.personal_accumulate_pay,1) # p.total_pay_subsession=int(p.total_pay_subsession_for_died+0.5) # p.death_loss=round(Constants.probability_death_loss_x*p.group_accumulate_pay,1) if p.is_died==True: # p.death_loss=round(Constants.probability_death_loss_x*p.group_accumulate_pay,1) p.group_pay_for_died=round((1-Constants.probability_death_loss_x)*p.group_accumulate_pay,1) p.total_pay_subsession=round(p.group_pay_for_died+p.personal_accumulate_pay,1) else: p.total_pay_subsession=round(p.group_accumulate_pay+p.personal_accumulate_pay,1) if p.is_prtsc==True: p.total_pay_subsession=0 is_dieds= [p.is_died for p in group.get_players()] group.num_death=is_dieds.count(1) for p in group.get_players(): if group.num_death==Constants.players_per_group: p.is_all_died=True else: p.is_all_died=False def other(subsession: Subsession): num_death_per_cycles= [p.group.num_death_per_cycle for p in subsession.get_players()] num_deaths= [p.group.num_death for p in subsession.get_players()] is_dieds= [p.is_died for p in subsession.get_players()] is_group_all_died_last_times= [p.is_group_all_died_last_time for p in subsession.get_players()] for p in subsession.get_players(): if p.group.id_in_subsession==1: p.is_other_group_all_died_last_time=is_group_all_died_last_times[Constants.players_per_group] else: p.is_other_group_all_died_last_time=is_group_all_died_last_times[0] subsession.num_death_group2_per_cycle=num_death_per_cycles[Constants.players_per_group] subsession.num_death_group1_per_cycle=num_death_per_cycles[0] subsession.num_death_group2=num_deaths[Constants.players_per_group] subsession.num_death_group1=num_deaths[0] subsession.num_death_all=is_dieds.count(1) vote_result_strs= [p.group.vote_result_str for p in subsession.get_players()] subsession.vote_result_group2=vote_result_strs[Constants.players_per_group] subsession.vote_result_group1=vote_result_strs[0] for p in subsession.get_players(): if p.group.id_in_subsession==1: p.is_group1= True else: p.is_group1= False if p.round_number in Constants.index_final_round: p.is_final_round=True else: p.is_final_round=False # for p in subsession.get_players(): # if p.is_other_group_all_died_last_time == True: # prev_player_round =subsession.in_round(2) # if p.group.id_in_subsession==1: # p.other_group_vote_result_str_last_time=prev_player_round.vote_result_group2 # else: # p.other_group_vote_result_str_last_time=prev_player_round.vote_result_group1 # print(p.other_group_vote_result_str_last_time) #if subsession.num_death_all==Constants.players_per_group*Constants.num_group: #p.is_all_died=True #else: #p.is_all_died=False # def replace_null(player:Player): # for i in [player.game_cell1_input, player.game_cell2_input,player.game_cell3_input,player.game_cell4_input,player.game_cell5_input,player.game_cell6_input,player.game_cell7_input,player.game_cell8_input, # player.game_cell9_input,player.game_cell10_input,player.game_cell11_input,player.game_cell12_input,player.game_cell13_input,player.game_cell14_input,player.game_cell15_input,player.game_cell16_input]: # if i == None: # i = 0 # def replace_null(player): # for i in range(1,17): # if not player["game_cell" + str(i) + "_input"]: # player["game_cell" + str(i) + "_input"] = 0 # PAGES class Introduction(Page): @staticmethod def is_displayed(player): return player.round_number == 1 class Vote(Page): @staticmethod def is_displayed(player): for i in range(0,Constants.num_subsession): if player.round_number in Constants.index_all_round[Constants.num_round_per_cycle*Constants.num_cycle*i:Constants.num_round_per_cycle*Constants.num_cycle*(i+1)]: player.num_subsession=i+1 mod=int(player.round_number % (Constants.num_round_per_cycle*Constants.num_cycle )) if mod in range(1,Constants.num_round_per_cycle+1): player.vote_round=1 else: if mod in range(Constants.num_round_per_cycle+1,Constants.num_round_per_cycle*2+1): player.vote_round=2 else: player.vote_round=3 mod=int(player.round_number % Constants.num_round_per_cycle ) if mod==0: player.game_round=Constants.num_round_per_cycle-1 else: for i in range(2,Constants.num_round_per_cycle): if mod ==i: player.game_round=i-1 for i in range(len(Constants.index_vote_round)): if player.round_number ==Constants.index_vote_round[i]: player.is_vote_round=1 if player.round_number in Constants.index_second_and_third_vote_round: prev_player = player.in_round(player.round_number - 1) return player.round_number == Constants.index_vote_round[i] and prev_player.is_died== False and player.subsession.num_death_all!=Constants.players_per_group*Constants.num_group else: return player.round_number == Constants.index_vote_round[i] form_model = 'player' form_fields = ['start_timestamp','img_choice','end_timestamp'] # @staticmethod # def live_method(player, data): # print('received a bid from', player.id_in_group, ':', data) # @staticmethod # def vars_for_template(player: Player): # image_names = [ # 'X.png', # 'Y_1.png', # ] # return dict(image_data=make_image_data(image_names)) def result_of_vote(group: Group): global vote_result for p in group.get_players(): if p.img_choice=='X': p.vote=0 else: if p.img_choice=='Y': p.vote=1 votes = [p.vote for p in group.get_players()] group.num_vote_x=votes.count(0) group.num_vote_y=votes.count(1) if group.num_vote_x > group.num_vote_y : group.vote_result_str="X" group.vote_result=0 return 'X win' elif group.num_vote_x < group.num_vote_y : group.vote_result_str="Y" group.vote_result=1 return 'Y win' else: if group.round_number in Constants.index_first_vote_round: group.vote_result= choice([0,1]) else: prev_group = group.in_round(group.round_number - (Constants.num_vote_round+Constants.num_game_round)) group.vote_result=prev_group.vote_result if group.vote_result == 0: group.vote_result_str="X" return 'tie X win' else: group.vote_result_str="Y" return 'tie Y win' class VoteWaitPage(WaitPage): @staticmethod def is_displayed(player): for i in range(len(Constants.index_vote_round)): if player.round_number ==Constants.index_vote_round[i]: if player.round_number in Constants.index_second_and_third_vote_round: prev_player = player.in_round(player.round_number - 1) return player.round_number == Constants.index_vote_round[i] and prev_player.is_died== False and player.subsession.num_death_all!=Constants.players_per_group*Constants.num_group else: return player.round_number == Constants.index_vote_round[i] after_all_players_arrive = result_of_vote body_text = "等待其他受試者選擇中...." class VoteResult(Page): @staticmethod def is_displayed(player): for i in range(len(Constants.index_vote_round)): if player.round_number ==Constants.index_vote_round[i]: if player.round_number in Constants.index_second_and_third_vote_round: prev_player = player.in_round(player.round_number - 1) return player.round_number == Constants.index_vote_round[i] and prev_player.is_died== False and player.subsession.num_death_all!=Constants.players_per_group*Constants.num_group else: return player.round_number == Constants.index_vote_round[i] def vars_for_template(player): if player.group.num_vote_x == player.group.num_vote_y : vote_result_text_1 = "因平手," if player.round_number in Constants.index_first_vote_round: vote_result_text_2= "電腦隨機選取的" else: vote_result_text_2= "本輪上一階段選擇的" else: vote_result_text_2= "" if player.group.num_vote_x > player.group.num_vote_y: vote_result_text_1 = "因選擇 X 方案的人多於選擇 Y 方案的人," else: vote_result_text_1 = "因選擇 Y 方案的人多於選擇 X 方案的人," return dict(vote_result_text_1=vote_result_text_1,vote_result_text_2=vote_result_text_2) # if player.round_number in Constants.index_vote_round: # player.is_vote_round=True # else: # player.is_vote_round=False class FormWaitPage(WaitPage): @staticmethod def is_displayed(player): for i in range(len(Constants.index_game_round)): if player.round_number ==Constants.index_game_round[i]: return player.round_number == Constants.index_game_round[i] body_text = "請等待其他受試者...." after_all_players_arrive = form_product class NumberTable(Page): @staticmethod def is_displayed(player): for i in range(len(Constants.index_game_round)): if player.round_number == Constants.index_game_round[i]: return player.round_number == Constants.index_game_round[i] #and player.subsession.num_death_all!=Constants.players_per_group*Constants.num_group form_model = 'player' form_fields = ['is_prtsc'] def vars_for_template(player): if player.round_number in Constants.index_fifth_game_round: player.is_fifth_game_round= True else: player.is_fifth_game_round= False # @staticmethod # def js_vars(player: Player): # #4*4 # answers_list=[player.game_cell1_answer,player.game_cell2_answer,player.game_cell3_answer,player.game_cell4_answer, # player.game_cell5_answer,player.game_cell6_answer,player.game_cell7_answer,player.game_cell8_answer, # player.game_cell9_answer,player.game_cell10_answer,player.game_cell11_answer,player.game_cell12_answer, # player.game_cell13_answer,player.game_cell14_answer,player.game_cell15_answer,player.game_cell16_answer] # #5*5 # # answers_list=[player.game_cell1_answer,player.game_cell2_answer,player.game_cell3_answer,player.game_cell4_answer, # # player.game_cell5_answer,player.game_cell6_answer,player.game_cell7_answer,player.game_cell8_answer, # # player.game_cell9_answer,player.game_cell10_answer,player.game_cell11_answer,player.game_cell12_answer, # # player.game_cell13_answer,player.game_cell14_answer,player.game_cell15_answer,player.game_cell16_answer, # # player.game_cell17_answer,player.game_cell18_answer,player.game_cell19_answer,player.game_cell20_answer, # # player.game_cell21_answer,player.game_cell22_answer,player.game_cell23_answer,player.game_cell24_answer, # # player.game_cell25_answer] # return dict( # answers_list=answers_list, # num_game_cell_per_row = Constants.num_game_cell_per_row, # num_game_cell=Constants.num_game_cell, # width=Constants.width) class Game(Page): timeout_seconds = Constants.timeout_seconds_write timer_text = '剩餘時間為:' @staticmethod def is_displayed(player): for i in range(len(Constants.index_game_round)): if player.round_number ==Constants.index_game_round[i]: return player.round_number == Constants.index_game_round[i] #and player.subsession.num_death_all!=Constants.players_per_group*Constants.num_group form_model = 'player' form_fields = ['game_cell1_input','game_cell2_input','game_cell3_input','game_cell4_input','game_cell5_input','game_cell6_input','game_cell7_input','game_cell8_input','game_cell9_input','game_cell10_input','game_cell11_input','game_cell12_input','game_cell13_input','game_cell14_input','game_cell15_input','game_cell16_input', 'game_cell17_input','game_cell18_input','game_cell19_input','game_cell20_input','game_cell21_input','game_cell22_input','game_cell23_input','game_cell24_input','game_cell25_input','game_cell26_input','game_cell27_input','game_cell28_input','game_cell29_input','game_cell30_input','game_cell31_input','game_cell32_input', 'game_cell33_input','game_cell34_input','game_cell35_input','game_cell36_input',] @staticmethod def before_next_page(player, timeout_happened): # print(player.game_cell1_input) cells= [player.game_cell1_input, player.game_cell2_input,player.game_cell3_input,player.game_cell4_input,player.game_cell5_input,player.game_cell6_input,player.game_cell7_input,player.game_cell8_input, player.game_cell9_input,player.game_cell10_input,player.game_cell11_input,player.game_cell12_input,player.game_cell13_input,player.game_cell14_input,player.game_cell15_input,player.game_cell16_input, player.game_cell17_input, player.game_cell18_input,player.game_cell19_input,player.game_cell20_input,player.game_cell21_input,player.game_cell22_input,player.game_cell23_input,player.game_cell24_input, player.game_cell25_input,player.game_cell26_input,player.game_cell27_input,player.game_cell28_input,player.game_cell29_input,player.game_cell30_input,player.game_cell31_input,player.game_cell32_input, player.game_cell33_input,player.game_cell34_input,player.game_cell35_input,player.game_cell36_input ] print(cells) # print(cells.count(0)) 沒有 # for i in cells: # if i == 0: # i = -1 histogram = Counter(cells) print(histogram) cells = [n if histogram[n]<=1 else 0 for n in cells] print(cells) player.game_cell1_input=cells[0] player.game_cell2_input=cells[1] player.game_cell3_input=cells[2] player.game_cell4_input=cells[3] player.game_cell5_input=cells[4] player.game_cell6_input=cells[5] player.game_cell7_input=cells[6] player.game_cell8_input=cells[7] player.game_cell9_input=cells[8] player.game_cell10_input=cells[9] player.game_cell11_input=cells[10] player.game_cell12_input=cells[11] player.game_cell13_input=cells[12] player.game_cell14_input=cells[13] player.game_cell15_input=cells[14] player.game_cell16_input=cells[15] player.game_cell17_input=cells[16] player.game_cell18_input=cells[17] player.game_cell19_input=cells[18] player.game_cell20_input=cells[19] player.game_cell21_input=cells[20] player.game_cell22_input=cells[21] player.game_cell23_input=cells[22] player.game_cell24_input=cells[23] player.game_cell25_input=cells[24] player.game_cell26_input=cells[25] player.game_cell27_input=cells[26] player.game_cell28_input=cells[27] player.game_cell29_input=cells[28] player.game_cell30_input=cells[29] player.game_cell31_input=cells[30] player.game_cell32_input=cells[31] player.game_cell33_input=cells[32] player.game_cell34_input=cells[33] player.game_cell35_input=cells[34] player.game_cell36_input=cells[35] # @staticmethod # def js_vars(player: Player): # return dict( # num_game_cell_per_row = Constants.num_game_cell_per_row, # num_game_cell=Constants.num_game_cell, # width=Constants.width) class AnsWaitPage(WaitPage): @staticmethod def is_displayed(player): for i in range(len(Constants.index_game_round)): if player.round_number ==Constants.index_game_round[i]: return player.round_number == Constants.index_game_round[i] #and player.subsession.num_death_all!=Constants.players_per_group*Constants.num_group after_all_players_arrive = num_form body_text = "等待其他受試者填答中...." class GameResult9(Page): @staticmethod def is_displayed(player): for i in range(len(Constants.index_game_round)): if player.round_number ==Constants.index_game_round[i]: return player.round_number == Constants.index_game_round[i] #and player.subsession.num_death_all!=Constants.players_per_group*Constants.num_group # def vars_for_template(player): # both_is_correct_list=[] # player_is_correctc_list=[player.game_cell1_is_correct,player.game_cell2_is_correct,player.game_cell3_is_correct,player.game_cell4_is_correct, # player.game_cell5_is_correct,player.game_cell6_is_correct,player.game_cell7_is_correct,player.game_cell8_is_correct, # player.game_cell9_is_correct,player.game_cell10_is_correct,player.game_cell11_is_correct,player.game_cell12_is_correct, # player.game_cell13_is_correct,player.game_cell14_is_correct,player.game_cell15_is_correct,player.game_cell16_is_correct] # group_is_correctc_list=[player.group.game_cell1_is_correct,player.group.game_cell2_is_correct,player.group.game_cell3_is_correct,player.group.game_cell4_is_correct, # player.group.game_cell5_is_correct,player.group.game_cell6_is_correct,player.group.game_cell7_is_correct,player.group.game_cell8_is_correct, # player.group.game_cell9_is_correct,player.group.game_cell10_is_correct,player.group.game_cell11_is_correct,player.group.game_cell12_is_correct, # player.group.game_cell13_is_correct,player.group.game_cell14_is_correct,player.group.game_cell15_is_correct,player.group.game_cell16_is_correct] # for i in player_is_correctc_list: # for j in group_is_correctc_list: # if i==j==True: # both_is_correct_list.append(True) # print(both_is_correct_list) # player.both_game_cell1_is_correct=both_is_correct_list[0] # player.both_game_cell2_is_correct=both_is_correct_list[1] # player.both_game_cell3_is_correct=both_is_correct_list[2] # player.both_game_cell4_is_correct=both_is_correct_list[3] # player.both_game_cell5_is_correct=both_is_correct_list[4] # player.both_game_cell6_is_correct=both_is_correct_list[5] # player.both_game_cell7_is_correct=both_is_correct_list[6] # player.both_game_cell8_is_correct=both_is_correct_list[7] # player.both_game_cell9_is_correct=both_is_correct_list[8] # player.both_game_cell10_is_correct=both_is_correct_list[9] # player.both_game_cell11_is_correct=both_is_correct_list[10] # player.both_game_cell12_is_correct=both_is_correct_list[11] # player.both_game_cell13_is_correct=both_is_correct_list[12] # player.both_game_cell14_is_correct=both_is_correct_list[13] # player.both_game_cell15_is_correct=both_is_correct_list[14] # player.both_game_cell16_is_correct=both_is_correct_list[15] # player.both_game_cell17_is_correct=both_is_correct_list[16] # player.both_game_cell18_is_correct=both_is_correct_list[17] # player.both_game_cell19_is_correct=both_is_correct_list[18] # player.both_game_cell20_is_correct=both_is_correct_list[19] # player.both_game_cell21_is_correct=both_is_correct_list[20] # player.both_game_cell22_is_correct=both_is_correct_list[21] # player.both_game_cell23_is_correct=both_is_correct_list[22] # player.both_game_cell24_is_correct=both_is_correct_list[23] # player.both_game_cell25_is_correct=both_is_correct_list[24] # player.both_game_cell26_is_correct=both_is_correct_list[25] # player.both_game_cell27_is_correct=both_is_correct_list[26] # player.both_game_cell28_is_correct=both_is_correct_list[27] # player.both_game_cell29_is_correct=both_is_correct_list[28] # player.both_game_cell30_is_correct=both_is_correct_list[29] # player.both_game_cell31_is_correct=both_is_correct_list[30] # player.both_game_cell32_is_correct=both_is_correct_list[31] # player.both_game_cell33_is_correct=both_is_correct_list[32] # player.both_game_cell34_is_correct=both_is_correct_list[33] # player.both_game_cell35_is_correct=both_is_correct_list[34] # player.both_game_cell36_is_correct=both_is_correct_list[35] # return dict( # both_game_cell1_is_correct=both_game_cell1_is_correct,both_game_cell2_is_correct=both_game_cell2_is_correct,both_game_cell3_is_correct=both_game_cell3_is_correct,both_game_cell4_is_correct=both_game_cell4_is_correct, # both_game_cell5_is_correct=both_game_cell5_is_correct,both_game_cell6_is_correct=both_game_cell6_is_correct,both_game_cell7_is_correct=both_game_cell7_is_correct,both_game_cell8_is_correct=both_game_cell8_is_correct, # both_game_cell9_is_correct=both_game_cell9_is_correct,both_game_cell10_is_correct=both_game_cell10_is_correct,both_game_cell11_is_correct=both_game_cell11_is_correct,both_game_cell12_is_correct=both_game_cell12_is_correct, # both_game_cell13_is_correct=both_game_cell13_is_correct,both_game_cell14_is_correct=both_game_cell14_is_correct,both_game_cell15_is_correct=both_game_cell15_is_correct,both_game_cell16_is_correct=both_game_cell16_is_correct, # both_game_cell17_is_correct=both_game_cell17_is_correct,both_game_cell18_is_correct=both_game_cell18_is_correct,both_game_cell19_is_correct=both_game_cell19_is_correct,both_game_cell20_is_correct=both_game_cell20_is_correct, # both_game_cell21_is_correct=both_game_cell21_is_correct,both_game_cell22_is_correct=both_game_cell22_is_correct,both_game_cell23_is_correct=both_game_cell23_is_correct,both_game_cell24_is_correct=both_game_cell24_is_correct, # both_game_cell25_is_correct=both_game_cell25_is_correct,both_game_cell26_is_correct=both_game_cell26_is_correct,both_game_cell27_is_correct=both_game_cell27_is_correct,both_game_cell28_is_correct=both_game_cell28_is_correct, # both_game_cell29_is_correct=both_game_cell29_is_correct,both_game_cell30_is_correct=both_game_cell30_is_correct,both_game_cell31_is_correct=both_game_cell31_is_correct,both_game_cell32_is_correct=both_game_cell32_is_correct, # both_game_cell33_is_correct=both_game_cell33_is_correct,both_game_cell34_is_correct=both_game_cell34_is_correct,both_game_cell35_is_correct=both_game_cell35_is_correct,both_game_cell36_is_correct=both_game_cell36_is_correct # ) @staticmethod def js_vars(player: Player): player_is_correctcs_list=[player.game_cell1_is_correct,player.game_cell2_is_correct,player.game_cell3_is_correct,player.game_cell4_is_correct, player.game_cell5_is_correct,player.game_cell6_is_correct,player.game_cell7_is_correct,player.game_cell8_is_correct, player.game_cell9_is_correct,player.game_cell10_is_correct,player.game_cell11_is_correct,player.game_cell12_is_correct, player.game_cell13_is_correct,player.game_cell14_is_correct,player.game_cell15_is_correct,player.game_cell16_is_correct, player.game_cell17_is_correct,player.game_cell18_is_correct,player.game_cell19_is_correct,player.game_cell20_is_correct, player.game_cell21_is_correct,player.game_cell22_is_correct,player.game_cell23_is_correct,player.game_cell24_is_correct, player.game_cell25_is_correct,player.game_cell26_is_correct,player.game_cell27_is_correct,player.game_cell28_is_correct, player.game_cell29_is_correct,player.game_cell30_is_correct,player.game_cell31_is_correct,player.game_cell32_is_correct, player.game_cell33_is_correct,player.game_cell34_is_correct,player.game_cell35_is_correct,player.game_cell36_is_correct ] other_is_correctcs_list=[ player.other_game_cell1_is_correct,player.other_game_cell2_is_correct,player.other_game_cell3_is_correct,player.other_game_cell4_is_correct, player.other_game_cell5_is_correct,player.other_game_cell6_is_correct,player.other_game_cell7_is_correct,player.other_game_cell8_is_correct, player.other_game_cell9_is_correct,player.other_game_cell10_is_correct,player.other_game_cell11_is_correct,player.other_game_cell12_is_correct, player.other_game_cell13_is_correct,player.other_game_cell14_is_correct,player.other_game_cell15_is_correct,player.other_game_cell16_is_correct, player.other_game_cell17_is_correct,player.other_game_cell18_is_correct,player.other_game_cell19_is_correct,player.other_game_cell20_is_correct, player.other_game_cell21_is_correct,player.other_game_cell22_is_correct,player.other_game_cell23_is_correct,player.other_game_cell24_is_correct, player.other_game_cell25_is_correct,player.other_game_cell26_is_correct,player.other_game_cell27_is_correct,player.other_game_cell28_is_correct, player.other_game_cell29_is_correct,player.other_game_cell30_is_correct,player.other_game_cell31_is_correct,player.other_game_cell32_is_correct, player.other_game_cell33_is_correct,player.other_game_cell34_is_correct,player.other_game_cell35_is_correct,player.other_game_cell36_is_correct ] answers_list=[player.group.game_cell1_answer,player.group.game_cell2_answer,player.group.game_cell3_answer,player.group.game_cell4_answer, player.group.game_cell5_answer,player.group.game_cell6_answer,player.group.game_cell7_answer,player.group.game_cell8_answer, player.group.game_cell9_answer,player.group.game_cell10_answer,player.group.game_cell11_answer,player.group.game_cell12_answer, player.group.game_cell13_answer,player.group.game_cell14_answer,player.group.game_cell15_answer,player.group.game_cell16_answer, player.group.game_cell17_answer,player.group.game_cell18_answer,player.group.game_cell19_answer,player.group.game_cell20_answer, player.group.game_cell21_answer,player.group.game_cell22_answer,player.group.game_cell23_answer,player.group.game_cell24_answer, player.group.game_cell25_answer,player.group.game_cell26_answer,player.group.game_cell27_answer,player.group.game_cell28_answer, player.group.game_cell29_answer,player.group.game_cell30_answer,player.group.game_cell31_answer,player.group.game_cell32_answer, player.group.game_cell33_answer,player.group.game_cell34_answer,player.group.game_cell35_answer,player.group.game_cell36_answer ] return dict( player_is_correctcs_list=player_is_correctcs_list, other_is_correctcs_list=other_is_correctcs_list, answers_list=answers_list, num_game_cell_per_row = Constants.num_game_cell_per_row, num_game_cell=Constants.num_game_cell, width=Constants.width ) class GroupWaitPage(WaitPage): @staticmethod def is_displayed(player): for i in range(len(Constants.index_fifth_game_round)): if player.round_number ==Constants.index_fifth_game_round[i]: return player.round_number == Constants.index_fifth_game_round[i] #and player.is_all_died_last_time==False wait_for_all_groups = True after_all_players_arrive = other body_text = "等待其他組確認中...." class OtherGroupResult(Page): @staticmethod def is_displayed(player): for i in range(len(Constants.index_fifth_game_round)): if player.round_number ==Constants.index_fifth_game_round[i]: return player.round_number == Constants.index_fifth_game_round[i] #and player.is_all_died_last_time==False def vars_for_template(player): if player.is_group_all_died_last_time == True: prev_player_fifth_game_round =player.in_round(player.round_number - Constants.num_round_per_cycle) if prev_player_fifth_game_round.is_group_all_died_last_time == True: prev_player_vote_round =player.in_round(player.round_number - Constants.num_round_per_cycle*3+1) else: prev_player_vote_round =player.in_round(player.round_number - Constants.num_round_per_cycle*2+1) vote_result_str_last_time= prev_player_vote_round.group.vote_result_str else: vote_result_str_last_time="" # return dict(vote_result_str_last_time=vote_result_str_last_time) if player.is_other_group_all_died_last_time == True: prev_player_fifth_game_round =player.in_round(player.round_number - Constants.num_round_per_cycle) if prev_player_fifth_game_round.is_other_group_all_died_last_time == True: prev_player_round =player.in_round(player.round_number - Constants.num_round_per_cycle*2) else: prev_player_round =player.in_round(player.round_number - Constants.num_round_per_cycle) if player.group.id_in_subsession==1: other_group_vote_result_str_last_time=prev_player_round.subsession.vote_result_group2 else: other_group_vote_result_str_last_time=prev_player_round.subsession.vote_result_group1 else: other_group_vote_result_str_last_time="" return dict(vote_result_str_last_time=vote_result_str_last_time,other_group_vote_result_str_last_time=other_group_vote_result_str_last_time) class Final(Page): @staticmethod def is_displayed(player): for i in range(len(Constants.index_final_round)): if player.round_number ==Constants.index_final_round[i]: return player.round_number == Constants.index_final_round[i] #and player.is_all_died_last_time==False def vars_for_template(player): prev_player_for_third_vote = player.in_round(player.round_number - Constants.num_round_per_cycle+1) prev_player_for_second_vote = player.in_round(player.round_number - Constants.num_round_per_cycle*2+1) prev_player_for_first_vote= player.in_round(player.round_number - Constants.num_round_per_cycle*3+1) vote_first=prev_player_for_first_vote.group.vote_result_str vote_second=prev_player_for_second_vote.group.vote_result_str vote_third=prev_player_for_third_vote.group.vote_result_str prev_player_for_first_cycle_fifth_game_round= player.in_round(player.round_number - Constants.num_round_per_cycle*2) prev_player_for_second_cycle_fifth_game_round= player.in_round(player.round_number - Constants.num_round_per_cycle) if prev_player_for_first_cycle_fifth_game_round.group.num_death==Constants.players_per_group: player.is_group_all_died_for_first_cycle=True else: player.is_group_all_died_for_first_cycle=False if prev_player_for_second_cycle_fifth_game_round.group.num_death==Constants.players_per_group: player.is_group_all_died_for_second_cycle=True else: player.is_group_all_died_for_second_cycle=False return dict(vote_first=vote_first,vote_second=vote_second,vote_third=vote_third) class bye(Page): @staticmethod def is_displayed(player): return player.round_number == Constants.num_rounds def vars_for_template(player): num_subsession_list=[] for i in range(1,Constants.num_subsession+1): num_subsession_list.append(i) import random player.num_subsession_for_final_pay=random.choice(num_subsession_list) prev_player = player.in_round(Constants.num_round_per_cycle*Constants.num_cycle*player.num_subsession_for_final_pay) player.total_pay_session=prev_player.total_pay_subsession player.total_pay_session_yuan=int(player.total_pay_session*Constants.exchange_rate+ Constants.attendance_fee+0.5) # return dict(num_subsession_for_final_pay=num_subsession_for_final_pay) # def make_image_data(image_names): # return [dict(name=name, path='shapes/{}'.format(name)) for name in image_names] # class radio(Page): # @staticmethod # def is_displayed(player): # for i in range(0,Constants.num_subsession): # if player.round_number in Constants.index_all_round[Constants.num_round_per_cycle*Constants.num_cycle*i:Constants.num_round_per_cycle*Constants.num_cycle*(i+1)]: # player.num_subsession=i+1 # for i in range(len(Constants.index_vote_round)): # if player.round_number ==Constants.index_vote_round[i]: # if player.round_number in Constants.index_second_and_third_vote_round: # prev_player = player.in_round(player.round_number - 1) # return player.round_number == Constants.index_vote_round[i] and prev_player.is_died== False and player.subsession.num_death_all!=Constants.players_per_group*Constants.num_group # else: # return player.round_number == Constants.index_vote_round[i] # form_model = 'player' # form_fields = ['img_choice'] # @staticmethod # def vars_for_template(player: Player): # image_names = [ # 'X.png', # 'Y.png', # ] # return dict(image_data=make_image_data(image_names)) page_sequence = [Introduction, Vote, VoteWaitPage,VoteResult, FormWaitPage,NumberTable,Game,AnsWaitPage,GameResult9, GroupWaitPage,OtherGroupResult, Final, bye ]