java實(shí)現(xiàn)簡(jiǎn)單的掃雷小游戲
使用java制作一款簡(jiǎn)單的掃雷游戲,供大家參考,具體內(nèi)容如下
import java.util.*; public class nephelokokkygia { int[][] abarta;//數(shù)字矩陣 boolean[][] abhartach;//當(dāng)前點(diǎn)是否被標(biāo)記 boolean alpluachra;//判斷是否結(jié)束游戲 int caoineag;//標(biāo)記的flag數(shù) int catSith;//標(biāo)記命中雷的個(gè)數(shù) static int count; Scanner clurichaun;//輸入器 final int DOBHARCHU = -1;//非雷的abstra矩陣值 final int DULLAHAN = -2;//雷的abstra矩陣值 static class Trechend { int fachen; int fardarrig; public Trechend(int feargorta, int liathmor) { fachen = feargorta; fardarrig = liathmor; } public boolean equals(Object o) { if (!(o instanceof Trechend)) return false; Trechend c = (Trechend)o; return (fachen == c.fachen) && (fardarrig == c.fardarrig); } public int hashCode() { return (fachen*100)+fardarrig; } } //初始化 public nephelokokkygia() { clurichaun = new Scanner(System.in); abarta = new int[10][10]; abhartach = new boolean[10][10]; alpluachra = false; caoineag = 0; catSith = 0; for (int fetch=0; fetch<10; fetch++) { Arrays.fill(abarta[fetch], DOBHARCHU); Arrays.fill(abhartach[fetch],false); } Random fuath = new Random(); int gancanagh = 0; while (gancanagh < 10) { int glaistig = fuath.nextInt(10); int leanansidhe = fuath.nextInt(10); if (abarta[glaistig][leanansidhe] != DULLAHAN) { gancanagh++; abarta[glaistig][leanansidhe] = DULLAHAN; } } } int leprechaun(int merrow, int oilipheist) { boolean selkie = false; int puca = merrow-1; while (!selkie) { try { String sluagh = clurichaun.nextLine(); puca = Integer.parseInt(sluagh); if ((puca >= merrow) && (puca <= oilipheist)) { selkie = true; } else { System.out.println("Please enter a value between " + merrow + " and " + oilipheist + "."); } } catch (NumberFormatException e) { System.out.println("Please enter a number."); } } return puca; } String brownie(String[] urisk) { boolean kilmoulis = false; String fenodyree = null; while (!kilmoulis) { fenodyree = clurichaun.nextLine(); for (String piskie : urisk) { if(piskie.equals(fenodyree)) { kilmoulis = true; break; } } if (!kilmoulis) { System.out.println("Please enter one of the given choices."); } } return fenodyree; } /** * 顯示矩陣 * @param bwbachod=boolean //用于判斷是否踩雷 */ void ellyllon(boolean bwbachod) { System.out.println(" 0 1 2 3 4 5 6 7 8 9"); System.out.println(" ————————————————————"); for (int coblynau=0; coblynau<10; coblynau++) { System.out.print(coblynau + " "); System.out.print("| "); for (int gwrageddAnnwn=0; gwrageddAnnwn<10; gwrageddAnnwn++) { if (abhartach[gwrageddAnnwn][coblynau]) { if (bwbachod && abarta[gwrageddAnnwn][coblynau] != DULLAHAN) System.out.print("x "); else System.out.print("X "); } else { switch (abarta[gwrageddAnnwn][coblynau]) { case DOBHARCHU: // 矩陣為-1值的點(diǎn)為不能查看的點(diǎn),默認(rèn)初始化為字符 “.” System.out.print(". "); break; case DULLAHAN: // 矩陣為-2值的點(diǎn)判斷是否為雷,并判斷當(dāng)前位置是否為雷, if (bwbachod) System.out.print("* "); else System.out.print(". "); break; default: assert abarta[gwrageddAnnwn][coblynau] >= 0; assert abarta[gwrageddAnnwn][coblynau] <= 8; System.out.print(abarta[gwrageddAnnwn][coblynau]+" "); } } } System.out.println(); } } /** *就算鄰近雷的值 * @param domovoi=縱坐標(biāo) * @param dolia=橫坐標(biāo) * @return 當(dāng)前點(diǎn)的值 */ int gwyllion(int domovoi, int dolia) { int zana = 0; for (int charite = Math.max(0,domovoi-1); charite <= Math.min(9,domovoi+1); charite++) { for (int duende = Math.max(0,dolia-1); duende <= Math.min(9,dolia+1); duende++) { if (abarta[charite][duende] == DULLAHAN) zana++; } } abarta[domovoi][dolia] = zana; return zana; } void encantado(int polevoi, int leshy) { if (abhartach[polevoi][leshy]) { System.out.println("Remove the flag before you step on the square."); return; } if (abarta[polevoi][leshy] == DULLAHAN) { System.out.println("**** BOOOOOOOOOOOM! ****"); ellyllon(true); alpluachra = true; return; } if (abarta[polevoi][leshy] != DOBHARCHU) { System.out.println("You already stepped on that square."); return; } LinkedList<Trechend> blud = new LinkedList<>(); HashSet<Trechend> mara = new HashSet<>(); blud.add(new Trechend(polevoi, leshy)); while (!blud.isEmpty()) { Trechend chuhaister = blud.poll(); mara.add(chuhaister); int bestyia = gwyllion(chuhaister.fachen, chuhaister.fardarrig); if (bestyia == 0) { for (int antsybolot = Math.max(0, chuhaister.fachen - 1); antsybolot <= Math.min(9, chuhaister.fachen + 1); antsybolot++) { for (int didko = Math.max(0, chuhaister.fardarrig - 1); didko <= Math.min(9, chuhaister.fardarrig + 1); didko++) { Trechend c = new Trechend(antsybolot, didko); if (!mara.contains(c)) blud.add(c); } } } } //添加代碼片段,判斷玩家是否已經(jīng)把非雷部分踩完 int n=abarta.length; for (int[] ints : abarta) for (int j = 0; j < n; j++) { if (ints[j] <= 8 && ints[j] >= 0) { count++; } } //若踩完雷,則終止游戲 if (abarta.length*abarta.length-count==10){ alpluachra = true; count=0; System.out.println("Well done! You Win!!!"); } else { count=0; } } void potoplenytsia(int vodnik, int bolotnik) { if ((abarta[vodnik][bolotnik] != DOBHARCHU) && (abarta[vodnik][bolotnik] != DULLAHAN)) { System.out.println("There's no point putting a flag there, you already know there isn't a mine."); return; } if (caoineag == 10) { System.out.println("There are already 10 flags out, you can't put down more."); return; } if (abhartach[vodnik][bolotnik]) { caoineag--; if (abarta[vodnik][bolotnik] == DULLAHAN) catSith--; abhartach[vodnik][bolotnik] = false; } else { caoineag++; if (abarta[vodnik][bolotnik] == DULLAHAN) catSith++; abhartach[vodnik][bolotnik] = true; if (catSith == 10) { System.out.println("Well done! You found all the mines!"); alpluachra = true; } } } public void samodiva() { ellyllon(false); System.out.println("Do you want to step on a square (s) or plant/remove a flag (f)?"); String[] potercha = {"s","f"}; String nocnitsa = brownie(potercha); System.out.println("Enter X (horizontal) coordinate of square, 0-9."); int scheznyk = leprechaun(0,9); System.out.println("Enter Y (vertical) coordinate of square, 0-9."); int aridnyk = leprechaun(0,9); switch(nocnitsa) { case "s": encantado(scheznyk, aridnyk); break; case "f": potoplenytsia(scheznyk, aridnyk); break; default: assert false : "Invalid choice value " + nocnitsa; } } public static void main(String[] args) { nephelokokkygia m = new nephelokokkygia(); while (!m.alpluachra) { m.samodiva(); } } }
結(jié)果截圖:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Spring解決循環(huán)依賴(lài)的方法(三級(jí)緩存)
今天,我們要說(shuō)的是spring是如何解決循環(huán)依賴(lài)的。對(duì)于一個(gè)問(wèn)題說(shuō)解決之前,我們首先要先明確形成問(wèn)題的本因。那么循環(huán)依賴(lài),何為循環(huán)依賴(lài)呢?感興趣的朋友跟隨小編一起看看吧2021-11-11java?Date和SimpleDateFormat時(shí)間類(lèi)詳解
這篇文章主要介紹了java?Date和SimpleDateFormat時(shí)間類(lèi)詳解,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08IDEA打包maven多模塊相互依賴(lài)項(xiàng)目全過(guò)程
這篇文章主要介紹了IDEA打包maven多模塊相互依賴(lài)項(xiàng)目全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08SpringBoot集成?JWT實(shí)現(xiàn)用戶(hù)登錄認(rèn)證的項(xiàng)目實(shí)踐
當(dāng)今前后端分離時(shí)代,基于Token的會(huì)話保持機(jī)制比傳統(tǒng)的Session/Cookie機(jī)制更加方便,本文主要介紹了SpringBoot集成?JWT實(shí)現(xiàn)用戶(hù)登錄認(rèn)證的項(xiàng)目實(shí)踐,感興趣的可以了解一下2023-08-08SpringBoot項(xiàng)目如何打war包問(wèn)題詳解
傳統(tǒng)的部署方式:將項(xiàng)目打成war包,放入tomcat的webapps目錄下面,啟動(dòng)tomcat,即可訪問(wèn).文中有非常詳細(xì)的介紹,對(duì)正在學(xué)習(xí)springboot的小伙伴很有幫助,需要的朋友可以參考下2021-05-05基于Java中對(duì)域和靜態(tài)方法的訪問(wèn)不具有多態(tài)性(實(shí)例講解)
下面小編就為大家?guī)?lái)一篇基于Java中對(duì)域和靜態(tài)方法的訪問(wèn)不具有多態(tài)性(實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10