功能还不全的五子棋,现在只实现了走棋

只是基础知识的应用,棋的功能还在完善中.......

代码如下:

package game;

import java.awt.Graphics;
/**
 * 是否在窗口画图
 * @author mt
 *
 */
public interface Drawable {
	public abstract void draw(Graphics g);
}

package game;

import java.awt.Color;
import java.awt.Graphics;

public class Circle implements Drawable {
	private final int SIZE =  15;  //用于决定圆的大小
	private int x,y;   //起点坐标
	private Color color;  //颜色
	/**
	 * 构造器
	 * @param x 起点x坐标
	 * @param y  起点y坐标
	 */
	public Circle(int x, int y) {
		this.x = x;
		this.y = y;
	}
	/**
	 * 设置颜色
	 * @param color  颜色
	 */
	public void setColor(Color color) {
		this.color = color;
	}
/**
 * 画圆的方法
 */
	public void draw(Graphics g) {
		g.setColor(color);
		g.fillOval(x - SIZE, y - SIZE,  SIZE * 2,  SIZE * 2);
	}

}

package game;
/**
 * 点类
 * @author mt
 *
 */
public class Dot {
	private int x;        //点的x坐标
	private int y;       //点的y坐标
	private boolean isUsed;   //判断是否用过
	/**
	 * 构造器
	 * @param x   点的x坐标
	 * @param y   点的y坐标
	 */
	public Dot(int x, int y) {
		this.x = x;
		this.y = y;
	}

	public int getX() {
		return x;
	}
	public void setX(int x) {
		this.x = x;
	}
	public int getY() {
		return y;
	}
	public void setY(int y) {
		this.y = y;
	}
	public boolean isUsed() {
		return isUsed;
	}
	public void setUsed(boolean isUsed) {
		this.isUsed = isUsed;
	}
	
	
	
}

package game;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;

@SuppressWarnings("serial")
public class MyJFrame extends JFrame {
	private BufferedImage offImage = new BufferedImage(850, 850, 1);
	private Circle chess;         //创建一个实心圆来代表棋子
	private boolean isWhite = true; //用于判断是否走白棋 (默认白棋先走)
	private boolean  isBlak = false;  //用于判断是否走黑棋
	private Dot tempDot;     //用点的类创建一个临时记录用的点     (x,y)
	private List<Dot> dot = new ArrayList<Dot>(); //创建一个装点的数组(就是棋盘上的所有线相交的255个点)
	private List<Circle> list = new ArrayList<Circle>(); //创建一个装棋子的数组
	public MyJFrame() {
		this.setSize(850,850);  //设置窗口大小
		this.setTitle("五 子 棋");  //窗口名字
		this.setResizable(false); //设定窗口不能改变大小
		this.setLocationRelativeTo(null);  //居中
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);  //关闭窗口是结束程序

		for (int i = 0; i < 15; i++) {   //把每个255个点装进数组
			for (int j = 0; j < 15; j++) {
				dot.add(new Dot(50+50*i, 50 + 50*j));
			}
		}

		this.addMouseListener(new MouseAdapter() {  //点击鼠标事件

			@Override
			public void mousePressed(MouseEvent e) {
				int x = e.getX();    //获得点击鼠标处的x坐标
				int y = e.getY();     //获得点击鼠标处的y坐标
				for (Dot temp : dot) {  //让点击获得的点和255个点比较,在规定范围的内的都赋值为255个坐标里的点
					if (temp.getX()-25 < x && x < temp.getX()+25) {
						if(temp.getY()-25 <y&& y < temp.getY()+25) {
						x = temp.getX();
						y = temp.getY();
						tempDot = temp;   //把符合条件的点赋值给临时记录点
						}
					}
				}
				 //判断该用黑色还是白色棋子以及是否被用过
				if ( !tempDot.isUsed()) { 
					chess = new Circle(x, y);
					if (isWhite) {
						chess.setColor(Color.WHITE);
						isWhite = false;
						isBlak = true;
					} else if (isBlak) {
						chess.setColor(Color.BLACK);
						isBlak = false;
						isWhite = true;
					}
				}
				list.add(chess);  //把棋子装到数组
				tempDot.setUsed(true); //设置棋子为用过
				repaint();
			}


		});
	}


	@Override
	public void paint(Graphics g) {
		Graphics g3 = offImage.getGraphics();

		super.paint(g3);
		g3.setColor(Color.ORANGE);   //画一个橙色的填充矩形
		g3.fillRect(30, 30, 800, 800);
		g3.setColor(Color.BLACK);
		g3.drawRect(30, 30, 800, 800); //画一个矩形(看起来像有边框)
		for (int i = 0; i < 15; i++) {//画棋盘
			g3.drawLine(50 , 50+ 50 * i , 750, 50+ 50 * i);
			g3.drawLine(50+ 50 * i, 50 , 50+ 50 * i, 750);
		}

		for (Circle temp : list) {
			temp.draw(g3);
		}
		if (chess != null) {
			chess.draw(g3);
		}

		g.drawImage(offImage, 0, 0, null);
	}
}


package game;

public class Test {
	public static void main(String[] args) {
		new MyJFrame().setVisible(true);
	}
}

posted @ 2015-05-12 21:05  乜天  阅读(196)  评论(0编辑  收藏  举报