电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

java實現掃雷游戲

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

初學Java,寫了一個掃雷代碼來鍛煉一下自己的代碼能力。

一、代碼思路

代碼思路很重要,如果事先就想好了代碼思路,那么寫這一個代碼肯定是事半功倍,比在哪里瞎打要強不知道多少。經過思考,覺得可以創建一個二維數組來記錄情況未翻開的牌:(統一顯示 ? )數組的值 代表-1 雷0 旁邊沒有雷1 旁邊有一個雷以此類推

翻開的牌則:

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('⑧');

二、代碼主題部分

注意不要越界和不要重復打開

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('已開!!!');continue;} //防止打開重復 if(bomb(a,x,y)) break; draw(a,x,y); show(a); if(All(a)){ System.out.println('你避過了所有地雷!!!');break; } } }

三、函數部分

1.顯示函數

打一個方格

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.設置基本數據的函數

標有 //雷 的是指雷的數量

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++;} } } //*************設置地雷周邊參數******************** 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.翻牌函數

這個函數很簡單,卻也是精華所在,這個函數的作用就在點開一個牌,翻開一堆符合規則的牌。

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; //雷}

以上就是全部內容了。

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

java實現掃雷游戲

完整代碼:

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('已開!!!');continue;} //防止打開重復 if(bomb(a,x,y)) break; draw(a,x,y); show(a); if(All(a)){ System.out.println('你避過了所有地雷!!!');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++;} } } //*************設置地雷周邊參數******************** 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; //雷 }}

更多精彩游戲,請參考專題《java經典小游戲》

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 网站建设,北京网站建设,北京网站建设公司,网站系统开发,北京网站制作公司,响应式网站,做网站公司,海淀做网站,朝阳做网站,昌平做网站,建站公司 | 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 水性漆|墙面漆|木器家具漆|水漆涂料_晨阳水漆官网 | 国产离子色谱仪,红外分光测油仪,自动烟尘烟气测试仪-青岛埃仑通用科技有限公司 | 塑料托盘厂家直销-吹塑托盘生产厂家-力库塑业【官网】 | 知名电动蝶阀,电动球阀,气动蝶阀,气动球阀生产厂家|价格透明-【固菲阀门官网】 | 热熔胶网膜|pes热熔网膜价格|eva热熔胶膜|热熔胶膜|tpu热熔胶膜厂家-苏州惠洋胶粘制品有限公司 | 深圳标识制作公司-标识标牌厂家-深圳广告标识制作-玟璟广告-深圳市玟璟广告有限公司 | 紫外线老化试验箱_uv紫外线老化试验箱价格|型号|厂家-正航仪器设备 | 济南品牌设计-济南品牌策划-即合品牌策划设计-山东即合官网 | 温州在线网| 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 合肥钣金加工-安徽激光切割加工-机箱机柜加工厂家-合肥通快 | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 | LED灯杆屏_LED广告机_户外LED广告机_智慧灯杆_智慧路灯-太龙智显科技(深圳)有限公司 | 模型公司_模型制作_沙盘模型报价-中国模型网 | 螺旋叶片_螺旋叶片成型机_绞龙叶片_莱州源泽机械制造有限公司 | 不锈钢复合板厂家_钛钢复合板批发_铜铝复合板供应-威海泓方金属复合材料股份有限公司 | 旋转气浴恒温振荡器-往复式水浴恒温振荡器-金怡百科 | 软文世界-软文推广-软文营销-新闻稿发布-一站式软文自助发稿平台 | CTAB,表面活性剂1631溴型(十六烷基三甲基溴化铵)-上海升纬化工原料有限公司 | 冷凝水循环试验箱-冷凝水试验箱-可编程高低温试验箱厂家-上海巨为(www.juweigroup.com) | POS机办理_个人POS机免费领取 - 银联POS机申请首页 | 高柔性拖链电缆_卷筒电缆_耐磨耐折聚氨酯电缆-玖泰特种电缆 | 长沙发电机-湖南发电机-柴油发电机供应厂家-长沙明邦智能科技 | 威廉希尔WilliamHill·足球(中国)体育官方网站 | 贵州成人高考网_贵州成考网| 高楼航空障碍灯厂家哪家好_航空障碍灯厂家_广州北斗星障碍灯有限公司 | 智能化的检漏仪_气密性测试仪_流量测试仪_流阻阻力测试仪_呼吸管快速检漏仪_连接器防水测试仪_车载镜头测试仪_奥图自动化科技 | 化妆品加工厂-化妆品加工-化妆品代加工-面膜加工-广东欧泉生化科技有限公司 | 盘式曝气器-微孔曝气器-管式曝气器-曝气盘-斜管填料 | 郑州市前程水处理有限公司 | 重庆监控_电子围栏设备安装公司_门禁停车场管理系统-劲浪科技公司 | 济南菜鸟驿站广告|青岛快递车车体|社区媒体-抖音|墙体广告-山东揽胜广告传媒有限公司 | 蚂蚁分类信息系统 - PHP同城分类信息系统 - MayiCMS | 钢制拖链生产厂家-全封闭钢制拖链-能源钢铝拖链-工程塑料拖链-河北汉洋机械制造有限公司 | 天津仓储物流-天津电商云仓-天津云仓一件代发-博程云仓官网 | Magnescale探规,Magnescale磁栅尺,Magnescale传感器,Magnescale测厚仪,Mitutoyo光栅尺,笔式位移传感器-苏州连达精密量仪有限公司 | 沙盘模型公司_沙盘模型制作公司_建筑模型公司_工业机械模型制作厂家 | 卓能JOINTLEAN端子连接器厂家-专业提供PCB接线端子|轨道式端子|重载连接器|欧式连接器等电气连接产品和服务 | 安驭邦官网-双向万能直角铣头,加工中心侧铣头,角度头[厂家直销] 闸阀_截止阀_止回阀「生产厂家」-上海卡比阀门有限公司 | led全彩屏-室内|学校|展厅|p3|户外|会议室|圆柱|p2.5LED显示屏-LED显示屏价格-LED互动地砖屏_蕙宇屏科技 |