java-----五子棋小游戏(二)-----黑白棋落子制作

来源:互联网 发布:编程励志图片 编辑:程序博客网 时间:2024/04/30 02:09

一、代码实现

package org.like.game.frame;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Toolkit;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import javax.swing.JFrame;import javax.swing.JOptionPane;public class FiveChessFrame extends JFrame implements MouseListener{int width = Toolkit.getDefaultToolkit().getScreenSize().width;int height = Toolkit.getDefaultToolkit().getScreenSize().height;    BufferedImage bgImage = null;    int x = 0;//存放鼠标点击位置的x坐标    int y = 0;//存放鼠标点击位置的y坐标        int[][] allChess = new int[19][19];//一个19*19的二维数组,0代表无棋子,1代表黑棋,2代表白旗,这样能保存之前的落子,避免repaint后,只有一个棋子显示,默认数组所有值都为0    boolean isBlack = true;//用来判断下一步是否下黑棋    public FiveChessFrame(){this.setTitle("五子棋");this.setSize(500,500);this.setLocation((width-500)/2,(height-500)/2);this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);this.addMouseListener(this);try{bgImage = ImageIO.read(new File("F:/mypicture/java/background.jpg"));}catch (IOException e){e.printStackTrace();}}public void paint(Graphics g){g.drawImage(bgImage,3,20,this);g.setFont(new Font("黑体",Font.BOLD,20));g.drawString("游戏信息:", 150, 50);g.setFont(new Font("宋体",0,14));g.drawString("黑方时间:无限制", 45, 470);g.drawString("白方时间:无限制", 260, 470);for(int i=0;i<19;i++){   g.drawLine(13, 70+20*i, 372, 70+20*i);   g.drawLine(13+20*i,70,13+20*i,430);}g.fillOval(71, 128, 4, 4);g.fillOval(311, 128, 4, 4);g.fillOval(311, 368, 4, 4);g.fillOval(71, 368, 4, 4);g.fillOval(311, 248, 4, 4);g.fillOval(191, 128, 4, 4);g.fillOval(71, 248, 4, 4);g.fillOval(191, 368, 4, 4);g.fillOval(191, 248, 4, 4);for(int i=0;i<19;i++)//输出棋盘上所有的棋子for(int j=0;j<19;j++){if(allChess[i][j] == 1){x = i * 20 + 13;//各个相邻横线和各个相邻竖线的距离是20,棋盘距离边界13y = j * 20 + 70;g.fillOval(x-7, y-7, 14, 14);//画大小为14的圆,x,y都减7使圆心在交叉线处}if(allChess[i][j] == 2){x = i * 20 + 13;y = j * 20 + 70;g.setColor(Color.WHITE);//设置颜色为白色,默认是黑色g.fillOval(x-7, y-7, 14, 14);g.setColor(Color.BLACK);g.drawOval(x-7, y-7, 14, 14);//在实心白圆的外边画一个空心黑圈}}}@Overridepublic void mouseClicked(MouseEvent e){}@Overridepublic void mousePressed(MouseEvent e){    x = e.getX();    y = e.getY();    if(x >= 13 && x <= 372 && y >= 70 && y <= 430)//判断鼠标点击位置是否在棋盘内部    {    x = (x - 13) / 20;//使坐标与二位数组坐标对应起来    y = (y - 70) / 20;    if(allChess[x][y] == 0)//判断那个地方是否有棋子,如果有,就弹出窗口提示    {          if(isBlack)          {        allChess[x][y] = 1;//存储棋盘上这个地方的棋子信息        isBlack = false;//使得下次落子显示白棋          }          else          {        allChess[x][y] = 2;         isBlack = true;//使得下次落子显示黑棋          }          this.repaint();//重新调用paint()绘制一遍        }    else    {    JOptionPane.showMessageDialog(this, "当前位置已经有旗子了,请重新落子!");    }    } }@Overridepublic void mouseReleased(MouseEvent e){}@Overridepublic void mouseEntered(MouseEvent e){}@Overridepublic void mouseExited(MouseEvent e){}public static void main(String[] args){FiveChessFrame ff = new FiveChessFrame(); }}

二、效果展示



0 0
原创粉丝点击