亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? chessboard.java

?? Java五子棋程序 本軟件使用JAVA語言實現(xiàn)
?? JAVA
字號:
package five;

/**
 * @author 張聰
 *
 */

import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.io.IOException;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class ChessBoard extends JPanel {

	public final static int MARGIN_VALUE = 30;

	public final static int GRID_ROWS = 15;

	public final static int GRID_COLS = 15;

	private final int grid_span = Chess.DIAMETER + 2;

	private Chess[] chessList;

	ChessMain app;

	public ChessBoard(ChessMain appl) {
		chessList = new Chess[(GRID_ROWS + 1) * (GRID_COLS + 1)];
		this.app = appl;

		// 設置鼠標手勢,默認的或者手形的.
		addMouseMotionListener(new MouseMotionAdapter() {
			public void mouseMoved(MouseEvent e) {
				// 網(wǎng)絡沒有連接上 或者 等待對方下棋
				if (!app.isConnected() || !app.isReady()){
					setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
					return;
				}

				Point p = positionToIndex(e.getX(), e.getY());
				if (p.x < 0 || p.x > GRID_ROWS || p.y < 0 || p.y > GRID_COLS) {
					setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
					return;
				}

				if (!exists(p.x, p.y)) {
					setCursor(new Cursor(Cursor.HAND_CURSOR));
				} else {
					setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
				}
			}
		});

		addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {

				// 網(wǎng)絡沒有連接上
				if (!app.isConnected())
					return;

				// 等待對方下棋
				if (!app.isReady()) {
					return;
				}

				// int x = (e.getX() - MARGIN_VALUE) / grid_span;
				// int y = (e.getY() - MARGIN_VALUE) / grid_span;
				// 轉(zhuǎn)換成網(wǎng)格索引,從0開始
				Point p = positionToIndex(e.getX(), e.getY());
				int x = p.x;
				int y = p.y;

				// 點到了棋盤外
				if (x < 0 || x > GRID_ROWS || y < 0 || y > GRID_COLS)
					return;

				// 該地方已經(jīng)下過棋
				if (exists(x, y))
					return;

				Color c = app.getUserColor();
				Chess chess = new Chess(x, y, Chess.DIAMETER, c);
				try {
					app.sendData(chess);
				} catch (IOException ex) {
					ex.printStackTrace();
					JOptionPane.showMessageDialog(ChessBoard.this, "網(wǎng)絡連接異常!");
				}

			}

		});
		
		// 設置棋盤背景顏色
		setBackground(new Color(99, 135, 113));

	}

	// 清理棋盤
	public void clearBoard() {
		for (int i = 0; i < chessList.length; i++) {
			chessList[i] = null;
		}
		repaint();

	}

	private Point indexToPosition(int x, int y) {
		return new Point(x * grid_span - Chess.DIAMETER / 2 + MARGIN_VALUE, y
				* grid_span + MARGIN_VALUE - Chess.DIAMETER / 2);
	}

	private Point positionToIndex(int x, int y) {
		return new Point((x - MARGIN_VALUE + Chess.DIAMETER / 2) / grid_span,
				(y - MARGIN_VALUE + Chess.DIAMETER / 2) / grid_span);
	}

	// 判斷索引為x, y的棋子是否已經(jīng)存在
	private boolean exists(int x, int y) {
		for (int i = 0; i < chessList.length; i++) {
			if (chessList[i] != null) {
				if (chessList[i].getX() == x && chessList[i].getY() == y)
					return true;
			}
		}

		return false;

	}
	
	public boolean addChess(Chess ch) {
		for (int i = 0; i < chessList.length; i++) {
			if (chessList[i] == null) {
				chessList[i] = ch;
				break;
			}
		}
		repaint();
		
		return isWin(ch);
	}

	//新增加chess對象,判斷是否能贏
	private boolean isWin(Chess chess) {
		int x = chess.getX();
		int y = chess.getY();
		
		int low_x = Math.max(x-4, 0);
		int low_y = Math.max(y-4, 0);
		
		//行有連續(xù)五子
			loop1 :
			for(int i=low_x; i<=x; i++) {
				boolean result = true;
				for(int j=i; j<i+5; j++) {
					if(j>GRID_ROWS)
						continue loop1;
					if(getChess(j, chess.getY(), chess.getColor()) == null) {
						result = false;
					}
				}
				if(result)
					return true;
			}

		//列有連續(xù)五子
			loop2 :
			for(int i=low_y; i<=y; i++) {
				boolean result = true;
				for(int j=i; j<i+5; j++) {
					if(j>GRID_COLS)
						continue loop2;
					if(getChess(chess.getX(), j, chess.getColor()) == null) {
						result = false;
					}
				}
				if(result)
					return true;
		}
		//斜有連續(xù)五子
			loop3 :
		for(int i=low_x, j=low_y; i<=x && j <= y; i++, j++) {
			boolean result = true;
			for(int k=0; k<5; k++) {
				if(i+k > GRID_ROWS || j+k > GRID_COLS)
					continue loop3;
				if(getChess(i+k, j+k, chess.getColor()) == null) {
					result = false;
				}
			}
			if(result)
				return true;
		}

		//斜有連續(xù)五子
			loop4 :
		for(int i=x+4, j=y-4; i>=x && j <= y; i--, j++) {
			boolean result = true;
			for(int k=0; k<5; k++) {
				if(i-k < 0 || j+k > GRID_COLS || i-k >GRID_ROWS || j+k < 0)
					continue loop4;
				if(getChess(i-k, j+k, chess.getColor()) == null) {
					result = false;
				}
			}
			if(result)
				return true;
		}
		
		
		return false;
	}
	
	private Chess getChess(int x, int y, Color c) {
		for(int i=0; i<chessList.length && chessList[i] != null; i++) {
			boolean b = true;
			if( x != -1) //-1則不需要比較,不做限制
				b = b && chessList[i].getX() == x;
			if( y != -1)
				b = b && chessList[i].getY() == y;
			b = b && chessList[i].getColor() == c;
			if(b)
				return chessList[i];
		}
		return null;
	}
	
	// 畫棋盤
	private void drawChessBoard(Graphics g) {
		for (int i = 0; i <= GRID_ROWS; i++) {
			g.setColor(Color.BLACK);
			g.drawLine(MARGIN_VALUE, MARGIN_VALUE + i * grid_span, MARGIN_VALUE
					+ GRID_ROWS * grid_span, MARGIN_VALUE + i * grid_span);
		}
		for (int i = 0; i <= GRID_COLS; i++) {
			g.setColor(Color.BLACK);
			g.drawLine(MARGIN_VALUE + i * grid_span, MARGIN_VALUE, MARGIN_VALUE
					+ i * grid_span, MARGIN_VALUE + GRID_ROWS * grid_span);
		}

	}

	// 畫棋子
	private void drawChessList(Graphics g) {
		int count = 0;
		for (int i = chessList.length-1; i >= 0 ; i--) {
			if (chessList[i] != null) {
				count++;

				Point p = indexToPosition(chessList[i].getX(), chessList[i]
						.getY());
				g.setColor(chessList[i].getColor());
				g.fillOval(p.x, p.y, chessList[i].getDiameter(), chessList[i]
						.getDiameter());
				
				//新下的棋, 帶綠色邊
				if(count == 1 || count == 2) {
					g.setColor(Color.green);
					g.drawOval(p.x, p.y, chessList[i].getDiameter(), chessList[i]
					                                   						.getDiameter());
				}
			}

		}
	}


	public Dimension getPreferredSize() {
		// TODO Auto-generated method stub
		return new Dimension(grid_span * GRID_ROWS + MARGIN_VALUE * 2,
				grid_span * GRID_COLS + MARGIN_VALUE * 2);
	}
	

	public Dimension getMinimumSize() {
		// TODO Auto-generated method stub
		return getPreferredSize();
	}

	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		drawChessBoard(g);
		drawChessList(g);
	}

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品77777竹菊影视小说| 欧美精品vⅰdeose4hd| 欧美在线三级电影| 日韩欧美你懂的| 亚洲伦在线观看| 国内久久婷婷综合| 欧美精品1区2区3区| 国产精品久久久久久久久图文区| 视频一区在线视频| 欧美在线一区二区| 国产精品国产三级国产aⅴ原创| 激情小说亚洲一区| 欧美巨大另类极品videosbest | 99九九99九九九视频精品| 日韩一级免费观看| 性久久久久久久久| 欧美性受xxxx黑人xyx| 亚洲欧美国产三级| 波多野结衣在线一区| 久久久久青草大香线综合精品| 欧美96一区二区免费视频| 欧美三级视频在线观看| 亚洲精品久久久久久国产精华液| 成人美女在线观看| 国产精品福利一区二区| 波多野结衣亚洲一区| 中文字幕不卡三区| av激情综合网| 亚洲日本护士毛茸茸| 97精品久久久久中文字幕| 国产精品国模大尺度视频| 不卡电影一区二区三区| 午夜伊人狠狠久久| 色94色欧美sute亚洲线路一久| 欧美国产欧美亚州国产日韩mv天天看完整| 久久99热狠狠色一区二区| 日韩丝袜情趣美女图片| 精品中文字幕一区二区| 久久亚洲综合av| 风间由美一区二区av101| 欧美极品aⅴ影院| 成人免费观看av| 1区2区3区欧美| 欧美综合在线视频| 日韩 欧美一区二区三区| 欧美一二三四在线| 国产精品1024| 亚洲卡通欧美制服中文| 精品视频一区二区不卡| 麻豆中文一区二区| 中文字幕av一区二区三区| 色婷婷综合久久久久中文| 午夜精品在线视频一区| 欧美tickling网站挠脚心| 成人精品在线视频观看| 亚洲图片一区二区| 欧美成人一区二区三区片免费| 成人午夜激情在线| 亚洲一二三四久久| 久久影院视频免费| 一本色道久久综合亚洲aⅴ蜜桃| 亚洲高清中文字幕| 久久―日本道色综合久久| 91色九色蝌蚪| 乱中年女人伦av一区二区| 国产精品美女视频| 日韩一区二区在线观看视频播放| 成人中文字幕合集| 日韩高清一级片| 亚洲婷婷国产精品电影人久久| 欧美日韩免费视频| 国产91高潮流白浆在线麻豆| 亚洲成人自拍一区| 中文字幕欧美日本乱码一线二线| 欧美三级欧美一级| 成人免费av网站| 久久99久久精品| 亚洲一区日韩精品中文字幕| 久久在线免费观看| 91精品麻豆日日躁夜夜躁| 不卡一区中文字幕| 黄网站免费久久| 天天色天天操综合| 一区二区三区欧美日| 久久久精品国产99久久精品芒果 | 欧美一区二区三区成人| 97se亚洲国产综合自在线观| 久久99精品国产.久久久久久| 亚洲精品伦理在线| 国产精品视频一区二区三区不卡| 8x8x8国产精品| 色综合天天综合狠狠| 国产精品77777竹菊影视小说| 青草av.久久免费一区| 亚洲影视资源网| 中文字幕在线观看一区二区| 午夜久久电影网| 亚洲欧美一区二区三区极速播放| 国产欧美日韩精品a在线观看| 日韩视频国产视频| 3d动漫精品啪啪一区二区竹菊| 91色|porny| 99re这里只有精品视频首页| 国产剧情一区在线| 激情欧美日韩一区二区| 日韩电影在线一区二区三区| 五月天亚洲婷婷| 三级欧美韩日大片在线看| 亚洲成人av中文| 亚洲国产视频a| 一二三四社区欧美黄| 亚洲一区二区成人在线观看| 亚洲裸体在线观看| 亚洲一区二区三区自拍| 亚洲风情在线资源站| 亚洲国产日日夜夜| 日韩精品成人一区二区三区| 日本视频在线一区| 麻豆精品一区二区| 国产美女久久久久| 成人激情开心网| 91在线视频网址| 欧美亚洲一区二区在线观看| 欧美日韩一本到| 日韩午夜激情电影| 久久品道一品道久久精品| 国产人成亚洲第一网站在线播放 | 成人免费观看男女羞羞视频| 国产不卡视频在线播放| www.日韩在线| 欧美日韩免费一区二区三区| 91精品福利在线一区二区三区| 精品区一区二区| 国产精品久久久久久一区二区三区 | 日本最新不卡在线| 国内成人自拍视频| 波多野洁衣一区| 制服丝袜激情欧洲亚洲| 亚洲精品视频一区| 亚洲一区二区三区美女| 男女性色大片免费观看一区二区 | 亚洲一区av在线| 日韩国产欧美视频| 国产传媒欧美日韩成人| 91丨九色丨黑人外教| 69久久夜色精品国产69蝌蚪网| 精品国产免费视频| 亚洲精品成人在线| 久久精品国产久精国产爱| 成人国产亚洲欧美成人综合网| 欧洲生活片亚洲生活在线观看| 制服丝袜国产精品| 国产女同互慰高潮91漫画| 亚洲一区二区三区四区五区黄| 麻豆视频一区二区| 色噜噜偷拍精品综合在线| 日韩欧美一级精品久久| 成人欧美一区二区三区白人| 蜜桃在线一区二区三区| 99久久国产综合精品女不卡| 日韩精品一区二区三区老鸭窝 | 99久久久久免费精品国产| 欧美另类videos死尸| 国产精品美女久久久久久久 | 精品国精品国产尤物美女| 最新日韩在线视频| 极品少妇一区二区| 欧美妇女性影城| 中文字幕一区二区三区精华液| 人妖欧美一区二区| 欧美综合亚洲图片综合区| 久久色在线视频| 免费久久99精品国产| 色婷婷综合五月| 亚洲欧洲精品天堂一级| 国产伦精一区二区三区| 91精品国产综合久久福利 | 欧美日韩你懂得| 亚洲男人天堂av网| 成人精品视频.| 26uuu亚洲| 国内精品视频666| 欧美一二区视频| 日韩精品电影一区亚洲| 欧美羞羞免费网站| 一区二区三区蜜桃| 91在线porny国产在线看| 国产精品美女久久久久久久网站| 国产在线精品免费| 欧美精品一区二区蜜臀亚洲| 日韩av网站在线观看| 欧美年轻男男videosbes| 亚洲国产精品久久人人爱| 色综合久久中文字幕| 综合精品久久久| www.性欧美| 一区二区视频在线| 欧美性猛交xxxxxxxx| 亚洲午夜免费电影| 欧美日韩一本到|