日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

java五子棋小游戲實現代碼

瀏覽:28日期:2022-08-08 17:26:41
前言

之前學完java基礎課程,試著簡單做了一下java的一個五子棋小游戲,記錄下來。

界面

由于直接用的java庫中的一些基本控件寫的一個GUI,并沒有做過多優化,感覺比較丑下面是界面展示:

java五子棋小游戲實現代碼

黑子先行,但是我這邊簡化規則,并沒有考慮黑子先行的一些禁手。

下面直接貼代碼

接口類

我把五子棋界面的一些常量都定義在了這個接口類中,包括棋盤的起始坐標,棋盤線的間距和棋子半徑

public interface constant { int[][] chessLocation = new int[15][15]; static final int x = 50; //左上角位置 static final int y = 50; static final int LN = 15; //棋盤一些常量 static final int R = 45;}實現類

接口

這個類中繼承了 constant、MouseListener、ActionListener三個接口

其中:

constant為自己定義 MouseListener為鼠標監聽 ActionListener為事件監聽

函數

show()繪制窗口基本框架paint()繪制棋盤網格線和棋子IsWin()判斷輸贏的基本邏輯mouseClicked()獲取鼠標位置,判斷棋子落點等actionPerformed()判斷鼠標點擊哪個按鈕(開始游戲or認輸or悔棋)執行相應操作

import java.awt.Color;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JPanel;public class game_logic extends JPanel implements constant, MouseListener, ActionListener { int chess_x = 0, chess_y = 0; int X = 0, Y = 0; boolean IsBlack = true; //判斷黑白 boolean flag = false; //是否已經開始游戲 //生成三個響應按鈕 JFrame frame = new JFrame(); JButton start = new JButton('開始游戲'); JButton regret = new JButton('悔棋'); JButton Lost = new JButton('認輸'); public void ShowUI() {frame.setSize(740, 800);frame.setTitle('五子棋');frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//點擊關閉結束程序frame.setLocationRelativeTo(null);//窗口居中frame.setVisible(true);//窗體可視化frame.setResizable(false);//窗體大小不可調整frame.add(this);this.setBackground(Color.LIGHT_GRAY);//設置背景顏色this.addMouseListener(this);//窗體中添加鼠標監聽器start.setSize(50, 80);//設置按鈕大小start.addActionListener(this);//按鈕添加事件監聽器Lost.setSize(50, 80);Lost.addActionListener(this);regret.setSize(50, 80);regret.addActionListener(this);this.add(start);//添加按鈕到棋盤上this.add(Lost);this.add(regret); } /** * 繪制方法 * 繪制五子棋棋盤 * @param g */ @Override public void paint(Graphics g) {super.paint(g);for (int i = 0; i < LN; i++) { //畫棋盤 g.drawLine(x, y + i * R, x + (LN - 1) * R, y + i * R);//行*15 g.drawLine(x + i * R, y, x + i * R, y + (LN - 1) * R);//列*15}for (int i = 0; i < LN; i++) { //畫棋子 for (int j = 0; j < LN; j++) {if (chessLocation[i][j] == 1) { g.setColor(Color.BLACK);//黑棋先行 g.fillOval(50 + i * R - 23, 50 + j * R - 23, R, R);}if (chessLocation[i][j] == 2) { g.setColor(Color.WHITE); g.fillOval(50 + i * R - 23, 50 + j * R - 23, R, R);}repaint(); }} } /** *判斷輸贏 * */ public int IsWin() {int k = 0;for (int f = 2; f < 12; f++) { for (int g = 2; g < 12; g++) {if (chessLocation[f][g] == 1) { if (chessLocation[f][g] == chessLocation[f - 1][g] && chessLocation[f - 1][g] == chessLocation[f - 2][g] && chessLocation[f - 2][g] == chessLocation[f + 1][g] && chessLocation[f + 1][g] == chessLocation[f + 2][g]) {k = 1;break; } if (chessLocation[f][g] == chessLocation[f][g - 1] && chessLocation[f][g - 1] == chessLocation[f][g - 2] && chessLocation[f][g - 2] == chessLocation[f][g + 1] && chessLocation[f][g + 1] == chessLocation[f][g + 2]) {k = 1;break; } if (chessLocation[f][g] == chessLocation[f - 1][g - 1] && chessLocation[f - 1][g - 1] == chessLocation[f - 2][g - 2] && chessLocation[f - 2][g - 2] == chessLocation[f + 1][g + 1] && chessLocation[f + 1][g + 1] == chessLocation[f + 2][g + 2]) {k = 1;break; } if (chessLocation[f][g] == chessLocation[f - 1][g + 1] && chessLocation[f - 1][g + 1] == chessLocation[f - 2][g + 2] && chessLocation[f - 2][g + 2] == chessLocation[f + 1][g - 1] && chessLocation[f + 1][g - 1] == chessLocation[f + 2][g - 2]) {k = 1;break; }}if (chessLocation[f][g] == 2) { if (chessLocation[f][g] == chessLocation[f - 1][g] && chessLocation[f - 1][g] == chessLocation[f - 2][g] && chessLocation[f - 2][g] == chessLocation[f + 1][g] && chessLocation[f + 1][g] == chessLocation[f + 2][g]) {k = 2;break; } if (chessLocation[f][g] == chessLocation[f][g - 1] && chessLocation[f][g - 1] == chessLocation[f][g - 2] && chessLocation[f][g - 2] == chessLocation[f][g + 1] && chessLocation[f][g + 1] == chessLocation[f][g + 2]) {k = 2;break; } if (chessLocation[f][g] == chessLocation[f - 1][g - 1] && chessLocation[f - 1][g - 1] == chessLocation[f - 2][g - 2] && chessLocation[f - 2][g - 2] == chessLocation[f + 1][g + 1] && chessLocation[f + 1][g + 1] == chessLocation[f + 2][g + 2]) {k = 2;break; } if (chessLocation[f][g] == chessLocation[f - 1][g + 1] && chessLocation[f - 1][g + 1] == chessLocation[f - 2][g + 2] && chessLocation[f - 2][g + 2] == chessLocation[f + 1][g - 1] && chessLocation[f + 1][g - 1] == chessLocation[f + 2][g - 2]) {k = 2;break; }} }}return k; } @Override public void mouseClicked(MouseEvent e) {X = e.getX();Y = e.getY(); //獲取鼠標位置if (flag == true) { if (X >= 25 && X <= 705 && Y >= 25 && Y <= 705) { //比棋盤稍微大一點的落子判定范圍,即棋盤邊緣位置//應該安放的棋子的位置chess_x = (X - 20) / R;chess_y = (Y - 20) / R;if (chessLocation[chess_x][chess_y] == 0) { //存儲棋子狀態,轉換棋子顏色 if (IsBlack == true) {chessLocation[chess_x][chess_y] = 1;IsBlack = false; } else {chessLocation[chess_x][chess_y] = 2;IsBlack = true; } if (IsWin() == 1) {JOptionPane.showMessageDialog(this, '黑棋獲勝');flag = false; } if (IsWin() == 2) {JOptionPane.showMessageDialog(this, '白棋獲勝');flag = false; } repaint();} }} } @Override public void mousePressed(MouseEvent e) { } @Override public void mouseReleased(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } @Override public void actionPerformed(ActionEvent e) {String buttonName = e.getActionCommand();if (buttonName.equals('開始游戲') && flag == false) {//開始游戲,棋盤清空 flag = true; for (int i = 0; i < LN; i++) {for (int j = 0; j < LN; j++) { chessLocation[i][j] = 0;} } IsBlack = true; repaint();}if (buttonName.equals('認輸') && flag == true) { flag = false; if (IsBlack) {JOptionPane.showMessageDialog(this, ',白棋認輸,黑棋獲勝'); } else {JOptionPane.showMessageDialog(this, ',黑棋認輸,白棋獲勝'); }}if (buttonName.equals('悔棋') && flag == true) { if (chessLocation[chess_x][chess_y] == 1) {JOptionPane.showMessageDialog(this, '黑方悔棋'); } if (chessLocation[chess_x][chess_y] == 2) {JOptionPane.showMessageDialog(this, '白方悔棋'); } chessLocation[chess_x][chess_y] = 0; IsBlack = !IsBlack; repaint();} }}

其中比較有趣的是五子棋判贏方式,假設棋盤大小15*15,則我只需要判斷正中間的13*13d的格子,向兩邊擴展,判斷是否五子連珠。

具體說明代碼里都有注釋,不多贅述。

主函數類

public class Main_game { public static void main(String[] args) {game_logic start=new game_logic();start.ShowUI(); }}總結

實現了五子棋小游戲的基本功能,但是略感粗糙,細節不足。對于基本控件調用一學就會,做一個小的游戲demo這是對流程控制和操作邏輯的訓練很有效的一種方式。之前看了別人的代碼覺得簡單,但是自己寫的時候往往邏輯流程難以連續,思維混亂,有些過程只有自己寫了才知道其中的坑。

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

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久久国产精品网站| 亚洲人成在线影院| 日韩av一区二| 亚洲播播91| 久久亚洲影院| 日韩精品成人在线观看| 中文字幕在线视频网站| 亚洲+小说+欧美+激情+另类| 日韩中文影院| 国产精品久久久网站| 国产韩日影视精品| 久久精品毛片| 日韩中文一区二区| 日韩高清中文字幕一区二区| 日韩精品视频一区二区三区| 日韩视频网站在线观看| 欧美激情精品| 日韩精品免费观看视频| 中日韩男男gay无套| 精品网站999| 亚洲专区视频| 国产亚洲福利| 黄色成人91| 久久久天天操| 丝袜av一区| 黄色在线网站噜噜噜| 精品一二三区| 日韩av二区| 美女免费视频一区| 国产日产精品_国产精品毛片| 久久高清国产| 国产亚洲毛片| 亚洲精品麻豆| 日韩精品视频网| 国产精品入口久久| 亚洲一区二区三区高清不卡| 欧美二区视频| 欧美aa在线观看| 日本精品黄色| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 精品国产亚洲一区二区三区在线 | 97精品中文字幕| 久久精品国产久精国产| 国产精品久久久久久av公交车| 国产欧美日本| 久久a爱视频| 日韩1区在线| 亚欧成人精品| 亚洲免费在线| 日韩国产欧美| 久久午夜影院| 国产日韩欧美一区在线| 欧美aa国产视频| 国产一区一一区高清不卡| 亚洲影院天堂中文av色| 久久91导航| 国产精品入口久久| 日韩精品久久理论片| 女人天堂亚洲aⅴ在线观看| 国产福利一区二区精品秒拍| 精品视频国内| 蜜臀国产一区二区三区在线播放| 日本电影久久久| 9999国产精品| 国产韩日影视精品| 亚洲精品一区二区在线播放∴| 久久亚洲黄色| 男女性色大片免费观看一区二区| 欧美成人精品午夜一区二区| 亚洲一区日韩| 成人亚洲欧美| 日韩一区精品视频| 精品国产亚洲日本| 视频一区日韩精品| 亚洲精品888| 久久久久久自在自线| 日本午夜精品| 亚洲香蕉网站| 日韩久久视频| 少妇高潮一区二区三区99| 久久美女性网| 成人在线视频免费| 欧美一级网址| 日韩激情一二三区| 亚洲综合不卡| 亚洲综合日本| 丝瓜av网站精品一区二区| 国产v日韩v欧美v| 国产日韩欧美中文在线| 韩国精品主播一区二区在线观看| 国产精品免费精品自在线观看| 亚洲无线观看| 亚洲精品在线a| 中文视频一区| 一区二区精品| 婷婷激情综合| 免费成人av在线播放| 久久九九国产| 欧美日韩免费看片| 国产白浆在线免费观看| 丰满少妇一区| 国产成人精品免费视| 最新日韩av| 亚洲深夜影院| 美日韩精品视频| 日韩制服丝袜先锋影音| 伊人久久亚洲影院| 中文一区二区| 亚洲一区欧美| 欧美亚洲三区| 久久国产日韩欧美精品| 欧美中文一区| 国产极品模特精品一二| 精品美女视频 | 国产精品呻吟| 在线一区二区三区视频| 欧美精品自拍| 91久久精品无嫩草影院| av不卡免费看| 亲子伦视频一区二区三区| 国产伦精品一区二区三区在线播放| 三级亚洲高清视频| 欧美高清一区| 欧美一区三区| 久久精品毛片| 麻豆精品视频在线观看| 亚洲一级大片| 丝袜美腿高跟呻吟高潮一区| 色爱av综合网| 色婷婷综合网| 久久激情五月激情| 精品网站999| 91一区二区| 欧美日韩激情在线一区二区三区| 99精品综合| 精品精品99| 福利一区和二区| 国产精品二区不卡| 成人国产精品| 99久久婷婷这里只有精品| 久久精品国产大片免费观看| 麻豆mv在线观看| 亚洲欧洲美洲av| 亚洲啊v在线| 日韩精品免费一区二区在线观看 | 国产调教一区二区三区| 婷婷精品在线| 日韩欧美中文字幕在线视频| 亚洲欧美日本国产| 国产丝袜一区| 欧美黄色一区| 精品午夜av| 中文字幕在线免费观看视频| 久久女人天堂| 久久精品一区二区国产| 欧美国产偷国产精品三区| 黄色在线网站噜噜噜| 激情综合自拍| 亚洲美女91| 国产一区二区三区久久久久久久久| 日韩黄色大片| 国产美女视频一区二区| 欧美一区二区三区高清视频| 国产一精品一av一免费爽爽| 欧美韩日一区| 午夜一级久久| 国产精品成久久久久| 免费日韩视频| 精品久久一区| 亚洲精选91| 天堂资源在线亚洲| 国产精品久久久网站| 在线视频精品| 日韩国产欧美| 国产精品九九| 日韩午夜黄色| 中文在线а√天堂| 麻豆精品视频在线| 亚洲一区二区免费在线观看| 久久久久美女| 国产一区2区| 亚洲精品九九| 亚洲少妇在线| 天堂中文av在线资源库| 久久国产乱子精品免费女| 国产精品视区| 亚洲激情不卡| 亚洲一区中文| 欧美日韩国产综合网| 成人看片网站| 韩日一区二区| 九九99久久精品在免费线bt| 国产毛片一区二区三区 | 免费视频一区二区| 亚洲欧美日本视频在线观看| 欧美大黑bbbbbbbbb在线| 婷婷精品视频| 日韩精彩视频在线观看| 亚洲高清成人| 亚洲精品福利电影|