做了个差不多的,因为刚开始学的java做的还不完整,望高手指点下,判断输赢的我还没写出来,就是扫描谁先有了五个连一起import java.awt.*;
import java.awt.event.*;
public class MyQP extends Frame
implements MouseListener
{
int d = 25;
int jj = 30;
int hl = 15;
int bk =hl*jj;
int y = 5;
int x = 5;
int num = 16;
int qz[][] = new int[num][num];//0表示无子,1表示白子,2表示黑子
boolean b = true;
MenuBar bt = new MenuBar();
Menu t1 = new Menu("游戏");
Menu t2 = new Menu("帮助");
MenuItem t3 = new MenuItem("开局");
MenuItem t4 = new MenuItem("悔棋");
MenuItem t5 = new MenuItem("关闭");
MenuItem t6 = new MenuItem("关于五子棋");
public MyQP()
{
this.setTitle("五子棋");
this.setMenuBar(bt);
bt.add(t1);
bt.add(t2);
t1.add(t3);
t1.add(t4);
t1.add(t5);
t2.add(t6);
this.setBounds(100,100,bk+40+20,bk+40+60);
this.setResizable(false);
this.addMouseListener(this);
this.addWindowListener(new MyApd());
this.setBackground(new Color(128,128,64));
this.setVisible(true);
}
public void mouseReleased(MouseEvent e){}
public void mouseClicked(MouseEvent e)
{
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
public void mousePressed(MouseEvent e)
{
System.out.println(e.getX()+":"+e.getY());//打印X,Y的坐标
x=(e.getX()-30+jj/2-1)/jj;//减一归前面,加一归后面
y=(e.getY()-60+jj/2-1)/jj;
if(x<0||x>=16||y<0||y>=16)//是否下在棋盘外
{
return;//不让在棋盘外落子
}
System.out.println(x+":"+y);
b=!b;
if(qz[x][y]!=0)
{
return;
}
if(b)
{
qz[x][y] = 1;
}else
{
qz[x][y] = 2;
}
this.repaint();
}
public void paint(Graphics g)
{
g.setColor(new Color(128,128,64));
g.fillRect(10,40,bk+40,bk+40);
g.setColor(Color.BLACK);
for(int i =0;i<=hl;i++)
{
g.drawLine(30,60+i*jj,30+hl*jj,60+i*jj);
g.drawLine(30+i*jj,60,30+i*jj,60+hl*jj);
}
Graphics2D g2d=(Graphics2D)g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
for(int i=0;i<num;i++)//扫看棋盘上
{
for(int j=0;j<num;j++)
{
switch(qz[i][j])//当数组的值为1时画白子,为2时黑子
{
case 1:g.setColor(Color.white);break;
case 2:g.setColor(Color.black);break;
}
if(qz[i][j]!=0)
{
g.fillOval(30-d/2+i*jj,60-d/2+j*jj,d,d);
}
}
}
} public static void main(String args[])
{
new MyQP();
}
}
class MyApd extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
import java.awt.event.*;
public class MyQP extends Frame
implements MouseListener
{
int d = 25;
int jj = 30;
int hl = 15;
int bk =hl*jj;
int y = 5;
int x = 5;
int num = 16;
int qz[][] = new int[num][num];//0表示无子,1表示白子,2表示黑子
boolean b = true;
MenuBar bt = new MenuBar();
Menu t1 = new Menu("游戏");
Menu t2 = new Menu("帮助");
MenuItem t3 = new MenuItem("开局");
MenuItem t4 = new MenuItem("悔棋");
MenuItem t5 = new MenuItem("关闭");
MenuItem t6 = new MenuItem("关于五子棋");
public MyQP()
{
this.setTitle("五子棋");
this.setMenuBar(bt);
bt.add(t1);
bt.add(t2);
t1.add(t3);
t1.add(t4);
t1.add(t5);
t2.add(t6);
this.setBounds(100,100,bk+40+20,bk+40+60);
this.setResizable(false);
this.addMouseListener(this);
this.addWindowListener(new MyApd());
this.setBackground(new Color(128,128,64));
this.setVisible(true);
}
public void mouseReleased(MouseEvent e){}
public void mouseClicked(MouseEvent e)
{
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
public void mousePressed(MouseEvent e)
{
System.out.println(e.getX()+":"+e.getY());//打印X,Y的坐标
x=(e.getX()-30+jj/2-1)/jj;//减一归前面,加一归后面
y=(e.getY()-60+jj/2-1)/jj;
if(x<0||x>=16||y<0||y>=16)//是否下在棋盘外
{
return;//不让在棋盘外落子
}
System.out.println(x+":"+y);
b=!b;
if(qz[x][y]!=0)
{
return;
}
if(b)
{
qz[x][y] = 1;
}else
{
qz[x][y] = 2;
}
this.repaint();
}
public void paint(Graphics g)
{
g.setColor(new Color(128,128,64));
g.fillRect(10,40,bk+40,bk+40);
g.setColor(Color.BLACK);
for(int i =0;i<=hl;i++)
{
g.drawLine(30,60+i*jj,30+hl*jj,60+i*jj);
g.drawLine(30+i*jj,60,30+i*jj,60+hl*jj);
}
Graphics2D g2d=(Graphics2D)g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
for(int i=0;i<num;i++)//扫看棋盘上
{
for(int j=0;j<num;j++)
{
switch(qz[i][j])//当数组的值为1时画白子,为2时黑子
{
case 1:g.setColor(Color.white);break;
case 2:g.setColor(Color.black);break;
}
if(qz[i][j]!=0)
{
g.fillOval(30-d/2+i*jj,60-d/2+j*jj,d,d);
}
}
}
} public static void main(String args[])
{
new MyQP();
}
}
class MyApd extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
* 判赢操作
* @param x 当前所下棋子的x坐标
* @param y 当前所下棋子的y坐标
* @return
*/
private boolean isWon(int x,int y){
return isWon(qz[x][y],x,y);
}
/**
*
* @param qizi
* @param x
* @param y
* @return
*/
private boolean isWon(int qizi,int x,int y){
int qzCount = 5;
int x_start = x - qzCount + 1 > 0 ? x - qzCount + 1 : 0 ;
int x_end = x + qzCount >= num ? num - qzCount : x + qzCount - 1;
//横向五子
for(int i = x_start ; i < num - qzCount && i <= x_end ; i ++){
if( (qz[i][y] == qizi) && (qz[i+1][y] == qizi) && (qz[i+2][y] == qizi) && (qz[i+3][y] == qizi) && (qz[i+4][y] == qizi) )
return true ;
}
int y_start = y - qzCount + 1 > 0 ? y - qzCount + 1 : 0 ;
int y_end = y + qzCount >= num ? num - 5 : y + qzCount - 1;
//纵向五子
for(int j = y_start ; j < num - qzCount && j <= y_end ; j ++){
if( (qz[x][j] == qizi) && (qz[x][j+1] == qizi) && (qz[x][j+2] == qizi) && (qz[x][j+3] == qizi) && (qz[x][j+4] == qizi))
return true;
}
// 斜向右下五个棋子
for(int i = x_start ; i<= num - qzCount && i <= x_end; i ++){
for(int j = y_start; j <=num - qzCount && j <= y_end; j++){
if( (qz[i][j] == qizi) && (qz[i+1][j+1] == qizi) && (qz[i+2][j+2] == qizi) && (qz[i+3][j+3] == qizi) && (qz[i+4][j+4] == qizi) )
return true;
}
}
x_start = x + qzCount >= num ? num - 1 : x + qzCount - 1;
x_end = x - qzCount + 1 > 0 ? x : qzCount - 1 ;
// 斜向左下五个棋子
for(int i = x_start; i >= qzCount - 1 && i >= x_end ; i --){
System.out.print(" x is :"+ i);
for(int j = y_start ; j<= num - qzCount && j <= y_end ; j++){
System.out.print(" y is :"+j);
if( (qz[i][j] == qizi) && (qz[i-1][j+1] == qizi) && (qz[i-2][j+2] == qizi) && (qz[i-3][j+3] == qizi) && (qz[i-4][j+4] == qizi) )
return true;
}
System.out.println();
}
return false;
}