亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java如何實現掃雷游戲控制臺版

發布時間:2020-08-01 09:43:44 來源:億速云 閱讀:230 作者:小豬 欄目:編程語言

小編這次要給大家分享的是java如何實現掃雷游戲控制臺版,文章內容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

掃雷游戲

a、游戲的分析

在游戲中需要存在對象包含哪些。
格子對象(Grid):
屬性:內容(content)、狀態(type)

b、工程架構

設計工程包結構
bean:存放實體類
core:游戲核心類(游戲操作)
test:掃雷玩的測試類

c、編寫類

Grid(屬性:content、type)
Core類–游戲核心類(雷區創建、顯示雷區、布雷、踩雷)
Test類–測試類

d、核心類設計

1、格子對象創建方法定義
2、顯示雷區方法定義
3、布雷方法定義

隨機數工具:

Random r=new Random();
//獲得整數類型的隨機數
int x=r.nextInt(參數);參數表示隨機值范圍–>9

4、八個方向對象的方法定義

Point類:java中提供的坐標對象類 x,y

5、設置雷數的方法

通過遍歷所有格子對象獲取雷數的添加

6、踩雷

遞歸調用:在一個類的方法中實現當前方法調用自己的操作方式
1)、通過傳入一個坐標獲取當前坐標位置的格子對象內容,判斷內容的類型完成游戲操作
1)、內容為雷 -->游戲結束
2)、內容位數字 -->顯示當前格子內容
3)、內容為空白 -->通過當前位置實現空白的輻射操作(遞歸調用)

7、游戲勝利

1)、方法的返回類型
2)、test類中循環的結構(break)

掃雷實體類

package minersgame.bean;
/**
 * 格子實體類
 * @author 木葉
 *擁有格子的內容和狀態屬性
 */

public class Grid {
 //定義格子的私有屬性
 private char content;
 private boolean type;
 public char getContent() {
 return content;
 }
 public void setContent(char content) {
 this.content = content;
 }
 public boolean isType() {
 return type;
 }
 public void setType(boolean type) {
 this.type = type;
 }

}

核心代碼

package minersgame.core;

import java.awt.Point;
import java.util.Random;
import minersgame.bean.Grid;
/**
 * 游戲核心類
 * @author 木葉
 *包含游戲核心的功能:雷區制定、布雷實現、踩雷操作、顯示雷區、獲取方向、設置雷數、踩雷、顯示勝利
 */
public class Core {

 //定義一個存放格子對象的二維數組完成雷區的保存
 Grid[][] grid=new Grid[9][9];
 //定義雷數的屬性
 int count=10;
 int count2 = count;
 //定義一個屬性獲取當前狀態
 public boolean state=true;
 //定義一個創建格子對象的方法,完成雷區中所有格子對象的創建
 public void createGrid() {
 //通過二維數組實現每個下標中添加格子對象
 for(int i=0;i<grid.length;i++) {
 for(int j=0;j<grid[i].length;j++) {
 //創建格子對象完成二維數組下標數據存放
 grid[i][j]=new Grid();
 //設置格子對象中的屬性內容
 grid[i][j].setContent(' ');
 grid[i][j].setType(false); 
 }
 }
 }
 //定義一個布雷的方法
 public void setMines() {
 //定義隨機數工具
 Random r=new Random();
 //通過隨機方式獲取隨機坐標
 do {
 //獲得x坐標
 int x=r.nextInt(9);
 //獲得y坐標
 int y=r.nextInt(9);
 //判斷當前隨機位置的格子對象內容是否為雷,如果是雷就進入下次循環
 if(grid[x][y].getContent()!='*') {
 //通過x和y獲得當前位置的格子對象
 grid[x][y].setContent('*');
 //實現數量自減
 count--;
 } 
 
 }while(count>0) ;
 
 }

 //定義顯示雷區的方法
 public void show() {
 //通過遍歷二維數組獲得所有的格子個數
 System.out.println("xy 0 1 2 3 4 5 6 7 8");
 for(int i=0;i<grid.length;i++) {
 System.out.print(i+" ");
 for(int j=0;j<grid[i].length;j++){
 //
 if(grid[i][j].isType() ){
 System.out.print(grid[i][j].getContent()+" "); 
 }else {
 System.out.print("■ ");
 }
 }
 System.out.println();
 }
 } 
//定義坐標獲取的方法 --獲得8個方向的坐標對象方法 
 public Point[] getPoint(int x,int y) {//超過一個以上的返回要用數組
 //定義一個坐標對象數組
 Point[] point=new Point[8];
 //左邊
 point[0]=new Point(x-1,y);
 //左上
 point[1]=new Point(x-1,y-1);
 //上邊
 point[2]=new Point(x,y-1);
 //右上
 point[3]=new Point(x+1,y-1);
 //右邊
 point[4]=new Point(x+1,y);
 //右下
 point[5]=new Point(x+1,y+1);
 //下邊
 point[6]=new Point(x,y+1);
 //左下
 point[7]=new Point(x-1,y+1);
 return point;
 }

//定義一個設置雷數的方法
 public void setMinesNumber() {
 //通過循環獲得所有的格子對象
 for(int i=0;i<grid.length;i++) {
 for(int j=0;j<grid[i].length;j++) {
 //定義一個統計類屬的變量
 int sum=0;
 //判斷當前格子對象內容是否為雷,如果是雷就進入下次獲取,否則完成雷數統計
 if(grid[i][j].getContent()!='*') {
 //通過當前的坐標獲取八個方向坐標對象
 Point[] p=this.getPoint(i, j);
 //通過坐標對象數組獲取對應下標格子對象
 for(int k=0;k<p.length;k++) {
 //獲得每個坐標對象
 Point point=p[k];
 //通過判斷過去的8個方向位置是否越界
 if(point.x>=0&&point.x<9&&point.y>=0&&point.y<9) {
 //通過當前方向坐標獲取位置上的格子對象
 if( grid[point.x][point.y].getContent()=='*') {
 sum++;//雷數自增
 } 
 }
 }
 //通過雷數統計變量確定是否有雷存在,如果有就將當前
 //雷數添加到當前位置的格子對象中
 if(sum>0) {
 //在當前格子對象中添加雷數
 grid[i][j].setContent((char)(48+sum));
 } 
 }
 }
 }
 } 
 //定義一個踩雷踩雷
 public void stampMine(int x,int y) {
 //開啟當前格子狀態為打開
 grid[x][y].setType(true);
 //判斷當前坐標位置的格子內容是否為雷,如果是雷就結束否則就繼續
 if(grid[x][y].getContent()!='*') {
 //判斷當前格子對象是否為數字,如果為數字就不操作
 if(grid[x][y].getContent()==' ') {
 //獲得當前格子周圍8個方向的坐標對象
 Point[] p=this.getPoint(x, y);
 //循環遍歷8個方向獲得對應的格子對象
 for(int k=0;k<p.length;k++) {
 //分別獲得的方向對象
 Point point=p[k];
 //判斷是否越界
 if(point.x>=0&&point.x<9&&point.y>=0&&point.y<9) {
 /**
 * 判斷當前坐標對象對應的格子對象內容是否為空格,
 * 如果是空格實現遞歸調用,如果是數字就開啟當前格子
 */
 if(grid[point.x][point.y].getContent()==' '&&grid[point.x][point.y].isType()==false) {
 //當前格子為空格的情況
 this.stampMine(point.x, point.y);
 }else {
 //當前格子為數字的情況
 grid[point.x][point.y].setType(true);
 }
 }
 } 
 } 
 }else {
 System.out.println("踩雷了,游戲結束!!!");
 //修改游戲狀態
 state=false;
 //顯示出所有格子
 for(int i=0;i<grid.length;i++) {
 for(int j=0;j<grid[i].length;j++) {
 grid[i][j].setType(true);
 }
 }
 } 
 } 
 //定義一個游戲勝利的方法
 public boolean getVictory(){
 //為打開格子數
 int number=0;
 //使用循環得出格子總數
 //使用循環得出打開格子總數
 for(int i=0;i<grid.length;i++) {
 for(int j=0;j<grid[i].length;j++) {
 if(!grid[i][j].isType()) {
 number++;
 }
 }
 }
 //判斷未打開鴿子數師傅等于雷數,是則預習成功,不是進入下次
 if(number==count2) {
 for(int i=0;i<grid.length;i++) {
 for(int j=0;j<grid[i].length;j++) {
 grid[i][j].setType(true);
 }
 }
 System.out.println("游戲勝利!!!掃雷成功!!!");
 return false;
 }else {
 return true;
 }
 } 
}

測試類

package minersgame.test;

import java.util.Scanner;

import minersgame.core.Core;

public class Test {
 public static void main(String[] args) {
 /*
 * 實現游戲核心
 */
 //獲得游戲核心類對象
 Core c=new Core();
 c.createGrid();
 c.setMines();
 //顯示
 c.show();
 //添加雷數
 c.setMinesNumber();
 Scanner scan=new Scanner(System.in);
 while(c.state){
 System.out.println("請輸入X坐標:");
 int x=scan.nextInt();
 System.out.println("請輸入Y坐標:");
 int y=scan.nextInt();
 //調用踩雷方法
 c.stampMine(x, y);
 //顯示雷區方法
 c.show();
 //判斷是否游戲勝利
 if(c.getVictory()) { 
 }else {
 c.show();
 break;
 }
 }
 }
}

看完這篇關于java如何實現掃雷游戲控制臺版的文章,如果覺得文章內容寫得不錯的話,可以把它分享出去給更多人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

开远市| 体育| 阿合奇县| 宽城| 哈密市| 苗栗县| 左贡县| 韶关市| 西华县| 桦甸市| 徐水县| 尼木县| 辽阳市| 星座| 长葛市| 鹿泉市| 西乌| 建德市| 贵州省| 南和县| 鄂尔多斯市| 南充市| 尼玛县| 凌云县| 弥渡县| 永仁县| 日喀则市| 繁昌县| 饶河县| 恩施市| 阳西县| 苗栗市| 儋州市| 福清市| 临海市| 蓬莱市| 安徽省| 阿克| 新丰县| 松溪县| 仪陇县|