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

📄 javawuzigame.java

📁 JAVA做的五子棋,有源代码 朋友们可以自己下载,然后编译一下就可以玩了
💻 JAVA
字号:
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;


public class Game 
{
	public static void main(String[] args)
	{
		GameFrame frame=new GameFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.show();
	}
}

class GameFrame extends JFrame
{
	public GameFrame()
	{
		panel=new GamePanel(this);
		Container contentPane=getContentPane();
		contentPane.add(panel);
		
		JMenuBar menuBar=new JMenuBar();
		setJMenuBar(menuBar);

		JMenu setMenu=new JMenu("Set");
		JMenuItem reStartMenuItem=new JMenuItem("Restart");
		JMenuItem exitMenuItem=new JMenuItem("Exit");
		
		JMenu helpMenu=new JMenu("Help");
		JMenuItem aboutMenuItem1=new JMenuItem("About Game");
		JMenuItem aboutMenuItem2=new JMenuItem("About Author");
		
		aboutMenuItem1.addActionListener(new About1());
		aboutMenuItem2.addActionListener(new About2());
		helpMenu.add(aboutMenuItem1);
		helpMenu.add(aboutMenuItem2);

		setMenu.add(reStartMenuItem);
		setMenu.add(exitMenuItem);
		
		setMenu.setMnemonic('S');
		helpMenu.setMnemonic('H');

		menuBar.add(setMenu);
		menuBar.add(helpMenu);

		reStartMenuItem.addActionListener(new RestartAction());
		exitMenuItem.addActionListener(new ExitAction());

		text=new JTextField(50);
		text.setEditable(false);
		contentPane.add(text,BorderLayout.SOUTH);
		setSize(535,600);
		setTitle("五子棋");
	}

	private class RestartAction implements ActionListener
	{
		public void actionPerformed(ActionEvent event)
		{
			panel.reStart();
			panel.repaint();
		}
	}

	private class ExitAction implements ActionListener
	{
		public void actionPerformed(ActionEvent event)
		{
			System.exit(0);
		}
	}
	
	private class About1 implements ActionListener
	{
		public void actionPerformed(ActionEvent event)
		{
			String string="本游戏使用光标键操纵棋子\n回车键表示洛子\n祝你棋开得胜!";
			JOptionPane.showMessageDialog(GameFrame.this,string);	
		}
	}
	
	private class About2 implements ActionListener
	{
		public void actionPerformed(ActionEvent event)
		{
			String string="Author Information:\nQQ:287834418\nE-mail:xuleixiao@126.com";
			JOptionPane.showMessageDialog(GameFrame.this,string);
		}
	}
	
	JTextField text;
	GamePanel panel;
}

class GamePanel extends JPanel
{
	public GamePanel(GameFrame frame)
	{
		//flag是一个标志变量,红色的圆点的标志数值是1,黑色的圆点的标志数值是-1,坐标位置没有圆点的标志数值是0
		for(int i=0;i<20;i++)
			for(int j=0;j<20;j++)
				flag[i][j]=0;
		
		addKeyListener(new Keyhandler());
		setFocusable(true);
		this.frame=frame;	
	}
			

	public void paintComponent(Graphics g)
	{
		super.paintComponent(g);
		Graphics2D g2=(Graphics2D)g;
		for(int i=1;i<=20;i++)
		{
			g2.draw(new Line2D.Double(25*i,0,25*i,525));
			g2.draw(new Line2D.Double(0,25*i,525,25*i));
		}
		
		g2.setPaint(Color.GREEN);
		g2.draw(eee);
		//小方格的边长是25象素,圆点的直径是20象素

		for(int i=0;i<20;i++)
			for(int j=0;j<20;j++)
				{
					if(flag[i][j]==1)
						{
							g2.setPaint(Color.RED);
							g2.draw(e=new Ellipse2D.Double((j+1)*25-10,(i+1)*25-10,20,20));
							g2.fill(e);
						}
					if(flag[i][j]==-1)
						{
							g2.setPaint(Color.BLACK);
							g2.draw(e=new Ellipse2D.Double((j+1)*25-10,(i+1)*25-10,20,20));
							g2.fill(e);
						}
				}
				
	}

	private class Keyhandler implements KeyListener
	{
		public void keyPressed(KeyEvent event)
		{
			
			int keyCode=event.getKeyCode();
			
			if(keyCode==KeyEvent.VK_LEFT && moveflag==true)
				if(j>0) j-=1;	
			if(keyCode==KeyEvent.VK_RIGHT && moveflag==true)
				if(j<19) j+=1;
			if(keyCode==KeyEvent.VK_UP && moveflag==true)
				if(i>0) i-=1;
			if(keyCode==KeyEvent.VK_DOWN && moveflag==true)
				if(i<19) i+=1;
			if(keyCode==KeyEvent.VK_ENTER && flag[i][j]==0 && moveflag==true)
				{	
					if(playerFlag==1)
						{
							flag[i][j]=1;
							playerFlag=-1;
							frame.text.setText("请黑方落子");
						}
					else
						{
							flag[i][j]=-1;
							playerFlag=1;
							frame.text.setText("请红方落子");
						}
					winer();
					
				}
					
		eee=new Ellipse2D.Double((j+1)*25-15,(i+1)*25-15,30,30);
					repaint();
		}

		public void keyReleased(KeyEvent event)
		{
		}

		public void keyTyped(KeyEvent event)
		{
		}
	}

	public void winer()
	{
		label:
		for(int i=0;i<20;i++)
			for(int j=0;j<20;j++)
				{
					int left=0,right=0,westEastLine=0;
					for(left=j;left>0;left--)
						if(flag[i][left]==flag[i][left-1] && flag[i][left]!=0)
							westEastLine++;
						else break;

					for(right=j;right<19;right++)
						if(flag[i][right]==flag[i][right+1] && flag[i][left]!=0)
							westEastLine++;
						else break;
					
					if(westEastLine>=4)
						{
							if(playerFlag==-1)
								frame.text.setText("红方胜利!");
							else    frame.text.setText("黑方胜利!");
							moveflag=false;
							break label;
							
						}

					
					int up=0,down=0,northSouthLine=0;
					for(up=i;up>0;up--)
						if(flag[up][j]==flag[up-1][j] && flag[up][j]!=0)
							northSouthLine++;
						else break;
					for(down=i;down<19;down++)
						if(flag[down][j]==flag[down+1][j] && flag[down][j]!=0)
							northSouthLine++;
						else break;
					
					if(northSouthLine>=4)
						{
							if(playerFlag==-1)
								frame.text.setText("红方胜利!");
							else    frame.text.setText("黑方胜利!");
							
							moveflag=false;
							
							break label;
							
						}

					int I1=0,J1=0,westNothWestSouthLine=0;
					for(I1=i,J1=j;I1>0 && J1>0;I1--,J1--)
						if(flag[I1][J1]==flag[I1-1][J1-1] && flag[I1][J1]!=0)
							westNothWestSouthLine++;
						else break;
					for(I1=i,J1=j;I1<19 && J1<19;I1++,J1++)
						if(flag[I1][J1]==flag[I1+1][J1+1] && flag[I1][J1]!=0)
							westNothWestSouthLine++;
						else break;

					if(westNothWestSouthLine>=4)
						{
							if(playerFlag==-1)
								frame.text.setText("红方胜利!");
							else    frame.text.setText("黑方胜利!");
							moveflag=false;
							
							break label;
						}

					int I2=0,J2=0, eastNorthWestSouthLine=0;
					for(I2=i,J2=j;I2>0 && J2<19; I2--,J2++)
						if(flag[I2][J2]==flag[I2-1][J2+1] && flag[I2][J2]!=0)
							eastNorthWestSouthLine++;
						else break;

					for(I2=i,J2=j;I2<19 && J2>0; I2++,J2--)
						if(flag[I2][J2]==flag[I2+1][J2-1] && flag[I2][J2]!=0)
							eastNorthWestSouthLine++;
						else break;

					if(eastNorthWestSouthLine>=4)
						{
							if(playerFlag==-1)
								frame.text.setText("红方胜利!");
							else    frame.text.setText("黑方胜利!");
							
							moveflag=false;
							break label;
						}
				}
	}

	public void reStart()
	{
		for(int i=0;i<20;i++)
			for(int j=0;j<20;j++)
				flag[i][j]=0;
		playerFlag=1;
		i=0;j=0;
		eee=new Ellipse2D.Double((i+1)*25-15,(j+1)*25-15,30,30);
		e=null;
		moveflag=true;
		frame.text.setText("请红方落子");
		
	}

	public void ask()
	{
		int selection= JOptionPane.showConfirmDialog(frame,"Do you continue play?","",JOptionPane.OK_CANCEL_OPTION,JOptionPane.INFORMATION_MESSAGE);
		if(selection==JOptionPane.OK_OPTION)
			reStart();
			repaint();
		if(selection==JOptionPane.CANCEL_OPTION)
			System.exit(0);
	}

	protected int flag[][]=new int[20][20];
	protected int i=0,j=0;
	protected Ellipse2D.Double eee=new Ellipse2D.Double((i+1)*25-15,(j+1)*25-15,30,30);
	protected Ellipse2D.Double e=null;
	protected int playerFlag=1;
	protected GameFrame frame;
	protected boolean moveflag=true;
	
}

⌨️ 快捷键说明

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