大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java五子棋代碼

Java五子棋代碼

更新時間:2022-08-12 10:52:23 來源:動力節點 瀏覽1319次

設計思路:

本程序主要采用以下三種技術:(1)Swing編程;(2) ImageIO類的使用;(3) Graphics 圖片的繪制

對于這樣一個五子棋游戲程序。

1. 首先我們需要使用java.Swing和java.awt工具包來設計游戲的用戶界面,繪制圖像圖形,比如制作棋盤。

2. 另外ImageIO類還用于導入和顯示圖片作為游戲界面的背景。背景圖片可以自己設計。

3. 主界面制作完成后,我們可以添加事件監聽,使用鼠標監聽相關的類MouseListener在指定區域和位置點擊生成棋子進行下棋。

4. 接下來,我們可以設計算法來確定獲勝者。

5. 然后實現按鍵功能。

6. 最后調試測試看看程序有沒有bug。

編程過程

導入 java.awt 、 java.io 和 javax.swing 工具包,其中包含用于創建用戶界面、繪制圖形圖像、導入圖像和監控鼠標的所有類.

導入 java.awt.Color;//顏色類用于為游戲界面著色
導入java.awt.Font;//字體類提供字體相關的類和接口。
導入 java.awt.Graphics;//Graphics類提供了執行繪圖、著色、文本輸出等實際操作功能的基類
導入 java.awt.Toolkit;
導入 java.awt.event.MouseEvent;
導入 java.awt.event.MouseListener;//監聽鼠標相關的類
導入 java.awt.image.BufferedImage;//導入圖片的處理類
導入java.io.File;// 文件和目錄路徑名的抽象表示。
導入 java.io.IOException;//異常類
導入 javax.imageio.ImageIO;//顯示圖片的類
導入 javax.swing.JFrame;//創建一個表單并設置它的大小、位置等屬性
導入 javax.swing.JOptionPane;//對話框相關類

設計游戲主窗口

公共類 FiveChessFrame 擴展 JFrame 實現 MouseListener,Runnable {
	// 獲取屏幕的寬高,計算合適的位置使游戲界面居中
	int width = Toolkit.getDefaultToolkit().getScreenSize().width;
	int height = Toolkit.getDefaultToolkit().getScreenSize().height;
	// 首先定義背景圖片為空
	緩沖圖像 bgImage = null;
	//這里定義的X和Y用于保存棋子的坐標
	詮釋 x = 0;
	整數 y = 0;	
   /** 定義一個19*19的二維數組來表示棋盤,其中數據內容0:表示該點沒有棋盤,1:表示該點為黑色,2:表示該點是白色的*/
	int[][] allChess = new int[19][19];
	// 判斷下一步是黑棋還是白棋
	布爾 isBlack = true;
	// 判斷當前游戲是否可以繼續
	boolean canPlay = true;
	// 保存顯示的提示信息,用于顯示在界面棋盤上方
	String message = "黑色優先";	
	//設置五子棋游戲界面的主窗口(位置、大小、中心顯示等屬性)
       公共 FiveChessFrame() {
	   this.setTitle("五子棋--曾雷");
		this.setSize(500, 500);
		this.setLocation((寬度 - 500) / 2, (高度 - 500) / 2);
		this.setResizable(false);
		// 設置窗體的關閉方式為默認,程序將結束
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// 向窗體添加鼠標偵聽器
		this.addMouseListener(this);
		// 顯示表格
		this.setVisible(true);
	/**下面是導入預先設計好的圖片作為游戲界面的背景,應用于io流操作。背景圖片通過ImageIo類從磁盤導入到程序中,使用try IOException捕捉異常*/
		嘗試 {
			bgImage = ImageIO.read(new File("E:\\image\\128.jpg"));
		} 捕捉(IOException e){
				e.printStackTrace();
		}
		// 刷新屏幕防止游戲無顯示啟動
		this.repaint();
	}

畫棋盤

公共無效油漆(圖形g){
		// 繪制背景
		g.drawImage(bgImage, 1, 20, 這個);
		// 輸出標題信息
		g.setFont(new Font("Blackbody", Font.BOLD, 20));
		g.drawString(" : " + 消息, 130, 60);		
       /**畫棋盤,在流出背景圖片的棋盤區域畫出棋盤的線,用for循環畫棋盤的線,掃所有18個相等的點,很容易計算*/
		for (int i = 0; i < 19; i++) {
			g2.drawLine(10, 70 + 20 * i, 370, 70 + 20 * i);
			g2.drawLine(10 + 20 * i, 70, 10 + 20 * i, 430);
		}
   /** 使用Graphics類的fillOver方法標記棋盤上的九個點(只顯示一個,其余類似),可以先用鼠標監聽得到點的坐標,然后繪制*/
		g2.fillOval(68, 128, 4, 4);
	/**下面提供了繪制棋子的程序代碼,即通過鼠標監聽器判斷出在什么位置的棋子的顏色。參數傳遞 1 為黑色,2 為白色。*/
		for (int i = 0; i < 19; i++) {
			for (int j = 0; j < 19; j++) {
				if (allChess[i][j] == 1) {
					int tempX = i * 20 + 10;
					int tempY = j * 20 + 70;
					g2.fillOval(tempX - 7, tempY - 7, 14, 14);
				}
				if (allChess[i][j] == 2) {
					int tempX = i * 20 + 10;
					int tempY = j * 20 + 70;
					g2.setColor(Color.WHITE);
					g2.fillOval(tempX - 7, tempY - 7, 14, 14);
					g2.setColor(Color.BLACK);
					g2.drawOval(tempX - 7, tempY - 7, 14, 14);
				}
			}
		}
		g.drawImage(bi, 0, 0, 這個);
	}

添加鼠標監視器

公共無效鼠標按下(鼠標事件e){
		如果(可以播放 == 真){
			x = e.getX();
			y = e.getY();
			如果 (x >= 10 && x <= 370 && y >= 70 && y <= 430) {
				x = (x - 10) / 20;
				y = (y - 70) / 20;
				if (allChess[x][y] == 0) {
				if (isBlack == true) {
						所有國際象棋[x][y] = 1;
						isBlack = 假;
						message = "輪到白芳了";
					} 別的 {
						所有國際象棋[x][y] = 2;
						isBlack =真;
						message = "黑色方塊";
					}
					// 判斷該棋子是否與其他棋子連接5,即判斷游戲是否結束
					boolean winFlag = this.checkWin();
					如果(winFlag == true){
						JOptionPane.showMessageDialog(this, "game over,"
								+ (allChess[x][y] == 1 ? "Black Square" : "Baifang") + "勝利!");
						可以播放=假;
					}
				} 別的 {
					JOptionPane.showMessageDialog(this, "當前位置有棋子,請再放下!");
				}
				this.repaint();
			}
		}

給每個按鈕對應的功能

賦予開始游戲按鈕相應的功能。點擊“開始游戲”。如果要重新開始游戲,清除棋盤,將allchess中的數據清零,將“游戲信息”顯示改回初始狀態,將下一局游戲改為黑色方塊

如果 (e.getX() >= 400 && e.getX() <= 470 && e.getY() >= 70
				&& e.getY() <= 100) {
		int result = JOptionPane.showConfirmDialog(this, "你想重啟游戲嗎?");
		如果(結果 == 0)
		   allChess = new int[19][19];
		message = "黑色優先";
			isBlack =真;
				this.repaint();
			}
		}

賦予“退出游戲”按鈕對應功能

如果 (e.getX() >= 400 && e.getX() <= 470 && e.getY() >= 370
				&& e.getY() <= 400) {
			JOptionPane.showMessageDialog(this, "game over");
			System.exit(0);
		}
	}

賦予“游戲設置”按鈕功能

如果 (e.getX() >= 387 && e.getX() <= 496 && e.getY() >= 228
				&& e.getY() <= 261) {
			字符串輸入 = JOptionPane
					.showInputDialog("請輸入游戲的最大時間(公司:分鐘),如果輸入0,則無時間限制:");
			嘗試 {
				maxTime = Integer.parseInt(輸入) * 60;
				如果(最大時間 < 0){
					JOptionPane.showMessageDialog(this, "請輸入正確信息,不允許輸入負數!");
				}
				如果(最大時間 == 0){
					int 結果 = JOptionPane.showConfirmDialog(this,
							"設置完成,要重新開始游戲嗎?");
					如果(結果 == 0){
						for (int i = 0; i < 19; i++) {
							for (int j = 0; j < 19; j++) {
								所有國際象棋[i][j] = 0;
							}
						}
						// 另一種方式是 allChess = new int[19][19];
						message = "黑色優先";
						isBlack =真;
						黑色時間 = 最大時間;
						白色時間 = 最大時間;
						blackMessage = "無限";
						whiteMessage = "無限";
						this.canPlay = true;
						this.repaint();
					}
				}
				如果(最大時間> 0){
					int 結果 = JOptionPane.showConfirmDialog(this,
							"設置完成,要重新開始游戲嗎?");
					如果(結果 == 0){
						for (int i = 0; i < 19; i++) {
							for (int j = 0; j < 19; j++) {
								所有國際象棋[i][j] = 0;
							}
						}
						// 另一種方式是 allChess = new int[19][19];
						message = "黑色優先";
						isBlack =真;
						黑色時間 = 最大時間;
						白色時間 = 最大時間;
						blackMessage = maxTime / 3600 + ":"
								+ (maxTime / 60 - maxTime / 3600 * 60) + ":"
								+ (maxTime - maxTime / 60 * 60);
						whiteMessage = maxTime / 3600 + ":"
								+ (maxTime / 60 - maxTime / 3600 * 60) + ":"
								+ (maxTime - maxTime / 60 * 60);
						t.resume();
						this.canPlay = true;
						this.repaint();
					}
				}
			} 捕捉(NumberFormatException e1){
				// TODO 自動生成的 catch 塊
				JOptionPane.showMessageDialog(this, "請正確輸入信息!");
			}
		}

放棄“放棄”按鈕功能

如果 (e.getX() >= 386 && e.getX() <= 496 && e.getY() >= 284
				&& e.getY() <= 316) {
			int result = JOptionPane.showConfirmDialog(this, "確認放棄?");
			如果(結果 == 0){
				如果(黑色){
					JOptionPane.showMessageDialog(this, "黑方認輸,游戲結束!");
					可以播放=假;
				} 別的 {
					JOptionPane.showMessageDialog(this, "白方認輸,游戲結束!");
					可以播放=假;
				}
				可以播放=假;
			}
		}

賦予“游戲說明”按鈕功能

如果 (e.getX() >= 392 && e.getX() <= 493 && e.getY() >= 388
				&& e.getY() <= 427) {
			JOptionPane.showMessageDialog(這個,
					“這是一個五子棋游戲程序,黑白雙方輪流下棋,一方接五,游戲結束。作者曾磊”);
		}

判斷輸贏

私人布爾 checkWin() {
		布爾標志 = 假;
		// 保存連接了多少相同顏色的塊
		整數計數 = 1;
		//判斷水平方向是否有5個連接。特征縱坐標相同,即allChess[x][y]中的y值相同
		int color = allChess[x][y];
		//判斷水平
		count = this.checkCount(1, 0, color);
		如果(計數> = 5){
			標志=真;
		} 別的 {
			//判斷垂直
			count = this.checkCount(0, 1, color);
			如果(計數> = 5){
				標志=真;
			} 別的 {
				//判斷右上和左下
				count = this.checkCount(1, -1, color);
				如果(計數> = 5){
					標志=真;
				} 別的 {
					//判斷右下角和左上角
					count = this.checkCount(1, 1, color);
					如果(計數> = 5){
						標志=真;
					}
				}
			}
		}
		返回標志;
	}
	//判斷連接的片數
	私人 int checkCount(int xChange, int yChange, int color) {
		整數計數 = 1;
		int tempX = xChange;
		int tempY = yChange;
		而 (x + xChange >= 0 && x + xChange <= 18 && y + yChange >= 0
				&& y + yChange <= 18
				&& 顏色 == allChess[x + xChange][y + yChange]) {
			計數++;
			如果 (xChange != 0)
				x改變++;
			如果(yChange!= 0){
				如果 (yChange > 0)
					y改變++;
				別的 {
					y改變--;
				}
			}
		}
		xChange = tempX;
		yChange = tempY;
		而 (x - xChange >= 0 && x - xChange <= 18 && y - yChange >= 0
				&& y - yChange <= 18
				&& 顏色 == allChess[x - xChange][y - yChange]) {
			計數++;
			如果 (xChange != 0)
				x改變++;
			如果(yChange!= 0){
				如果 (yChange > 0)
					y改變++;
				別的 {
					y改變--;
				}
			}
		}
		返回計數;
	}

檢測時限

公共無效運行(){
		// TODO 自動生成的方法存根
		//判斷是否有時間限制
		如果(最大時間> 0){
			而(真){
				if (isBlack&&canPlay) {
					黑色時間——;
					如果(黑色時間 == 0){
						JOptionPane.showMessageDialog(this, "黑方超時,游戲結束!");
					}
				} 否則 if(!isBlack&&canPlay) {
					白色時間——;
					如果(whiteTime == 0){
						JOptionPane.showMessageDialog(this, "白方超時,游戲結束!");
					}
				}
				blackMessage = blackTime / 3600 + ":"
						+ (blackTime / 60 - blackTime / 3600 * 60) + ":"
						+ (blackTime - blackTime / 60 * 60);
				whiteMessage = whiteTime / 3600 + ":"
						+ (whiteTime / 60 - whiteTime / 3600 * 60) + ":"
						+ (whiteTime - whiteTime / 60 * 60);
				this.repaint();
				嘗試 {
					線程.sleep(1000);
				} 捕捉(InterruptedException e){
					// TODO 自動生成的 catch 塊
					e.printStackTrace();
				}
				System.out.println(blackTime + " -- " + whiteTime);
			}
		}
	}

 

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 天天干天天射天天 | 日本精品视频一视频高清 | 人人澡 人人澡 人人看欧美 | 成人综合网址 | 欧美爽爽 | 亚洲天堂不卡 | 午夜骚| 99爱网站| 狠狠的干狠狠的操 | 久久久久久久久中文字幕 | 久久一本精品 | 四虎影院成人在线观看 | 色噜噜国产精品视频一区二区 | 在线播放成人毛片免费视 | 99热久久久久久久免费观看 | 午夜剧场毛片 | 成人免费毛片视频 | 亚洲欧美激情精品一区二区 | 久久国产精品网 | 国产美女久久久 | 国产福利影院在线观看 | 黄色短视频在线播放 | 欧美三级a| 在线看片不卡 | 99re这里只有精品国产精品 | 久久精品国产99久久香蕉 | 日韩精品一区二区三区毛片 | 亚洲国产精品线播放 | 国产精品真实对白精彩久久 | 老司机福利深夜亚洲入口 | 97精品国产| 九九在线观看高清免费 | 久久精品国产亚洲婷婷 | 欧美一区二区三区在线视频 | 亚洲欧美日韩综合在线 | 四虎精品永久在线 | 香蕉视频黄色片 | 久久在线精品视频 | 最新精品国产 | 99久久99久久 | 久99久热 |