java實現(xiàn)簡單的掃雷小游戲
更新時間:2021年05月26日 10:07:12 作者:boogie_liu
這篇文章主要為大家詳細介紹了java實現(xiàn)簡單的掃雷小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
使用java制作一款簡單的掃雷游戲,供大家參考,具體內(nèi)容如下
import java.util.*;
public class nephelokokkygia {
int[][] abarta;//數(shù)字矩陣
boolean[][] abhartach;//當前點是否被標記
boolean alpluachra;//判斷是否結(jié)束游戲
int caoineag;//標記的flag數(shù)
int catSith;//標記命中雷的個數(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值的點為不能查看的點,默認初始化為字符 “.”
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);
}
}
}
}
//添加代碼片段,判斷玩家是否已經(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é)果截圖:

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java?Date和SimpleDateFormat時間類詳解
這篇文章主要介紹了java?Date和SimpleDateFormat時間類詳解,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08
SpringBoot集成?JWT實現(xiàn)用戶登錄認證的項目實踐
當今前后端分離時代,基于Token的會話保持機制比傳統(tǒng)的Session/Cookie機制更加方便,本文主要介紹了SpringBoot集成?JWT實現(xiàn)用戶登錄認證的項目實踐,感興趣的可以了解一下2023-08-08
基于Java中對域和靜態(tài)方法的訪問不具有多態(tài)性(實例講解)
下面小編就為大家?guī)硪黄贘ava中對域和靜態(tài)方法的訪問不具有多態(tài)性(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10

