
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 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;//屏幕高度 |
int[][] allChess = new int[19][19];//用来保存全部棋子 |
boolean canPlay = true;//判断游戏是否能继续 |
int x = 0;//棋子的坐标 |
int y = 0; |
boolean isBlack = true;//判断当前棋子的颜色 |
//对窗口进行初始化 |
public FiveChessFrame() { |
setTitle("五子棋"); |
setSize(500, 500); |
setLocation((width - 500) / 2, (height - 500) / 2); |
setResizable(false); |
addMouseListener(this); |
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); |
setVisible(true); |
} |
//画五子棋 |
public void paint(Graphics g) { |
g.setFont(new Font("黑体", Font.BOLD, 20)); |
g.drawString("游戏信息", 120, 60); |
g.setFont(new Font("宋体", Font.BOLD, 12)); |
g.drawString("黑方时间", 60, 480); |
g.drawString("白方时间", 260, 480); |
//画棋盘 |
//画19条横线 |
int y_index = 0; |
for (int i = 0; i < 19; i++) { |
g.drawLine(12, 73 + y_index, 372, 73 + y_index); |
y_index += 20; |
} |
//画19条纵线 |
int x_index = 0; |
for (int i = 0; i < 19; i++) { |
g.drawLine(12 + x_index, 73, 12 + x_index, 433); |
x_index += 20; |
} |
//画四个点 |
g.fillOval(70, 131, 4, 4); |
g.fillOval(310, 131, 4, 4); |
g.fillOval(70, 371, 4, 4); |
g.fillOval(310, 371, 4, 4); |
//画全部棋子 |
for (int i = 0; i < 19; i++) { |
for (int j = 0; j < 19; j++) { |
if (this.allChess[i][j] == 1) { |
//画黑子 |
int tempX = i * 20 + 12; |
int tempY = j * 20 + 73; |
g.fillOval(tempX - 7, tempY - 7, 14, 14); |
} |
if (this.allChess[i][j] == 2) { |
//画白子 |
int tempX = i * 20 + 12; |
int tempY = j * 20 + 73; |
g.setColor(Color.WHITE); |
g.fillOval(tempX - 7, tempY - 7, 14, 14); |
g.setColor(Color.BLACK); |
g.drawOval(tempX - 7, tempY - 7, 14, 14); |
} |
} |
} |
} |
@Override |
public void mouseClicked(MouseEvent e) { |
// TODO Auto-generated method stub |
} |
@Override |
public void mousePressed(MouseEvent e) { |
// TODO Auto-generated method stub |
if (canPlay == false) { |
return; |
} |
System.out.println(e.getX() + "---" + e.getY()); |
x = e.getX(); |
y = e.getY(); |
if (x >= 12 && x <= 372 && y >= 73 && y < 433) { |
x = (x - 12) / 19; |
y = (y - 73) / 19; |
if (allChess[x][y] == 0) { |
if (this.isBlack == true) { |
allChess[x][y] = 1; |
isBlack = false; |
} else { |
allChess[x][y] = 2; |
isBlack = true; |
} |
//判断这个棋子是否和其他棋子连成5个 |
boolean winFlag = this.Check_Win(); |
if (winFlag) { |
JOptionPane.showMessageDialog(this, "游戏结束," |
+ (allChess[x][y] == 1 ? "黑方" : "白方") + "获胜"); |
canPlay = false; |
} |
} else { |
JOptionPane.showMessageDialog(this, "当前已有棋子,不能再下了!"); |
} |
this.repaint(); |
} |
} |
//判断是否获胜 |
private boolean Check_Win() { |
boolean flag = false; |
//保存共有多少相同颜色的棋子相连 |
int count = 1; |
//先判断横向,特点,y坐标相同,即allChess[x][y]中y相同 |
//判断这个棋子的颜色 |
int color = this.allChess[x][y]; |
count = Check_Count(1, 0, color); |
if (count >= 5) { |
flag = true; |
} else { |
//判断纵向 |
count = Check_Count(0, 1, color); |
if (count >= 5) { |
flag = true; |
} else { |
//判断右上,左下 |
count = Check_Count(1, -1, color); |
if (count >= 5) { |
flag = true; |
} else { |
//判断左上,右下 |
count = Check_Count(1, 1, color); |
if (count >= 5) { |
flag = true; |
} |
} |
} |
} |
return flag; |
} |
|
//得到棋子的数目 |
private int Check_Count(int xChange, int yChange, int color) { |
int count = 1; |
int tempX = xChange; |
int tempY = yChange; |
while (color == this.allChess[x + xChange][y + yChange]) { |
count++; |
if (xChange != 0) { |
xChange++; |
} |
if (yChange != 0) { |
if (yChange > 0) |
yChange++; |
if (yChange < 0) |
yChange--; |
} |
} |
xChange = tempX; |
yChange = tempY; |
while (color == |
|
this.allChess[x - xChange][y - yChange]) { |
count++; |
if (xChange != 0) { |
xChange++; |
} |
if (yChange != 0) { |
if (yChange > 0) |
yChange++; |
if (yChange < 0) |
yChange--; |
} |
} |
return count; |
} |
@Override |
public void mouseReleased(MouseEvent e) { |
// TODO Auto-generated method stub |
} |
@Override |
public void mouseEntered(MouseEvent e) { |
// TODO Auto-generated method stub |
} |
@Override |
public void mouseExited(MouseEvent e) { |
// TODO Auto-generated method stub |
} |
} |
//测试类 |
public class Test { |
public static void main(String[] args){ |
new FiveChessFrame(); |
} |
} |




初级程序员
by: 584521926 发表于:2016-02-18 17:18:09 顶(1) | 踩(0) 回复
感谢分享!
回复评论