+ Antworten
Ergebnis 1 bis 6 von 6

Programm-Programmierungs Frage (Java)

Eine Diskussion über Programm-Programmierungs Frage (Java) im Forum Technik Ecke. Teil des Off Topic-Bereichs; Hey Leute ich bin gerade mal wieder dabei mein kleines PokerProgramm voran zu treiben und hab gerade ein Problem und ...

  1. #1

    Programm-Programmierungs Frage (Java)

    Hey Leute

    ich bin gerade mal wieder dabei mein kleines PokerProgramm voran zu treiben und hab gerade ein Problem und weiss nicht ob ich optimal Lösen würde.... ich habe 2 Comboboxen mit jeweils 13 Einträgen ca. und dazu eine Checkbox und nun will ich für jede Combo die zwischen den 2 Comboboxen und der Checkbox möglich ist ein "Event" machen ... muss ich jetzt alle möglichen Kombis mit IF- durchgehen ... oder gibts da ne besser Möglichkeit.... atm hab ich die ComboBoxen mit "Strings" gefüllt.... aber nen Kumpel meinte zu mir, dass ich das eher mit MVC machen soll... ich weiss aber leider nicht genau wodrauf er genau hinaus will

    danke schonmal im vorraus

  2. #2
    MVC steht für Model View Controller und ist ein Architekturmuster, welches eine brauchbare Aufteilung eines Quelltextes definiert.

    Man trennt somit die reinen Daten (z.B. in einer Datenbank - Model / Modell) von der Darstellung (z.B. dem Form - View / Präsentation ) und von dem steuernden Programm (deine Java Klassen etc. - Controller / Steuerung).

    Zusätzlich definiert man noch, wer wie mit wem Sprechen darf.


    Die Steuerung darf also sowohl die Präsentation, als auch das Modell direkt ansprechen.
    Die Präsentation darf nur das Modell direkt ansprechen, kann jedoch ein Event auslösen, womit die Steuerung angesprochen wird.
    Und das Modell kann zuletzt ein Event auslösen, womit die Präsentation angesprochen wird, um die Anzeige zu aktualisieren.


    Warum er dir dies rät kann ich dir jedoch nicht beantworten, solange ich deinen Quelltext nicht gesehen habe und nicht weiß, was dein Programm macht.
    Je nachdem was du nun umsetzen willst ist es sinnvoller die Daten in das Modell oder in die Präsentation zu schreiben.

    Alle möglichen Kombinationen könntest du durch viele IF-Anweisungen prüfen, jedoch könnte es auch sehr gut sein, dass dein Problem eine deutlich generischere Lösung zulässt. Dazu müssen wir aber wie gesagt schon etwas mehr zum eigentlich Programm wissen.
    Aufgabe + Quelltext wäre ein Anfang.

  3. #3
    also viel Quelltext hab ich noch net erstmal nur die Swing gebaut ... also ich wollte das so machen, dass ich 2 Comboboxen mit Karten von 2 - Ass jeweils habe und eine Checkbox wo ich Suited ankreuzen kann ... und dann soll er mir zu der jeweiligen Hand ein System ausgeben wie ich spielen soll welches er z.b. in einem Textfeld ausgibt ... und ich müsste jetzt halt jede Mögliche Kombination der beiden Comboboxen untereinander und mit der Checkbox überprüfen wobei ich eigentl. nicht überprüfungen muss J 5 oder 5 J is ja egal

  4. #4
    StyleLiga 1 Style
    Avatar von StyleLiga
    Registriert seit
    21.02.2003
    Ort
    Hildesheim
    Alter
    29
    Beiträge
    3.103
    Nick
    -
    Clans
    OKTRON
    abgesehen davon, dass ichs total hohl finde, sowas zu programmieren:

    1. mvc hat nichts mit deinem probelm zu tun
    2. wenn du für jede kombination eine exakte vorher definierte ansage haben willst musst du die kombinationen differenzieren
    -> ich würde entweder ein komplexes bewertungssystem für karten oder intervalle definieren.
    ne schönere lösung fällt mir nicht ein
    Sonette find ich sowas von beschissen,hat heute noch son'n dumpfen Scheiß zu bauen;Darüber, dass so'n abgefuckter KackerIch tick nicht, was das Arschloch motiviert.
    so eng, rigide, irgendwie nicht gut;allein der Fakt, dass so ein Typ das tut,Mich mittels seiner Wichserein blockiert,Ich tick es nicht. Und will's echt nicht wissen:
    es macht mich ehrlich krank zu wissen,kann mir echt den ganzen Tag versauen.schafft in mir Agressionen auf den Macker.Ich find Sonette unheimlich beschissen.
    dass wer Sonette schreibt. Dass wer den MutIch hab da eine Sperre. Und die Wut 
    Robert Gernhardt

  5. #5
    Ich habe mal ein paar grundlegende Klassen zusammengetippt (Achtung: Ich habe sie nicht auf Fehler überprüft!).
    Was nun noch fehlt ist eine Klasse, welche die jeweilige Hand angibt und eine, welche die noch möglichen Hände bestimmt.
    Ich denke man sieht recht schnell ein, dass man dabei J 5 und 5 J in einem Zug behandeln kann.

    Alternativ könnte man anstelle von Enum auch Binärwerte nutzen, das würde auch die Erkennung der Hand erleichtern. Jedoch sollte man dann auch Konstanten nutzen um die Lesbarkeit zu erhalten.
    (Im Allg. würde ich dies bevorzugen)

    Ich denke du solltest dich jetzt erstmal an der Klasse versuchen, welche die schon bestehende Hand zum Zeitpunkt X erkennt. Dann sieht man auch besser wo bei dir die Schwierigkeiten liegen und kann dort leichter ansetzen.

    Spoiler:

    1. public class Poker
    2. {
    3. public static void main(String[] args)
    4. {
    5.  
    6. }
    7. }
    1. import java.util.ArrayList;
    2.  
    3. public class Player
    4. {
    5. protected ArrayList<Card> Cards = new ArrayList<Card>();
    6. protected String name;
    7.  
    8. public Player(String name)
    9. {
    10. this.name = name;
    11. }
    12.  
    13. public String getName()
    14. {
    15. return this.name;
    16. }
    17.  
    18. public void addCard(Card card)
    19. {
    20. this.Cards.add(card);
    21. }
    22.  
    23. public ArrayList<Card> getCards()
    24. {
    25. return this.Cards;
    26. }
    27.  
    28. public String toString()
    29. {
    30. return this.getName();
    31. }
    32. }
    1. public class PlayerSelf extends Player
    2. {
    3. public PlayerSelf(String name)
    4. {
    5. super(name);
    6. }
    7. }
    1. public class PlayerOther extends Player
    2. {
    3. public PlayerOther(String name)
    4. {
    5. super(name);
    6. }
    7. }
    1. import java.util.ArrayList;
    2.  
    3. public class CommunityCards
    4. {
    5. protected ArrayList<Card> Cards = new ArrayList<Card>();
    6.  
    7. public void addCard(Card card)
    8. {
    9. this.Cards.add(card);
    10. }
    11.  
    12. public ArrayList<Card> getCards()
    13. {
    14. return this.Cards;
    15. }
    16. }
    1. enum CardSuit
    2. {
    3. DIAMONDS, HEARTS, SPADES, CLUBS
    4. }
    5.  
    6. enum CardRank
    7. {
    8. DEUCE, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE
    9. }
    10.  
    11. public class Card
    12. {
    13. private final CardSuit suit;
    14. private final CardRank rank;
    15.  
    16. public Card(CardSuit suit, CardRank rank)
    17. {
    18. this.suit = suit;
    19. this.rank = rank;
    20. }
    21.  
    22. public CardSuit getSuit()
    23. {
    24. return this.suit;
    25. }
    26.  
    27. public CardRank getRank()
    28. {
    29. return this.rank;
    30. }
    31.  
    32. public String toString()
    33. {
    34. return rank + " of " + suit;
    35. }
    36. }


    //EDIT
    Ich habe mal schnell ein Beispiel hingetippt.
    Die untere Funktion TwoPair bestimmt nun ganz allg. ob man ein TwoPair besitzt.

    1. public class Poker
    2. {
    3. public static void main(String[] args)
    4. {
    5. PlayerSelf self = new PlayerSelf("Osbes");
    6. CommunityCards community = new CommunityCards();
    7. self.addCard(Card.getInstance(Card.Suit.DIAMONDS, Card.Rank.DEUCE));
    8. self.addCard(Card.getInstance(Card.Suit.HEARTS, Card.Rank.DEUCE));
    9. System.out.println(Hand.TwoPair(self, community));
    10.  
    11. PlayerSelf NewSelf = new PlayerSelf("Osbes");
    12. NewSelf.addCard(Card.getInstance(Card.Suit.DIAMONDS, Card.Rank.DEUCE));
    13. NewSelf.addCard(Card.getInstance(Card.Suit.HEARTS, Card.Rank.THREE));
    14. System.out.println(Hand.TwoPair(NewSelf, community));
    15. NewSelf.addCard(Card.getInstance(Card.Suit.DIAMONDS, Card.Rank.FOUR));
    16. NewSelf.addCard(Card.getInstance(Card.Suit.HEARTS, Card.Rank.FIVE));
    17. NewSelf.addCard(Card.getInstance(Card.Suit.HEARTS, Card.Rank.SIX));
    18. NewSelf.addCard(Card.getInstance(Card.Suit.HEARTS, Card.Rank.SEVEN));
    19. NewSelf.addCard(Card.getInstance(Card.Suit.HEARTS, Card.Rank.EIGHT));
    20. NewSelf.addCard(Card.getInstance(Card.Suit.HEARTS, Card.Rank.NINE));
    21. NewSelf.addCard(Card.getInstance(Card.Suit.HEARTS, Card.Rank.TEN));
    22. NewSelf.addCard(Card.getInstance(Card.Suit.HEARTS, Card.Rank.JACK));
    23. NewSelf.addCard(Card.getInstance(Card.Suit.HEARTS, Card.Rank.QUEEN));
    24. NewSelf.addCard(Card.getInstance(Card.Suit.HEARTS, Card.Rank.KING));
    25. NewSelf.addCard(Card.getInstance(Card.Suit.HEARTS, Card.Rank.ACE));
    26. System.out.println(Hand.TwoPair(NewSelf, community));
    27. community.addCard(Card.getInstance(Card.Suit.HEARTS, Card.Rank.DEUCE));
    28. System.out.println(Hand.TwoPair(NewSelf, community));
    29. }
    30. }

    1. import java.util.Map;
    2. import java.util.EnumMap;
    3.  
    4. public class Card
    5. {
    6. private final Suit suit;
    7. private final Rank rank;
    8. private static Map<Suit, Map<Rank, Card>> Deck = new EnumMap<Suit, Map<Rank, Card>>(Suit.class);
    9.  
    10. public enum Suit
    11. {
    12. DIAMONDS,
    13. HEARTS,
    14. SPADES,
    15. CLUBS
    16. }
    17.  
    18. public enum Rank
    19. {
    20. DEUCE,
    21. THREE,
    22. FOUR,
    23. FIVE,
    24. SIX,
    25. SEVEN,
    26. EIGHT,
    27. NINE,
    28. TEN,
    29. JACK,
    30. QUEEN,
    31. KING,
    32. ACE
    33. }
    34.  
    35. static
    36. {
    37. for (Suit suit : Suit.values())
    38. {
    39. Map<Rank, Card> suitDeck = new EnumMap<Rank, Card>(Rank.class);
    40.  
    41. for (Rank rank : Rank.values())
    42. {
    43. suitDeck.put(rank, new Card(suit, rank));
    44. }
    45. Deck.put(suit, suitDeck);
    46. }
    47. }
    48.  
    49. private Card(Suit suit, Rank rank)
    50. {
    51. this.suit = suit;
    52. this.rank = rank;
    53. }
    54.  
    55. public static Card getInstance(Suit suit, Rank rank)
    56. {
    57. return Deck.get(suit).get(rank);
    58. }
    59.  
    60. public Suit getSuit()
    61. {
    62. return this.suit;
    63. }
    64.  
    65. public Rank getRank()
    66. {
    67. return this.rank;
    68. }
    69.  
    70. public String toString()
    71. {
    72. return rank + " of " + suit;
    73. }
    74. }

    1. import java.util.ArrayList;
    2.  
    3. public class Hand
    4. {
    5. public static int CardsToInt(ArrayList<Card> cards)
    6. {
    7. int integer = 0;
    8.  
    9. for(Card card: cards)
    10. {
    11. integer = integer + (int) Math.pow(2, card.getSuit().ordinal() * 13 + card.getRank().ordinal());
    12. }
    13.  
    14. return integer;
    15. }
    16.  
    17. public static boolean TwoPair(PlayerSelf self, CommunityCards community)
    18. {
    19. ArrayList<Card> cards = self.getCards();
    20. cards.addAll(community.getCards());
    21.  
    22. long binary = CardsToInt(cards);
    23.  
    24. while(binary > 0)
    25. {
    26. long diff1 = 1 + ((long) 1<<13);
    27. long diff2 = 1 + ((long) 1<<26);
    28. long diff3 = 1 + ((long) 1<<39);
    29.  
    30. if((binary & diff1) == diff1 || (binary & diff2) == diff2 || (binary & diff3) == diff3)
    31. {
    32. return true;
    33. }
    34.  
    35. binary = binary>>1;
    36. }
    37.  
    38. return false;
    39. }
    40. }

  6. #6
    okay danke schonmal für eure Mühe .... werde mich dem mal annehmen in meinem freien Block

    @Style ... sinnvoll vll. nicht aber ich denk mir öfters mal kleine Programme aus und versuche diese möglichst geschickt umzusetzen ... um in Übung zu bleiben
    aber bei mir funzen meine Programme meistens bloss beim "Geschickt" haperts

    weil ich meintestens zu umständlich,zu einfach oder zu statisch programmiere :P
    Geändert von blackplague (29.09.2009 um 13:40 Uhr)

+ Antworten

Ähnliche Themen

  1. JAVA JTextArena + JScrollPane Frage
    Von blackplague im Forum Technik Ecke
    Antworten: 13
    Letzter Beitrag: 16.06.2009, 10:00
  2. Excel und Java
    Von aveiro messiah im Forum Technik Ecke
    Antworten: 2
    Letzter Beitrag: 26.01.2009, 14:58
  3. Static @ Java
    Von blackplague im Forum Technik Ecke
    Antworten: 2
    Letzter Beitrag: 12.11.2008, 19:18
  4. Java, Javascript und FF
    Von Osbes im Forum Technik Ecke
    Antworten: 8
    Letzter Beitrag: 16.08.2006, 15:16
  5. java prob mit xp??
    Von sunowner im Forum Technik Ecke
    Antworten: 4
    Letzter Beitrag: 25.07.2003, 09:39

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •