Tạo game ném xí ngầu 2 người

Chào mọi người, assignment mình đang theo làm là tạo ra 1 game xí ngầu cho 2 người. 2 players sẽ lần lượt thay nhau ném xí ngầu cho đến khi 1 người có đủ 6 số. Sẽ có 1 nút restart để restart game lại từ đầu. Game đơn giản thế thôi ạ, trong code mình có player1player2. Mình muốn setEnabled(false) cho nút roll của 1 player trong khi người còn lại sẽ đc set true, hay nói cách khác là khi 1 người đã xong lượt thì nút roll của người đó sẽ không bấm đc nữa cho đến khi người chơi còn lại bấm nút roll bên họ. Đây là code của mình

Die.java

import java.util.*;
public class Die
{
    private final int MAX = 6;
    private int die1;
    Random rand = new Random();
    
    //Constructor
    public Die()
    {
        die1 = 1;
    }// end Constructor
    
    public int Roll()
    {
        die1 = rand.nextInt(MAX)+1;
        return die1;
    }
}

Player.java

import java.util.*;
import javax.swing.*;
public class Player
{
   
    private final int MAX = 100;
    private Die play = new Die();
    private boolean[] results = {false,false,false,false,false,false,false};
    private int count;
    private int key;
    public boolean check = false;
    //private JButton roll;
    public Player()
    {
        count=0;
        key=0;
    }
    public void Play()
    {
        for(int i=0;i<MAX;i++)
        {
            key=play.Roll();
            System.out.print("\nNumber rolled: "+key); 
            count++; 
            for(int a=1;a<7;a++)
            {
                if(a==key)
                {
                    results[a]=true;
                    System.out.print("\nSo far, you have rolled ");  
                    if(results[a]==true)
                    {
                        check=true;
                        for(int k=1;k<7;k++)
                        {
                            if(results[k] ==true)
                        {
                            System.out.print(" "+k+" ");
                        }
                        if(results[k] == false)
                        check=false;
                        }
                    }        
                }
            }  
            if(check==true)
            {
                System.out.print("\nCongratulations, you have taken "+count+" rolls to get one of each number between 1 and 6");
                break;
            }         
        }             
    }
    
    public boolean Complete()
    {
        for(int i=1;i<7;i++)
        {
            if(results[i] == true)
            {
                return true;
            }
            return true;
        }
        return false;
    }
    
    public int getCount()
    {
        return count;
    }
    
    public int Check(int []check,int key)
    {
        int check1= Arrays.binarySearch(check,key);
        return check1;   
    }
    
    
}

SixNumbersPanel2.java

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

public class SixNumbersPanel2 extends JPanel implements ActionListener
{
    private JTextField text1;
    public boolean flag = false;
    private boolean checkflag[] = {false,false,false,false,false,false,false};
    private JLabel label;
    private JLabel label1;
    public JButton roll;
    private JButton restartButton;
    private JTextArea display;
    private JTextField[] fields = new JTextField[7];
    private Die dice = new Die();
    private int key;
    private int count;
    private int count1;
    private Player player1 = new Player();
    private SixNumbersPanel2 player2;
    private int check;
    private int[] list = new int [7];
    //private SixNumbersPanel2 player2panel;
    public SixNumbersPanel2()
    {
        label= new JLabel ("A number between 1 to 6 wil appear");
        label1 = new JLabel("once in each of the following textfields");
        roll = new JButton("Roll dice");
        restartButton = new JButton("Restart Game");
        text1 = new JTextField(3);
        display = new JTextArea(10,15);
        add(label);
        add(label1);
        for(int i=1;i<7;i++)
        {
            fields[i] = new JTextField(3);
            add(fields[i]);
        }
        add(roll);
        add(text1);
        add(display);
        display.setEditable(false);      
        restartButton.setVisible(false);
        add(restartButton);
        restartButton.addActionListener(this);
        roll.addActionListener(this);        
    }
    public void restart(SixNumbersPanel2 player2)
    {
        player1= new Player();
        this.player2 = player2;
        display.setText("");
        text1.setText("");
        for(int i=1; i<7; i++)
        {
            fields[i].setText("");
        }
        count=0;
        count1=0;
        Arrays.fill(checkflag,false);
        Arrays.fill(list,0);
        flag = false;
        restartButton.setVisible(false);
        rollenable();        
    }
    
    
    public void actionPerformed(ActionEvent event)
    {
                
        key=dice.Roll();
        count++;
        String toScreen= "Number of rolls: "+count;
        display.setText(toScreen);
        text1.setText(""+key);
        check = player1.Check(list,key);
        if(check < 0)
        {
            count1++;
            for(int i=1;i<7;i++)
            {
                if(key == i)
                {
                    list[i] = key;
                    checkflag[i]=true;
                    fields[i].setText(""+key);
                    if(checkflag[i] == true)
                    {
                        flag = true;
                        for(int a=1; a<7; a++)
                        {
                            if(checkflag[a]==false)
                            {
                                flag=false;
                            }
                        }
                    }
                }
                if(flag == true && player1.Complete())
                {
                    display.setText("Congratulation, you have \ntaken "+count+" rolls to get one of \neach number between 1 and 6");
                    rolldisable();
                    restartButton.setVisible(true);                   
                }
                else if(flag == false)
                {
                    display.setText(toScreen);
                    rolldisable();
                    player2.rollenable();
                }
            }
        }
        
        if(event.getSource() == restartButton)
        {
            rolldisable();
            player2.rollenable();
            restart(player2);
            player2.restart(this);
        }
    }
    public void rollenable()
    {
        roll.setEnabled(true);
    }
    public void rolldisable()
    {
        roll.setEnabled(false);
    }
    public JButton getSubButton()
    {
        return this.roll;
    }
}

DisplaySixNumbersPanel.java

import java.awt.*;
import javax.swing.*;
public class DisplaySixNumbersPanel
{
    public static void main(String[ ] args) 
    {
        JFrame w1 = new JFrame("Six Numbers Game");
        w1.setLayout(new GridLayout(1,2));
        SixNumbersPanel2 player1 =new SixNumbersPanel2();
        SixNumbersPanel2 player2 =new SixNumbersPanel2();
        player1.restart(player2);
        player2.restart(player1);
        player1.rollenable();
        player2.rolldisable();
        w1.add(player1);
        w1.add(player2);
        w1.setSize(540, 350);
        w1.setVisible(true);
        w1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    } //end main
} //end class

Đây là bài post đầu tiên của mình nên không tránh khỏi sai sót, mong mọi người thông cảm ạ. Rất mong mọi người giúp đỡ

UPDATED
Mình đã làm xong nút restart rồi, và cũng làm xong bước disable 1 nút khi nút kia enabled rồi. Nhưng giờ thì nếu 1 player mà không quay ra đc số mới thì nút sẽ enable hoài luôn. Ai có gợi ý cách sửa gì hãy cho mình biết ạ. Mình cảm ơn.

Bạn làm là chơi online trên 2 máy khác nhau, hay là chỉ trên cùng 1 máy ??

cùng máy thôi bạn, mình chỉ mới nhập môn lập trình java được có 4 tháng thôi.

Thì cứ khi nào nút Roll ấn thì Enable nút kia thôi, ko quan tâm đến kết quả

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?