Exercise index of this lecture   Alphabetic index   Course home   

Exercises
Collections og streams


11.1   Klassen Kortbunke  

I forlængelse af opgaven om Spillekort fra en tidligere lektion vil vi i denne opgave programmere en klasse Kortbunke, som repræsenterer en bunke af kort. En instans af denne klasse kan bruges til at repræsentere et komplet spil kort ligesom den kan bruges til at repræsentere de kort, en spiller har på hånden.

Ideen med opgaven er at benytte en Java Collection klasse som grundlaget for implementationen. Overvej hvilken, og overvej om en Kortbunke skal udvide/specialisere en Collection klasse, være klient af en Collection klasse, eller blot implementere et Collection interface.

Vi ønsker at at kunne repræsentere en bestemt ordning mellem kortene, således at vi f.eks. kan tale om det øverste kort og det nederste kort.

Følgende operationer skal være mulige på instanser af Kortbunke (hverken flere eller færre):

  • Fjern og returner øverste kort.
  • Læg et nyt kort oven på bunken.
  • Læg et nyt kort nederst i bunken.
  • Returner om bunken er tom
  • Bland bunken tilfældigt.
  • Sorter bunken i 'naturlig orden' (lad os sige ruder før hjerter før klør før spar).
  • Returner en Iterator, som gennemløber kortene i bunken.

Datarepræsentationen skal være privat i klassen.

Det vil være hensigtsmæssigt at have følgende udvalg af konstruktorer:

  • En konstruktor som laver et tomt kortspil.
  • En konstruktor som laver et spil kort med bestemte, givne kort.
  • En konstruktor som laver et komplet spil kort (med 52 kort).

Overvej hvorledes du ønsker at skelne mellem disse tre konstruktorer parametermæssigt.

 

Solution


11.2   Krig - et simpelt kortspil  

I forlængelse af opgaven om Spillekort og opgaven om Kortbunke vil vi i denne opgave programmere en applikation, som anvender et spil kort til at gennemføre et kortspil, som mange børn kalder 'Krig'

Spillet spilles af to spillere. I denne opgave spiller Computeren begge spillere. Der er altså tale om ultimativ effektivisering, idet vi nu kan spille Krig på under et sekund...

Kortene deles ligeligt mellem to spillere. Hver spiller har en bunke kort foran sig. Spillet går ud på at erobre alle modspillerens kort. Spillet forløber således:

Hver spiller tager det øverste kort. Den spiller, som har det største kort vinder begge kort. Vinderen lægger de vundne kort i bunden af sin bunke. Hvis to kort er af samme størrelse er der 'krig'. Hver spiller putter de to ens kort i en pulje, som forstørres med yderligere to kort fra hver spiller (øverst fra bunken). Dernæst sammenlignes de øverste kort fra de to resterende bunker igen, og den spiller der har det største vinder hele puljen. Er der igen lighed gentages krigen, med det resultat at puljen bliver større og større. Den spiller der først mister alle sine kort taber spillet.

Skriv programmet således at der bliver udskrevet et spor af spillet, der fortæller om hver duel og hver krig. Det er en fordel at man løbende kan se hvor mange kort hver spiller har tilbage.

 

Solution


Generated: Monday March 31, 2008, 12:09:20
on the system cs-unix