【问题标题】:Python "Dice Game"Python“骰子游戏”
【发布时间】:2021-12-14 10:06:08
【问题描述】:

我想创建一个简单的游戏,其中两个玩家“互相掷骰子”。获胜者是连续三次获得一个号码的人。我尝试了许多不同的方法,但最后我总是在评估中挣扎。 如何确定哪个玩家连续 3 次获得一个特定数字?谢谢你的建议!

import random

#Initialisieren der Variablen
wurf1_1 = 0
wurf2_1 = 0
gewuerfelt_s1 = []
gewuerfelt_s2 = []
n = 1

while (True):
    #Bestimmen der Augenzahlen des Würfels
    wurf1_1 = random.randint(1,6)
    wurf2_1 = random.randint(1,6)
    print("Spiel " + str(n) + ":\tSpieler 1: " + str(wurf1_1) + "; Spieler 2: " + str(wurf2_1))

    gewuerfelt_s1.append(wurf1_1)
    gewuerfelt_s2.append(wurf2_1)

    wurf1_2 = random.randint(1,6)
    wurf2_2 = random.randint(1,6)
    n += 1

    print("Spiel " + str(n) + ":\tSpieler 1: " + str(wurf1_2) + "; Spieler 2: " + str(wurf2_2))

    if (wurf1_2 == gewuerfelt_s1[0]):
        gewuerfelt_s1.append(wurf1_2)
        wurf1_3 = random.randint(1,6)
        n += 1
        print("Spiel " + str(n) + ":\tSpieler 1: " + str(wurf1_3) + "; Spieler 2: " + str(wurf2_2))
        if wurf1_3 == gewuerfelt_s1[1]:
            print("Spieler 1 hat dreimal hintereinander die Zahl", gewuerfelt_s1[1], "gewürfelt. Sieger!")
            break
        else:
            del gewuerfelt_s1[:]
            continue
    else:
        del gewuerfelt_s1[:]
        continue

【问题讨论】:

  • 请展示您的尝试
  • 这个说法太笼统了,有什么要分享的吗?
  • 现在看看
  • 允许掷多少个骰子?如果它是一个固定数字,可以从一个包含这么多数字的列表开始,例如 [1,2,1,1,1,3] 并尝试找到一种方法来查看它是否连续包含三个 1(如果你是在滚动 1) 之后?如果我们玩到有人得到三个,你可以数第一个,然后如果下一个滚动是一个,则增加,或者重置为 0。

标签: python dice


【解决方案1】:

不要从列表中删除元素。您可以通过从末尾开始索引来检查列表中最近添加的元素

列表的最后一个元素是:

my_list[-1]

倒数第二个是:

my_list[-2]

所以对于第二次滚动之后的每一次滚动,您可以检查:

my_list[-1] == my_list[-2] == my_list[-3]

【讨论】:

    【解决方案2】:

    (无法评论,低代表)

    首先,创建一个模拟骰子的函数,它应该返回一个介于 [1,6] 之间的整数,并且应该使用容易获得的(伪)随机函数生成。 完成此操作后,声明变量 continous1、continous2、prev1、prev2。 如果当前回合与该玩家的上一个相同,则上一个变量将存储该玩家的上一个骰子角色答案,从而增加连续计数。第一个达到 3 的就是你的答案。使用 while 循环来模拟这一点。

    这里是代码

    import random
    
    continous1 = 0
    continous2 = 0
    prev1 = 0
    prev2 = 0
    
    while continous1 != 3 and continous2 != 3:
        person1 = random.randint(1,6)
        person2 = random.randint(1,6)
        
        if person1 == prev1:
            continous1 += 1
        else:
            continous1 = 0
    
        
        if person2 == prev2:
            continous2 += 1
        else:
            continous2 = 0
        
        prev1 = person1
        prev2 = person2
    
    # Note that even if both persons win the game at the same time, the first person will be chosen as the winner
    if continous1 == 3:
        print("Person 1 won the game")
    else:
        print("Person 2 won the game")
        
    

    【讨论】:

    • 我怀疑如果continuous2 不等于 3 是平局,但是从帖子中并不清楚,如果我们不匹配,我们是否需要将连续重置为 1?
    • 是的,很好,@doctorlove,如果没有匹配到,我应该重置继续。更新了答案。谢谢。
    • 平局不是有效的结果,比赛将一直进行到有赢家为止。
    【解决方案3】:

    检查这个伪代码

    PlayGame()
    {
        bool gameover = false;
        int turns ;
        player1_values = []
        player2_values = []
        While(!gameover)
        {
            player1_values.Add(getrandon(1,6));
            player2_values.Add(getrandon(1,6));
            
            bool player1_won = Check(player1_values);
            if(!player1_won && player1_values.Count == 3)
                player1_values.Clear();
            
            bool player2_won = Check(player2_values);
            if(!player1_won && player2_values.Count == 3)
                player2_values.Clear();
                
            gameover = player1_won || player2_won;
        }
    }
    
    Check(values)
    {
        if(values.Count < 3)
            return false;
        
        int num = values[0];
        for(int i = 1;i<3;i++)
        {
            if(values[i] != num)
                return false;
        }           
        return true;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      • 2015-08-25
      • 2015-12-24
      • 2016-05-07
      相关资源
      最近更新 更多