Bewertungsanfrage Poker-GUI

oppaernst

Mitglied
Hallo,

nachfolgender Code enthält meinen bisherigen Stand meiner Poker-GUI (am besten starten und dann von links nach rechts durchklicken).
Könnte das jemand mal bei sich einladen und das Ding bewerten?
Ich finde das eigentlich erst mal gar nicht so schlecht. Das Ding tut, was es soll.
Die Frage wäre nur, ob man das irgendwie besser anordnen/sortieren/etc. könnte. Oder ob man das generell "TOTAL ANDERS" machen würde.

Viele Grüße

Java:
package Pokercode;

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import java.util.Scanner;
import java.util.Arrays;
import java.lang.Math;

public class Main_Beta {
  
  
    public static void main(String[] args) {

        Game_Beta game = new Game_Beta();
        game.nop();
    }
}

class Game_Beta extends JComboBox implements ActionListener {

    // VARIABLES
    private static int              number_of_players       = 0                                 ;
    private static int              small_blind             = 0                                 ;
    private static int              big_blind               = 0                                 ;
    private static String[]         player_names            = new String [3*number_of_players]  ;
    private static int              money_stack                = 2000                              ;
    private static int[]            cards                   = new int    [52]                   ;
    private static int[]            cards_to_hand_out       = new int    [21]                   ;
    private static int[]            round                    = new int    [3*number_of_players]  ;
    private static int[]            player_numbers          = new int    [24]                   ;
    private static int[]            players_folded          = new int    [number_of_players]    ;
  
  
    // MAIN FRAME
    JFrame mainFrame;

    // JLABEL
    JLabel num_of_pl_1    = new JLabel ("Choose the number of players.");
    JLabel pl_names       = new JLabel ("Type in player names.");
    JLabel small_b        = new JLabel ("Small Blind [$]");
    JLabel big_b          = new JLabel ("Big Blind [$]");
    JLabel start_stack    = new JLabel ("Stack to start [$]");
    JLabel balances_pl      = new JLabel ("Player's name");
    JLabel balances          = new JLabel ("Balances[$]");
  
    // TEXTFIELDS
    static JTextField small_b_input        = new JTextField("x$");
    static JTextField big_b_input          = new JTextField("y$");
    static JTextField start_stack_input    = new JTextField("z$");
    static JTextField player1              = new JTextField("Enter name");
    static JTextField player2              = new JTextField("Enter name");
    static JTextField player3              = new JTextField("Enter name");
    static JTextField player4              = new JTextField("Enter name");
    static JTextField player5              = new JTextField("Enter name");
    static JTextField player6              = new JTextField("Enter name");
    static JTextField player7              = new JTextField("Enter name");
    static JTextField player8              = new JTextField("Enter name");
      
    // TEXT-OUTPUT-AREA
    static JTextArea text_num_of_pl      = new JTextArea();
    static JTextArea small_b_output      = new JTextArea();
    static JTextArea small_b_conf        = new JTextArea();
    static JTextArea big_b_output        = new JTextArea();
    static JTextArea big_b_conf          = new JTextArea();
    static JTextArea start_stack_output  = new JTextArea();
    static JTextArea start_stack_conf    = new JTextArea();
    static JTextArea player1_conf        = new JTextArea();
    static JTextArea player1_nm          = new JTextArea();
    static JTextArea player1_bal         = new JTextArea();
    static JTextArea player2_conf        = new JTextArea();
    static JTextArea player2_nm          = new JTextArea();
    static JTextArea player2_bal         = new JTextArea();
    static JTextArea player3_conf        = new JTextArea();
    static JTextArea player3_nm          = new JTextArea();
    static JTextArea player3_bal         = new JTextArea();
    static JTextArea player4_conf        = new JTextArea();
    static JTextArea player4_nm          = new JTextArea();
    static JTextArea player4_bal         = new JTextArea();
    static JTextArea player5_conf        = new JTextArea();
    static JTextArea player5_nm          = new JTextArea();
    static JTextArea player5_bal         = new JTextArea();
    static JTextArea player6_conf        = new JTextArea();
    static JTextArea player6_nm          = new JTextArea();
    static JTextArea player6_bal         = new JTextArea();
    static JTextArea player7_conf        = new JTextArea();
    static JTextArea player7_nm          = new JTextArea();
    static JTextArea player7_bal         = new JTextArea();
    static JTextArea player8_conf        = new JTextArea();
    static JTextArea player8_nm          = new JTextArea();
    static JTextArea player8_bal         = new JTextArea();
    static JTextArea game_started_conf   = new JTextArea();
  
    // COMBOBOX
    Integer[] num_o_p = {2, 3, 4, 5, 6, 7, 8};
    JComboBox<Integer> num_of_pl_combo = new JComboBox<>(num_o_p);
    static JLabel num_of_pl_2 = new JLabel("");
  
    //JBUTTON
    JButton small_b_button     = new JButton("Confirm");
    JButton big_b_button       = new JButton("Confirm");
    JButton start_stack_button = new JButton("Confirm");
    JButton player1_button     = new JButton("OK");
    JButton player2_button     = new JButton("OK");
    JButton player3_button     = new JButton("OK");
    JButton player4_button     = new JButton("OK");
    JButton player5_button     = new JButton("OK");
    JButton player6_button     = new JButton("OK");
    JButton player7_button     = new JButton("OK");
    JButton player8_button     = new JButton("OK");
    JButton start_game_button  = new JButton("START GAME");
  
    public void nop() {
      
        // GENERAL
        JFrame mainFrame = new JFrame("Poker with pkfire.com");
        mainFrame.setSize(new Dimension(1920,1080));
        mainFrame.setLocationRelativeTo(null);
        mainFrame.setLayout(null);
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // BUILT AND BOUNDS
        num_of_pl_combo = new JComboBox(num_o_p);
        num_of_pl_combo.setBounds(0,20,200,20);
        num_of_pl_combo.addActionListener(this);
        num_of_pl_1.setBounds(0,0,200,20);
      
        text_num_of_pl.setBounds(0,42,200,20);
              
        // PLAYER NAMES
        pl_names.setBounds(220,0,200,20);
        player1.setBounds(220,20,99,20);
        player1_button.setBounds(321,20,58,20);
        player1_conf.setBounds(381,20,29,20);
        player2.setBounds(220,42,99,20);
        player2_button.setBounds(321,42,58,20);
        player2_conf.setBounds(381,42,29,20);
        player3.setBounds(220,64,99,20);
        player3_button.setBounds(321,64,58,20);
        player3_conf.setBounds(381,64,29,20);
        player4.setBounds(220,86,99,20);
        player4_button.setBounds(321,86,58,20);
        player4_conf.setBounds(381,86,29,20);
        player5.setBounds(220,108,99,20);
        player5_button.setBounds(321,108,58,20);
        player5_conf.setBounds(381,108,29,20);
        player6.setBounds(220,130,99,20);
        player6_button.setBounds(321,130,58,20);
        player6_conf.setBounds(381,130,29,20);
        player7.setBounds(220,152,99,20);
        player7_button.setBounds(321,152,58,20);
        player7_conf.setBounds(381,152,29,20);
        player8.setBounds(220,174,99,20);
        player8_button.setBounds(321,174,58,20);
        player8_conf.setBounds(381,174,29,20);
      
        player1_button.addActionListener(new ActionListener() {
          
            @Override
            public void actionPerformed(ActionEvent arg0) {
                String p1 = player1.getText();
                player_names[0] = p1;
                player1_conf.setText("OK");
                player1_nm.setText(p1);
            }
        });
      
        player2_button.addActionListener(new ActionListener() {
          
            @Override
            public void actionPerformed(ActionEvent arg0) {
                String p2 = player2.getText();
                player_names[1] = p2;
                player2_conf.setText("OK");
                player2_nm.setText(p2);
            }
        });
      
        player3_button.addActionListener(new ActionListener() {
          
            @Override
            public void actionPerformed(ActionEvent arg0) {
                String p3 = player3.getText();
                player_names[2] = p3;
                player3_conf.setText("OK");
                player3_nm.setText(p3);
            }
        });
      
        player4_button.addActionListener(new ActionListener() {
          
            @Override
            public void actionPerformed(ActionEvent arg0) {
                String p4 = player4.getText();
                player_names[3] = p4;
                player4_conf.setText("OK");
                player4_nm.setText(p4);
            }
        });
      
        player5_button.addActionListener(new ActionListener() {
          
            @Override
            public void actionPerformed(ActionEvent arg0) {
                String p5 = player5.getText();
                player_names[4] = p5;
                player5_conf.setText("OK");
                player5_nm.setText(p5);
            }
        });
      
        player6_button.addActionListener(new ActionListener() {
          
            @Override
            public void actionPerformed(ActionEvent arg0) {
                String p6 = player6.getText();
                player_names[5] = p6;
                player6_conf.setText("OK");
                player6_nm.setText(p6);
            }
        });
      
        player7_button.addActionListener(new ActionListener() {
          
            @Override
            public void actionPerformed(ActionEvent arg0) {
                String p7 = player7.getText();
                player_names[6] = p7;
                player7_conf.setText("OK");
                player7_nm.setText(p7);
            }
        });
      
        player8_button.addActionListener(new ActionListener() {
          
            @Override
            public void actionPerformed(ActionEvent arg0) {
                String p8 = player8.getText();
                player_names[7] = p8;
                player8_conf.setText("OK");
                player8_nm.setText(p8);
            }
        });
      
        // SMALL BLIND
        small_b.setBounds(440,0,200,20);
        small_b_input.setBounds(440,20,99,20);
        small_b_output.setBounds(440,42,99,20);     
        small_b_button.setBounds(541,20,99,20);
        small_b_conf.setBounds(541,42,99,20);
      
        small_b_button.addActionListener(new ActionListener() {
          
            @Override
            public void actionPerformed(ActionEvent arg0) {
                String input_sb = small_b_input.getText();
                small_b_output.setText(input_sb);
                int small_blind = Integer.parseInt(input_sb);
                if (small_blind >0) {
                    small_b_conf.setText("OK"); 
                }
                else if (small_blind <= 0) {
                    small_b_conf.setText("Raise"); 
                }
            }
        });
      
        // BIG BLIND
        big_b.setBounds(660,0,200,20);
        big_b_input.setBounds(660,20,99,20);
        big_b_output.setBounds(660,42,99,20);
        big_b_button.setBounds(761,20,99,20);
        big_b_conf.setBounds(761,42,99,20);
      
        big_b_button.addActionListener(new ActionListener() {
          
            @Override
            public void actionPerformed(ActionEvent arg0) {
                String input_bb = big_b_input.getText();
                big_b_output.setText(input_bb);
                int big_blind = Integer.parseInt(input_bb);
                if (big_blind >0) {
                    big_b_conf.setText("OK"); 
                }
                else if (big_blind <= 0) {
                    big_b_conf.setText("Raise"); 
                }
            }
        });
      
        // MONEY STACK TO START
        start_stack.setBounds(880,0,200,20);
        start_stack_input.setBounds(880,20,99,20);
        start_stack_output.setBounds(880,42,99,20);
        start_stack_button.setBounds(981,20,99,20);
        start_stack_conf.setBounds(981,42,99,20);
      
        start_stack_button.addActionListener(new ActionListener() {
          
            @Override
            public void actionPerformed(ActionEvent arg0) {
                String start_stack = start_stack_input.getText();
                start_stack_output.setText(start_stack);
                int money_stack = Integer.parseInt(start_stack);
                if (money_stack >0) {
                    start_stack_conf.setText("OK"); 
                }
                else if (money_stack <= 0) {
                    start_stack_conf.setText("Raise"); 
                }
            }
        });
      
        // BALANCES
        balances_pl.setBounds(1100,0,99,20);
        player1_nm.setBounds(1100,20,99,20);
        player2_nm.setBounds(1100,42,99,20);
        player3_nm.setBounds(1100,64,99,20);
        player4_nm.setBounds(1100,86,99,20);
        player5_nm.setBounds(1100,108,99,20);
        player6_nm.setBounds(1100,130,99,20);
        player7_nm.setBounds(1100,152,99,20);
        player8_nm.setBounds(1100,174,99,20);
        balances.setBounds(1201,0,99,20);
        player1_bal.setBounds(1201,20,99,20);
        player2_bal.setBounds(1201,42,99,20);
        player3_bal.setBounds(1201,64,99,20);
        player4_bal.setBounds(1201,86,99,20);
        player5_bal.setBounds(1201,108,99,20);
        player6_bal.setBounds(1201,130,99,20);
        player7_bal.setBounds(1201,152,99,20);
        player8_bal.setBounds(1201,174,99,20);
      
        // START GAME
        start_game_button.setBounds(1320,20,120,20);
        game_started_conf.setBounds(1320,42,120,20);
      
        start_game_button.addActionListener(new ActionListener() {
          
            @Override
            public void actionPerformed(ActionEvent arg0) {
                game_started_conf.setText("OK");
              
                // ANLEGEN DES MAIN-POTS
                double main_pot = 0;
              
                // ANLEGEN DES SIDE-POTS
                int[] side_pot = new int[number_of_players];
              
                // SCANNER FUER SPIELEREINGABEN ANLEGEN
                Scanner myObj = new Scanner(System.in);
                String command;
                String command_raise;
                  
                // SPIELERKONTEN ANLEGEN
                double[][] k_all = new double [number_of_players][2];
                double pot     = 0;
              
                // MONEY-STACK IN SPIELERKONTEN REINSCHREIBEN
                for (int i=0; i<(number_of_players); i++) {
                    k_all[i][0] = money_stack;
                }
                String number = String.valueOf(money_stack);
                player1_bal.setText(number);
                player2_bal.setText(number);
                player3_bal.setText(number);
                player4_bal.setText(number);
                player5_bal.setText(number);
                player6_bal.setText(number);
                player7_bal.setText(number);
                player8_bal.setText(number);
              
                // ERMITTELN DER GEWINNSUMME (pot)
                pot = money_stack*number_of_players;
                System.out.println();
                System.out.println("Maximum winnings is " + pot +"$.");
                System.out.println();
              
              
            }
        });
      
      
        //ADD OPERATIONS
        mainFrame.add(num_of_pl_combo);
        mainFrame.add(num_of_pl_1);
        mainFrame.add(num_of_pl_2);
        mainFrame.add(text_num_of_pl);
        mainFrame.add(pl_names);
        mainFrame.add(player1);
        mainFrame.add(player2);
        mainFrame.add(player3);
        mainFrame.add(player4);
        mainFrame.add(player5);
        mainFrame.add(player6);
        mainFrame.add(player7);
        mainFrame.add(player8);
        mainFrame.add(player1_button);
        mainFrame.add(player2_button);
        mainFrame.add(player3_button);
        mainFrame.add(player4_button);
        mainFrame.add(player5_button);
        mainFrame.add(player6_button);
        mainFrame.add(player7_button);
        mainFrame.add(player8_button);
        mainFrame.add(player1_conf);
        mainFrame.add(player2_conf);
        mainFrame.add(player3_conf);
        mainFrame.add(player4_conf);
        mainFrame.add(player5_conf);
        mainFrame.add(player6_conf);
        mainFrame.add(player7_conf);
        mainFrame.add(player8_conf);
        mainFrame.add(small_b);
        mainFrame.add(small_b_input);
        mainFrame.add(small_b_output);
        mainFrame.add(small_b_button);
        mainFrame.add(small_b_conf);
        mainFrame.add(big_b);
        mainFrame.add(big_b_input);
        mainFrame.add(big_b_output);
        mainFrame.add(big_b_conf);
        mainFrame.add(big_b_button);
        mainFrame.add(start_stack);
        mainFrame.add(start_stack_input);
        mainFrame.add(start_stack_output);
        mainFrame.add(start_stack_conf);
        mainFrame.add(start_stack_button);
        mainFrame.add(balances_pl);
        mainFrame.add(player1_nm);
        mainFrame.add(player2_nm);
        mainFrame.add(player3_nm);
        mainFrame.add(player4_nm);
        mainFrame.add(player5_nm);
        mainFrame.add(player6_nm);
        mainFrame.add(player7_nm);
        mainFrame.add(player8_nm);
        mainFrame.add(balances);
        mainFrame.add(player1_bal);
        mainFrame.add(player2_bal);
        mainFrame.add(player3_bal);
        mainFrame.add(player4_bal);
        mainFrame.add(player5_bal);
        mainFrame.add(player6_bal);
        mainFrame.add(player7_bal);
        mainFrame.add(player8_bal);
        mainFrame.add(start_game_button);
        mainFrame.add(game_started_conf);
      
        //System.out.println(number_of_players);
        mainFrame.setVisible(true);
  
    }

    public static int onClick(int number_of_players) {
        Integer.toString(number_of_players);
        String text = Integer.toString(number_of_players);
        text_num_of_pl.setText("Okay, you chose " + text + " players.");
        //System.out.println("Okay, you chose " + number_of_players + " players.");
        //System.out.println(number_of_players);
        player_names       = new String [3*number_of_players]  ;
        return number_of_players;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        number_of_players = (int) num_of_pl_combo.getSelectedItem();
        onClick(number_of_players);
    } 
}
 

fhoffmann

Top Contributor
Zuletzt bearbeitet:

mihe7

Top Contributor
Könnte das jemand mal bei sich einladen und das Ding bewerten?
Ich finde das eigentlich erst mal gar nicht so schlecht. Das Ding tut, was es soll.
Die Frage wäre nur, ob man das irgendwie besser anordnen/sortieren/etc. könnte. Oder ob man das generell "TOTAL ANDERS" machen würde.

Ganz grundsätzlich sollte man sich an die Benennungskonventionen von Java halten (Unterstriche bei Paketnamen und Konstanten sind ok, sonst nicht). Unabhängig davon: sollte "_Beta" auf eine Beta-Version hindeuten, hat das nichts im Klassennamen verloren. Willst Du wirklich die Klassennamen ändern, weil Du eine Version änderst?

Game_Beta ist eine God-Class: die ist Logik und UI gleichzeitig und zwar für alles, kümmert sich um Dein Hauptfenster, erbt aber auch von JComboBox (warum auch immer) und ist nebenbei noch ein ActionListener. Auch das kann man trennen.

Nebenbei resultieren diese "Ich mach alles Klassen" in Variablennamen wie:
Code:
num_o_p
num_of_pl_combo
num_of_pl_2
text_num_of_pl
num_of_pl_1
number_of_players

Wozu statische Variablen? Das Schlüsselwort static braucht man in der Regel nur für main, Konstanten und Methoden, die ohne Instanzen auskommen. Das Initialisieren der Arrays mit 3*number_of_players ist nicht ganz klar, denn number_of_players ist an der Stelle 0.

Don't repeat yourself (DRY): was @fhoffmann schon geschrieben hat.

Eingabefehler werden nicht abgefangen, sondern resultieren in einer Exception.

Dank des null-Layouts ist das Spiel auf kleineren Bildschirmen nicht spielbar. Darüber könnte man bei einem Spiel ja noch hinwegsehen, wenn es denn einen Sinn ergäbe. Hier ist aber einfach eine tabellarische Anordnung von Ein- und Ausgabefeldern zu sehen. Soll da noch was kommen?

Für Ausgaben werden editierbare Textareas verwendet. Wozu?

Dann gibt es im Code völlig überflüssige Zeilen (insbesondere lokale Arrays oder Objekte, die überhaupt nicht verwendet werden). Dann sieht man einen Scanner und Konsolenausgaben. Ist das evtl. der Versuch, ein GUI an ein Konsolenspiel anzubinden?

Und warum um alles in der Welt heißt die Methode nop?!? :)

Hm... Du solltest nochmal von vorne anfangen und das GUI hinten anstellen. Konzentriere Dich auf die Logik des Spiels und seine Objekte. Das dürfte sich bislang noch im Rahmen bewegen, wenn ich es richtig sehe.
 

oppaernst

Mitglied
@mihe7 ja genau da kommt noch einiges, was ich aber bereits in der Hinterhand habe. Das ist erst mal ein Anfang der Visualisierung einer reinen Syntax für das Spiel, das ich bereits vollständig programmiert habe.

Danke aber für die Tipps, die werde ich versuchen, zu beherzigen. Irgendwo muss man ja anfangen und da ich nicht sofort alles richtig machen kann, muss ich zwangsläufig immer wieder Dinge verbessern. Das Problem ist ja auch, dass es jeder -egal wen man fragt- immer irgendwie anders machen würde. Deshalb muss man, wenn man keine Ahnung von Java hat, auch mal irgendwann in eine Richtung loslaufen.
 
Zuletzt bearbeitet:

mihe7

Top Contributor
Irgendwo muss man ja anfangen und da ich nicht sofort alles richtig machen kann, muss ich zwangsläufig immer wieder Dinge verbessern.
Das ist ganz normal.

Das Problem ist ja auch, dass es jeder -egal wen man fragt- immer irgendwie anders machen würde.
Viele Wege führen nach Rom :) Es gibt aber schon ein paar Grundsätze, wie z. B. unnötige Wiederholungen im Code oder überflüssigen Code, die praktisch immer gelten. Im OO-Bereich hat z. B. static kaum etwas verloren und die Aufteilung der Probleme ist eine andere als bei prozeduralen oder funktionalen Ansätzen.
 

temi

Top Contributor
Oder ob man das generell "TOTAL ANDERS" machen würde.
Tendenziell geht es in diese Richtung...

Total anders, in dem Sinne, wie auch schon mehrfach gesagt wurde, das es Klassen für die Spiellogik geben sollten, die NICHTS mit der UI zu tun haben (in welcher Form auch immer, ob Konsole oder grafisch). Darauf greifen dann die UI-Klassen zurück, die in Folge dessen NICHTS mit der Spiellogik zu tun haben.
 

M.L.

Top Contributor
Weiterhin kann man in der GUI (eher sinnfreie) Eingaben tätigen, z.B.
-ist der Big Blind idR das doppelte des Small Blind
-"Balance[$]" sollte wohl nur eine Zeile sein
-Spieler müssen keinen Namen haben
-"Stack to Start" hat keine Auswirkung auf "Balance[$]"...
-Eingaben werden nicht auf ganze Zahlen oder Buchstaben überprüft
-...
 

Programmer20

Mitglied
Das ist ganz normal.


Viele Wege führen nach Rom :) Es gibt aber schon ein paar Grundsätze, wie z. B. unnötige Wiederholungen im Code oder überflüssigen Code, die praktisch immer gelten. Im OO-Bereich hat z. B. static kaum etwas verloren und die Aufteilung der Probleme ist eine andere als bei prozeduralen oder funktionalen Ansätzen.
je übersichtlicher und klarer Strukturiert der Code, desto besser. So tut man sich im Nachhinein leichter, falls man doch noch etwas ändern will..
 

Neue Themen


Oben