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

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

java實現單機版五子棋小游戲

瀏覽:29日期:2022-08-19 09:48:14

簡單的java小游戲?單機版五子棋

學了java有一段時間了,今天就來搞一個簡單的單機版五子棋游戲。

實現功能:那必須能進行基礎的輸贏判斷。還有重新開始的功能,悔棋的功能,先手設置的功能和退出的功能。在右上角能夠顯示目前輪到哪個棋種下棋。右下角還有一個記錄信息框,記錄行為,當信息量過多時,可以清除信息內容。

成果:

初始界面:

java實現單機版五子棋小游戲

游戲(獲勝)界面:

java實現單機版五子棋小游戲

附上代碼:

Chessframe.java

package firstgobang;import javax.swing.JFrame;import javax.swing.WindowConstants;public class ChessFrame extends JFrame{ public ChessBoard chessboard; public ChessFrame(String title){ setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); setTitle(title); setVisible(true); setLocationRelativeTo(null); chessboard = new ChessBoard(); add(chessboard); pack(); } public static void main(String[] args) { ChessFrame chessframe = new ChessFrame('單機版五子棋游戲'); }}

ChessBoard.java

package firstgobang;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.awt.Graphics;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.util.Random;import java.util.Stack;import javax.swing.*;public class ChessBoard extends JComponent{ /* *board為1時是白棋,為2時是黑棋,為0時是空 *whitenow為true時,到白棋下,為false時,到黑棋下 *empty為true時,該位置為空,為false,該位置不為空 *win為true,某方勝利,為false,無勝利 *information用來儲存消息 */ public static int x_start = 30; public static int y_start = 60; public static int size = 30; public static int radius = 10; private int[][] board = new int[19][19]; private boolean whitenow = false; private boolean empty = true; private boolean win = false; private JTextArea area; private String information=''; private static Stack<Chess> chessstack; //棧 class Chess{ //棋類,用于儲存棋子的x,y坐標 int x; int y; public Chess(int x,int y) { this.x=x; this.y=y; } } public ChessBoard() { chessstack = new Stack<>(); area = new JTextArea(5,5); JButton button1 = new JButton('重新開始'); JButton button2 = new JButton('悔棋'); JButton button3 = new JButton('退出'); JButton button4 = new JButton('先手設置'); JButton button5 = new JButton('清空消息'); JPanel panel = new JPanel(); JScrollPane js = new JScrollPane(); button1.setBounds(620,60,100,30); button2.setBounds(620,110,100,30); button3.setBounds(620,160,100,30); button4.setBounds(620,210,100,30); button5.setBounds(620,260,100,30); panel.setBounds(600,310,140,300); js.setBounds(600,310,140,300); panel.setLayout(new BorderLayout()); add(button1); add(button2); add(button3); add(button4); add(button5); panel.add(area); js.getViewport().add(panel); js.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); add(js); button1.addMouseListener(new b1Action()); button2.addMouseListener(new b2Action()); button3.addMouseListener(new b3Action()); button4.addMouseListener(new b4Action()); button5.addMouseListener(new b5Action()); addMouseListener(new theMouseListener()); } public void paint(Graphics g) { super.paint(g); g.setColor(Color.orange); g.fillRect(x_start-size/2,y_start-size/2, size*19, size*19); g.setColor(Color.black); // 橫 for (int i = 0; i < 19; i++) { g.drawLine(x_start, y_start + i * size, x_start+18*size, y_start + i * size); g.drawString(((Integer)i).toString(),x_start/2-radius,y_start + i * size); } // 豎 for (int i = 0; i < 19; i++) { g.drawLine(x_start + i * size, y_start, x_start + i * size, y_start+18*size); g.drawString(((Integer)i).toString(),x_start + i * size,y_start/2+radius); } for (int i = 0; i < 19; i++) { for (int j = 0; j < 19; j++) { if (board[i][j] == 1) { g.setColor(Color.white); g.fillOval(x_start-radius + i * size, y_start-radius + j * size, radius*2,radius*2); g.setColor(Color.black); g.drawOval(x_start-radius + i * size, y_start-radius + j * size, radius*2,radius*2); } if (board[i][j] == 2) { g.setColor(Color.black); g.fillOval(x_start-radius + i * size, y_start-radius + j * size, radius*2,radius*2); } } } g.setFont(new Font('微軟雅黑',Font.BOLD,15)); g.drawString('現在輪到', 600, 35); if(whitenow==true) { g.setColor(Color.white); g.fillOval(680, 20, 20,20); g.setColor(Color.black); g.drawOval(680, 20, 20,20); } if(whitenow==false) { g.setColor(Color.black); g.fillOval(680, 20, 20,20); } } public Dimension getPreferredSize() { return new Dimension(750,650); } public class theMouseListener implements MouseListener{ //下棋 public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { int x=getx(e.getX()); int y=gety(e.getY()); try { if(board[x][y] !=0)empty = false; } catch (Exception e1) { } if (e.getX() > x_start-size/2 && e.getX() < x_start+size/2+18*size && e.getY() > y_start-size/2 && e.getY() < y_start+size/2+18*size) { if(empty == true) { Chess chess = new Chess(x,y); chessstack.push(chess); if (whitenow == true) { writeinformation('白棋下了'+'('+x+','+y+')'+'的位置'); board[x][y]=1; repaint(); } if (whitenow == false){ writeinformation('黑棋下了'+'('+x+','+y+')'+'的位置'); board[x][y]=2; repaint(); } iswin(whitenow,x,y); if(win==true) { if(whitenow==true) { writeinformation('白棋獲勝!'); JOptionPane.showInternalMessageDialog(null, '白棋獲勝', '提示框', JOptionPane.INFORMATION_MESSAGE); } else { writeinformation('黑棋獲勝!'); JOptionPane.showInternalMessageDialog(null, '黑棋獲勝', '提示框', JOptionPane.INFORMATION_MESSAGE); } } if(chessstack.size()==361) { writeinformation('和局'); JOptionPane.showInternalMessageDialog(null, '和局', '提示框', JOptionPane.INFORMATION_MESSAGE); } whitenow=!whitenow; } else { JOptionPane.showInternalMessageDialog(null, '該位置已有棋子!', '提示框', JOptionPane.INFORMATION_MESSAGE); empty=true; } } } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } } class b1Action implements MouseListener{ //重新開始按鈕 public void mouseClicked(MouseEvent e) { int a = JOptionPane.showConfirmDialog(null,'你確定重新開始?', '提示框', JOptionPane.YES_NO_OPTION); if(a==0) cleanstart(); } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } } class b2Action implements MouseListener{ //悔棋按鈕 public void mouseClicked(MouseEvent e) { int a = JOptionPane.showConfirmDialog(null,'你確定悔棋?', '提示框', JOptionPane.YES_NO_OPTION); if(a==0) { if(chessstack.size()>0) { Chess chess1 = chessstack.pop(); if(whitenow)writeinformation('黑棋悔棋,坐標'+'('+chess1.x+','+chess1.y+')'); if(!whitenow)writeinformation('白棋悔棋,坐標'+'('+chess1.x+','+chess1.y+')'); board[chess1.x][chess1.y]=0; whitenow=!whitenow; repaint(); } else { JOptionPane.showInternalMessageDialog(null, '不能在悔棋了!', '提示框', JOptionPane.INFORMATION_MESSAGE); } } } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } } class b3Action implements MouseListener{ //退出按鈕 public void mouseClicked(MouseEvent e) { int a = JOptionPane.showConfirmDialog(null,'你確定退出游戲?', '提示框', JOptionPane.YES_NO_OPTION); if(a==0) { System.exit(0); } } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } } class b4Action implements MouseListener{ //先手設置按鈕 public void mouseClicked(MouseEvent e) { if(chessstack.size()==0) { Object[] possibleValues = { '白棋', '黑棋', '隨機' }; Object a = JOptionPane.showInputDialog(null, '選擇先手的棋子', '提示框', JOptionPane.INFORMATION_MESSAGE, null, possibleValues, possibleValues[0]); if(a=='白棋') whitenow=true; if(a=='黑棋') whitenow=false; if(a=='隨機') { Random random = new Random(); int b =random.nextInt(2); if(b==0)whitenow=true; if(b==1)whitenow=false; } repaint(); } else { JOptionPane.showInternalMessageDialog(null, '戰局已經開始,不能設置','提示框', JOptionPane.INFORMATION_MESSAGE); } } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } } class b5Action implements MouseListener{ //清空消息按鈕 public void mouseClicked(MouseEvent e) { int a = JOptionPane.showConfirmDialog(null,'你確定清空所有消息?', '提示框', JOptionPane.YES_NO_OPTION); if(a==0) { information=''; area.setText(information); } } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } } public void writeinformation(String infor){ //消息寫入 information +=infor+'n'; area.setText(information); } public boolean iswin(boolean whitenow,int startx,int starty) { //勝利判斷 int color = whitenow?1:2; int count = 1; int x=1; int y=1; //橫 while((startx-x)>-1 && board[startx-x][starty]==color) { count++; x++; } x=y=1; while((startx+x)<19 && board[startx+x][starty]==color) { count++; x++; } if(count>=5) { return win = true; } count=x=y=1; //豎 while((starty-y)>-1 && board[startx][starty-y]==color) { count++; y++; } x=y=1; while((starty+y)<19 && board[startx][starty+y]==color) { count++; y++; } if(count>=5) { return win = true; } count=x=y=1; //45右斜 while((startx+x)<19 && (starty-y)>-1 && board[startx+x][starty-y]==color) { count++; x++; y++; } x=y=1; while((startx-x)>-1 && (starty+y)<19 && board[startx-x][starty+y]==color) { count++; x++; y++; } if(count>=5) { return win = true; } count=x=y=1; //135左斜 while((startx-x)>0 && (starty-y)>0 && board[startx-x][starty-y]==color) { count++; x++; y++; } x=y=1; while((startx+x)<19 && (starty+y)<19 && board[startx+x][starty+y]==color) { count++; x++; y++; } if(count>=5) { return win = true; } return false; } private void cleanstart() { //清理棋盤 for(int i=0;i<19;i++) { for(int j=0;j<19;j++) { board[i][j]=0; } } win=false; chessstack.clear(); writeinformation('重新開始戰局!'); repaint(); } private int getx(int x) { //x歸位 x -=x_start; if(x%size<(size/2)) { return x/size; } else { return x/size+1; } } private int gety(int y) { //y歸位 y -=y_start; if(y%size<(size/2)) { return y/size; } else { return y/size+1; } }}

End!

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

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩欧美精品综合| 蜜桃国内精品久久久久软件9| 伊伊综合在线| 国产精品一区二区中文字幕| 欧美99久久| 亚洲女同av| 国产va免费精品观看精品视频| 日韩区欧美区| 午夜亚洲一区| 国产午夜精品一区二区三区欧美| 福利一区二区| 久久精品女人| 国产精品sm| 日本午夜精品久久久| 夜夜精品视频| 99在线精品视频在线观看 | 国产一区二区三区91| 久久激五月天综合精品| 日韩一区二区免费看| 999国产精品视频| 成人亚洲一区二区| 免费在线观看一区| 国产欧美另类| 国产美女亚洲精品7777| 在线观看亚洲精品福利片| 樱桃成人精品视频在线播放| 久久一级电影| 久久亚洲国产| 精品一区欧美| 五月天久久网站| 欧美日韩国产高清| 国产精品毛片在线看| 日韩视频一区| 精品日韩视频| 久久九九国产| 91精品啪在线观看国产18| 欧洲一区二区三区精品| 亚洲成人一区在线观看| 久久中文字幕av一区二区不卡| 久久男人av| 精品一区二区三区免费看| 精品一区二区三区免费看| 麻豆视频在线看| 久久久久国产| 欧美精品一区二区三区精品| 在线综合欧美| 色综合视频一区二区三区日韩| 亚洲精品国产日韩| 亚洲欧洲免费| 久久国产精品久久w女人spa| 午夜久久av| 国产精品高清一区二区| 国产精品chinese| 97精品一区二区| 久久久久免费av| 最新国产拍偷乱拍精品| 亚洲综合小说| 久久99久久久精品欧美| 日韩.com| 欧美在线观看视频一区| 欧洲毛片在线视频免费观看| 国产一区久久| 亚洲影院天堂中文av色| 欧美日韩91| 狠狠久久伊人中文字幕| 欧美福利专区| 日本va欧美va瓶| 精品黄色一级片| 国产精品av久久久久久麻豆网| 日韩在线卡一卡二| 欧美一区激情| 精品日韩视频| 视频在线在亚洲| 免费在线欧美黄色| 性欧美xxxx免费岛国不卡电影| 一区二区精品| 国语对白精品一区二区| 性感美女一区二区在线观看| 黄色亚洲免费| 欧美日韩a区| 国产一区二区中文| 国产免费av一区二区三区| 国产高潮在线| 亚洲一区欧美| 97精品在线| 日韩中文字幕在线一区| 日韩欧美一区二区三区在线观看| 久久国内精品| 西西人体一区二区| 亚洲天堂久久| 日韩亚洲一区在线| 精品国产黄a∨片高清在线| 日本vs亚洲vs韩国一区三区二区| 欧美一级精品| 精品国模一区二区三区| 国产成人精品免费视| 国产精品久久久久毛片大屁完整版| 亚洲资源网站| 伊人久久亚洲| 男人的天堂久久精品| 91国语精品自产拍| 天堂网av成人| 在线一区av| 国产成人精品一区二区三区免费| 久久国产日韩欧美精品| 一本综合精品| 亚洲一区二区小说| 免费在线观看日韩欧美| 欧美日韩国产一区二区三区不卡| 伊人久久在线| 日韩在线综合| 久久久久久黄| 蜜桃tv一区二区三区| 99精品在线观看| 久久亚洲成人| 国产一区欧美| 欧美日韩精品一本二本三本| 91精品国产乱码久久久久久久 | 精品久久福利| 国产精品一线| 麻豆免费精品视频| 国产精品视频一区二区三区| 国产九九精品| 国产精品一区二区三区www| 欧美日韩午夜| 国产美女视频一区二区| 国产精品调教| 欧美国产日韩电影| 国产精品片aa在线观看 | 精品三级久久久| av免费不卡国产观看| 老牛影视精品| 日韩久久视频| 久久天堂成人| 亚洲精品一二三区区别| 亚洲欧美日本国产专区一区| 香蕉成人久久| 日本不卡一区二区| 国产日韩高清一区二区三区在线| 国产精品一区2区3区| 狠狠久久伊人中文字幕| 深夜福利视频一区二区| 亚洲成人二区| 亚洲男女自偷自拍| 视频精品一区| 国产精品一区2区3区| 国产aⅴ精品一区二区四区| 国产精品久久久久久久免费观看| 蜜桃成人精品| 久久午夜精品| 欧美一区影院| 日韩理论视频| 亚洲精品中文字幕乱码| 一级成人国产| 久久久久久久久成人| 国产一区调教| 精品欧美激情在线观看| 四虎国产精品免费久久| 国产精品mv在线观看| 伊人久久av| 久久国产精品99国产| 欧美午夜网站| 日韩欧美一区免费| 日韩精品一卡二卡三卡四卡无卡| 国产亚洲精aa在线看| 日韩欧美中文| 亚洲18在线| 国产成人精品免费视| 亚洲免费观看| 国产精品一区二区三区av麻| 日本国产精品| 日韩精品一区二区三区免费视频| 成人午夜亚洲| 亚洲天堂av资源在线观看| 久久精品国产成人一区二区三区| se01亚洲视频| 亚洲区欧美区| 高清日韩中文字幕| 日本欧洲一区二区| 四虎8848精品成人免费网站 | 欧洲激情综合| 国产九九精品| 欧美福利在线| 麻豆精品99| 久久亚洲风情| 国产高潮在线| 日本久久一区| 四虎4545www国产精品| 日韩三级精品| 久久国产电影| 国产视频网站一区二区三区| 另类中文字幕国产精品| 亚洲91在线| 国内精品99| 国产一区二区三区日韩精品| 91久久久久| av资源中文在线天堂| 日韩精品第二页| 午夜久久tv| 91一区二区|