首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

刚写的五子棋,求高手帮小弟我把判断输赢的功能加进去 跪谢了

2012-06-16 
刚写的五子棋,求高手帮我把判断输赢的功能加进去 跪谢了!import java.awt.*import java.awt.event.*//创

刚写的五子棋,求高手帮我把判断输赢的功能加进去 跪谢了!
import java.awt.*;
import java.awt.event.*;
//创建棋盘的类
class ChessPad extends Panel implements MouseListener,ActionListener
{
  int x=-1,y=-1,chesscolour=1; //chesscolour存放棋子颜色
  Button button=new Button("重新开局");
  TextField text_1=new TextField("请黑棋下子");

  //int Chesscolour[][]=new int[19][19]; 构造存放下子颜色的数组,以备实现判断输赢
  //int i=0,j=0;

  ChessPad()
  { setSize(440,440);
  setLayout(null);
  setBackground(Color.orange);
  addMouseListener(this);
  add(button);
  button.setBounds(10,3,60,26);
  button.addActionListener(this);
  add(text_1);
  text_1.setBounds(90,3,90,24);

  text_1.setEditable(false);

  }
  public void paint(Graphics g) //绘制棋盘方格
  { for(int i=30;i<=410;i=i+20) //画横线
  { g.drawLine(30,i,410,i);
  }
  for(int j=30;j<=410;j=j+20) //画竖线
  { g.drawLine(j,30,j,410);
  }

  }

 //*********************************************************************

  public void mousePressed(MouseEvent e) //当按下鼠标左键时下棋子
  { if(e.getModifiers()==InputEvent.BUTTON1_MASK)
  { x=(int)e.getX(); //x,y存放按下鼠标时的坐标位置
  y=(int)e.getY();
  ChessPoint_black chesspoint_black=new ChessPoint_black(this);
  ChessPoint_white chesspoint_white=new ChessPoint_white(this);
  int a=(x+10)/20,b=(y+10)/20;
  //20为棋盘方格边长.a=(x+10)/20,b=(y+10)/20和后面的a*20-9,b*20-9 配合使用 实现当鼠标点击在方格
  //的范围内时,在这个方格指定的位置下棋子

  if(x/15<2||y/15<2||x/15>26||y/15>26) //方法体为空,使在棋盘之外不能下棋子
  {}
  else
  {
  if(chesscolour==1) //棋子颜色时1对应下黑棋
  { this.add(chesspoint_black);
  chesspoint_black.setBounds(a*20-8,b*20-8,16,16);

  //i=(x-30)/20; //下子坐标转化为数组地址,用以存放颜色
  //j=(y-30)/20;
  //Chesscolour[i][j]=chesscolour;

  chesscolour=chesscolour*(-1);
  text_1.setText("请白棋下子");
  }
  else if(chesscolour==-1) //棋子颜色时-1对应下白棋
  { this.add(chesspoint_white);
  chesspoint_white.setBounds(a*20-8,b*20-8,16,16);
  chesscolour=chesscolour*(-1);
  text_1.setText("请黑棋下子");

  }
  }
  }
  }
  public void mouseReleased(MouseEvent e){}
  public void mouseEntered(MouseEvent e) {}
  public void mouseExited(MouseEvent e) {}
  public void mouseClicked(MouseEvent e){}
  public void actionPerformed(ActionEvent e) //实现重新开具
  { this.removeAll();
  chesscolour=1;
  add(button);
  button.setBounds(10,3,60,26);
  add(text_1);
  text_1.setBounds(90,3,90,24);

  text_1.setText("请黑棋下子");

  }

}

class ChessPoint_black extends Canvas implements MouseListener //黑棋的类
{ ChessPad chesspad=null; //棋子所在棋盘
  ChessPoint_black(ChessPad p)
  { setSize(16,16);
  chesspad=p;
  addMouseListener(this);


  }
  public void paint(Graphics g) //绘制棋子
  { g.setColor(Color.black);
  g.fillOval(0,0,16,16);
  }
  public void mousePressed(MouseEvent e) //实现右击悔棋
  { if(e.getModifiers()==InputEvent.BUTTON3_MASK)
  { chesspad.remove(this);
  chesspad.chesscolour=1;
  chesspad.text_1.setText("请黑棋下子");
  }
  }
  public void mouseReleased(MouseEvent e){}
  public void mouseEntered(MouseEvent e) {}
  public void mouseExited(MouseEvent e) {}
  public void mouseClicked(MouseEvent e){}
}
class ChessPoint_white extends Canvas implements MouseListener
{ ChessPad chesspad=null;
  ChessPoint_white(ChessPad p)
  { setSize(20,20);
  addMouseListener(this);
  chesspad=p;
  }
  public void paint(Graphics g)
  { g.setColor(Color.white);
  g.fillOval(0,0,16,16);
  }
  public void mousePressed(MouseEvent e)
  { if(e.getModifiers()==InputEvent.BUTTON3_MASK)
  { chesspad.remove(this);
  chesspad.chesscolour=-1;
  chesspad.text_1.setText("请白棋下子");
  }
  }
  public void mouseReleased(MouseEvent e){}
  public void mouseEntered(MouseEvent e) {}
  public void mouseExited(MouseEvent e) {}
  public void mouseClicked(MouseEvent e){}
}

class MyDialog extends Dialog //implements ActionListener //对话框的类
{
TextArea textarea;
MyDialog(Frame f,String s,boolean b)
{
super(f,s,b);
textarea=new TextArea("1.游戏方法:两人对局,各执一色,轮流下一子,先将横、竖或斜线的5个\n或5个以上同色棋子连成不间断的一排者为胜。\n\n2.游戏操作:单击左键下棋子,用右键单击棋子悔棋。");
//插入 \n 实现手动换行


setLayout(new FlowLayout());
add(textarea);

addWindowListener(new WindowAdapter()
{public void windowClosing(WindowEvent e)
{setVisible(false);
} //实现关闭对话框而不关闭程序 当改成System.exit(0);
//则关闭对话框的同时也关闭程序
  });
  }

}

public class WuZiQi02 extends Frame implements ActionListener
{
MenuBar menubar;
Menu menu1,menu2;
MenuItem item1,item2,item3,item4;
MyDialog dialog1,dialog2;



  ChessPad chesspad=new ChessPad();
  WuZiQi02()
  {
menubar=new MenuBar();
menu1=new Menu("游戏");
menu2=new Menu("帮助");
item1=new MenuItem("重新开始");
item2=new MenuItem("退出");
item3=new MenuItem("游戏帮助");
item4=new MenuItem("版本信息");
menu1.add(item1);
  menu1.addSeparator(); //菜单项分割线
menu1.add(item2);

menu2.add(item3);
menu2.addSeparator();
menu2.add(item4);
menubar.add(menu1);
menubar.add(menu2);
setMenuBar(menubar);
dialog1=new MyDialog(this,"游戏帮助",false); //建立无模式对话框
dialog1.setBounds(60,60,450,250);
dialog2=new MyDialog(this,"版本信息",true); //建立有模式对话框
dialog2.setBounds(60,60,200,100);
//dialog2.setText("简易五子棋V1.20 2011-4-2");

item1.addActionListener(chesspad); //另一个类的对象作为监视器
item2.addActionListener(this);
item3.addActionListener(this);
item4.addActionListener(this);
setVisible(true);
  setLayout(null);
  Label label=
  new Label("五子棋 单击左键下棋子,用右键单击棋子悔棋",Label.CENTER);
  add(label);
  label.setBounds(70,55,440,26);


  label.setBackground(Color.cyan);
  add(chesspad);chesspad.setBounds(70,90,440,440);

  addWindowListener(new WindowAdapter()
  {public void windowClosing(WindowEvent e)
  {System.exit(0);
  }
  });

  pack();
  setSize(600,550);


  }


  public void actionPerformed(ActionEvent e)
  {
if(e.getSource()==item2)
{System.exit(0);}
if(e.getSource()==item3)
{dialog1.setVisible(true);}
if(e.getSource()==item4)
{dialog2.setVisible(true);}

}


public static void main(String args[])
  { WuZiQi02 chess=new WuZiQi02();
  }
}




下面是搜罗的判断输赢的算法 但不知道怎么加到我的程序里面呀

class Judge //判断输赢
 {

  boolean WinLost(int Chesscolour[][],int color){
int i,j,flag=1;
//先判断横向
for(i=0;i<19;i++){
for(j=0;j<19;j++){
if(Chesscolour[i][j]==Chesscolour[i][j+1]){
flag+=1;
if(flag==5){
return true;
}
}else{
flag=1;
}
}
}
//再判断竖向
flag=1;
for(j=0;j<19;j++){
for(i=0;i<19;i++){
if(Chesscolour[i][j]==Chesscolour[i+1][j]){
flag++;
if(flag==5){
return true;
}
}else
{
flag=1;
}
}
}





//斜的:
flag=1;
//遍历所有格
for(i=0;i<19;i++){
for(j=0;j<19-1;j++){
//从当前格开始,往右下角查找
int m=i,n=j;
while(m<19&&n<19){
if(Chesscolour[m][n]==Chesscolour[++m][++n]){
flag++;
if(flag==5){
return true;
}
}else{
flag=1;
}
}
//从当前格开始,往左下角查找
m=i;
n=j;
while(m<19&&n<19){
if(Chesscolour[m][n]==Chesscolour[++m][--n]){
flag++;
if(flag==5){
return true;
}
}else{
flag=1;
}
}
}
}
return false;
}

}

小弟初学Java
冰天雪地裸体跪求高手帮忙呀~

[解决办法]

Java code
// 每下一颗棋子调用该方法一次,m为棋盘,x为行坐标,y为列坐标    public boolean isSuccessful(int[][] m, int x, int y) {        int current = m[x][y];                int row = 0;        int column = 0;        int slant = 0;        for (int i = -4; i <= 4; i++) {            int tx = x + i;            boolean bx = tx >= 0 && tx < m.length;            int ty = y + i;            boolean by = ty >= 0 && ty < m[0].length;                        //同行判断            if (by && m[x][ty] == current) {                row++;                if (row == 5) return true;            } else {                row = 0;            }            //同列判断            if (bx && m[tx][y] == current) {                column++;                if (column == 5) return true;            } else {                column = 0;            }            //同斜线判断            if (bx && by && m[tx][ty] == current) {                slant++;                if (slant == 5) return true;            } else {                slant = 0;            }        }        return false;    } 

热点排行