java实现简单的扫雷小游戏
作者:boogie_liu
这篇文章主要为大家详细介绍了java实现简单的扫雷小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
使用java制作一款简单的扫雷游戏,供大家参考,具体内容如下
import java.util.*; public class nephelokokkygia { int[][] abarta;//数字矩阵 boolean[][] abhartach;//当前点是否被标记 boolean alpluachra;//判断是否结束游戏 int caoineag;//标记的flag数 int catSith;//标记命中雷的个数 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值的点为不能查看的点,默认初始化为字符 “.” System.out.print(". "); break; case DULLAHAN: // 矩阵为-2值的点判断是否为雷,并判断当前位置是否为雷, 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=纵坐标 * @param dolia=横坐标 * @return 当前点的值 */ 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); } } } } //添加代码片段,判断玩家是否已经把非雷部分踩完 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(); } } }
结果截图:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。