Java,Yahtzee程序的Point系统

时间:2016-03-17 15:14:00

标签: java

所以我正在研究一个学校项目,该项目是用两个yahtzee点系统制作一个简化的yahtzee程序,从小梯子或三种类型到目前为止我已经制作了小梯子(1,2, 3,4,5)和大梯子(2,3,4,5,6)工作,但我有2个问题。  1.我如何制作三种点数系统?  2.如果你没有得到一个隐含的积分系统,项目的一部分就是建立一个类别,如果你得到(1,1,4,5,6),那么用户可以选择选择哪个数字他想选择最高分。我知道我不能很好地解释这一点,因为瑞典语和我的英语不是最好的。但这是我的代码:

import javax.swing.*;
import java.util.*;


public class Projekt1 {

public static void main(String[] args) {

char fortsatta = 'j';
boolean ja;
do{
JOptionPane.showMessageDialog(null, "Välkommen till Johans Yatzy");
int starta = JOptionPane.showConfirmDialog(null, "Vill du starta spelet?",  "Spela igen",
                                                JOptionPane.YES_NO_OPTION,  JOptionPane.QUESTION_MESSAGE);

if(starta == JOptionPane.YES_OPTION ){
 JOptionPane.showMessageDialog(null, "Du har nu startat spelet");


int[] tar = new int[5];

for(int i=0; i<5; i++){
tar[i] = (int)(Math.random()*6+1);
}

String output = "";
java.util.Arrays.sort(tar);

for (int i = 0; i < tar.length; i++) {
output = output + tar[i] + "\t";
}

JOptionPane.showMessageDialog(null, "Du har nu kastat dina tärningar och kasten blev följande: " + output);


if (tar[0] == 1 && tar[1] == 2 && tar[2]==3 && tar[3] == 4 && tar[4] == 5) {
  JOptionPane.showMessageDialog(null, "Grattis, du fick liten stege som är värt 15 poäng");
}

else if (tar[0] == 2 && tar[1] == 3 && tar[2]==4 && tar[3] ==5 && tar[4] ==6) {
  JOptionPane.showMessageDialog(null, "Grattis, du fick stor stege som är värt 20 poäng");
}

else{
  JOptionPane.showMessageDialog(null, "Tärningskastet resulterade i varken liten stege eller stor stege");  
}
}
else if(starta == JOptionPane.NO_OPTION){
JOptionPane.showMessageDialog(null, "Programmet kommer nu att stängas ner");
System.exit(0);
}


String startaom;
startaom = JOptionPane.showInputDialog("Vill du spela igen? Skriv J för att spela igen");
fortsatta = startaom.charAt(0); 
}while(fortsatta == 'j');

}

}

2 个答案:

答案 0 :(得分:0)

我假设瑞典Yahtzee的规则与美国的Yahtzee规则相同。

  

如何为三种类型制作点数系统?

我假设您正在谈论得分表的下半部分。

你写了一个方法,检查你的5个骰子是否有3个相同的数字,并返回骰子的总和作为分数。如果5个骰子没有3个相同的数字,则返回零。

  

项目的一部分是如果你没有得到一个隐含的积分系统,那就建立一个类别,如果你得到(1,1,4,5,6),那么用户将得到选择选择哪个号码以获得最高分数。

现在我假设你正在谈论得分表的上半部分。

您询问用户他们希望将哪些类别应用于他们的分数。您只需显示以前未选择的类别。如果愿意,用户可以选择类别2或3,得分为零。

如果你问的是计算机应该如何播放类别,你可以计算出失去3种最低点数的类别得分。

在您的示例中,类别1将是第一选择,因为您只丢失一个点。第2类失分6分,第4类失分8分,第3类失分9分,第5类失分10分,第6类失分12分。随着游戏的进行,计算机的类别选择更少。

答案 1 :(得分:0)

我知道你只是做了Yahtzee的简化版本,所以首先,这是检查三种类型的简单方法:

Private Sub Add_Rcrd_Click(sender As Object, e As EventArgs) Handles Add_Rcrd.Click

    ErrorMsgs.Text = ""

    WkDay = All649_BS.Current(10)
    All649_BS.AddNew()                'Add the new enry

    DrawNumber.Text = All649_BS.Count
    Actual_Count.Text = All649_BS.Count

    If WkDay = "WED" Then
        Weekday.Text = "SAT"
    Else
        Weekday.Text = "WED"
    End If

    DateField.Focus()

End Sub

Private Sub Save_Record_Click(sender As Object, e As EventArgs) Handles Save_Record.Click

    Dim a1 As Int32
    Dim b2 As Int32
    Dim c3 As Int32
    Dim d4 As Int32
    Dim e5 As Int32
    Dim f6 As Int32

    'Check for entry errors

    If DateField.Text = "" Then              ' Check to see a date was enetered
        ErrorMsgs.Text = "Please enter a date !"
        DateField.Text = ""
        DateField.Focus()
        Exit Sub
    End If

    If Pos1.Text = "" Or Pos1.Text < 1 Or Pos1.Text > 49 Then   ' Check 1st number entry
        ErrorMsgs.Text = "You have forgotten to enter 1st number or the number is invalid !"
        Pos1.Text = ""
        Pos1.Focus()
        Exit Sub
    End If

    If Pos2.Text = "" Or Pos2.Text < 1 Or Pos2.Text > 49 Then   ' Check 2nd number entry
        ErrorMsgs.Text = "You have forgotten the 2nd number or the number is invalid !"
        Pos2.Text = ""
        Pos2.Focus()
        Exit Sub
    End If

    If Pos3.Text = "" Or Pos3.Text < 1 Or Pos3.Text > 49 Then   ' Check 3rd number entry
        ErrorMsgs.Text = "You have forgotten the 3rd number or the number is invalid !"
        Pos3.Text = ""
        Pos3.Focus()
        Exit Sub
    End If

    If Pos4.Text = "" Or Pos4.Text < 1 Or Pos4.Text > 49 Then   ' Check 4th number entry
        ErrorMsgs.Text = "You have forgotten the 4th number or the number is invalid !"
        Pos4.Text = ""
        Pos4.Focus()
        Exit Sub
    End If

    If Pos5.Text = "" Or Pos5.Text < 1 Or Pos5.Text > 49 Then   ' Check 5th number entry
        ErrorMsgs.Text = "You have forgotten the 5th number or the number is invalid !"
        Pos5.Text = ""
        Pos5.Focus()
        Exit Sub
    End If

    If Pos6.Text = "" Or Pos6.Text < 1 Or Pos6.Text > 49 Then   ' Check 6th number entry
        ErrorMsgs.Text = "You have forgotten the 6th number or the number is invalid !"
        Pos6.Text = ""
        Pos6.Focus()
        Exit Sub
    End If

    If Bonus.Text = "" Or Bonus.Text < 1 Or Bonus.Text > 49 Then   ' Check 6th number entry
        ErrorMsgs.Text = "You have forgotten the Bonus number or the number is invalid !"
        Bonus.Text = ""
        Bonus.Focus()
        Exit Sub
    End If

    a1 = Val(Pos1.Text)
    b2 = Val(Pos2.Text)
    c3 = Val(Pos3.Text)
    d4 = Val(Pos4.Text)
    e5 = Val(Pos5.Text)
    f6 = Val(Pos6.Text)
    Sumbox.Text = a1 + b2 + c3 + d4 + e5 + f6

    Try

        Validate()
        All649_BS.EndEdit()
        All_649TableAdapter.Update(All649_DataSet)
        ErrorMsgs.Text = ("Update successful")

    Catch ex As Exception

        ErrorMsgs.Text = ("Update failed")

    End Try

    All649_BS.MoveLast()
    All649Nav.Focus()

End Sub

对于更全面的版本,lower section中的多种多样组合有很多要点:

  • 三对的一类
  • 四对的一类
  • 满屋(三种类型+两种类型)
  • Yahtzee(Five-of-A-Kind)

和扩展Yatzy版本(不是Yahtzee):

  • 单对(两种)
  • 两对(两种类型+两种类型)

对于upper section,您需要计算一定数量的数量。

所以,你应该从按数字计算开始:

if ((tar[0] == tar[1] && tar[1] == tar[2]) ||
    (tar[1] == tar[2] && tar[2] == tar[3]) ||
    (tar[2] == tar[3] && tar[3] == tar[4])) {
    // found 3 of a kind
}

现在找到前两个计数:

int[] count = new int[6];
for (int i = 0; i < 5; i++)
    count[tar[i]-1]++;

现在你可以很容易地找到你的组合(以及做Yatzy的点数):

int topIdx1 = 0, topIdx2 = 0;
for (int i = 1; i < 6; i++)
    if (count[i] > count[topIdx1]) {
        topIdx2 = topIdx1;
        topIdx1 = i;
    } else if (count[i] > count[topIdx2]) {
        topIdx2 = i;
    }

对于上半部分,这些点很容易计算出来:

if (count[topIdx1] == 5) {
    // Yahtzee
} else if (count[topIdx1] == 4) {
    // Four-Of-A-Kind       yatzyPoints = 4*(topIdx1+1)
} else if (count[topIdx1] == 3) {
    if (count[topIdx2] == 2) {
        // Full House       yatzyPoints = 3*(topIdx1+1) + 2*(topIdx2+1)
    } else {
        // Three-Of-A-Kind  yatzyPoints = 3*(topIdx1+1)
    }
} else if (count[topIdx1] == 2) {
    if (count[topIdx2] == 2) {
        // Two-Pair         yatzyPoints = 2*(topIdx1+1) + 2*(topIdx2+1)
    } else {
        // One-Pair         yatzyPoints = 2*(topIdx1+1)
    }
}