用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

java实现五子棋

2016-01-25 作者: 阿啑牛人举报

[java]代码库

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();
	}
}

[代码运行效果截图]


java实现五子棋

[源代码打包下载]




网友评论    (发表评论)

共9 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...