mmayoub

Solitaire, Game

Jul 30th, 2018
111
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import java.util.Scanner;
  2.  
  3. public class Game {
  4.     private MainDeck mainDeck;
  5.     private FinalDeck[] finalsArr;
  6.     private Column[] colsArr;
  7.     private int score;
  8.  
  9.     public Game() {
  10.         Deck cardsDeck = new Deck();
  11.  
  12.         mainDeck = new MainDeck(cardsDeck.getCards(24));
  13.         finalsArr = new FinalDeck[4];
  14.         for (int f = 0; f < 4; f++)
  15.             finalsArr[f] = new FinalDeck();
  16.  
  17.         colsArr = new Column[7];
  18.         for (int c = 0; c < 7; c++) {
  19.             int count = c + 1;
  20.             colsArr[c] = new Column(cardsDeck.getCards(count));
  21.         }
  22.         score = 0;
  23.     }
  24.  
  25.     public void start() {
  26.         Scanner in = new Scanner(System.in);
  27.  
  28.         System.out.println(getInstructions());
  29.  
  30.         do {
  31.             System.out.println(this);
  32.         } while (makeMove(in) && !gameIsOver());
  33.  
  34.         in.close();
  35.  
  36.         if (gameIsOver()) {
  37.             System.out.println("\n\nGame is Over!");
  38.             System.out.println("Your score is " + score + " points");
  39.         } else {
  40.             System.out.println("\n\nSee you later!");
  41.             System.out.println("Your score is " + score + " points");
  42.         }
  43.     }
  44.  
  45.     private String getInstructions() {
  46.         String res = "Please enter a three digits integer number: \n";
  47.         res += "<source><target><amount>\n";
  48.         res += "to move <amount> cards from <source> to <target>";
  49.  
  50.         return res;
  51.     }
  52.  
  53.     private boolean gameIsOver() {
  54.         for (int f = 0; f < 4; f++) {
  55.             if (!finalsArr[f].isFull())
  56.                 return false;
  57.         }
  58.  
  59.         return true;
  60.     }
  61.  
  62.     private boolean makeMove(Scanner in) {
  63.         System.out.print("Select your move (source, target, count): ");
  64.         int m = in.nextInt();
  65.  
  66.         int src, trgt, count;
  67.         if (m < 10) {
  68.             src = m;
  69.             trgt = -1;
  70.             count = -1;
  71.         } else if (m < 100) {
  72.             src = m / 10;
  73.             trgt = m % 10;
  74.             count = 1;
  75.         } else {
  76.             src = m / 100;
  77.             trgt = m / 10 % 10;
  78.             count = m % 10;
  79.         }
  80.         switch (src) {
  81.         case 0:
  82.             break;
  83.         case 1:
  84.         case 2:
  85.         case 3:
  86.         case 4:
  87.         case 5:
  88.         case 6:
  89.         case 7:
  90.             if (trgt >= 1 && trgt <= 7) {
  91.                 if (src != trgt)
  92.                     colsArr[src - 1].moveToColumn(colsArr[trgt - 1], count);
  93.             } else if (trgt == 9) {
  94.                 for (int f = 0; f < 4; f++)
  95.                     if (colsArr[src - 1].moveToFinal(finalsArr[f])) {
  96.                         score += 10;
  97.                         break;
  98.                     }
  99.             }
  100.             break;
  101.  
  102.         case 8:
  103.             if (trgt == -1) {
  104.                 mainDeck.showCard();
  105.                 break;
  106.             } else if (trgt >= 1 && trgt <= 7) {
  107.                 if (mainDeck.moveToColumn(colsArr[trgt - 1]))
  108.                     score += 5;
  109.             } else if (trgt == 9) {
  110.                 for (int f = 0; f < 4; f++)
  111.                     if (mainDeck.moveToFinalDeck(finalsArr[f])) {
  112.                         score += 10;
  113.                         break;
  114.                     }
  115.             }
  116.             break;
  117.         case 9:
  118.             if (trgt >= 1 && trgt <= 7) {
  119.                 for (int f = 0; f < 4; f++) {
  120.                     if (finalsArr[f].moveToTemp(colsArr[trgt - 1]))
  121.                         break;
  122.                 }
  123.             }
  124.             break;
  125.         }
  126.         return m != 0;
  127.     }
  128.  
  129.     public String toString() {
  130.         String res = String.format("\n%s %7s %s %s %s %s\n\n", mainDeck, "", finalsArr[0], finalsArr[1], finalsArr[2],
  131.                 finalsArr[3]);
  132.  
  133.         String[][] colsStr = new String[7][];
  134.         int max = 0;
  135.         for (int c = 0; c < 7; c++) {
  136.             colsStr[c] = colsArr[c].toStringArray();
  137.             max = Math.max(max, colsStr[c].length);
  138.  
  139.             res = res + String.format("   %s    ", c + 1);
  140.         }
  141.  
  142.         res = res + String.format("\n");
  143.  
  144.         for (int i = 0; i < max; i++) {
  145.             for (int c = 0; c < 7; c++) {
  146.                 if (i < colsStr[c].length)
  147.                     res = res + String.format(" %5s  ", colsStr[c][i]);
  148.                 else
  149.                     res = res + String.format(" %5s  ", "");
  150.             }
  151.  
  152.             res = res + String.format("\n");
  153.         }
  154.  
  155.         res = res + String.format("Your score is " + score + " points");
  156.  
  157.         return res;
  158.     }
  159. }
RAW Paste Data