首页>代码>java swing开发的简单五子棋游戏>/middle/src/middle/fiveinarow.java
package middle;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.print.Book;

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

public class fiveinarow extends JFrame{
	point pinit[][]=new point[20][20];
   boolean initb=false;
   Boolean b[][]=new Boolean[20][20];
   boolean tob=false;
   boolean toh=false;
   boolean closs=true;
   Boolean h[][]=new Boolean[20][20]; 
   int piecex=0,piecey=0;
   Boolean win=false;
   String winername="";
   int timeb=0,timeh=0,times=0;
   setpiece p=new setpiece();
   store makeStore[]=new store[20*20];//大小根据网格数定
	public fiveinarow() {
		init();
		initstore();
		initcloss();
		addMouseListener(p);
		setSize(1200,950);
		setVisible(true);
	}
	private void initstore() {
		for (int i = 0; i < makeStore.length; i++) {
			makeStore[i]=new store();
			
		}
		
	}
	protected void makestore() {
		for (int i = 0; i < makeStore.length; i++) {
			if (makeStore[i].stored) {
				
			}
			else {
				makeStore[i].tostore(b, h, tob, toh, pinit, timeb, timeh);
				System.out.println("第"+i+"个存储位置");
				return;
			}
			
		}

	}
	protected void makeunstore() {
		for (int i =makeStore.length-1; i>=0; i--) {
			if (makeStore[i].stored) {
				//连接仓库数据
				Boolean bmiddle[][]=makeStore[i].getB();
				Boolean hmiddle[][]=makeStore[i].getH();
				point pmiddle[][]=makeStore[i].getPinit();
				for (int i1 = 0; i1 < pinit.length; i1++) {
					for (int n = 0; n < pinit.length; n++) {
					this.b[i1][n]=bmiddle[i1][n];
					this.h[i1][n]=hmiddle[i1][n];
					this.pinit[i1][n]=pmiddle[i1][n];
					
					
				}
				}
				this.tob=makeStore[i].getTob();
				this.toh=makeStore[i].getToh();
				this.timeb=makeStore[i].getTimeb();
				this.timeh=makeStore[i].getTimeh();
				//断开仓库与栈中数据的连接
				makeStore[i].stored=false;
				System.err.println("从第"+i+"个存储位置恢复");
				win=false;
				repaint();
				return;
			}
			
		}

	}
	private void initcloss() {
		addWindowListener(new WindowAdapter() {

			
			@Override
			public void windowActivated(WindowEvent e) {
				new Thread() {
					
					public void run() {
						while (closs) {
							try {
								Thread.sleep(1000);
							} catch (InterruptedException e) {
								// TODO 自动生成的 catch 块
								e.printStackTrace();
							}
							if (!win) {
								if (tob) {timeb++;
							
						}
						else {
							timeh++;
						}
							}
							
							repaint();
							
							
						}
									
					}
						
					}.start();
			}

			public void windowClosing(WindowEvent e) {//关闭启动的线程彻底关闭程序
				closs=false;
				// TODO 自动生成的方法存根
				
			}
			
			@Override
			public void windowClosed(WindowEvent e) {
				JOptionPane.showMessageDialog(null, "程序已完全退出,感谢你的使用,作者QQ:1587613421");
				// TODO 自动生成的方法存根
				
			}
				
		});
			
	
		
		
	}
	public void init() {
		for (int xc = 0; xc<= pinit.length-1; xc++) {
			for (int yc = 0; yc <= pinit.length-1; yc++) {
				pinit[xc][yc]=new point(xc*45+20,yc*45+50);
				b[xc][yc]=false;
				h[xc][yc]=false;
			}
			
		}
		timeb =0;
		timeh=0;
		win=false;
		initb=true;
		
		repaint();
	}
	public void paint(Graphics g) {
		if (true) {
			super.paint(g);			
		}
		g.setColor(Color.orange);
		g.fillRect(0, 0, 900, 950);
	if (initb) {
		g.setColor(Color.black);
	   for (int x = 0; x< pinit.length; x++) {
		for (int y = 0; y < pinit.length; y++) {
			if (x!=19) {g.drawLine(pinit[x][y].getX(), pinit[x][y].getY(),pinit[x+1][y].getX(), pinit[x+1][y].getY());
			}
			if (y!=19) {
				g.drawLine(pinit[x][y].getX(), pinit[x][y].getY(),pinit[x][y+1].getX(), pinit[x][y+1].getY());
			     }	
		}
		
	}}
	for (int x = 0; x< pinit.length; x++) {
			for (int y = 0; y < pinit.length; y++) {
	if (b[x][y]) {
		g.setColor(Color.BLACK);
		g.fillOval(pinit[x][y].getX()-15,pinit[x][y].getY()-15, 30, 30);
		
				}
		if (h[x][y]) {
			g.setColor(Color.white);
		    g.fillOval(pinit[x][y].getX()-15,pinit[x][y].getY()-15, 30, 30);
		   
			
		}
	}
  }
	g.setFont(new Font("华云彩文", Font.BOLD, 40));
	g.setColor(new Color(0XFD9BEB, false));
	if (tob) {
		g.drawString("轮到黑方", 930, 90);
	}
	else {
		g.setColor(new Color(0XADE483, false));
		g.drawString("轮到白方", 930, 90);
		
	}
	g.setFont(new Font("微软雅黑",Font.BOLD,25));
	g.setColor(Color.gray);
	if (tob) {
		g.drawString("黑方用时"+timeh, 930, 210);
		g.setColor(Color.red);
		g.drawString("白方用时"+timeb, 930, 180);
	}
	else {
		g.drawString("白方用时"+timeb, 930, 180);
		g.setColor(Color.red);
		g.drawString("黑方用时"+timeh, 930, 210);
	}
	
	g.setColor(Color.BLUE);
	g.drawString("本局总时长"+String.valueOf(timeb+timeh), 930, 240);
	g.setColor(new Color(153,153,255));
	g.drawRect(970, 270, 100, 50);
	g.setColor(Color.black);
	g.drawString("悔棋", 980, 300);
	g.setColor(Color.gray);
	g.drawRect(970, 100, 100, 50);
	g.setColor(Color.green);
	g.setFont(new Font("微软雅黑", Font.BOLD, 25));
	g.drawString("新游戏", 980, 130);
	if (win) {
		g.setFont(new Font("微软雅黑",Font.BOLD,80));
		g.setColor(Color.red);
		g.drawString(winername, 450, 450);
		
	}
		
	}
	


	
	
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		fiveinarow five=new fiveinarow();
		five.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
	}
	class setpiece implements MouseListener{

		@Override
		public void mouseClicked(MouseEvent e) {
			piecex=Integer.valueOf((int) (Math.round((Double.valueOf(e.getX()-25))/45)));
			piecey=Integer.valueOf((int) (Math.round((Double.valueOf(e.getY()-45))/45)));
			if (piecex<20&&piecey<20&&!win) {
			
			if (checkisright.check(b, h, piecex, piecey)) {
				makestore();
				if (tob) {
					b[piecex][piecey]=true;
					if (checkwin.check(b,piecex,piecey)) {
						win=true;
						//JOptionPane.showMessageDialog(fiveinarow.this, "黑子获胜");
						winername="黑子获胜";
					}
					toh=true;
					tob=false;
				}
				else {
					
					h[piecex][piecey]=true;
					if (checkwin.check(h,piecex,piecey)) {
						win=true;
						//JOptionPane.showMessageDialog(fiveinarow.this, "白子获胜");
						winername="白子获胜";
					}
					tob=true;
					toh=false;
				}
				repaint();
				
				//System.out.println(checkwin.rightcheck(new Boolean[] {true,false,true}));
			}
			
			}
			
			
			// TODO 自动生成的方法存根
			
		}

		@Override
		public void mousePressed(MouseEvent e) {
			// TODO 自动生成的方法存根
			
		}

		@Override
		public void mouseReleased(MouseEvent e) {
			if (e.getX()<1070&&e.getX()>970&&e.getY()<150&&e.getY()>100) {
				init();
			}
			if (e.getX()<1070&&e.getX()>970&&e.getY()<320&&e.getY()>270) {
				makeunstore();
				System.out.println("请求悔棋");
			}
			// TODO 自动生成的方法存根
			
		}

		@Override
		public void mouseEntered(MouseEvent e) {
			// TODO 自动生成的方法存根
			
		}

		@Override
		public void mouseExited(MouseEvent e) {
			// TODO 自动生成的方法存根
			
		}
		
	}

}
最近下载更多
12mmn5  LV1 5月28日
2385649653  LV7 2023年6月26日
激昂逸凡  LV1 2022年12月5日
小粥2333  LV1 2021年12月26日
无名氏111  LV33 2021年12月19日
Lunaticsky  LV3 2021年12月7日
ewan007  LV30 2021年11月7日
qsyqa0  LV6 2021年9月5日
夜空中最亮的星  LV8 2021年6月25日
dengge123  LV13 2021年6月6日
最近浏览更多
yansunling  LV1 11月6日
54ty1212 8月6日
暂无贡献等级
111111鱼仔  LV1 5月30日
12mmn5  LV1 5月28日
王少波  LV5 4月6日
zhos0212  LV19 2月29日
yjjhggj 1月1日
暂无贡献等级
张晨荣  LV1 2023年12月19日
2386136609  LV1 2023年12月17日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友