亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

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

java實現(xiàn)單機版五子棋小游戲

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

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

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

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

成果:

初始界面:

java實現(xiàn)單機版五子棋小游戲

游戲(獲勝)界面:

java實現(xiàn)單機版五子棋小游戲

附上代碼:

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坐標(biāo) 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('先手設(shè)置'); 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('現(xiàn)在輪到', 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('黑棋悔棋,坐標(biāo)'+'('+chess1.x+','+chess1.y+')'); if(!whitenow)writeinformation('白棋悔棋,坐標(biāo)'+'('+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{ //先手設(shè)置按鈕 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, '戰(zhàn)局已經(jīng)開始,不能設(shè)置','提示框', 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('重新開始戰(zhàn)局!'); 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!

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

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 欧美一级片免费 | 国产亚洲一区二区精品张柏芝 | 午夜一级毛片看看 | 国产不卡的一区二区三区四区 | 亚洲欧美日韩国产综合高清 | 97色涩| www日韩免费高清视频 | 日韩不卡视频在线 | 国产v欧美v日本v精品 | 伊人狼人在线 | 同性男男黄h片在线播放免费 | 亚洲国产精品一区二区九九 | 黄色免费一级片 | 亚洲欧美日韩高清专区一区 | 国产久热香蕉在线观看 | 最新国产精品 | 免费观看一级欧美在线视频 | 香蕉婷婷 | 91人人爱| 亚洲综合图片 | 香蕉视频大全 | 国产在线不卡一区 | 美女被啪到深处喷水gif动态图视频 | 一级黄色大片免费 | www.黄视频| 欧美a在线视频 | 91久久精品国产一区二区 | 国产白嫩在线观看视频 | 一级做a爰片性色毛片视频图片 | 日韩在线你懂的 | 一级做a爰片性色毛片视频图片 | 手机看片国产日韩 | 久久久久久久999 | 好大水好多好爽好硬好深视频 | 自拍国内 | 东京道一本热大交乱 | 欧美成人久久一级c片免费 欧美成人午夜不卡在线视频 | 亚洲综合激情九月婷婷 | 欧美成人一区二区三区在线电影 | 日韩专区在线 | 一级毛片在线免费观看 |