Simpelt blackjack spel Java (OO baserat)

Permalänk

Simpelt blackjack spel Java (OO baserat)

Hej,

Försöker få polletten med OO programmeringar att trilla ner. Har bestämt mig för att göra ett simpelt blackjack spel som skall använda sig av flera olika klasser. Jag har börjat skissa lite på "designen" och har kommit fram till att jag behöver dessa klasser:

Mainklassen - Där jag kör själva spelet och gör anrop ifrån.
Funktionklassen - Där finns metoder som t.ex: boolean IsBust() som kollar ifall någon har >21 i handen. Här finns också hit() som helt enkelt ger spelaren ett till kort.
PlayerKlassen - Där ska det finnas någon identifier såsom spelarNamn. Möjligtvis createPlayer()?

Är det något mer jag behöver eller något jag bör tänka på? Möjligtvis en spelarhand som kan kopplas till spelare? Värt att nämna är att mina kort endast kommer ha värdet 2-11!

Tips på nybörjarprojekt som du gjorde under din läkningsprocess mottages gärna!

Permalänk
Medlem

I min värld så borde all logik för spelaren ligga i player-klassen, t.ex saker som IsBust() eller Hit()
Player-klassen hade också haft en lista med kort som är dom korten som den spelaren hade fått.

Den där "funktions-klassen" vet jag inte hur du hade tänkt att använda men det låter lite som att du hade tänkt samla all logik där, vilket *jag tycker* är fel.

Visa signatur

-- Arkade --

Permalänk

@Arkade:

Hmm du har förmodligen rätt. Anledningen varför jag ville placera alla funktioner relaterade till spelet i en och samma klass var för att skapa struktur. Det jag tänkte var att om playerX vill ta ett nytt kort så anropas hit() från funktions-klassen till main-klassen. Vid anrop ska playerX nya kort läggas till i ArrayList som är kopplad till enbart playerX.

Vad är anledningen varför man vill placera dessa funktioner i player-klassen?

Permalänk
Medlem

Tycker att funktionsklassen känns onödig att ha. Om vi kallar Mainklassen för Game så har vi Game och Player.

Gameklassen kan då bestå av två listor, List<Card> med den blandade kortleken, och List<Player> med alla spelare. Ta ett kort från listan med kort, ge det till en spelare (player.addCard(card) typ) och sen kan du kolla om det gick bra med player.isBust().

På det sättet får du en bra uppdelning, allt som rör den individuella spelaren (dennes kort, summan, etc) finns i Playerklassen, och i Game hittar du det som knyter samman spelet. Det känns, i alla fall för mig, mest logiskt att placera det så.

Permalänk
Medlem

Du vill nog också ha en klass för ett kort, samt eventuellt en för leken som kan shuffla sina kort och hämta nästa.

Visa signatur

Redbox: Asrock B650 Lightning ATX, 7800x3D -20CCO, XFX 6950XT, 2x32GB Corsair Vengence 6400 CL32, WD SN770 2TB, Corsair RMe 1000, Lian Li Lancool 216, Peerless Assassin 120 SE
Purpbox: Z87-Pro, I5 4670K@4.2, Sapphire 290 TRI-X, 2x8GB Crucial Tactical@stock, Deep Silence 1
Samsung Evo 250+500GB + QVO 1TB, 2x1TB 7200RPM backup/lagring
Det var bättre förr: E5300 2600MHz -> 3640MHz, Celeron 300A -> 450MHz

Permalänk
Keeper of Traditions
Skrivet av lodarletarn:

@Arkade:

Hmm du har förmodligen rätt. Anledningen varför jag ville placera alla funktioner relaterade till spelet i en och samma klass var för att skapa struktur. Det jag tänkte var att om playerX vill ta ett nytt kort så anropas hit() från funktions-klassen till main-klassen. Vid anrop ska playerX nya kort läggas till i ArrayList som är kopplad till enbart playerX.

Vad är anledningen varför man vill placera dessa funktioner i player-klassen?

Oftast är det väl saker och ting som man hade kunnat ta på i verkligheten som blir till objekt. Spelare, kort, kortlek osv... Har man en klass enbart för att samla en mängd funktioner så går man ifrån det objektorienterade tänket, i alla fall så som jag lärt mig tänka.

Funktioner som agerar på en klass, brukar väl vara del av den klassen. Inkapsulering, och så vidare:
https://stackify.com/oop-concept-for-beginners-what-is-encaps...

Visa signatur

|| Intel 8700K || Asus RTX 4070 TI Super TUF || Samsung 750 EVO 500GB & Kingston A2000 1TB & Samsung 960 EVO 250GB || Corsair RM 850x || Antec P183 || Asus G-Sync RoG Swift PG279Q || Dell XPS 15 || Thinkpad X220

The Force is like Duct Tape, it has a light side, a dark side, and holds the universe together.

Permalänk

@Dunder:

Låter logiskt när du väl säger det!

Tack för alla svar. Väldigt hjälpsamma! @everyone

Permalänk

@WreXlaM:

Tycker du att jag kan lägga till en klass som heter "Kort" samt en lista i spelarklassen som håller <Kort>?

Permalänk
Medlem
Skrivet av lodarletarn:

@WreXlaM:

Tycker du att jag kan lägga till en klass som heter "Kort" samt en lista i spelarklassen som håller <Kort>?

Helt rätt! Och en lista i Gameklassen också som innehåller korten som är kvar.

Skickades från m.sweclockers.com