刚写的五子棋,求高手帮我把判断输赢的功能加进去 跪谢了!
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
冰天雪地裸体跪求高手帮忙呀~
[解决办法]
// 每下一颗棋子调用该方法一次,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; }