📄 javawuzigame.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 + -