Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package pgdp.games;
- public class PickSix extends MiniJava {
- // sorting method from the lecture
- public static int[] sort(int[] a) {
- int[] b = new int[a.length];
- for (int i = 0; i < a.length; ++i) {
- // begin of insert
- int j = 0;
- while (j < i && a[i] > b[j]) ++j;
- // end of locate
- for (int k = i - 1; k >= j; --k) b[k + 1] = b[k];
- // end of shift
- b[j] = a[i];
- // end of insert
- }
- return b;
- } // end of sort
- public static void main(String[] args) throws IllegalAccessException {
- // TODO
- int rundenNum=1;
- int card1,card2;
- int[] scores = new int[2];
- int [][] lostCards= new int[2][24]; //jeder Spieler wird maximal 21 Karten bekommen
- int [][] playerCards = new int [2][10];
- int[] [] stapel= new int[4][5];
- givePlayerCards(playerCards);
- //Stapel fuellen
- for (int i=0; i<stapel.length;++i) {
- stapel[i][0]=drawCard();
- }
- while (rundenNum <=10) {
- outputStapel(stapel);
- card1= playerSelectCard(1,playerCards);
- outputStapel(stapel);
- card2 =playerSelectCard(2,playerCards);
- if (card1 <= card2) {
- putCard(stapel, lostCards[0],card1);
- putCard(stapel, lostCards[1],card2);
- }
- else {
- putCard(stapel, lostCards[1],card2);
- putCard(stapel, lostCards[0],card1);
- }
- rundenNum++;
- }
- scores[0]=calculatePoints(lostCards[0]);
- scores[1]=calculatePoints(lostCards[1]);
- outputResult(scores);
- }
- public static void putCard(int[][] stapel, int[] lostCardsPlayer, int card) {
- int pos =lookForPosition(stapel,card);
- //falls die karte nicht auf den stapel gelegt werden kann
- if (pos==-1) {
- fillLostCards(lostCardsPlayer, stapel[0]);
- emptyStapel(stapel[0]);
- stapel[0][0]=card;
- }
- else {
- //falls der Stapel voll ist
- if (numberOfCards(stapel[pos])==5) {
- fillLostCards(lostCardsPlayer, stapel[pos]);
- emptyStapel(stapel[pos]);
- stapel[pos][0]=card;
- }
- else {
- //die karten im stapel nach rechts shiften
- for (int i=4; i>=1; --i) {
- stapel[pos][i]=stapel[pos][i-1];
- }
- stapel[pos][0]=card;
- }
- }
- }
- //Sucht die Position der neuen Karte und gibt -1 zurück falls die Karte auf den Stapel nicht gelegt werden kann.
- public static int lookForPosition(int[][] stapel , int card) {
- int position=-1;
- int diff=0;
- //bestimmt ob es ueberhaupt eine karte gibt, die kleiner als unsere karte ist
- for (int i=0; i<stapel.length;++i) {
- if ((card - stapel[i][0])>0) {
- position=i;
- diff= card -stapel[i][0];
- break;
- }
- }
- //wenn es keine strikt kleinere karte gibt
- if (diff==0) return -1;
- //sucht die minimale Differenz
- for (int i=0; i<stapel.length;++i) {
- if ((card - stapel[i][0])>0 && (card -stapel[i][0])<diff) {
- position=i;
- diff= card -stapel[i][0];
- }
- }
- return position;
- }
- //fuellt das Array lostCards mit den verlorenen Karten aus dem Stapel
- public static void fillLostCards(int[] lostCards, int[] stapel) {
- int freePos=0;
- //sucht die erste freie Position im Array lostCards
- for (int i=0; i<lostCards.length; ++i) {
- if (lostCards[i] ==0)
- break;
- ++freePos;
- }
- //das Array fuellen
- for (int i=freePos; i<freePos+stapel.length; ++i) {
- lostCards[i]=stapel[i-freePos];
- }
- }
- //alle karten vom stapel entfernen
- public static void emptyStapel(int[]stapel) {
- for (int i=0; i<stapel.length;++i) {
- stapel[i]=0;
- }
- }
- //zählt wie viele Karten im Array gibt
- public static int numberOfCards(int[] stapel) {
- int num=0;
- for (int i=0; i<stapel.length;++i) {
- if (stapel[i]!=0)
- ++num;
- }
- return num;
- }
- //die Methoden die in der uebung genannt wurden
- public static void outputStapel(int[][] stapel) {
- // TODO
- for (int i=0; i< stapel.length;++i) {
- writeConsole("Stapel "+(i+1)+":");
- for (int j=0; j<stapel[i].length;++j) {
- if (stapel[i][j]<=0)
- break;
- writeConsole(" "+stapel[i][j]);
- }
- write("");
- }
- }
- public static int playerSelectCard(int player, int[][] playerCards) {
- // TODO
- int wahl;
- boolean cardExists= false;
- //Die Karten des Spielers in einem String
- String s= new String("Spieler "+player+", du hast die folgenden Karten:");
- for (int j=0; j<playerCards[player-1].length;++j) {
- if (playerCards[player-1][j]!=0) {
- s+=" "+playerCards[player-1][j];
- }
- }
- do {
- write(s);
- wahl =readInt("Welche Karte möchtest du ausspielen?");
- if (wahl==0) continue;
- for (int i=0; i<playerCards[player-1].length;++i)
- if(playerCards[player-1][i]==wahl) {
- cardExists= true;
- playerCards[player-1][i]=0;
- break;
- }
- }
- while(!cardExists);
- return wahl;
- }
- public static int calculatePoints(int[] lostCards) {
- // TODO
- int points=0;
- for (int i=0; i<lostCards.length; ++i)
- points+= getValueOfCard(lostCards[i]);
- return points;
- }
- public static void outputResult(int[] playerPoints) {
- // TODO
- if (playerPoints[0]>playerPoints[1])
- write("Spieler 2 gewinnt mit "+playerPoints[1]+" gegen Spieler 1 mit "+playerPoints[0]+" Punkten.");
- else if (playerPoints[0]<playerPoints[1])
- write ("Spieler 1 gewinnt mit "+playerPoints[0]+" gegen Spieler 2 mit "+playerPoints[1]+" Punkten.");
- else write("Unentschieden! Beide Spieler haben 42 Punkte.");
- }
- public static int getValueOfCard(int card) {
- // TODO
- if (card == 0)
- return 0;
- int value=1;
- if (card % 5 ==0) {
- value++;
- if (card % 10 ==0)
- value++;
- }
- if (schnappzahl(card) == true ) {
- value+=5;
- }
- return value;
- }
- //bestimmt ob eine Zahl eine schnappzahl ist
- public static boolean schnappzahl(int zahl) {
- if (zahl<=10)
- return false;
- boolean b=true;
- while (zahl>=10 && b==true) {
- if (((zahl % 10) != ((zahl /10) %10)))
- b=false;
- zahl/=10;
- }
- return b;
- }
- public static void givePlayerCards(int[][] playerCards) throws IllegalAccessException {
- // TODO
- for (int i=0; i< playerCards.length;++i) {
- for (int j=0; j<playerCards[i].length;++j) {
- playerCards[i][j]=drawCard();
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement