⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mypanel.java

📁 Java平台上实现的五子棋对战程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
			if(line[pos+i]==0) {break;}
			if(line[pos+i]== 2-color) 	{rblock=true; break;}
			if(line[pos+i] == color+1)	{runion++;}
			i++;
		}
		i=2;
		while(pos-i>-1 && line[pos-1]==0){
			if(line[pos-i]==0) {break;}
			if(line[pos-i]== 2-color) 	{lblock=true; break;}
			if(line[pos-i] == color+1)	{lunion++;}
			i++;
		}
		if(lunion==3 && runion==3) return 50;
		if(lunion==2 && !lblock) return 10;
		if(runion==2 && !rblock) return 10;
		if(lunion==3 && lblock) return 12;
		if(runion==3 && rblock)	return 12;
		return -1;
	}
	
	private int checkline(int[] line, int pos, int color, int dir, int []union)
	{
		int weight = 0, count=0, i=dir, max=0;
		boolean firsp = true;
		union[0]=0;
		if(pos+dir==-1 || pos+dir==line.length) return -3; // meet wall
		while(pos+i > -1 && pos+i<line.length)
		{
			if(line[pos+i] == color + 1){ // 遇到己方
				if(firsp) {max++; union[0]=max;}
				else {count++; max=0;}
				if(pos+i == 0 || pos+i == line.length - 1) {weight += 2; break;}
				if(!firsp) weight += 4;
				else {
					if(max==4) return 50;
					weight += 5;
				}
			}
			//else if(line[pos+i]<0) break; //遇到禁手
			else if(line[pos+i]<=0 && firsp){ //遇到第一空
				if(i==dir) break;
				firsp = false;
				weight += 1;
				max = 0;
			}
			else if(line[pos+i]<=0 && !firsp) {//遇到第二空
				if(count>2)
					weight += 1;
				break;
			}
			else {//遇到敌方子
				if(firsp)
					weight -= 3;
				else if(!firsp && (count==0 || count>2)) weight -= 1;
				else if(!firsp && (count>0 && count<3)) weight -= 2;
				break;
			}
			i += dir;
		}
		return weight;
	}
	
	private void shu(int r, int c){
		int line[] = new int[15];
		int left[] = new int[1];
		int right[] = new int[1];
		int temp;
		for(int i=0;i<15;i++)
			line[i] = table[i][c];
		
		temp = checkbase(line, r, mycolor);
		if(temp==-1) temp= checkspecial(line, r, mycolor);
		else p_table[r][c][0] = temp;
		if(temp==-1){
			p_table[r][c][0] = checkline(line, r, mycolor, 1, left) + checkline(line, r, mycolor, -1,right);
			if(left[0]==1 && right[0]==1 && p_table[r][c][0]>=15) p_table[r][c][0]=14; // 隔三差五型
			else if(left[0]==1 && right[0]==1 && p_table[r][c][0]>=12) p_table[r][c][0]=10; // 活三型
			else if(left[0]+right[0]==3 && p_table[r][c][0]>=17) p_table[r][c][0]=16; //活四型
			else if(left[0]+right[0]==4) p_table[r][c][0]=50; // 必胜型
			else if(left[0]+right[0]>4) p_table[r][c][0]=60; // 六子型
		}
		
		temp = checkbase(line, r, 1-mycolor);
		if(temp==-1) temp= checkspecial(line, r, 1-mycolor);
		else c_table[r][c][0] = temp;
		if(temp==-1){
			c_table[r][c][0] = checkline(line, r, 1-mycolor, 1, left) + checkline(line, r, 1-mycolor, -1,right);
			if(left[0]==1 && right[0]==1 && c_table[r][c][0]>=15) c_table[r][c][0]=14;
			else if(left[0]==1 && right[0]==1 && c_table[r][c][0]>=12) c_table[r][c][0]=10; // 活三型
			else if(left[0]+right[0]==3 && c_table[r][c][0]>=17) c_table[r][c][0]=16;
			else if(left[0]+right[0]==4) c_table[r][c][0]=50;
			else if(left[0]+right[0]>4) c_table[r][c][0]=60;
		}
	}
	
	private void heng(int r, int c){
		int line[] = new int[15];
		int left[] = new int[1];
		int right[] = new int[1];
		int temp;
		for(int i=0;i<15;i++)
			line[i] = table[r][i];
		
		temp = checkbase(line, c, mycolor);
		if(temp==-1) temp= checkspecial(line, c, mycolor);
		else p_table[r][c][1] = temp;
		if(temp==-1){
			p_table[r][c][1] = checkline(line, c, mycolor, 1, left) + checkline(line, c, mycolor, -1, right);
			if(left[0]==1 && right[0]==1 && p_table[r][c][0]>=15) p_table[r][c][1]=14;
			else if(left[0]==1 && right[0]==1 && p_table[r][c][1]>=12) p_table[r][c][1]=10; // 活三型
			else if(left[0]+right[0]==3 && p_table[r][c][1]>=17) p_table[r][c][1]=16;
			else if(left[0]+right[0]==4) {p_table[r][c][1]=50;}
			else if(left[0]+right[0]>4) p_table[r][c][1]=60;
		}
		
		temp = checkbase(line, c, 1-mycolor);
		if(temp==-1) temp= checkspecial(line, c, 1-mycolor);
		else c_table[r][c][1] = temp;
		if(temp==-1){
			c_table[r][c][1] = checkline(line, c, 1-mycolor, 1, left) + checkline(line, c, 1-mycolor, -1, right);
			if(left[0]==1 && right[0]==1 && c_table[r][c][0]>=15) c_table[r][c][1]=14;
			else if(left[0]==1 && right[0]==1 && c_table[r][c][1]>=12) c_table[r][c][1]=10; // 活三型
			else if(left[0]+right[0]==3 && c_table[r][c][1]>=17) c_table[r][c][1]=16;
			else if(left[0]+right[0]==4) {c_table[r][c][1]=50;}
			else if(left[0]+right[0]>4) c_table[r][c][1]=60;
		}
	}
	
	private void pie(int r, int c){
		int length, baser, basec;
		int left[] = new int[1];
		int right[] = new int[1];
		int temp;
		if(r+c<=14) {
			length = r+c+1;
			baser = r + c;
			basec = 0;
		}
		else {
			length = 28-r-c+1;
			baser = 14;
			basec = c + r - 14;
		}
		int line[] = new int[length];
		for(int i=0;i<length;i++)
			line[i] = table[baser-i][basec+i];
		
		temp = checkbase(line, baser-r, mycolor);
		if(temp==-1) temp= checkspecial(line, baser-r, mycolor);
		else p_table[r][c][2] = temp;
		if(temp==-1){
			p_table[r][c][2] = checkline(line, baser-r, mycolor, 1,left) + checkline(line, baser-r, mycolor, -1,right);
			if(left[0]==1 && right[0]==1 && p_table[r][c][0]>=15) p_table[r][c][2]=14;
			else if(left[0]==1 && right[0]==1 && p_table[r][c][2]>=12) p_table[r][c][2]=10; // 活三型
			else if(left[0]+right[0]==3 && p_table[r][c][2]>=17) p_table[r][c][2]=16;
			else if(left[0]+right[0]==4) p_table[r][c][2]=50;
			else if(left[0]+right[0]>4) p_table[r][c][2]=60;
		}
		
		temp = checkbase(line, baser-r, 1-mycolor);
		if(temp==-1) temp= checkspecial(line, baser-r, 1-mycolor);
		else c_table[r][c][2] = temp;
		if(temp==-1){
			c_table[r][c][2] = checkline(line, baser-r, 1-mycolor, 1,left) + checkline(line, baser-r, 1-mycolor, -1,right);
			if(left[0]==1 && right[0]==1 && p_table[r][c][0]>=15) c_table[r][c][2]=14;
			else if(left[0]==1 && right[0]==1 && c_table[r][c][2]>=12) c_table[r][c][2]=10; // 活三型
			else if(left[0]+right[0]==3 && c_table[r][c][2]>=17) c_table[r][c][2]=16;
			else if(left[0]+right[0]==4) c_table[r][c][2]=50;
			else if(left[0]+right[0]>4) c_table[r][c][2]=60;
		}
	}
	
	private void na(int r, int c){
		int length, baser, basec;
		int left[] = new int[1];
		int right[] = new int[1];
		int temp;
		if(r>=c) {
			length = 14-r+c+1;
			baser = r - c;
			basec = 0;
		}
		else {
			length = 14-c+r+1;
			baser = 0;
			basec = c-r;
		}
		int line[] = new int[length];
		for(int i=0;i<length;i++)
			line[i] = table[baser+i][basec+i];
		
		temp = checkbase(line, r-baser, mycolor);
		if(temp==-1) temp= checkspecial(line, r-baser, mycolor);
		else p_table[r][c][3] = temp;
		if(temp==-1){
			p_table[r][c][3] = checkline(line, r-baser, mycolor, 1,left) + checkline(line, r-baser, mycolor, -1,right);
			if(left[0]==1 && right[0]==1 && p_table[r][c][0]>=15) p_table[r][c][3]=14;
			else if(left[0]==1 && right[0]==1 && p_table[r][c][3]>=12) p_table[r][c][3]=10; // 活三型
			else if(left[0]+right[0]==3 && p_table[r][c][3]>=17) p_table[r][c][3]=16;
			else if(left[0]+right[0]==4) p_table[r][c][3]=50;
			else if(left[0]+right[0]>4) p_table[r][c][3]=60;
		}
		
		temp = checkbase(line, r-baser, 1-mycolor);
		if(temp==-1) temp= checkspecial(line, r-baser, 1-mycolor);
		else c_table[r][c][3] = temp;
		if(temp==-1){
			c_table[r][c][3] = checkline(line, r-baser, 1-mycolor, 1,left) + checkline(line, r-baser, 1-mycolor, -1,right);
			if(left[0]==1 && right[0]==1 && p_table[r][c][0]>=15) c_table[r][c][3]=14;
			else if(left[0]==1 && right[0]==1 && c_table[r][c][3]>=12) c_table[r][c][3]=10; // 活三型
			else if(left[0]+right[0]==3 && c_table[r][c][3]>=17) c_table[r][c][3]=16;
			else if(left[0]+right[0]==4) c_table[r][c][3]=50;
			else if(left[0]+right[0]>4) c_table[r][c][3]=60;
		}
	}
	
	public void paint(Graphics pic){  // 刷新函数
		super.paint(pic);
		Image im = board.getImage();
		pic.drawImage(im, 0, 0, this);  // 画河流图片
	}
	
	public void paint(int row, int col) {
		int x = col*23+1;
		int y = row*23+1;
		Image im1 = black.getImage();
		Image im2 = white.getImage();
		if(bw == 0) {
			this.getGraphics().drawImage(im1, x, y, this);
		}
		else {
			this.getGraphics().drawImage(im2, x, y, this);
		}
	}
	
	public byte waitforanother_black(int n) {
		ByteBuffer bytebuf = ByteBuffer.allocate(n);   //   创建一个指定大小的缓冲区 
		bytebuf.order(ByteOrder.LITTLE_ENDIAN);
		try {
			socket.getInputStream().read(bytebuf.array());
			byte b = bytebuf.get(0);
			byte c = bytebuf.get(n - 1);
			switch(b) {
			case 6:
				System.out.println("game start");
				if(flag == 0) {
					step(7,7);
					flag = 1;
				}
				break;
			case 7:
				xnow = bytebuf.get(3);
				ynow = bytebuf.get(4);
				bw = bytebuf.get(2);
				table[xnow][ynow] = bw + 1;
				bytebuf.flip();
				paint(xnow, ynow);
				num++;
				break;
			case 2:
				invalid = false;
				break;
			case 1:
				table[laststep[0]][laststep[1]] = -1;
				invalid = true;
				break;
			case 9: case 10: case 11:
				break;
			default:
				break;
			}
			if(c == 10 || c == 11) return c;
			bytebuf.flip();
			bytebuf.clear();
			return b;
		} catch (IOException e) {
			e.printStackTrace();
			return 0;
		}
	}
	
	public byte waitforanother_white(int n) {
		ByteBuffer bytebuf = ByteBuffer.allocate(n);   //   创建一个指定大小的缓冲区 
		bytebuf.order(ByteOrder.LITTLE_ENDIAN);
		try {
			socket.getInputStream().read(bytebuf.array());
			byte b = bytebuf.get(0);
			byte c = bytebuf.get(n - 1);
			switch(b) {
			case 7:
				xnow = bytebuf.get(3);
				ynow = bytebuf.get(4);
				bw = bytebuf.get(2);
				table[xnow][ynow] = bw + 1;
				bytebuf.flip();
				paint(xnow, ynow);
				num++;
				break;
			case 2:
				break;
			case 9: case 10: case 11:
				break;
			default:
				break;
			}
			if(c == 10 || c == 11) return c;
			bytebuf.flip();
			bytebuf.clear();
			return b;
		} catch (IOException e) {
			e.printStackTrace();
			return 0;
		}
	}
	
	public void step(int r, int c){
		color = (byte)mycolor;
		row = (byte)r;
		col = (byte)c;
		
		if(table[row][col] > 0) {
			System.out.println(row + " " + col);
			System.out.println("can't go");
			return;
		}
		try {
			ByteBuffer bytebuf = ByteBuffer.allocate(10);   //   创建一个指定大小的缓冲区 
			bytebuf.order(ByteOrder.LITTLE_ENDIAN);   //按照LITTLE_ENDIAN字节序收发数据BIG_ENDIAN
			bytebuf.put(messages.COMM_MSG_CHESS);
			bytebuf.put(index);
			bytebuf.put(color);
			bytebuf.put(row);
			bytebuf.put(col);
			bytebuf.put(nothing);
			bytebuf.put(nothing);
			bytebuf.put(nothing);
			bytebuf.put(nothing);
			byte [] bb = new byte[9];			
			bytebuf.flip();
			bytebuf.get(bb);
			socket.getOutputStream().write(bb);
			socket.getOutputStream().flush();
			bytebuf.flip();
			bytebuf.clear();
		} catch(Exception ex) {
			ex.printStackTrace();
		}
	}
	
	private MouseListener lay = new MouseListener() {
		public void mouseClicked(MouseEvent e) {
			if(e.getButton() == 1)
			{
				ynow = e.getX()/23;
				xnow = e.getY()/23;
				
				if(table[xnow][ynow] > 0) {
					System.out.println("can't go");
					return;
				}

				bw = 1-bw;
				paint(xnow, ynow);
				num++;
				table[xnow][ynow] = bw+1;
				filltable();
				int[] result = new int[2];
				result = seekpos();
				bw = 1-bw;
				paint(result[0], result[1]);
				table[result[0]][result[1]] = bw+1;
			}
		}
		public void mousePressed(MouseEvent e) {
		}
		public void mouseReleased(MouseEvent e) {
		}
		public void mouseEntered(MouseEvent e) {
		}
		public void mouseExited(MouseEvent e) {
		}
	};
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -