Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package soutez;
- import java.util.Random;
- import java.util.Scanner;
- /**
- * @author seberm
- */
- public class Game {
- // Artibutes: //
- private int m_velikost;
- private int m_pocetMin;
- private boolean[][] m_matice; // Rika kde jsou miny
- private String[][] m_hraciPole; // Ukazuje jak hrac hral
- private boolean m_win = false; // Vyhral nebo prohral?
- // String s abecedou
- private final String[] ABECEDA = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s" };
- // Je uz konec hry?...
- private boolean m_end = false;
- // Constructors: //
- public Game (int velikost, int pocetMin) {
- m_velikost = velikost;
- m_pocetMin = pocetMin;
- // Inicializace matice a nastaveni vsech poli na false -> nikde zatim neni mina
- m_matice = new boolean[m_velikost][m_velikost];
- /* asi nemusi byt... defaultne je preci null */
- for (int i = 0; i < m_velikost; i++)
- for (int j = 0; j < m_velikost; j++)
- m_matice[i][j] = false;
- m_hraciPole = new String[m_velikost][m_velikost];
- }
- // Methods: //
- // Vygeneruje cistou hraci plochu
- public void generate () {
- for (int i = 0; i < m_velikost; i++)
- for (int j = 0; j < m_velikost; j++)
- m_hraciPole[i][j] = ".";
- dejMiny();
- }
- // Nastartuje hru -> Main interface
- public void start() {
- Scanner sc = new Scanner(System.in);
- int radek;
- String sloupec;
- String option;
- int pocetTahu = 0;
- System.out.println("Hra zacala...\n\n");
- generate();
- while (!m_end) {
- System.out.println("\n\n");
- pocetTahu++;
- printInfo();
- printMines();
- System.out.println("\nJaky je vas dalsi tah?");
- System.out.println("Zadej radek (cislo):");
- radek = sc.nextInt();
- System.out.println("Zadej sloupec (pismeno): ");
- sloupec = sc.next();
- System.out.println("Zadej volbu (mina = *, otaznik = ?, stisk = s):");
- option = sc.next();
- zapisVolbu(radek, sloupec, option);
- }
- System.out.println("\n\nHra skoncila.\nStav hry:");
- printStats();
- System.out.println("\nPocet tahu: " + pocetTahu);
- }
- public void printStats () {
- if (m_win == true)
- System.out.println("Vyhrali jste.");
- else System.out.println("Prohrali jste.\n");
- }
- public void printInfo () {
- System.out.print(" ");
- for (int x = 0; x < m_velikost; x++)
- System.out.print(ABECEDA[x]);
- System.out.println();
- for (int i = 0; i < m_velikost; i++) {
- System.out.print(i + " ");
- for (int j = 0; j < m_velikost; j++) {
- System.out.print(m_hraciPole[i][j]);
- }
- System.out.println();
- }
- }
- // Nahodne nadefinuje kde budou miny...ostatnim polim da false
- void dejMiny () {
- Random r = new Random();
- for (int i = 0; i < m_pocetMin; i++) {
- // Nahodne vygenerovani souradnic
- int x = r.nextInt(m_velikost);
- int y = r.nextInt(m_velikost);
- // Pokud uz na te souradnici mina je -> cyklus se opakuje jednou navic
- // ... jinak se vytvori mina
- if (m_matice[x][y]) {
- i--;
- } else {
- m_matice[x][y] = true;
- }
- }
- }
- private void zapisVolbu(int radek, String sloupec, String option) {
- // Prevod pismene na cislo sloupce
- int intSloupec = -1;
- for (int i = 0; i < ABECEDA.length; i++)
- if (sloupec.compareToIgnoreCase(ABECEDA[i]) == 0)
- intSloupec = i;
- if (intSloupec == -1) {
- System.out.println("\nNeplatne zadani.");
- return;
- }
- if (mina(radek, intSloupec)) {
- m_end = true;
- m_win = false;
- m_hraciPole[radek][intSloupec] = "B"; // Mina bouchla
- return;
- } else {
- if (option.compareToIgnoreCase("s") == 0) {
- /*
- * Zjisteni souradnic poli okolo...
- * a pokud je na tech polich nekde mina ->
- * zvetsi se cislo pole na ktere uzivatel klikl
- */
- // Krizove body
- int upX = radek + 1;
- int downX = radek - 1;
- int leftX = intSloupec - 1;
- int rightX = intSloupec + 1;
- int cisloPole = 0; // Cislo policka, ktere se zobrazuje uzivateli
- if (mina(upX, intSloupec))
- cisloPole++;
- if (mina(downX, intSloupec))
- cisloPole++;
- if (mina(radek, leftX))
- cisloPole++;
- if (mina(radek, rightX))
- cisloPole++;
- // Jeste body v "uhlopricce"
- //leftUpX
- if (mina(rightX, upX))
- cisloPole++;
- //rightUpX
- if (mina(leftX, upX))
- cisloPole++;
- //leftDownX
- if (mina(leftX, downX))
- cisloPole++;
- //rightDownX
- if (mina(rightX, downX))
- cisloPole++;
- m_hraciPole[radek][intSloupec] = Integer.toString(cisloPole);
- } else {
- m_hraciPole[radek][intSloupec] = option; // Plni pouze informacni prvek
- }
- }
- }
- private boolean mina(int radek, int sloupec) {
- boolean stat = false;
- // Kontrola jestli se mina nekontroluje mimo hraci pole
- if (0 < radek && radek < m_velikost)
- if (0 < sloupec && sloupec < m_velikost)
- stat = m_matice[radek][sloupec];
- else stat = false;
- return stat;
- }
- /*
- * Pouze testovaci fce, abych vedel kde jsou miny
- */
- private void printMines () {
- for (int i = 0; i < m_velikost; i++) {
- for (int j = 0; j < m_velikost; j++)
- if (m_matice[i][j])
- System.out.print("M");
- else System.out.print("0");
- System.out.println();
- }
- }
- }
Add Comment
Please, Sign In to add comment