seberm

Mines

Mar 12th, 2010
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.22 KB | None | 0 0
  1.  
  2. package soutez;
  3.  
  4. import java.util.Random;
  5. import java.util.Scanner;
  6.  
  7. /**
  8.  * @author seberm
  9.  */
  10. public class Game {
  11.     // Artibutes: //
  12.     private int m_velikost;
  13.     private int m_pocetMin;
  14.     private boolean[][] m_matice; // Rika kde jsou miny
  15.     private String[][] m_hraciPole; // Ukazuje jak hrac hral
  16.     private boolean m_win = false; // Vyhral nebo prohral?
  17.  
  18.     // String s abecedou
  19.     private final String[] ABECEDA = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s" };
  20.  
  21.     // Je uz konec hry?...
  22.     private boolean m_end = false;
  23.  
  24.    
  25.     // Constructors: //
  26.     public Game (int velikost, int pocetMin) {
  27.         m_velikost = velikost;
  28.         m_pocetMin = pocetMin;
  29.  
  30.         // Inicializace matice a nastaveni vsech poli na false -> nikde zatim neni mina
  31.         m_matice = new boolean[m_velikost][m_velikost];
  32.         /* asi nemusi byt... defaultne je preci null */
  33.         for (int i = 0; i < m_velikost; i++)
  34.             for (int j = 0; j < m_velikost; j++)
  35.                 m_matice[i][j] = false;
  36.  
  37.  
  38.         m_hraciPole = new String[m_velikost][m_velikost];
  39.     }
  40.  
  41.  
  42.     // Methods: //
  43.     // Vygeneruje cistou hraci plochu
  44.     public void generate () {
  45.         for (int i = 0; i < m_velikost; i++)
  46.             for (int j = 0; j < m_velikost; j++)
  47.                 m_hraciPole[i][j] = ".";
  48.  
  49.         dejMiny();
  50.     }
  51.  
  52.  
  53.     // Nastartuje hru -> Main interface
  54.     public void start() {
  55.         Scanner sc = new Scanner(System.in);
  56.         int radek;
  57.         String sloupec;
  58.         String option;
  59.         int pocetTahu = 0;
  60.  
  61.         System.out.println("Hra zacala...\n\n");
  62.  
  63.         generate();
  64.  
  65.         while (!m_end) {
  66.             System.out.println("\n\n");
  67.             pocetTahu++;
  68.  
  69.             printInfo();
  70.             printMines();
  71.  
  72.             System.out.println("\nJaky je vas dalsi tah?");
  73.             System.out.println("Zadej radek (cislo):");
  74.             radek = sc.nextInt();
  75.             System.out.println("Zadej sloupec (pismeno): ");
  76.             sloupec = sc.next();
  77.             System.out.println("Zadej volbu (mina = *, otaznik = ?, stisk = s):");
  78.             option = sc.next();
  79.  
  80.             zapisVolbu(radek, sloupec, option);
  81.         }
  82.  
  83.         System.out.println("\n\nHra skoncila.\nStav hry:");
  84.         printStats();
  85.         System.out.println("\nPocet tahu: " + pocetTahu);
  86.     }
  87.  
  88.  
  89.     public void printStats () {
  90.         if (m_win == true)
  91.             System.out.println("Vyhrali jste.");
  92.         else System.out.println("Prohrali jste.\n");
  93.     }
  94.  
  95.  
  96.     public void printInfo () {
  97.  
  98.         System.out.print("  ");
  99.         for (int x = 0; x < m_velikost; x++)
  100.             System.out.print(ABECEDA[x]);
  101.        
  102.         System.out.println();
  103.  
  104.         for (int i = 0; i < m_velikost; i++) {
  105.             System.out.print(i + " ");
  106.            
  107.             for (int j = 0; j < m_velikost; j++) {
  108.                 System.out.print(m_hraciPole[i][j]);
  109.             }
  110.  
  111.             System.out.println();
  112.         }
  113.     }
  114.  
  115.  
  116.     // Nahodne nadefinuje kde budou miny...ostatnim polim da false
  117.     void dejMiny () {
  118.         Random r = new Random();
  119.        
  120.         for (int i = 0; i < m_pocetMin; i++) {
  121.             // Nahodne vygenerovani souradnic
  122.             int x = r.nextInt(m_velikost);
  123.             int y = r.nextInt(m_velikost);
  124.  
  125.             // Pokud uz na te souradnici mina je -> cyklus se opakuje jednou navic
  126.             // ... jinak se vytvori mina
  127.             if (m_matice[x][y]) {
  128.                 i--;
  129.             } else {
  130.                 m_matice[x][y] = true;
  131.             }
  132.         }
  133.     }
  134.  
  135.  
  136.     private void zapisVolbu(int radek, String sloupec, String option) {
  137.         // Prevod pismene na cislo sloupce
  138.         int intSloupec = -1;
  139.  
  140.         for (int i = 0; i < ABECEDA.length; i++)
  141.             if (sloupec.compareToIgnoreCase(ABECEDA[i]) == 0)
  142.                 intSloupec = i;
  143.  
  144.         if (intSloupec == -1) {
  145.             System.out.println("\nNeplatne zadani.");
  146.             return;
  147.         }
  148.  
  149.         if (mina(radek, intSloupec)) {
  150.             m_end = true;
  151.             m_win = false;
  152.             m_hraciPole[radek][intSloupec] = "B"; // Mina bouchla
  153.             return;
  154.            
  155.         } else {
  156.             if (option.compareToIgnoreCase("s") == 0) {
  157.                 /*
  158.                  * Zjisteni souradnic poli okolo...
  159.                  * a pokud je na tech polich nekde mina ->
  160.                  * zvetsi se cislo pole na ktere uzivatel klikl
  161.                  */
  162.  
  163.                 // Krizove body
  164.                 int upX = radek + 1;
  165.                 int downX = radek - 1;
  166.                 int leftX = intSloupec - 1;
  167.                 int rightX = intSloupec + 1;
  168.  
  169.                 int cisloPole = 0; // Cislo policka, ktere se zobrazuje uzivateli
  170.  
  171.                 if (mina(upX, intSloupec))
  172.                     cisloPole++;
  173.  
  174.                 if (mina(downX, intSloupec))
  175.                     cisloPole++;
  176.  
  177.                 if (mina(radek, leftX))
  178.                     cisloPole++;
  179.  
  180.                 if (mina(radek, rightX))
  181.                     cisloPole++;
  182.  
  183.  
  184.                 // Jeste body v "uhlopricce"
  185.                 //leftUpX
  186.                 if (mina(rightX, upX))
  187.                     cisloPole++;
  188.  
  189.                 //rightUpX
  190.                 if (mina(leftX, upX))
  191.                     cisloPole++;
  192.  
  193.                 //leftDownX
  194.                 if (mina(leftX, downX))
  195.                     cisloPole++;
  196.  
  197.                 //rightDownX
  198.                 if (mina(rightX, downX))
  199.                     cisloPole++;
  200.  
  201.  
  202.                 m_hraciPole[radek][intSloupec] = Integer.toString(cisloPole);
  203.  
  204.             } else {
  205.                 m_hraciPole[radek][intSloupec] = option; // Plni pouze informacni prvek
  206.             }
  207.         }
  208.     }
  209.  
  210.  
  211.     private boolean mina(int radek, int sloupec) {
  212.         boolean stat = false;
  213.  
  214.         // Kontrola jestli se mina nekontroluje mimo hraci pole
  215.         if (0 < radek && radek < m_velikost)
  216.             if (0 < sloupec && sloupec < m_velikost)
  217.                 stat = m_matice[radek][sloupec];
  218.         else stat = false;
  219.  
  220.         return stat;
  221.     }
  222.  
  223.  
  224.     /*
  225.      * Pouze testovaci fce, abych vedel kde jsou miny
  226.      */
  227.     private void printMines () {
  228.         for (int i = 0; i < m_velikost; i++) {
  229.             for (int j = 0; j < m_velikost; j++)
  230.                 if (m_matice[i][j])
  231.                     System.out.print("M");
  232.                 else System.out.print("0");
  233.  
  234.  
  235.             System.out.println();
  236.         }
  237.     }
  238.  
  239. }
Add Comment
Please, Sign In to add comment