admin 管理员组文章数量: 1087817
Java制作五子棋 V1.0
第一步:写一个接口(GoBangDataConfig)
对于棋盘来说,棋盘的起始点,棋子以及网格的大小,有几行有几列,这些都是固定的,那么接下来我们在写界面类的时候就可以让类去继承这个接口。
public interface GoBangDataConfig {//五子棋基本属性//棋盘/*** 棋盘起始点坐标*/static final int X = 50;static final int Y = 50;/*** 棋子以及网格大小*/static final int SIZE = 50;/*** 行列值*/static final int C = 10;static final int R = 10;
}
第二步:画棋盘UI
a、简单写一个界面,继承JFrame,去使用它的一些组件(标题,尺寸大小,关闭进程,可视化)
b、重写JFrame的paint(Graphics g)方法,在其中画出棋盘。
import java.awt.Graphics;import javax.swing.JFrame;public class GoBangUI extends JFrame implements GoBangDataConfig {public static void main(String[] args) {GoBangUI gui = new GoBangUI();gui.initGobangUI();}public void initGobangUI() {setTitle("AI Gobang");setSize(900,700);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setVisible(true);//鼠标下棋监听器GoBangListeners gl = new GoBangListeners();addMouseListener(gl);//获取Graphics gGraphics g = getGraphics();//传入监听器中gl.g = g;}//重写paint方法 刷新界面的时候 出来棋盘//自动调用public void paint(Graphics g) {super.paint(g);for (int i = 0;i<=C;i++) {g.drawLine(X, Y+i*SIZE, C*SIZE+X, Y+i*SIZE);g.drawLine(X+i*SIZE, Y, X+i*SIZE, R*SIZE+Y);}}
}
ps.如果不在paint里面把棋盘画好的话,那么运行的开始你是看不到棋盘的,再就是如果你窗口最小化再打开的话,棋盘是会不见的,所以就决定了在paint方法里面画出这个棋盘,并且里面还有一部分就是画棋子。
第三步:实现鼠标监听器,当按下鼠标时,画一个棋子,确定其位置,并且实现3D棋子的效果。
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;public class GoBangListeners implements MouseListener,GoBangDataConfig{Graphics g;int flag = 0;public void mouseClicked(MouseEvent e) {}/*** Invoked when a mouse button has been pressed on a component.*/public void mousePressed(MouseEvent e) {int x = e.getX();int y = e.getY();//限定下棋的范围if(x>(SIZE*C+X)||y>(SIZE*R+Y)) {return;}//计算坐标值 行列值 int chessC = (x-X+SIZE/2)/SIZE;//间距一致--int 整数 取出浮点数部分int chessR = (y-Y+SIZE/2)/SIZE;//轮流下棋 坐标值int chessX = chessC*SIZE+X;int chessY = chessR*SIZE+Y;if(flag == 0) {draw3DChess(chessX-SIZE/2, chessY-SIZE/2, SIZE, "黑棋");flag++;}else if(flag == 1) {draw3DChess(chessX-SIZE/2, chessY-SIZE/2, SIZE, "白棋");flag = 0;}/*** 3D棋子*/}/*** Invoked when a mouse button has been released on a component.*/public void mouseReleased(MouseEvent e) {}/*** Invoked when the mouse enters a component.*/public void mouseEntered(MouseEvent e) {}/*** Invoked when the mouse exits a component.*/public void mouseExited(MouseEvent e) {}
我们要实现棋子下在直线与直线的焦点上,而不是随意的任何地方,所以首先我们要计算行列值,就是你点击的坐标最靠近几行几列,我们从棋盘的起始点开始算
我们先来计算列值,就要用到x坐标,起始点的x坐标为50,当我们去点击x坐标为165时它的列值就要是2,点击x坐标为185时它的列值就要是3,只需要加上格子的一半再除以格子的SIZE就好了
int chessC = (x-X+SIZE/2)/SIZE,行值以此类推。
有了行列值,再去计算坐标值。
接下来,我们完成3D棋子的方法:draw3DChess
五子棋的3D只是多个棋子叠加起来,由大而变小
public void draw3DChess(int x,int y,int SIZE,String chessType) {for(int i = 0;i<SIZE;i++) {if(chessType.equals("黑棋")) {Color color = new Color(i*5,i*5,i*5);g.setColor(color);}else if(chessType.equals("白棋")) {Color color = new Color(155+i*2,155+i*2,155+i*2);g.setColor(color); }g.fillOval(x+i/2, y+i/2, SIZE-i, SIZE-i);}}
这里用到RGB三原色,三原色的数值范围0-255,黑色:(0,0,0)白色(255,255,255)
红色(255,0,0)绿色(0,255,0)蓝色(0,0,255)
所以要画黑棋,数值就越小,且3色数值要相等,白色也是同理。
好了,后续我们会完成棋子的保存,还有悔棋重绘棋子以及判断输赢,或者更多的扩展功能。
本文标签: Java制作五子棋 V10
版权声明:本文标题:Java制作五子棋 V1.0 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1687416714a100164.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论