Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.25 KB | None | 0 0
  1. package pgdp.games;
  2.  
  3. public class PickSix extends MiniJava {
  4.   // sorting method from the lecture
  5.   public static int[] sort(int[] a) {
  6.     int[] b = new int[a.length];
  7.     for (int i = 0; i < a.length; ++i) {
  8.       // begin of insert
  9.       int j = 0;
  10.       while (j < i && a[i] > b[j]) ++j;
  11.       // end of locate
  12.       for (int k = i - 1; k >= j; --k) b[k + 1] = b[k];
  13.       // end of shift
  14.       b[j] = a[i];
  15.       // end of insert
  16.     }
  17.     return b;
  18.   } // end of sort
  19.  
  20.   public static void main(String[] args) throws IllegalAccessException {
  21.     // TODO
  22.       int rundenNum=1;
  23.       int card1,card2;
  24.       int[] scores = new int[2];
  25.       int [][] lostCards= new int[2][24]; //jeder Spieler wird maximal 21 Karten bekommen
  26.       int [][] playerCards = new int [2][10];
  27.       int[] [] stapel= new int[4][5];
  28.       givePlayerCards(playerCards);
  29.      
  30.       //Stapel fuellen
  31.       for (int i=0; i<stapel.length;++i) {
  32.           stapel[i][0]=drawCard();
  33.       }
  34.       while (rundenNum <=10) {
  35.           outputStapel(stapel);
  36.           card1= playerSelectCard(1,playerCards);
  37.           outputStapel(stapel);
  38.           card2 =playerSelectCard(2,playerCards);
  39.           if (card1 <= card2) {
  40.               putCard(stapel, lostCards[0],card1);
  41.               putCard(stapel, lostCards[1],card2);
  42.           }
  43.           else {
  44.               putCard(stapel, lostCards[1],card2);
  45.               putCard(stapel, lostCards[0],card1);
  46.           }
  47.           rundenNum++;
  48.       }
  49.       scores[0]=calculatePoints(lostCards[0]);
  50.       scores[1]=calculatePoints(lostCards[1]);
  51.       outputResult(scores);
  52.   }
  53.   public static void putCard(int[][] stapel, int[] lostCardsPlayer, int card) {
  54.       int pos =lookForPosition(stapel,card);
  55.       //falls die karte nicht auf den stapel gelegt werden kann
  56.       if (pos==-1) {
  57.           fillLostCards(lostCardsPlayer, stapel[0]);
  58.           emptyStapel(stapel[0]);
  59.           stapel[0][0]=card;
  60.       }
  61.       else {
  62.           //falls der Stapel voll ist
  63.           if (numberOfCards(stapel[pos])==5) {
  64.               fillLostCards(lostCardsPlayer, stapel[pos]);
  65.               emptyStapel(stapel[pos]);
  66.               stapel[pos][0]=card;
  67.           }
  68.           else {
  69.               //die karten im stapel nach rechts shiften
  70.               for (int i=4; i>=1; --i) {
  71.                   stapel[pos][i]=stapel[pos][i-1];
  72.               }
  73.               stapel[pos][0]=card;
  74.           }
  75.       }
  76.   }
  77.   //Sucht die Position der neuen Karte und gibt -1 zurück falls die Karte auf den Stapel nicht gelegt werden kann.
  78.   public static int lookForPosition(int[][] stapel , int card) {
  79.       int position=-1;
  80.       int diff=0;
  81.       //bestimmt ob es ueberhaupt eine karte gibt, die kleiner als unsere karte ist
  82.       for (int i=0; i<stapel.length;++i) {
  83.           if ((card - stapel[i][0])>0) {
  84.               position=i;
  85.               diff= card -stapel[i][0];
  86.               break;
  87.           }
  88.       }
  89.       //wenn es keine strikt kleinere karte gibt
  90.       if (diff==0) return -1;
  91.       //sucht die minimale Differenz
  92.       for (int i=0; i<stapel.length;++i) {
  93.           if ((card - stapel[i][0])>0 && (card -stapel[i][0])<diff) {
  94.               position=i;
  95.               diff= card -stapel[i][0];
  96.           }
  97.       }
  98.       return position;
  99.   }
  100.  
  101.   //fuellt das Array lostCards mit den verlorenen Karten aus dem Stapel
  102.   public static void fillLostCards(int[] lostCards, int[] stapel) {
  103.       int freePos=0;
  104.       //sucht die erste freie Position im Array lostCards
  105.       for (int i=0; i<lostCards.length; ++i) {
  106.           if (lostCards[i] ==0)
  107.               break;
  108.           ++freePos;
  109.       }
  110.       //das Array fuellen
  111.       for (int i=freePos; i<freePos+stapel.length; ++i) {
  112.           lostCards[i]=stapel[i-freePos];
  113.       }
  114.   }
  115.   //alle karten vom stapel entfernen
  116.   public static void emptyStapel(int[]stapel) {
  117.       for (int i=0; i<stapel.length;++i) {
  118.           stapel[i]=0;
  119.       }
  120.   }
  121.  
  122.   //zählt wie viele Karten im Array gibt
  123.   public static int numberOfCards(int[] stapel) {
  124.       int num=0;
  125.       for (int i=0; i<stapel.length;++i) {
  126.           if (stapel[i]!=0)
  127.               ++num;
  128.       }
  129.       return num;
  130.   }
  131.  
  132.  
  133.  //die Methoden die in der uebung genannt wurden
  134.  
  135.   public static void outputStapel(int[][] stapel) {
  136.     // TODO
  137.       for (int i=0; i< stapel.length;++i) {
  138.           writeConsole("Stapel "+(i+1)+":");
  139.           for (int j=0; j<stapel[i].length;++j) {
  140.               if (stapel[i][j]<=0)
  141.                   break;
  142.              
  143.               writeConsole(" "+stapel[i][j]);
  144.           }
  145.           write("");
  146.       }  
  147.     }
  148.  
  149.  
  150.   public static int playerSelectCard(int player, int[][] playerCards) {
  151.     // TODO
  152.       int wahl;
  153.       boolean cardExists= false;
  154.       //Die Karten des Spielers in einem String
  155.       String s= new String("Spieler "+player+", du hast die folgenden Karten:");
  156.       for (int j=0; j<playerCards[player-1].length;++j) {
  157.           if (playerCards[player-1][j]!=0) {
  158.              s+=" "+playerCards[player-1][j];
  159.           }
  160.       }
  161.       do {
  162.           write(s);
  163.           wahl =readInt("Welche Karte möchtest du ausspielen?");
  164.           if (wahl==0) continue;
  165.           for (int i=0; i<playerCards[player-1].length;++i)
  166.               if(playerCards[player-1][i]==wahl) {
  167.                   cardExists= true;
  168.                   playerCards[player-1][i]=0;
  169.                   break;
  170.               }
  171.       }
  172.       while(!cardExists);
  173.     return wahl;
  174.   }
  175.  
  176.   public static int calculatePoints(int[] lostCards) {
  177.     // TODO
  178.       int points=0;
  179.       for (int i=0; i<lostCards.length; ++i)
  180.           points+= getValueOfCard(lostCards[i]);
  181.     return points;
  182.   }
  183.  
  184.   public static void outputResult(int[] playerPoints) {
  185.     // TODO
  186.       if (playerPoints[0]>playerPoints[1])
  187.           write("Spieler 2 gewinnt mit "+playerPoints[1]+" gegen Spieler 1 mit "+playerPoints[0]+" Punkten.");
  188.       else if (playerPoints[0]<playerPoints[1])
  189.           write ("Spieler 1 gewinnt mit "+playerPoints[0]+" gegen Spieler 2 mit "+playerPoints[1]+" Punkten.");
  190.       else write("Unentschieden! Beide Spieler haben 42 Punkte.");
  191.   }
  192.  
  193.   public static int getValueOfCard(int card) {
  194.     // TODO
  195.       if (card == 0)
  196.           return 0;
  197.       int value=1;
  198.       if (card % 5 ==0) {
  199.           value++;
  200.           if (card % 10 ==0)
  201.               value++;
  202.       }
  203.       if (schnappzahl(card) == true ) {
  204.           value+=5;
  205.       }
  206.     return value;
  207.   }
  208.   //bestimmt ob eine Zahl eine schnappzahl ist
  209.   public static boolean schnappzahl(int zahl) {
  210.       if (zahl<=10)
  211.           return false;
  212.       boolean b=true;
  213.       while (zahl>=10 && b==true) {
  214.           if (((zahl % 10) != ((zahl /10) %10)))
  215.               b=false;
  216.           zahl/=10;
  217.       }
  218.       return b;
  219.   }
  220.  
  221.   public static void givePlayerCards(int[][] playerCards) throws IllegalAccessException {
  222.     // TODO
  223.       for (int i=0; i< playerCards.length;++i) {
  224.           for (int j=0; j<playerCards[i].length;++j) {
  225.               playerCards[i][j]=drawCard();
  226.           }
  227.       }
  228.   }
  229. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement