各位大佬好! 我现在只贴出了棋盘类的代码 因为这个游戏只有一个主窗口 其它都是面板 用于切换 我现在其他功能都写完 就差个定时器不会添加!有大佬会吗?就是规定一定时间 让黑子下 规定一定时间让白子下!求帮助!!看往哪里加! 界面如图所示 就那个定时器
package vocation1; import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RadialGradientPaint;
import java.awt.RenderingHints;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class ChessBoard extends JPanel { /* * 基本数据定义 */
int span = 40;//网格大小
int margin = 200;//边距
static final int DIAMETER = 40;//棋子直径
int rows = 15;//行
int cols = 15;//列
List<Chess> chessBoard = new ArrayList<>();//保存棋盘
boolean isBlack = true;//是否黑棋落子
//添加一个计时器
public ChessBoard() { //当前窗口添加事件监听 //this.setBackground(new Color(255,130,71));//设置背景色 this.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { //转换成真实的棋盘坐标 int xpos = ((e.getX() - margin + span /2)/span); int ypos = ((e.getY() - margin + span /2)/span); //判断落子方的颜色 Color color = isBlack? Color.black : Color.white; //判断落子是否越界 if(xpos < 0 || ypos < 0 ||xpos >= rows ||ypos >= cols) { //JOptionPane.showMessageDialog(null, "你下的位置已越界"); return ; } //判断落子的位置是否有棋子 for(Chess ch : chessBoard) { if(xpos == ch.getX() && ypos == ch.getY()) { JOptionPane.showMessageDialog(null, "你下的位置已经有棋子了"); return ; } } chessBoard.add(new Chess(xpos,ypos,color));//添加落子位置 repaint();//重新刷新棋盘 //判断是否胜利 if(CheckWin.isWin(chessBoard,xpos,ypos,isBlack)) { String str = isBlack ? "黑棋" : "白棋"; JOptionPane.showMessageDialog(null, "恭喜,"+str+"获得胜利"); return ; } isBlack =! isBlack;//转换棋子颜色 } });
}
public void paint(Graphics g) { super.paint(g); //将画笔转换成2d画笔 Graphics2D g2 = (Graphics2D) g; g.setColor(Color.black); for(int i = 0;i < rows;i++){//画横线 g.drawLine(margin, margin+span*i, margin+span*(cols-1), margin+span*i); } for(int j = 0;j < cols;j++){//画直线 g.drawLine(margin+span*j, margin, margin+span*j,margin+span*(rows-1)); } //给棋盘添加边框 g.drawLine(180,180,180,780); g.drawLine(180,180,780,180); g.drawLine(780,180,780,780); g.drawLine(180,780,780,780); //遍历整个棋盘 for(int i = 0;i < chessBoard.size();++i) { Chess ch = chessBoard.get(i); //还原成网格 int xpos = ch.getX() * span + margin; int ypos = ch.getY() * span + margin; g2.setColor(ch.getColor()); RadialGradientPaint rap = null; if(ch.getColor() == Color.black) { rap = new RadialGradientPaint(xpos - DIAMETER / 2 + 26,ypos - DIAMETER / 2 + 12,20,new float[] {0.0f,1.0f},new Color[] {Color.WHITE,Color.BLACK}); g2.setPaint(rap); }else { //x,y,直径,渐变度,渐变色 rap = new RadialGradientPaint(xpos - DIAMETER / 2 + 25,ypos - DIAMETER / 2 - 30,60,new float[] {0f,1f},new Color[] {Color.BLACK,Color.WHITE}); g2.setPaint(rap); } //去锯齿 g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT); g2.fillOval(xpos - DIAMETER / 2,ypos - DIAMETER / 2,span - 1,span ); //判断棋盘的最后位置 //画红色矩形 g2.setColor(Color.RED); if(i == chessBoard.size() - 1) { g2.draw3DRect(xpos - DIAMETER / 2 - 1, ypos - DIAMETER / 2 -1, span, span + 1, true); } } //绘制 下棋提示信息 g.setFont(new Font("微软雅黑", Font.PLAIN, 40));//绘制需要的字体 g.setColor(Color.black); if(isBlack) { g.drawString("现在轮到黑棋下", 80, 100); }else { g.drawString("现在轮到白棋下", 80, 100); } //给下棋提示信息添加边框 g.setColor(Color.black); g.drawLine(50, 50, 50, 120); g.drawLine(50,50,380,50); g.drawLine(50,120,380,120); g.drawLine(380,50,380,120); //绘制 计时器 g.setFont(new Font("微软雅黑", Font.BOLD, 40)); g.setColor(Color.black);
}
}