ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

用JavaSwing实现五子棋小游戏

2021-12-21 22:34:17  阅读:188  来源: 互联网

标签:category JavaSwing int 五子棋 小游戏 && import PIECE SIZE


  1 package FiveChess;
  2 import java.awt.Color;
  3 import java.awt.Dimension;
  4 import java.awt.Font;
  5 import java.awt.Graphics;
  6 import java.awt.event.KeyAdapter;
  7 import java.awt.event.KeyEvent;
  8 import java.awt.event.KeyListener;
  9 import java.awt.event.MouseAdapter;
 10 import java.awt.event.MouseEvent;
 11 import java.awt.image.BufferedImage;
 12 import java.io.File;
 13 import java.io.IOException;
 14 
 15 import javax.imageio.ImageIO;
 16 import javax.swing.*;
 17 
 18 /**
 19  * 
 20  * @author WENRUI
 21  *
 22  */
 23 public class Game {
 24     
 25     //the three elements of board
 26     BufferedImage black;
 27     BufferedImage white;
 28     BufferedImage table;
 29     
 30     //the size of elements
 31      final int BOARD_WIDTH = 535;
 32      final int BOARD_HEIGHT = 536;
 33      final int PIECE_SIZE = 15;
 34      final int PIECE_RATE = BOARD_WIDTH/PIECE_SIZE;
 35      final int X_OFFSET = 5;
 36      final int Y_OFFSET = 6;
 37 
 38      
 39      //kind、order and state
 40      int [][] category = new int[PIECE_SIZE][PIECE_SIZE];//0:null,1:while,2:black
 41      int order = 1;//1:white piece to be down,2:black piece to be down
 42      String state = "RUNNING";
 43      
 44      //painting
 45      public class ChessBoard extends JPanel{
 46          @Override
 47          public void paint(Graphics g) {
 48              g.drawImage(table,0,0,null);
 49              for(int i = 0;i < PIECE_SIZE;i++)
 50                  for(int j = 0;j < PIECE_SIZE;j++) {
 51                      
 52                      if(category[i][j] == 1) {
 53                          g.drawImage(white,i*PIECE_RATE+X_OFFSET,j*PIECE_RATE+Y_OFFSET,null);
 54                      }
 55                      else if(category[i][j] == 2) {
 56                          g.drawImage(black,i*PIECE_RATE+X_OFFSET,j*PIECE_RATE+Y_OFFSET,null);
 57                      }
 58                  }
 59              
 60              if(state != "RUNNING") {
 61                  
 62                  g.setColor(new Color(0xffffff));
 63                  g.setFont(new Font(Font.SERIF,Font.BOLD,30));
 64                  g.drawString(state, 200, 200);
 65                  g.drawString("q:退出  r:再来一局",200,350);
 66              }
 67          }
 68          
 69      }
 70      
 71      //Swing
 72      JFrame gameFrame = new JFrame("the five chess");
 73      ChessBoard chessBoard = new ChessBoard(); 
 74      
 75      //judging
 76      public boolean isOver(int a,int b) {
 77          
 78          int i,j;
 79          //horizontal
 80          for(i = a-4, j = b; i <= a; i++) {
 81              if(i > 0 && j < PIECE_SIZE && category[i][j] == category[i+1][j] 
 82                      && category[i][j] == category[i+2][j] 
 83                      && category[i][j] == category[i+3][j]
 84                      && category[i][j] == category[i+4][j])
 85                  return true;
 86          }
 87              
 88              
 89          //vertical
 90          for(j = b-4, i = a; j <= b; j++) {
 91              if(j > 0 && i < PIECE_SIZE && category[i][j] == category[i][j+1]
 92                      &&category[i][j] == category[i][j+2]
 93                      &&category[i][j] == category[i][j+3]
 94                      &&category[i][j] == category[i][j+4])
 95                  return true;
 96          }
 97          
 98          //upper left
 99          for(i = a-4, j = b-4; i <= a&&j <= b; i++,j++) {
100              if(i > 0 && i < PIECE_SIZE && j >0 &&j< PIECE_SIZE &&category[i][j] == category[i+1][j+1]
101                      &&category[i][j] == category[i+2][j+2]
102                      &&category[i][j] == category[i+3][j+3]
103                      &&category[i][j] == category[i+4][j+4])
104                  return true;
105          }
106          
107          //upper right
108          for(i = a-4, b = b+4; i <= a&& j >= b; i++,j--) {
109              if(i > 0 && i < PIECE_SIZE && j >0 &&j< PIECE_SIZE &&category[i][j] == category[i+1][j-1]
110                      &&category[i][j] == category[i+2][j-2]
111                      &&category[i][j] == category[i+3][j-3]
112                      &&category[i][j] == category[i+4][j-4])
113                 return true;
114          }
115          
116          return false;
117      }
118      
119     public void init() throws IOException {
120         table = ImageIO.read(new File("src//image//board.jpg"));
121         white = ImageIO.read(new File("src//image//white.gif"));
122         black = ImageIO.read(new File("src//image//black.gif"));
123         //the ImageIo must be set in functions,in order to throw IOException
124         
125         chessBoard.addMouseListener(new MouseAdapter() {
126                 @Override
127                 public void mouseClicked(MouseEvent e) {
128                     int xPos = (e.getX()-X_OFFSET)/PIECE_RATE;
129                     int yPos = (e.getY()-Y_OFFSET)/PIECE_RATE;
130                     if(order == 1){
131                         category[xPos][yPos] = 1;
132                         order = 2;
133                     }
134                     else if(order == 2) {
135                          category[xPos][yPos] = 2;
136                          order = 1;
137                     }
138                     if(isOver(xPos,yPos)) {
139                         if(order == 1)
140                             state = "BLACKWIN";
141                         else if(order == 2)
142                             state = "WHITEWHI";
143                     }
144                     chessBoard.repaint();
145                     
146                     
147                 }});
148         
149         
150         chessBoard.addKeyListener(new KeyAdapter() {
151             @Override
152             public void keyPressed(KeyEvent e) {
153                 
154                 int key = e.getKeyCode();
155                 if( state != "RUNNING")
156                 {
157                     if(key == KeyEvent.VK_Q ) {
158                         System.exit(0);
159                     }
160                         
161                     else if(key == KeyEvent.VK_R) {
162                         for(int i = 0;i < PIECE_SIZE; i++)
163                             for(int j =0; j < PIECE_SIZE; j++) 
164                                 category[i][j] = 0;
165                                 
166                         state = "RUNNING";
167                         chessBoard.repaint();
168                             }
169                     }
170                 }
171         });
172         chessBoard.setFocusable(true);//不知为啥要加这一句,但好像加了KeyListener就有效了
173         
174         
175         
176         
177         chessBoard.setPreferredSize(new Dimension(BOARD_WIDTH,BOARD_HEIGHT));
178         gameFrame.add(chessBoard);
179         gameFrame.pack();
180         gameFrame.setVisible(true);
181     }
182     
183 
184     public static void main(String args[]) throws IOException {
185         new Game().init();
186     }
187 }

大二上学期刚学完JavaSwing时写的,试了几遍没太大问题,也许有不成熟和出错的地方,还请园子大佬们包涵和赐教

以下是我的图片资源地址

https://files.cnblogs.com/files/blogs/718940/image.zip

标签:category,JavaSwing,int,五子棋,小游戏,&&,import,PIECE,SIZE
来源: https://www.cnblogs.com/JT3895/p/15717471.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有