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

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

java五子棋小游戲?qū)崿F(xiàn)代碼

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

之前學(xué)完java基礎(chǔ)課程,試著簡(jiǎn)單做了一下java的一個(gè)五子棋小游戲,記錄下來(lái)。

界面

由于直接用的java庫(kù)中的一些基本控件寫的一個(gè)GUI,并沒(méi)有做過(guò)多優(yōu)化,感覺(jué)比較丑下面是界面展示:

java五子棋小游戲?qū)崿F(xiàn)代碼

黑子先行,但是我這邊簡(jiǎn)化規(guī)則,并沒(méi)有考慮黑子先行的一些禁手。

下面直接貼代碼

接口類

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

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;}實(shí)現(xiàn)類

接口

這個(gè)類中繼承了 constant、MouseListener、ActionListener三個(gè)接口

其中:

constant為自己定義 MouseListener為鼠標(biāo)監(jiān)聽(tīng) ActionListener為事件監(jiān)聽(tīng)

函數(shù)

show()繪制窗口基本框架paint()繪制棋盤網(wǎng)格線和棋子IsWin()判斷輸贏的基本邏輯mouseClicked()獲取鼠標(biāo)位置,判斷棋子落點(diǎn)等actionPerformed()判斷鼠標(biāo)點(diǎn)擊哪個(gè)按鈕(開(kāi)始游戲or認(rèn)輸or悔棋)執(zhí)行相應(yīng)操作

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; //是否已經(jīng)開(kāi)始游戲 //生成三個(gè)響應(yīng)按鈕 JFrame frame = new JFrame(); JButton start = new JButton('開(kāi)始游戲'); JButton regret = new JButton('悔棋'); JButton Lost = new JButton('認(rèn)輸'); public void ShowUI() {frame.setSize(740, 800);frame.setTitle('五子棋');frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//點(diǎn)擊關(guān)閉結(jié)束程序frame.setLocationRelativeTo(null);//窗口居中frame.setVisible(true);//窗體可視化frame.setResizable(false);//窗體大小不可調(diào)整frame.add(this);this.setBackground(Color.LIGHT_GRAY);//設(shè)置背景顏色this.addMouseListener(this);//窗體中添加鼠標(biāo)監(jiān)聽(tīng)器start.setSize(50, 80);//設(shè)置按鈕大小start.addActionListener(this);//按鈕添加事件監(jiān)聽(tīng)器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++) { //畫(huà)棋盤 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++) { //畫(huà)棋子 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(); //獲取鼠標(biāo)位置if (flag == true) { if (X >= 25 && X <= 705 && Y >= 25 && Y <= 705) { //比棋盤稍微大一點(diǎn)的落子判定范圍,即棋盤邊緣位置//應(yīng)該安放的棋子的位置chess_x = (X - 20) / R;chess_y = (Y - 20) / R;if (chessLocation[chess_x][chess_y] == 0) { //存儲(chǔ)棋子狀態(tài),轉(zhuǎn)換棋子顏色 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('開(kāi)始游戲') && flag == false) {//開(kāi)始游戲,棋盤清空 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('認(rèn)輸') && flag == true) { flag = false; if (IsBlack) {JOptionPane.showMessageDialog(this, ',白棋認(rèn)輸,黑棋獲勝'); } else {JOptionPane.showMessageDialog(this, ',黑棋認(rèn)輸,白棋獲勝'); }}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();} }}

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

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

主函數(shù)類

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

實(shí)現(xiàn)了五子棋小游戲的基本功能,但是略感粗糙,細(xì)節(jié)不足。對(duì)于基本控件調(diào)用一學(xué)就會(huì),做一個(gè)小的游戲demo這是對(duì)流程控制和操作邏輯的訓(xùn)練很有效的一種方式。之前看了別人的代碼覺(jué)得簡(jiǎn)單,但是自己寫的時(shí)候往往邏輯流程難以連續(xù),思維混亂,有些過(guò)程只有自己寫了才知道其中的坑。

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

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
黄色在线一区| 97久久超碰| 国产91欧美| 精品中文在线| 国产91在线播放精品| 国产成人精品三级高清久久91| 久久成人av| 精品欧美日韩精品| 国产第一亚洲| 亚洲精品国产嫩草在线观看 | 日本精品另类| 免费人成精品欧美精品| 国产精品呻吟| 亚洲精品黄色| 91p九色成人| 国产精品极品国产中出| 精品日本视频| 99久久亚洲精品| 欧美午夜不卡影院在线观看完整版免费| 人人精品亚洲| 亚洲一区二区动漫| 日韩精品免费一区二区夜夜嗨| 日韩精品一级| 精品视频在线观看网站| 色偷偷色偷偷色偷偷在线视频| 亚洲特级毛片| 中文精品在线| 青青国产精品| 中文字幕在线官网| 国产99精品| 蜜桃视频在线观看一区| 欧美视频久久| 日韩欧美另类一区二区| 国产亚洲精品久久久久婷婷瑜伽| 亚洲精品一级| 国产精品巨作av| 成人午夜精品| 丝袜诱惑制服诱惑色一区在线观看| 日韩三区四区| 色综合五月天| 在线综合欧美| 国产精品一区二区免费福利视频| 精品一区二区三区在线观看视频| 91精品一区国产高清在线gif| 亚洲久久视频| 精品日韩一区| 日韩精品一区第一页| 九九九精品视频| 黑丝美女一区二区| 欧美日本久久| 亚洲夜间福利| 国产探花一区在线观看| 麻豆精品蜜桃| 91麻豆精品激情在线观看最新| 成人一区而且| 自拍自偷一区二区三区| 免费精品一区| 伊人成人网在线看| 卡一卡二国产精品| 鲁大师影院一区二区三区| 国产探花一区| 视频一区二区中文字幕| 精品日本视频| 日韩精品91亚洲二区在线观看| 成人啊v在线| 青青草国产精品亚洲专区无| 色吊丝一区二区| 国产精品久久久网站| 欧美亚洲国产一区| 国产午夜久久av| 樱桃成人精品视频在线播放| 国产精品啊v在线| 亚洲a一区二区三区| 欧美亚洲tv| 欧美/亚洲一区| 精品淫伦v久久水蜜桃| 亚州国产精品| 91久久久精品国产| 黑人精品一区| 国产调教精品| 免费日本视频一区| 久久久久久久久久久9不雅视频| 久久狠狠亚洲综合| 久久国产66| 99精品在线免费在线观看| 国产欧美精品久久| 视频一区在线视频| 日韩国产一区二区三区| 欧美亚洲一区二区三区| 国产精品毛片| 亚洲不卡av不卡一区二区| 国产激情一区| 日韩精品午夜视频| 最新日韩欧美| 天堂√中文最新版在线| 美女高潮久久久| 欧美一级久久| 亚洲精品无播放器在线播放| 亚洲欧洲一区二区天堂久久| 日韩欧美中文| 国产精品久久久久久久久久10秀| 蜜芽一区二区三区| 国产一区二区三区四区| 精品国产亚洲日本| 欧美va天堂在线| 国产精品yjizz视频网| 精品资源在线| 韩国久久久久久| 日韩在线电影| 亚洲一区网站| 国产一区二区中文| 久久久国产亚洲精品| 成人在线丰满少妇av| 欧美黄色一区二区| 国产精品久久久久av蜜臀| 日韩激情中文字幕| 日韩中出av| 99在线精品免费视频九九视| 久久国产中文字幕| 999久久久免费精品国产| 国产精品国产三级国产在线观看| 欧美激情日韩| 国产精品第一国产精品| 国产日韩一区| 国产精品久久久久77777丨 | 丁香婷婷久久| 精品视频网站| 精品国产一区二| 精品久久免费| 成人高清一区| 色爱综合网欧美| 欧产日产国产精品视频| 日韩欧美1区| 成人久久一区| 欧美另类综合| 视频一区在线视频| 综合亚洲色图| 日韩精品高清不卡| 国产日韩一区| 精品亚洲成人| 欧美精品高清| 国产精品7m凸凹视频分类| 日韩一区二区免费看| 亚洲一区二区毛片| 日韩av不卡一区二区| 日本欧美一区二区| 国产精品最新| 国产精品国产一区| 亚洲婷婷在线| 中文字幕免费一区二区| 欧美亚洲自偷自偷| 国产一区二区三区国产精品| 91精品国产91久久久久久黑人| 欧美精品九九| 日韩高清在线观看一区二区| 国产精品天堂蜜av在线播放| 福利精品一区| 女人天堂亚洲aⅴ在线观看| 在线精品国产亚洲| 国产精品永久| 在线看片国产福利你懂的| 青青青免费在线视频| 久久精品高清| 婷婷久久免费视频| 红杏一区二区三区| jiujiure精品视频播放| 亚洲精品乱码日韩| 黄色网一区二区| 蜜臀久久99精品久久一区二区| 中文无码日韩欧| 免费精品一区| 激情久久久久久| 日韩激情综合| 日韩一区电影| 亚洲激情二区| 国产精品免费大片| 日韩在线视频精品| 视频国产精品| 日韩电影免费网址| 综合日韩在线| 天堂av在线| 亚洲欧洲免费| 正在播放日韩精品| 色狠狠一区二区三区| 精品国产乱码久久久| 自由日本语亚洲人高潮| 国产精品v日韩精品v欧美精品网站| 秋霞影院一区二区三区| 亚洲精品乱码日韩| 欧洲在线一区| 国产亚洲字幕| 日本精品影院| 国产精品久久久久毛片大屁完整版| 久久久久蜜桃| 国产极品久久久久久久久波多结野| 一区在线视频观看| 捆绑调教美女网站视频一区| 在线精品一区二区| 久久婷婷激情| 国产精品一国产精品k频道56|