色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

java實(shí)現(xiàn)掃雷游戲

瀏覽:2日期:2022-09-02 14:35:18

初學(xué)Java,寫(xiě)了一個(gè)掃雷代碼來(lái)鍛煉一下自己的代碼能力。

一、代碼思路

代碼思路很重要,如果事先就想好了代碼思路,那么寫(xiě)這一個(gè)代碼肯定是事半功倍,比在哪里瞎打要強(qiáng)不知道多少。經(jīng)過(guò)思考,覺(jué)得可以創(chuàng)建一個(gè)二維數(shù)組來(lái)記錄情況未翻開(kāi)的牌:(統(tǒng)一顯示 ? )數(shù)組的值 代表-1 雷0 旁邊沒(méi)有雷1 旁邊有一個(gè)雷以此類(lèi)推

翻開(kāi)的牌則:

if(a[x][y] == 9) System.out.print('?');if(a[x][y] == 10) System.out.print('?');if(a[x][y] == 11) System.out.print('①');if(a[x][y] == 12) System.out.print('②');if(a[x][y] == 13) System.out.print('③');if(a[x][y] == 14) System.out.print('④');if(a[x][y] == 15) System.out.print('⑤');if(a[x][y] == 16) System.out.print('⑥');if(a[x][y] == 17) System.out.print('⑦');if(a[x][y] == 18) System.out.print('⑧');

二、代碼主題部分

注意不要越界和不要重復(fù)打開(kāi)

public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int x,y; int a[][]=new int[10][20]; produce(a); show(a); while(true){ x=scanner.nextInt();y=scanner.nextInt(); if(x<=0||y<=0||x>10||y>20) {System.out.println('越界!!');continue;} //防止越界 if(a[x-1][y-1]>=10) {System.out.println('已開(kāi)!!!');continue;} //防止打開(kāi)重復(fù) if(bomb(a,x,y)) break; draw(a,x,y); show(a); if(All(a)){ System.out.println('你避過(guò)了所有地雷!!!');break; } } }

三、函數(shù)部分

1.顯示函數(shù)

打一個(gè)方格

public static void show(int a[][]) { int lie = 0,x =0,y=0; System.out.print(' ┃1 '); for (short i = 2; i <= 20; i++){ if(i<9)System.out.print('┃'+i+' '); else System.out.print('┃'+i); } System.out.println(); System.out.print(' '); for (short i = 0; i <= 20; i++) { //輸出第一行 if (i == 0) System.out.print('┏─'); else if (i == 20) System.out.println('┓'); else System.out.print('┳─'); } for (short i = 1; i < 2 * 10; i++) { if (i % 2 == 0) { System.out.print(' '); for (short j = 0; j <= 20; j++) { if (j == 0) System.out.print('┣─'); else if (j == 20) System.out.println('┫'); else System.out.print('╋─'); } } if (i % 2 == 1) { if(lie+1 >= 10) System.out.print(lie+1);else System.out.print(' ' + (lie+1));lie++; for (short j = 0; j <= 2*20; j++) { if (j % 2 == 0) System.out.print('┃'); else { if(a[x][y] <= 8) System.out.print('?'); if(a[x][y] == 9) System.out.print('?'); if(a[x][y] == 10) System.out.print('?'); if(a[x][y] == 11) System.out.print('①'); if(a[x][y] == 12) System.out.print('②'); if(a[x][y] == 13) System.out.print('③'); if(a[x][y] == 14) System.out.print('④'); if(a[x][y] == 15) System.out.print('⑤'); if(a[x][y] == 16) System.out.print('⑥'); if(a[x][y] == 17) System.out.print('⑦'); if(a[x][y] == 18) System.out.print('⑧'); y++; if(y>=20){ x++;y =0; } } } System.out.println(); } } System.out.print(' '); for (short k = 0; k <= 20; k++) { //輸出最后一行 if (k == 0) System.out.print('┗─'); else if (k == 20) System.out.println('┛'); else System.out.print('┻─'); }}

2.設(shè)置基本數(shù)據(jù)的函數(shù)

標(biāo)有 //雷 的是指雷的數(shù)量

public static void produce(int a[][]){ int random[] = new int[25]; //雷 Random random1 = new Random(); for(short i =0;i<25;){ //雷 short j = 0; int t = random1.nextInt()%200+1; if(t<0)t=-t; for(;j<25;j++){ //雷 if(random[j]==t)break; } if(j==25){random[i]=t;i++;} //雷 } java.util.Arrays.sort(random); int x = 0; System.out.println(); for(int i = 0; i<10;i++){ //地雷配置成功 for(int j = 0 ;j<20 ;j++){ if(x == 25)break; //雷 if((i*20)+j+1 == random[x]) {a[i][j]=-1;x++;} } } //*************設(shè)置地雷周邊參數(shù)******************** for(short i = 0;i<10;i++){ for(short j = 0;j<20;j++){ if(a[i][j]==0){ int count=0; if(i!=0&&j!=0&&a[i-1][j-1]==-1 ) count++; //左上 if(i!=0&&a[i-1][j]==-1 ) count++; //上 if(i!=0&&j<=18&&a[i-1][j+1]==-1 ) count++; //右上 if(j!=0&&a[i][j-1]==-1 ) count++; //左 if(j<=18&&a[i][j+1]==-1 ) count++; //右 if(i<=8&&j!=0&&a[i+1][j-1]==-1 ) count++; //左下 if(i<=8&&a[i+1][j]==-1 ) count++; //下 if(i<=8&&j<=18&&a[i+1][j+1]==-1 ) count++; //右下 a[i][j]=count; } } }}

3.翻牌函數(shù)

這個(gè)函數(shù)很簡(jiǎn)單,卻也是精華所在,這個(gè)函數(shù)的作用就在點(diǎn)開(kāi)一個(gè)牌,翻開(kāi)一堆符合規(guī)則的牌。

public static void draw(int a[][],int x,int y){ a[x-1][y-1]+=10; if(a[x-1][y-1]==10) { if (x - 1 > 0 && y - 1 > 0 && a[x - 2][y - 2] < 10 && a[x - 2][y - 2] != -1) draw(a, x - 1, y - 1); //左上 if (x - 1 > 0 && a[x - 2][y - 1] < 10 && a[x - 2][y - 1] != -1) draw(a, x - 1, y); //上 if (x - 1 > 0 && y - 1 < 19 && a[x - 2][y] < 10 && a[x - 2][y] != -1) draw(a, x - 1, y + 1); //右上 if (y - 1 > 0 && a[x - 1][y - 2] < 10 && a[x - 1][y - 2] != -1) draw(a, x, y - 1); //zuo if (y - 1 <= 18 && a[x - 1][y] < 10 && a[x - 1][y] != -1) draw(a, x, y + 1); //you if (x - 1 < 9 && y - 1 > 0 && a[x][y - 2] < 10 && a[x][y - 2] != -1) draw(a, x + 1, y - 1); //zuo xia if (x - 1 < 9 && a[x][y - 1] < 10 && a[x][y - 1] != -1) draw(a, x + 1, y);//xia if (x - 1 < 9 && y - 1 < 19 && a[x][y] < 10 && a[x][y] != -1) draw(a, x + 1, y + 1);//you xia }}

4.踩雷爆炸部分

public static boolean bomb(int a[][],int x ,int y){ if(a[x-1][y-1]==-1){ for(int i =0;i<10;i++){ for(int j = 0 ;j<20;j++){ if(a[i][j]==-1)a[i][j]+=10; } } show(a); System.out.println('踩雷了!!!'); return true;}else return false;}

5.判斷是否掃雷干凈部分

public static boolean All(int a[][]){ int i,j=0,t=0; for(i =0;i<10;i++){ for(j = 0 ;j<20;j++){ if(a[i][j]<10) t++; if(t>25)break; //雷 } } if(t==25)return true;else return false; //雷}

以上就是全部?jī)?nèi)容了。

下面粘貼一下效果圖和完整代碼

java實(shí)現(xiàn)掃雷游戲

完整代碼:

import java.util.Random;import java.util.Scanner;public class 掃雷 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int x,y; int a[][]=new int[10][20]; produce(a); show(a); while(true){ x=scanner.nextInt();y=scanner.nextInt(); if(x<=0||y<=0||x>10||y>20) {System.out.println('越界!!');continue;} //防止越界 if(a[x-1][y-1]>=10) {System.out.println('已開(kāi)!!!');continue;} //防止打開(kāi)重復(fù) if(bomb(a,x,y)) break; draw(a,x,y); show(a); if(All(a)){ System.out.println('你避過(guò)了所有地雷!!!');break; } } } public static void show(int a[][]) { int lie = 0,x =0,y=0; System.out.print(' ┃1 '); for (short i = 2; i <= 20; i++){ if(i<9)System.out.print('┃'+i+' '); else System.out.print('┃'+i); } System.out.println(); System.out.print(' '); for (short i = 0; i <= 20; i++) { //輸出第一行 if (i == 0) System.out.print('┏─'); else if (i == 20) System.out.println('┓'); else System.out.print('┳─'); } for (short i = 1; i < 2 * 10; i++) { if (i % 2 == 0) { System.out.print(' '); for (short j = 0; j <= 20; j++) { if (j == 0) System.out.print('┣─'); else if (j == 20) System.out.println('┫'); else System.out.print('╋─'); } } if (i % 2 == 1) { if(lie+1 >= 10) System.out.print(lie+1);else System.out.print(' ' + (lie+1));lie++; for (short j = 0; j <= 2*20; j++) { if (j % 2 == 0) System.out.print('┃'); else { if(a[x][y] <= 8) System.out.print('?'); if(a[x][y] == 9) System.out.print('?'); if(a[x][y] == 10) System.out.print('?'); if(a[x][y] == 11) System.out.print('①'); if(a[x][y] == 12) System.out.print('②'); if(a[x][y] == 13) System.out.print('③'); if(a[x][y] == 14) System.out.print('④'); if(a[x][y] == 15) System.out.print('⑤'); if(a[x][y] == 16) System.out.print('⑥'); if(a[x][y] == 17) System.out.print('⑦'); if(a[x][y] == 18) System.out.print('⑧'); y++; if(y>=20){ x++;y =0; } } } System.out.println(); } } System.out.print(' '); for (short k = 0; k <= 20; k++) { //輸出最后一行 if (k == 0) System.out.print('┗─'); else if (k == 20) System.out.println('┛'); else System.out.print('┻─'); } } public static void produce(int a[][]){ int random[] = new int[25]; //雷 Random random1 = new Random(); for(short i =0;i<25;){ //雷 short j = 0; int t = random1.nextInt()%200+1; if(t<0)t=-t; for(;j<25;j++){ //雷 if(random[j]==t)break; } if(j==25){random[i]=t;i++;} //雷 } java.util.Arrays.sort(random); int x = 0; System.out.println(); for(int i = 0; i<10;i++){ //地雷配置成功 for(int j = 0 ;j<20 ;j++){ if(x == 25)break; //雷 if((i*20)+j+1 == random[x]) {a[i][j]=-1;x++;} } } //*************設(shè)置地雷周邊參數(shù)******************** for(short i = 0;i<10;i++){ for(short j = 0;j<20;j++){ if(a[i][j]==0){ int count=0; if(i!=0&&j!=0&&a[i-1][j-1]==-1 ) count++; //左上 if(i!=0&&a[i-1][j]==-1 ) count++; //上 if(i!=0&&j<=18&&a[i-1][j+1]==-1 ) count++; //右上 if(j!=0&&a[i][j-1]==-1 ) count++; //左 if(j<=18&&a[i][j+1]==-1 ) count++; //右 if(i<=8&&j!=0&&a[i+1][j-1]==-1 ) count++; //左下 if(i<=8&&a[i+1][j]==-1 ) count++; //下 if(i<=8&&j<=18&&a[i+1][j+1]==-1 ) count++; //右下 a[i][j]=count; } } } } //*******************************翻牌****************************8 public static void draw(int a[][],int x,int y){ a[x-1][y-1]+=10; if(a[x-1][y-1]==10) { if (x - 1 > 0 && y - 1 > 0 && a[x - 2][y - 2] < 10 && a[x - 2][y - 2] != -1) draw(a, x - 1, y - 1); //左上 if (x - 1 > 0 && a[x - 2][y - 1] < 10 && a[x - 2][y - 1] != -1) draw(a, x - 1, y); //上 if (x - 1 > 0 && y - 1 < 19 && a[x - 2][y] < 10 && a[x - 2][y] != -1) draw(a, x - 1, y + 1); //右上 if (y - 1 > 0 && a[x - 1][y - 2] < 10 && a[x - 1][y - 2] != -1) draw(a, x, y - 1); //zuo if (y - 1 <= 18 && a[x - 1][y] < 10 && a[x - 1][y] != -1) draw(a, x, y + 1); //you if (x - 1 < 9 && y - 1 > 0 && a[x][y - 2] < 10 && a[x][y - 2] != -1) draw(a, x + 1, y - 1); //zuo xia if (x - 1 < 9 && a[x][y - 1] < 10 && a[x][y - 1] != -1) draw(a, x + 1, y);//xia if (x - 1 < 9 && y - 1 < 19 && a[x][y] < 10 && a[x][y] != -1) draw(a, x + 1, y + 1);//you xia } } //*******************************爆炸****************************** public static boolean bomb(int a[][],int x ,int y){ if(a[x-1][y-1]==-1){ for(int i =0;i<10;i++){ for(int j = 0 ;j<20;j++){ if(a[i][j]==-1)a[i][j]+=10; } } show(a); System.out.println('踩雷了!!!'); return true;}else return false; } //*******************************全翻了******************** public static boolean All(int a[][]){ int i,j=0,t=0; for(i =0;i<10;i++){ for(j = 0 ;j<20;j++){ if(a[i][j]<10) t++; if(t>25)break; //雷 } } if(t==25)return true;else return false; //雷 }}

更多精彩游戲,請(qǐng)參考專(zhuān)題《java經(jīng)典小游戲》

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 亚洲国产成人久久综合一 | 欧美日韩看看2015永久免费 | 步兵精品手机在线观看 | 国产呦系列呦交 | 国产在线视频欧美亚综合 | 国产大臿蕉香蕉大视频女 | 国产亚洲一欧美一区二区三区 | 911精品国产91久久久久 | 欧美一区二区视频在线观看 | 国产欧美另类久久久精品免费 | 久草免费在线观看视频 | 国内自拍视频在线播放 | 欧美高清videossex19 | 亚洲精品男人天堂 | 亚洲国产高清在线精品一区 | 波多野结衣一区二区三区88 | 高清在线一区二区 | 国产成人精品高清免费 | 午夜不卡在线 | 香蕉视频国产精品 | 亚洲影院国产 | 欧美大片aaa | 性欧美成人依依影院 | 成年人三级黄色片 | 天天看a| 国产一级淫片a免费播放口之 | 色综合91久久精品中文字幕 | 国产一级视频免费 | 中文字幕一区二区三区久久网站 | baby在线观看免费观看 | 欧美特级另类xxx | 国内精品免费一区二区观看 | 手机免费看毛片 | 高清一级毛片免免费看 | 男人把女人桶到喷白浆的视频 | 国产在线播放不卡 | 亚洲自拍偷拍图 | 中国美女隐私无遮挡免费视频 | 97视频在线观看免费播放 | 午夜免费的国产片在线观看 | 99免费在线播放99久久免费 |