我的第一个java作品——五子棋

        灵感来自于应佳浩同学,他告诉我看了第七章自己写了一个五子棋游戏,于是我也当了一次“跟风狗”。写一个五子棋需要图形界面的设计,鼠标事件的响应,然后加上五子棋的规则就可以了。至于界面的设计好多都是照着书上来的,有些还没理解,准备这两天消化一下。

       多的不说直接上代码了,至于写代码的规格和风格我还有很多不足的地方,凑合着看了。大笑




import java.awt.*;


import javax.swing.*;


import java.awt.event.*;
import java.awt.Component;
//import java.awt.geom.Line2D;


public class Frame {
int [][]chess=new int[16][16];
boolean isBlack=true;
JFrame frame=new JFrame("欢迎来到五子棋!");
public  Frame() {     //游戏界面



frame.getContentPane().setBackground(Color.white);

paintLine panel=new paintLine();
panel.setBackground(Color.white);

JButton button1=new JButton("重新游戏");
JButton button2=new JButton("退出游戏");
panel.add(button1);
panel.add(button2);

button1.addActionListener(new ButtonReset());
button2.addActionListener(new ButtonQuit());   


frame.getContentPane().add(new paintLine());

frame.getContentPane().add(panel,BorderLayout.SOUTH);
frame.getContentPane().addMouseListener(new MousePress());

frame.setSize(600,600);
frame.setVisible(true);
}

public class ButtonQuit implements ActionListener{         //退出按钮
public void actionPerformed(ActionEvent e){
System.exit(1);
}

}

public class ButtonReset implements ActionListener{         //重新游戏按钮
public void actionPerformed(ActionEvent e){
for(int i=0;i<15;i++)
for(int j=0;j<15;j++){
chess[i][j]=0;
}
frame.getContentPane().repaint();
}

}

private class MousePress extends MouseAdapter {            //鼠标单击
    public void mousePressed(MouseEvent e) {
    
      int x = e.getX();
      int y = e.getY();
      if((x-130)%20<10)
      x=x-(x-130)%20;
      else x=x-(x-130)%20+20;
      if((y-50)%20<10)
      y=y-(y-50)%20;
      else y=y-(y-50)%20+20;
      x=(x-130)/20;
      y=(y-50)/20;
  
      
      if(chess[x][y]==0){
      if(isBlack){
      chess[x][y]=1;
      isBlack=false;
      
      }
      else{
      chess[x][y]=2;
          isBlack=true;
      }

    
    }
    else  ;
    
    frame.getContentPane().repaint();
    }
}
class paintLine extends JPanel{      //画图      
protected void paintComponent(Graphics g) {  
super.paintComponent(g);


int startX = 130;
    int startY = 50;
    for(int i=0; i<16; i++) {                    //*********绘制直线
      g.drawLine(startX, startY+20*i, startX+300, startY+20*i);
      g.drawLine(startX+20*i,startY, startX+20*i, startY+300);
    }
    
    for(int i=0;i<16;i++)             //画棋子
    for(int j=0;j<16;j++){
    if(chess[i][j]==1){          //画黑棋
    int cx=i*20+130;
    int cy=j*20+50;
    
    g.setColor(Color.black);
    g.fillOval(cx-10, cy-10, 20, 20);
    }
    else if(chess[i][j]==2){    //画白棋
    int cx=i*20+130;
    int cy=j*20+50;
    
    g.setColor(Color.white);
    g.fillOval(cx-10, cy-10, 20, 20);
    }
    checkWhite(chess);
    checkBlack(chess);
    }
    
    
    
}

}


void checkBlack(int p[][]){         //判断黑胜
boolean a=false;
int i=0,j=0;
for( j=0;j<16;j++)
for( i=0;i<12;i++)
if(p[i][j]==1&&p[i+1][j]==1&&p[i+2][j]==1&&p[i+3][j]==1&&p[i+4][j]==1)
a=true; 

for(i= 0;i<16;i++)
for(j=0;j<12;j++)
if(p[i][j]==1&&p[i][j+1]==1&&p[i][j+2]==1&&p[i][j+3]==1&&p[i][j+4]==1)
a=true;


for(i=0;i<12;i++)
for(j=0;j<12;j++)
if(p[i][j]==1&&p[i+1][j+1]==1&&p[i+2][j+2]==1&&p[i+3][j+3]==1&&p[i+4][j+4]==1)
a=true;


for(i=5;i<16;i++)
for(j=0;j<12;j++)
if(p[i-1][j+1]==1&&p[i-2][j+2]==1&&p[i-5][j+5]==1&&p[i-3][j+3]==1&&p[i-4][j+4]==1)
a=true;

if(a==true){
for( i=0;i<16;i++)
for( j=0;j<16;j++){
chess[i][j]=0;
}
frame.getContentPane().repaint();
new heisheng();
isBlack=true;
}



}

void checkWhite(int p[][]){               //判断白胜
boolean a=false;
int i=0,j=0;
for( j=0;j<16;j++)
for( i=0;i<12;i++)
if(p[i][j]==2&&p[i+1][j]==2&&p[i+2][j]==2&&p[i+3][j]==2&&p[i+4][j]==2)
a=true; 

for(i= 0;i<16;i++)
for(j=0;j<12;j++)
if(p[i][j]==2&&p[i][j+1]==2&&p[i][j+2]==2&&p[i][j+3]==2&&p[i][j+4]==2)
a=true;


for(i=0;i<12;i++)
for(j=0;j<12;j++)
if(p[i][j]==2&&p[i+1][j+1]==2&&p[i+2][j+2]==2&&p[i+3][j+3]==2&&p[i+4][j+4]==2)
a=true;


for(i=5;i<16;i++)
for(j=0;j<11;j++)
if(p[i-1][j+1]==2&&p[i-2][j+2]==2&&p[i-5][j+5]==2&&p[i-3][j+3]==2&&p[i-4][j+4]==2)
a=true;

if(a==true){
for( i=0;i<16;i++)
for( j=0;j<16;j++){
chess[i][j]=0;
}
frame.getContentPane().repaint();
new baisheng();
isBlack=true;
}



}

public class heisheng extends JFrame{                     //黑胜信息
JLabel e=new JLabel();

public heisheng() {
e.setBounds(150,100,100,50);
e.setText("黑方胜!");
this.getContentPane().add(e);
this.setLocation(180,100);
this.setLayout(null);
this.setSize(300,300);
  this.setVisible(true);
  this.addWindowListener(new WindowAdapter() {
     public void windowClosing(WindowEvent ev) {
     dispose();
     }
});
}

}






public class baisheng extends JFrame{          //判断白胜
JLabel e=new JLabel();

public baisheng() {
e.setBounds(150,100,100,50);
e.setText("白方胜!");
this.getContentPane().add(e);
this.setLocation(180,100);
this.setLayout(null);
this.setSize(300,300);
  this.setVisible(true);
  this.addWindowListener(new WindowAdapter() {
     public void windowClosing(WindowEvent ev) {
     dispose();
     }
});
}

}












public static void main(String[] args){


new Frame();




}


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值