五子棋人机和基本实现

本文介绍了五子棋的双人和人机对战功能的实现。作者咕咕咕咕咕士奇分享了自己制作的五子棋小游戏,具备双人游戏、人机对战、认输、悔棋和重新开始等基本功能。文章中提供了代码,但作者承诺以后会加强代码注释的编写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

五子棋双人和人机

我,咕咕咕咕咕士奇又回来了!最近刚刚写完魔塔小游戏,虽然还有些粗糙(笑)。准备开始学通信和python了,所以在这段时间我会放放以前的代码(或者看情况边学边放最新的,同步一下)。

话说,我翻了一下以前的代码,发现,我居然不写注释!!我错了……

我咕士奇,就算饿死!!从这跳下去!!也绝对再也不会不写注释了!!!!

 

这个五子棋小程序比较简单,功能包括双人游戏,人机,认输,悔棋,重新开始

然后,我就直接贴代码啦

package mywuziqi;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class showappear extends JFrame implements tableInfo {
	
	/**
	 * 这个类就是画出来选项和棋盘啦
	 */
        
	public void showUI(){
        	this.setTitle("我的魔性五子棋");
        	this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        	this.setLocationRelativeTo(null);
    		this.setLayout(new FlowLayout());
    		this.setResizable(false);
    		this.setSize(600,650);
    		DrawLinstener drawL=new DrawLinstener(this);
    		this.addMouseListener(drawL);
    		
    		//设置按钮
    		String[] textarry={"重新开始","双人游戏","悔棋","认输","人机对战"};
    		JButton button;
    		for(int i=0;i<textarry.length;i++)
    		{
    			button=new JButton(textarry[i]);
    			this.add(button);
    			button.addActionListener(drawL);
    		}
    		
    		
    		this.setVisible(true);
    		
    		
        }
	public void paint(Graphics g)
	{
		super.paint(g);
		drawTable(g);
		
		
	}
	public void drawTable(Graphics g)
	{
		for(int i=0;i<R;i++)
			g.drawLine(X,Y+i*SIZE,X+(R-1)*SIZE,Y+i*SIZE);
		for(int p=0;p<C;p++)
			g.drawLine(X+p*SIZE, Y+(C-1)*SIZE, X+p*SIZE, Y);
		for(int i=0;i<15;i++)
			for(int j=0;j<15;j++)
			{
				if(Chess.tableInfo[i][j]==1)
					{g.setColor(Color.black); g.fillOval(Chess.rTable[j]-15,Chess.cTable[i]-15, CHESS_SIZE,CHESS_SIZE);}
				if(Chess.tableInfo[i][j]==2)
					{g.setColor(Color.white);
				  g.fillOval(Chess.rTable[j]-15,Chess.cTable[i]-15, CHESS_SIZE,CHESS_SIZE);}
			}
		
	}
	public static void main(String args[])
	{
		showappear UI=new showappear();
		UI.showUI();
	}
}
package mywuziqi;

public interface tableInfo {
	/**
	 * 设置棋子大小,棋盘间隙大小
	 */
	public static final int X=35,Y=80,R=15,C=15,CHESS_SIZE=30,SIZE=35;

}
package mywuziqi;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class DrawLinstener extends  MouseAdapter implements tableInfo,ActionListener{
	 
	public showappear UI;
	public Graphics g;
	int flag=1,x,y,k;
	String nametype;
	winjframe ui;
	int count=1;
	int model;//双人还是人机
	static boolean condition=true;//判断胜利后是否还要画子
	 public void actionPerformed(ActionEvent e){
		String action=e.getActionCommand();
		nametype=action;
		if("认输".equals(nametype)) {
			if(flag==1) {//黑棋认输
				winjframe.showUIWhite();
			}
			else{
				winjframe.showUIBlack();
			}
		}
		if("双人游戏".equals(nametype)) {
			condition=true;
		}
		if("人机对战".equals(nametype)) {
			condition=true;
		}
		if("重新开始".equals(nametype)) {
			restart();
		}
		if("悔棋".equals(nametype))
		{
			if(g==null)
			{
				g=UI.getGraphics();
			}
			if(Chess.num>0&&model==1) {
			int thelast;
			thelast=Chess.allChess[Chess.num-1];
			Chess.num--;
			int newr=0,newc=0;
			newr=thelast/15;
			newc=thelast%15;
			Chess.tableInfo[newr][newc]=0;
			newchoice();
			if(Chess.num%2==0) flag=1;
			else flag=0;
		   nametype="双人游戏";	
			}
			
			
			if(Chess.num>0&&model==2) {
				int thelastplayer;
				int thelastcomputer;
				thelastplayer=Chess.allChess[Chess.num-1];
				thelastcomputer=Chess.allChess[Chess.num-2];
				Chess.num-=2;
				int newrplayer=0,newcplayer=0;
				int newrcomputer=0,newccomputer=0;
				newrplayer=thelastplayer/15;
				newcplayer=thelastplayer%15;
				Chess.tableInfo[newrplayer][newcplayer]=0;
				
				newrcomputer=thelastcomputer/15;
				newccomputer=thelastcomputer%15;
				Chess.tableInfo[newrcomputer][newccomputer]=0;
				newchoice();
				flag=1;
				
			}
		}
	}
	public DrawLinstener(showappear UI) {
		this.UI=UI;
	}
	public void mouseClicked(MouseEvent e){
		
	}
	public void mousePressed(MouseEvent e){
		x=e.getX();
		y=e.getY();
	}
	public void mouseReleased(MouseEvent e) {
		
		if(g==null)
		{
			g=UI.getGraphics();
		}
		
		if("双人游戏".equals(nametype)&&condition){
		model=1;
		Chess.save();
		if(flag==1) {
			g.setColor(Color.black);
			k=Chess.judge(x,y);
			if(Chess.again()==0){
			  g.fillOval(Chess.Table[k][0]-14,Chess.Table[k][1]-17, CHESS_SIZE,CHESS_SIZE);
			 Chess.setChess(flag);
			 Chess.saveChess();
			flag=0;
			k=winandfail.winner();
			if(k==0){}
			else  ui.showUIBlack();}
		else flag=1;
			
			
			}
		     
		else {
			g.setColor(Color.white);
			
			k=Chess.judge(x,y);
			
			
			
			if(Chess.again()==0){
			 g.fillOval(Chess.Table[k][0]-15,Chess.Table[k][1]-15 , CHESS_SIZE,CHESS_SIZE);
			 Chess.setChess(flag);
			 Chess.saveChess();
			flag=1;
			k=winandfail.winner();
			if(k==0){}
			else  ui.showUIWhite();
			}
			else flag=0;
			}
		}
		
		
		if("人机对战".equals(nametype)&&condition)
		{
			model=2;
			Chess.save();
			g.setColor(Color.black);
			k=Chess.judge(x,y);
			if(Chess.again()==0)
			{
			  g.fillOval(Chess.Table[k][0]-15,Chess.Table[k][1]-15 , CHESS_SIZE,CHESS_SIZE);
			 Chess.setChess(1);
			 Chess.saveChess();
			k=winandfail.winner();
			if(k==0){}
			else  ui.showUIBlack();
			
			AI.recreate();
			AI.create();
			AI.gon(Chess.tableInfo);
			AI.makeChess();
			g.setColor(Color.white);
			 g.fillOval(Chess.rTable[AI.q]-15,Chess.cTable[AI.p]-15,CHESS_SIZE,CHESS_SIZE);
			 Chess.setChessAI();
			 Chess.saveChessAI();
			k=winandfail.winner();
			if(k==0){}
			else  ui.showUIWhite();
			}
		}
		
		
	}
	
	public void newchoice() {
		Color backgroundcolor;
		backgroundcolor=UI.getBackground();
		g.setColor(backgroundcolor);
		g.fillRect(0, 58, 600, 620);
		g.setColor(Color.BLACK);
		for(int i=0;i<R;i++)
			g.drawLine(X,Y+i*SIZE,X+(R-1)*SIZE,Y+i*SIZE);
		for(int p=0;p<C;p++)
			g.drawLine(X+p*SIZE, Y+(C-1)*SIZE, X+p*SIZE, Y);
		for(int i=0;i<15;i++)
			{for(int j=0;j<15;j++)
			{
				if(Chess.tableInfo[i][j]==1)
					{g.setColor(Color.black); g.fillOval(Chess.rTable[j]-15,Chess.cTable[i]-15, CHESS_SIZE,CHESS_SIZE);}
				if(Chess.tableInfo[i][j]==2)
					{g.setColor(Color.white);
				  g.fillOval(Chess.rTable[j]-15,Chess.cTable[i]-15, CHESS_SIZE,CHESS_SIZE);}
			}
		
			}
	}
	public void restart() {
		Chess.num=0;
		Color backgroundcolor;
		backgroundcolor=UI.getBackground();
		g.setColor(backgroundcolor);
		g.fillRect(0, 58, 600, 620);
		g.setColor(Color.BLACK);
		for(int i=0;i<R;i++)
			g.drawLine(X,Y+i*SIZE,X+(R-1)*SIZE,Y+i*SIZE);
		for(int p=0;p<C;p++)
			g.drawLine(X+p*SIZE, Y+(C-1)*SIZE, X+p*SIZE, Y);
		
	}
	
	
}
package mywuziqi;
import java.lang.Math;
import java.lang.Double;
public class Chess implements tableInfo {
	/**
	 * 棋子类
	 * tableinfo[][]存储所有棋子状态,0代表没有旗子,1代表黑棋,2代表白棋
	 * allchess[][]存储所有旗子的位置,根据行列换算成0-255之间的一个数
	 * table[][]存储,鼠标点击位置旁边的四个交叉点
	 */
	int min=0;
	static int[] rTable=new int[15];
	static int[] cTable=new int[15];
	static int[][]  Table=new int[4][2];
	static int[] allChess=new int[225];
	static int p=0,q=0,r=0,c=0;
	static int num=0,time =0,k=0;
	static int[][] tableInfo=new int[15][15];
	public static void save()
	{
		
		int i,j;
		for(i=0;i<15;i++)
			{
			rTable[i]=35+i*35;
			cTable[i]=80+i*35;
			}
	}
	public static void setChess(int flag)
	{
		
		if(flag==1)
		   tableInfo[r][c]=1;
		if(flag==0)
		   tableInfo[r][c]=2;
		
	}
	public static void setChessAI()
	{
	      tableInfo[AI.p][AI.q]=2;
	}
	public static int judge(int x,int y)//落在交叉点
	{
		int r1=0,r2=0,c1=0,c2=0;
		double min=1000;
		if(x<35||x>525||y<80||y>570)  return 0;
		for(int i=0;i<15;i++)
		{
			if(rTable[i]>x)
			{
				r1=rTable[i-1];
				r2=rTable[i];
				break;
			}
		}
		for(int i=0;i<15;i++)
		{
			if(cTable[i]>y)
			{
				c1=cTable[i-1];
				c2=cTable[i];
			
				break;
			}
		}
		Table[0][0]=r1;Table[0][1]=c1;Table[1][0]=r1;Table[1][1]=c2;
		Table[2][0]=r2;Table[2][1]=c1;Table[3][0]=r2;Table[3][1]=c2;
		for(int i=0;i<4;i++)
		{
			for(int j=0;j<2;j++)
			{
				if(j==0) p=Table[i][j];
				if(j==1) 
				{     q=Table[i][j];
				    if(Math.sqrt((p-x)*(p-x)+(q-y)*(q-y))<min)
				        {min=Math.sqrt((p-x)*(p-x)+(q-y)*(q-y));k=i;}
				}
			}
		}
		for(int i=0;i<15;i++)
			if(Table[k][0]==rTable[i])  c=i;
		for(int j=0;j<15;j++)
			if(Table[k][1]==cTable[j])   r=j;
		return k;
    }
	
	//不让旗子落在一个点
	public static int again()
	{
	    
		if(tableInfo[r][c]==0) return 0;
		else return 1;
		}
	public static void saveChess()
	{
		int memx=0,memy=0;
		for(int i=0;i<15;i++)
	    {
	    	if(Table[k][0]==rTable[i])  memx=i;
	    	if(Table[k][1]==cTable[i])  memy=i;
	    }
	   allChess[num]=memy*15+memx;
	   num++;	
	}
	public static void saveChessAI() {
		//System.out.println("AIPQ="+p+" "+q);
		//System.out.println("AIPQ="+" "+hang);
		allChess[num]=AI.p*15+AI.q;
		num++;
		
	}
	   
		   

	}
package mywuziqi;

import java.util.Arrays;
import java.util.HashMap;

public class AI {
	/**
	 * 这个类就是人机对战(可能只能战胜新手)
	 * weightArry为权值记录数组,权值最大即为最优选择
	 */

	static HashMap<String, Integer> map = new HashMap<>();
	static int weightArry[][] = new int[15][15];
	static int m, p, q;
	static int n;
	static int max = 0;

	public static void create() {

		map.put(null, 0);
		map.put("20", 100);// 自己一连
		map.put("220", 200);// 自己二连
		map.put("2220", 20000);// 自己三连
		map.put("22220", 2000000);// 自己四联
		
		
		map.put("10", 10);// 对方一连
		map.put("110", 150);// 对方二连
		map.put("1110", 15000);// 对方三连
		map.put("11110", 1500000);// 对方四联
		
		
		map.put("21", 70);//自己死一
		map.put("221", 180);//自己死二
		map.put("2221", 17000);//自己死三
		map.put("22221", 1500000);//自己死四
		
		map.put("12",5);//对方死一
		map.put("112",130);//对方死二
		map.put("1112",12000);//对方死三
		map.put("11112",1200000);//对方死四
		
		
		map.put("12", 70);
		map.put("122", 180);
		map.put("1222", 1700);
		map.put("12222", 1500000);
		
		/**
		 * 目前还不能实现
		 */
		map.put("1011",15000);//对方三连
		map.put("1101", 15000);//对方三联   
		

	}

	public static void recreate() {
		for (int i = 0; i < 15; i++)
			for (int j = 0; j < 15; j++)
				weightArry[i][j] = 0;
	}

	public static void gon(int[][] tableInfo) {
		int i, j = 0;
		for (i = 0; i < tableInfo.length; i++)
			for (j = 0; j < tableInfo[i].length; j++) {
				if (tableInfo[i][j] != 0) {
					continue;
				}
				left(i, j, tableInfo);
				right(i, j, tableInfo);
				up(i, j, tableInfo);
				down(i, j, tableInfo);
				lup(i, j, tableInfo);
				rup(i, j, tableInfo);
				ldowm(i, j, tableInfo);
				rdowm(i, j, tableInfo);
			}
		makeChess();
	}

	private static void rdowm(int i, int j, int[][] tableInfo) {
		String qiju = "";// 用012记录棋局
		int chesscolor = 0;// 记录相邻的棋子的颜色
		int k, l;
		for (k = i + 1, l = j + 1; k < tableInfo.length && l < tableInfo.length; k++, l++) { // 如果相邻为空
			if (k == i + 1 && l == j + 1 && tableInfo[k][l] == 0) {
				break;
			}
			// 记录相邻的棋子颜色
			if (k == i + 1 && l == j + 1) {
				chesscolor = tableInfo[k][l];// 记录棋子的颜色
				qiju += tableInfo[k][l];// 记录整个棋局
			} else if (chesscolor == tableInfo[k][l]) // 棋子和左边的颜色一样
			{
				qiju += tableInfo[k][l];
			} else if (chesscolor != tableInfo[k][l]) // 棋子和左边的亚瑟不一样
			{
				qiju += tableInfo[k][l];
				break;
			}
		}
		Integer weight = map.get(qiju);
		if (weight != null) {
			weightArry[i][j] += weight;
		}

	}

	private static void ldowm(int i, int j, int[][] tableInfo) {
		String qiju = "";// 用012记录棋局
		int chesscolor = 0;// 记录相邻的棋子的颜色
		int k, l;
		for (k = i + 1, l = j - 1; k < tableInfo.length && l > -1; k++, l--) { // 如果相邻为空
			if (k == i + 1 && l == j - 1 && tableInfo[k][l] == 0) {
				break;
			}
			// 记录相邻的棋子颜色
			if (k == i + 1 && l == j - 1) {
				chesscolor = tableInfo[k][l];// 记录棋子的颜色
				qiju += tableInfo[k][l];// 记录整个棋局
			} else if (chesscolor == tableInfo[k][l]) // 棋子和左边的颜色一样
			{
				qiju += tableInfo[k][l];
			} else if (chesscolor != tableInfo[k][l]) // 棋子和左边的亚瑟不一样
			{
				qiju += tableInfo[k][l];
				break;
			}
		}
		Integer weight = map.get(qiju);
		if (weight != null) {
			weightArry[i][j] += weight;
		}

	}

	private static void rup(int i, int j, int[][] tableInfo) {
		String qiju = "";// 用012记录棋局
		int chesscolor = 0;// 记录相邻的棋子的颜色
		int k, l;
		for (k = i - 1, l = j + 1; k >-1 && l < tableInfo.length; k--, l++) { // 如果相邻为空
			if (k == i - 1 && l == j + 1 && tableInfo[k][l] == 0) {
				break;
			}
			// 记录相邻的棋子颜色
			if (k == i - 1 && l == j + 1) {
				chesscolor = tableInfo[k][l];// 记录棋子的颜色
				qiju += tableInfo[k][l];// 记录整个棋局
			} else if (chesscolor == tableInfo[k][l]) // 棋子和左边的颜色一样
			{
				qiju += tableInfo[k][l];
			} else if (chesscolor != tableInfo[k][l]) // 棋子和左边的亚瑟不一样
			{
				qiju += tableInfo[k][l];
				break;
			}
		}
		Integer weight = map.get(qiju);
		if (weight != null) {
			weightArry[i][j] += weight;
		}

	}

	private static void lup(int i, int j, int[][] tableInfo) {
		String qiju = "";// 用012记录棋局
		int chesscolor = 0;// 记录相邻的棋子的颜色
		int k, l;
		for (k = i - 1, l = j - 1; k >-1 && l > -1; k--, l--) { // 如果相邻为空
			if (k == i - 1 && l == j - 1 && tableInfo[k][l] == 0) {
				break;
			}
			// 记录相邻的棋子颜色
			if (k == i - 1 && l == j - 1) {
				chesscolor = tableInfo[k][l];// 记录棋子的颜色
				qiju += tableInfo[k][l];// 记录整个棋局
			} else if (chesscolor == tableInfo[k][l]) // 棋子和左边的颜色一样
			{
				qiju += tableInfo[k][l];
			} else if (chesscolor != tableInfo[k][l]) // 棋子和左边的亚瑟不一样
			{
				qiju += tableInfo[k][l];
				break;
			}
		}
		Integer weight = map.get(qiju);
		if (weight != null) {
			weightArry[i][j] += weight;
		}

	}

	private static void down(int i, int j, int[][] tableInfo) {
		String qiju = "";// 用012记录棋局
		int chesscolor = 0;// 记录相邻的棋子的颜色
		int k;
		for (k = i + 1; k <tableInfo.length; k++) { // 如果相邻为空
			if (k == i + 1 && tableInfo[k][j] == 0) {
				break;
			}
			// 记录相邻的棋子颜色
			if (k == i + 1) {
				chesscolor = tableInfo[k][j];// 记录棋子的颜色
				qiju += tableInfo[k][j];// 记录整个棋局
			} else if (chesscolor == tableInfo[k][j]) // 棋子和左边的颜色一样
			{
				qiju += tableInfo[k][j];
			} else if (chesscolor != tableInfo[k][j]) // 棋子和左边的亚瑟不一样
			{
				qiju += tableInfo[k][j];
				break;
			}
		}
		Integer weight = map.get(qiju);
		if (weight != null) {
			weightArry[i][j] += weight;
		}

	}

	private static void up(int i, int j, int[][] tableInfo) {
		String qiju = "";// 用012记录棋局
		int chesscolor = 0;// 记录相邻的棋子的颜色
		int k;
		for (k = i - 1; k >-1; k--) { // 如果相邻为空
			if (k == i - 1 && tableInfo[k][j] == 0) {
				break;
			}
			// 记录相邻的棋子颜色
			if (k == i - 1) {
				chesscolor = tableInfo[k][j];// 记录棋子的颜色
				qiju += tableInfo[k][j];// 记录整个棋局
			} else if (chesscolor == tableInfo[k][j]) // 棋子和左边的颜色一样
			{
				qiju += tableInfo[k][j];
			} else if (chesscolor != tableInfo[k][j]) // 棋子和左边的亚瑟不一样
			{
				qiju += tableInfo[k][j];
				break;
			}
		}
		Integer weight = map.get(qiju);
		if (weight != null) {

			weightArry[i][j] += weight;
		}

	}

	public static void right(int i, int j, int[][] tableInfo) {
		String qiju = "";// 用012记录棋局
		int chesscolor = 0;// 记录相邻的棋子的颜色
		int k;
		for (k = j + 1; k < tableInfo.length; k++) { // 如果相邻为空
			if (k == j + 1 && tableInfo[i][k] == 0) {
				break;
			}
			// 记录相邻的棋子颜色
			if (k == j + 1) {
				chesscolor = tableInfo[i][k];// 记录棋子的颜色
				qiju += tableInfo[i][k];// 记录整个棋局
			} else if (chesscolor == tableInfo[i][k]) // 棋子和左边的颜色一样
			{
				qiju += tableInfo[i][k];
			} else if (chesscolor != tableInfo[i][k]) // 棋子和左边的亚瑟不一样
			{
				qiju += tableInfo[i][k];
				break;
			}
		}
		Integer weight = map.get(qiju);
		if (weight != null) {
			weightArry[i][j] += weight;
		}

	}

	public static void left(int i, int j, int[][] tableInfo) {
		String qiju = "";// 用012记录棋局
		int chesscolor = 0;// 记录相邻的棋子的颜色
		int k;
		for (k = j - 1; k > -1; k--) { // 如果相邻为空
			if (k == j - 1 && tableInfo[i][k] == 0) {
				break;
			}
			// 记录相邻的棋子颜色
			if (k == j - 1) {
				chesscolor = tableInfo[i][k];// 记录棋子的颜色
				qiju += tableInfo[i][k];// 记录整个棋局
			} else if (chesscolor == tableInfo[i][k]) // 棋子和左边的颜色一样
			{
				qiju += tableInfo[i][k];
			} else if (chesscolor != tableInfo[i][k]) // 棋子和左边的亚瑟不一样
			{
				qiju += tableInfo[i][k];
				break;
			}
		}
		Integer weight = map.get(qiju);
		if (weight != null) {
			weightArry[i][j] += weight;
		}
	}

	public static void makeChess() {
		max = weightArry[0][0];
		/*for (m = 0; m < weightArry.length; m++)
			System.out.println(Arrays.toString(weightArry[m]));
		System.out.println(" ");*/

		for (m = 0; m < weightArry.length; m++)
			for (n = 0; n < weightArry[m].length; n++) {
				// System.out.println("max="+max);
				if (max < weightArry[m][n]) {
					max = weightArry[m][n];
					p = m;
					q = n;
				}
			}
	}
	
	
	
	public static void main(String[] args){
		int[][] arr = new int[7][7];
		
		arr[1][3] = 1;
		arr[2][3] = 1;
		arr[3][3]=1;
		arr[4][3]=1;
		arr[5][3]=2;
		
		
		AI ai = new AI();
		AI.create();
		ai.gon(arr);
		
		
		
	}
	
	
	
}
package mywuziqi;

public class winandfail {
	/**
	 * 判断胜负
	 * 每下一字,就判断一次
	 * @return
	 */
	public static int winner()
	{
		int i,j,thelast,m,base,count=0;
		int newi,newj,newlast,thelasti,thelastj;
		thelast=Chess.allChess[Chess.num-1];
        i=thelast/15;
		j=thelast%15;
       while(true)//横着判断
       {
    	   newi=i;
    	   newj=j-4;
    	   //System.out.println("j="+j);
    	   newlast=j+4;
    	   if(newj<0)
    		   newj=0;
    	   if(newlast>14)
    		   newlast=14;
    	   //System.out.println("newlast="+newlast);
    	  // System.out.println("newi="+newi+" "+"newj="+newj);
    	   base=Chess.tableInfo[i][newj];
    	   //System.out.println("base1="+base);
    	   for(;newj<newlast;newj++)
    	   { 
    		  if(base==Chess.tableInfo[newi][newj+1])
    		  {
    			 //System.out.println("base="+base);
    			  count++;
    			 // System.out.println("count="+count);
    			  if(count==4)
    				  {
    				  return 1;
    				  }
    			  else 
    			  {
    				 
    				  base=Chess.tableInfo[i][newj+1];
    			  }
    		  }
    		  else 
    		  {
    			  count=0;
    			  base=Chess.tableInfo[i][newj+1];
    		  }
    	   }
     	 break;
    	   
       }
       count=0;
       while(true)
       {
    	   newi=i-4;
    	   newj=j-4;
    	   thelasti=i+4;
    	   thelastj=j+4;
    	   if(thelasti>14)
    		   thelasti=14;
    	   if(thelastj>14)
    		   thelastj=14;
    	   if(newj<0)
    		   newj=0;
    	   if(newi<0)
    		   newi=0;
    	   if(i-newi>j-newj)
    		   newi=i-(j-newj);
    	   if(j-newj>i-newi) 
    		   newj=j-(i-newi);
    	   //System.out.println("newi="+newi);
    	   //System.out.println(newi+" "+newj);
    	   base=Chess.tableInfo[newi][newj];
    	   for(;newi<thelasti&&newj<thelastj;newi++,newj++)
    	   { 
    		  
    			   //System.out.println("base="+base);
    			   if(base==Chess.tableInfo[newi+1][newj+1])
    	    		  {
    	    			  count++;
    	    			 // System.out.println("count="+count);
    	    			  if(count==4)
    	    			  {
    	    				  return 1;
    	    			  }
    	    			  else 
    	    			  {
    	    				 
    	    				  base=Chess.tableInfo[newi+1][newj+1];
    	    			  }
    	    		  }
    	    		  else 
    	    			  {
    	    			  count=0;
    	    			  base=Chess.tableInfo[newi+1][newj+1];
    	    			  }
    	    	   }
    	   
    	     		  break;
	   }
       count=0;
       while(true)
       {
    	   newi=i+4;
    	   newj=j-4;
    	   thelasti=i-4;
    	   thelastj=j+4;
    	   if(newi>14)
    		   newi=14;
    	   if(newj<0)
    		   newj=0;
    	   if(newi-i>j-newj)
    		   newi=i+(j-newj);
    	   if(j-newj>newi-i) 
    		   newj=j-(newi-i);
    	   if(newi>14)
    		   newi=14;
    	   if(newj<0)
    		   newj=0;
    	   thelastj=j+(i-thelasti);
    	   if(thelasti<0)
    		   thelasti=0;
    	   if(thelastj>14)
    		   thelastj=14;
    	   //System.out.println("thelasti="+thelasti+"thelastj="+thelastj);
    	   //System.out.println("newi="+newi+"newj="+newj);
    	   base=Chess.tableInfo[newi][newj];
    	   for(;newi>thelasti&&newj<thelastj;newi--,newj++)
    	   { 
    		     
    			   if(base==Chess.tableInfo[newi-1][newj+1])
 	    		  {
    				   count++;
 	    			 // System.out.println("count="+count);
 	    			  if(count==4)
 	    				  {
 	    				  return 1;
 	    				  }
 	    			  else 
 	    			  {
 	    				 
 	    				  base=Chess.tableInfo[newi-1][newj+1];
 	    			  }
 	    		  }
 	    		  else 
 	    		  {
 	    			 count=0;
 	    			  base=Chess.tableInfo[newi-1][newj+1];
 	    		  }
 	    	   
 	   }
 	     		  break;
       }
       count=0;
       while(true)
       {
    	   newi=i-4;
    	   newj=j;
    	   thelast=i+4;
    	   if(newi<0)
    		   newi=0;
    	   if(thelast>14)
    		   thelast=14;
    	   //System.out.println("newi="+newi+"newj="+newj+"thelast="+thelast);
    	   base=Chess.tableInfo[newi][newj];
    	   for(;newi<thelast;newi++)
    	   { 
    		   //System.out.print("base="+base+" "); 
    		   if(base==Chess.tableInfo[newi+1][newj])
	    		  {
	    			
    			      count++;
	    			 //System.out.println("count="+count);
	    			  if(count==4)
	    			  {
	    				 // System.out.println("return4");
	    				  return 1;
	    			  }
	    			  else 
	    			  {
	    				  base=Chess.tableInfo[newi+1][newj];
	    			  }
	    		  }
	    		  else 
	    			  {
	    			  count=0;
	    			  base=Chess.tableInfo[newi+1][newj];
	    			  }
	    	   }
	   
	     		  break;
       }

    	   return 0;
	}
}
package mywuziqi;

import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class winjframe {
	
	
	public static void showUIBlack()
	{
		DrawLinstener.condition=false;
		JOptionPane.showMessageDialog(null,  "恭喜啦!黑棋胜利","", JOptionPane.CANCEL_OPTION);
	}
	public static void showUIWhite()
	{
		DrawLinstener.condition=false;
		JOptionPane.showMessageDialog(null,  "恭喜啦!白棋胜利","", JOptionPane.CANCEL_OPTION);
	}
}

 

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、COSO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析模拟,揭示了生物质炉具在实际应用中的优点挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值