Java在JFrame 里如何画出围棋框,请出示代码,谢谢!

 我来答
解玉鸿
推荐于2016-01-19 · TA获得超过110个赞
知道答主
回答量:93
采纳率:0%
帮助的人:0
展开全部
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class Test12 extends JFrame implements MouseListener {
JLabel jl = new JLabel("haha");

private int x = 0;

private int y = 0;

int[][] body = new int[20][20];

boolean chessFlag = true;

public void paint(Graphics g) {
// 画棋盘
g.setColor(Color.yellow);// cyan
g.fill3DRect(80, 80, 360, 360, false);// 画矩形用fill
g.setColor(Color.black);
for (int i = 0; i < 19; i++) {
g.drawLine(80, 80 + i * 20, 440, 80 + i * 20);
}
for (int j = 0; j < 19; j++) {
g.drawLine(80 + j * 20, 80, 80 + j * 20, 440);
}

// 画棋子
for (int x = 0; x < body.length; x++) {
System.out.println(body[x][y]);
for (int y = 0; y < body[x].length; y++) {// [0][]
if (body[x][y] != 0) {
if (body[x][y] == 2) {
g.setColor(Color.black);
g.fillOval(x * 20 + 72, y * 20 + 72, 16, 16);

} else {
g.setColor(Color.white);
g.fillOval(x * 20 + 72, y * 20 + 72, 16, 16);
}
}
}
}

}

public Test12() {
this.add(jl);
this.setDefaultCloseOperation(3);
int width = Toolkit.getDefaultToolkit().getScreenSize().width;
int height = Toolkit.getDefaultToolkit().getScreenSize().height;
this.setLocation((width - 500) / 2, (height - 500) / 2);
this.addMouseListener(this);
this.setSize(500, 500);
this.setResizable(false);
this.setVisible(true);

}

public static void main(String[] args) {
new Test12();
}

public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub

}

public void mousePressed(MouseEvent e) {
x = e.getX();
y = e.getY();
if ((x >= 20 && x <= 380) && (y >= 80 && y <= 440)) {
x = Math.round((x - 80) / 20F);
y = Math.round((y - 80) / 20F);

if (body[x][y] == 0) {
System.out.println(body[x][y]);
if (this.chessFlag) {
body[x][y] = 2;// 白子
this.chessFlag = false;
} else {
body[x][y] = 1;// 黑子
this.chessFlag = true;
}

System.out.println(x + " " + y);

this.repaint();
if (gameWinx(x, y)) {
if (body[x][y] == 2) {
JOptionPane.showMessageDialog(this, "黑子胜利");

} else {
JOptionPane.showMessageDialog(this, "白子胜利");
}
}
} else {
JOptionPane.showMessageDialog(this, "此处有棋子");
}
}
}

public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub

}

public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub

}

public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub

}

public boolean gameWinx(int x, int y) // 判断输赢
{

int 记数 = 1;
int 自加 = 1;

while (x + 记数 <= 19 && body[x][y] == body[x + 自加][y]) {
记数++;
自加++;
}
自加 = 1;

while (x - 记数 >= 0 && body[x][y] == body[x - 自加][y]) {
记数++;
自加++;
}
自加 = 1;

while (y + 记数 <= 19 && body[x][y] == body[x][y + 自加]) {
记数++;
自加++;
}
自加 = 1;
while (y - 记数 >= 0 && body[x][y] == body[x][y - 自加]) {
记数++;
自加++;
}
自加 = 1;

while (y - 记数 >= 0 && y + 记数 <= 19
&& body[x][y] == body[x + 自加][y - 自加]) {
记数++;
自加++;
}
自加 = 1;
while (x - 记数 >= 0 && y + 记数 <= 19
&& body[x][y] == body[x - 自加][y + 自加]) {
记数++;
自加++;
}
自加 = 1;

while (x + 记数 <= 190 && y + 记数 <= 19
&& body[x][y] == body[x + 自加][y + 自加]) {
记数++;
自加++;
}
自加 = 1;
while (x - 记数 >= 0 && y - 记数 >= 0 && body[x][y] == body[x - 自加][y - 自加]) {
记数++;
自加++;
}

if (记数 >= 5) {

return true;
}
return false;
}

}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
棋士陈林涛
2009-03-16 · TA获得超过310个赞
知道答主
回答量:192
采纳率:0%
帮助的人:95.6万
展开全部
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式