SHARE
TWEET

Mines

seberm Mar 12th, 2010 22 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
Top