五子棋

[size=small;] 做了那么久的五子棋,到今天终于可以差不多结束啦!虽然说我做的有一点点小问题,貌似还是比较大的,从个人的角度来说,我满意就行啦。在判断那什么加权值的上面有一点问题,所以电脑在自己下棋的时候把握不了自己真正要下的地方,有的时候看上去很傻。还有加了人机对战之后,判断输赢变得比较迟钝或者说是有的时候赢了它不会判断。有了这些“小小”的误差后,还是需要时间调试,不能说自己完全完成了五子棋。就像孙中山先生说的“革命尚未成功,同志仍需努力”。所以还是需要后来的调式啊,还有貌似很漫长的路要走的。说实话,我收回我先前说的“我比较满意”。[/size]

[size=small;]有些小问题还需要调试。下面是没有调式有些问题的代码,如下:[/size]

package cn.hsm.java;


import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseListener;

import javax.swing.ImageIcon;
import javax.swing.JFrame;

public class FiveChessTest extends JFrame
{
public static void main(String[] args)
{
FiveChessTest fc = new FiveChessTest();
fc.showUI();
}

private int[][] location = new int[Name.HEIGHT + 1 ][Name.WIDTH];
private Graphics g;

public void showUI()
{
this.setTitle("hsm的五子棋···");
this.setSize(900, 750);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(3);
this.setVisible(true);

Graphics g = getGraphics();
MouseListenerImpl mouseListener = new MouseListenerImpl(g ,location);
this.addMouseListener(mouseListener);
}
/*
* 重写paint函数
*/
public void paint(Graphics g)
{
super.paint(g);

//画棋盘的横线
for(int i = 0; i <= Name.HEIGHT; i++) {
g.drawLine(Name.X0, Name.Y0+ Name.CELL_SIZE *i, Name.X0+Name.WIDTH*Name.CELL_SIZE , Name.Y0+ Name.CELL_SIZE *i);
}
//画棋盘的纵线
for(int j = 0; j <= Name.WIDTH; j++) {
g.drawLine(Name.X0 + Name.CELL_SIZE *j , Name.Y0, Name.X0 + Name.CELL_SIZE *j, Name.Y0 +Name.HEIGHT*Name.CELL_SIZE);
}
//绘制图片
//g.drawImage(back.getImage(), Name.X0,Name.Y0,Name.X0+Name.WIDTH*Name.CELL_SIZE , Name.Y0 +Name.HEIGHT*Name.CELL_SIZE, null );
int x0;
int y0;
//重绘棋子
for (int a = 0; a < Name.WIDTH; a++)
{
for (int b = 0; b < Name.HEIGHT; b++)
{
if(location[a][b] ==-1)
{
g.setColor(Color.WHITE);
x0 = Name.X0 + a * Name.CELL_SIZE;
y0 = Name.Y0 + b * Name.CELL_SIZE;
g.fillOval(x0 - Name.CHESS_SIZE/2, y0 - Name.CHESS_SIZE/2, Name.CHESS_SIZE, Name.CHESS_SIZE);
}
else if(location[a][b] ==1)
{
g.setColor(Color.BLACK);
x0 = Name.X0 + a * Name.CELL_SIZE;
y0 = Name.Y0 + b * Name.CELL_SIZE;
g.fillOval(x0 - Name.CHESS_SIZE/2, y0 - Name.CHESS_SIZE/2, Name.CHESS_SIZE, Name.CHESS_SIZE);
}
}
}
}

//定义获得图片路径的方法
// private String imageBack = "images/1.jpg";
private ImageIcon back = new ImageIcon("images/1.jpg");

}


--------------------------------------------------------------

package cn.hsm.java;

import java.awt.Color;
import java.awt.Dialog;
import java.awt.Graphics;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class MouseListenerImpl extends MouseAdapter
{
private Graphics g;
private int x1,y1;
private int choose = 1;
private int[][] location;
public MouseListenerImpl(Graphics g ,int[][] location)
{
this.g =g;
this.location = location;
}

public void mouseReleased(MouseEvent e)
{
//鼠标点击的位置
x1 = e.getX();
y1 = e.getY();
int x0; //棋盘交叉点的x坐标
int y0; //棋盘交叉点的y坐标
for (int a = 0; a < Name.WIDTH; a++)
{
for (int b = 0; b < Name.HEIGHT; b++)
{
x0 = Name.X0 + a * Name.CELL_SIZE;
y0 = Name.Y0 + b * Name.CELL_SIZE;
if((Math.abs(x1 - x0) < Name.CELL_SIZE / 2) && (Math.abs(y1 - y0) < Name.CELL_SIZE / 2) &&location[a][b] == 0)
{
//画出棋子,且分出颜色:1为黑色,-1为白色;判断当前画的棋子颜色,并将其存储到二维数组中

g.setColor(Color.BLACK);
choose = 1;
g.fillOval(x0 - Name.CHESS_SIZE/2, y0 - Name.CHESS_SIZE/2, Name.CHESS_SIZE, Name.CHESS_SIZE);
win01Ways(a, b, choose);
win02Ways(a, b, choose);
win03Ways(a, b, choose);
location[a][b] = 1;

robertchoose(a,b);
return;
/* if (choose == -1)
{
g.setColor(Color.WHITE);
g.fillOval(x0 - Name.CHESS_SIZE/2, y0 - Name.CHESS_SIZE/2, Name.CHESS_SIZE, Name.CHESS_SIZE);
location[a][b] = -1;
win01Ways(a, b, choose);
win02Ways(a, b, choose);
win03Ways(a, b, choose);
choose = 1 ;
System.out.println("white");
}
*/
}
}
}
}


/**
* 机器选择最佳位置下棋
* @param a
* @param b
*/
private void robertchoose(int a,int b)
{
int x0; //棋盘交叉点的x坐标
int y0; //棋盘交叉点的y坐标
int m;
int n ;

/* 计算可以下棋的位置的权值 */
for( m = 0;m < Name.HEIGHT;m++)
{
for( n =0;n < Name.WIDTH;n++)
{
if(location[m][n] == 0 )
{
theBestChooseBlack();
theBestChooseWhite();
}
}
}
/* 判断最大值 */
roberDawn();

for( m = 0;m < Name.HEIGHT;m++)
{
boolean next = false;
for( n =0;n < Name.WIDTH;n++)
{
if(location[m][n] == 0 )
{
theBestChooseBlack();
theBestChooseWhite();
next = true;
break;
}
}
if(next)
{
break;
}
}
}

//判断黑色最大值,确定机器人下棋子的位置
private void theBestChooseBlack()
{
for(int x = 0;x<Name.HEIGHT;x++)
{
for(int y = 0;y<Name.WIDTH;y++)
{
int count = 0;
//横向的黑色棋子
if(location[x][y] == 0)
{
for(int i = 1; (x-i)>=0&&i < 5; i++)
{
if(location[x-i][y] == 1)
{
count++;
}else
{
break;
}
}
for(int j = 1; ((x+j)>=Name.CELL_SIZE*Name.WIDTH)&&j < 5; j++)
{
if(location[x+j][y] == 1)
{
count++;
}else
{
break;
}
}
choose = 1;
}

if(count ==4)
{
Name.robertChoose1[x][y] += 22;
}
if(count ==3)
{
Name.robertChoose1[x][y] += 16;
}
if(count ==2)
{
Name.robertChoose1[x][y] += 3;
}
if(count ==1)
{
Name.robertChoose1[x][y] += 1;
}
count = 0;
//纵向的黑色棋子
if(location[x][y] == 0)
{
for(int i = 1; (y-i)>=0&&i < 5; i++)
{
if(location[x][y-i] == 1)
{
count++;
}else
{
break;
}
}
for(int j = 1; ((y+j)>=Name.CELL_SIZE*Name.HEIGHT)&&j < 5; j++)
{
if(location[x][y+j] == 1)
{
count++;
}else
{
break;
}
}
choose = 1;
}
if(count ==4)
{
Name.robertChoose1[x][y] += 22;
}
if(count ==3)
{
Name.robertChoose1[x][y] += 16;
}
if(count ==2)
{
Name.robertChoose1[x][y] += 3;
}
if(count ==1)
{
Name.robertChoose1[x][y] += 1;
}
//切向的黑色棋子

count = 0;
if(location[x][y] == 0)
{
for(int i = 1; (y-i)>=0&&(x-i)>=0&&i < 5; i++)
{
if(location[x-i][y-i] == 1)
{
count++;
}else
{
break;
}
}
for(int j = 1; ((y+j)>=Name.CELL_SIZE*Name.HEIGHT)&&((x+j)>=Name.CELL_SIZE*Name.WIDTH)&&(x-j)>=0&&j < 5; j++)
{
if(location[x+j][y+j] == 1)
{
count++;
}else
{
break;
}
}
choose = 1;
}
if(count ==4){
Name.robertChoose1[x][y] += 22;
}
if(count ==3){
Name.robertChoose1[x][y] += 16;
}
if(count ==2){
Name.robertChoose1[x][y] += 3;
}
if(count ==1){
Name.robertChoose1[x][y] += 1;
}
}
}
}


//判断白色最大值,确定机器人下棋子的位置
public void theBestChooseWhite()
{
for(int x = 0;x<Name.HEIGHT;x++)
{
for(int y = 0;y<Name.WIDTH;y++)
{
int count = 0;
//横向的白色棋子
if(location[x][y] == 0)
{
for(int i = 1; (x-i)>=0&&i < 5; i++)
{
if(location[x-i][y] == -1)
{
count++;
}else
{
break;
}
}
for(int j = 1; ((x+j)>=Name.CELL_SIZE*Name.WIDTH)&&j < 5; j++)
{
if(location[x+j][y] == -1)
{
count++;
}else
{
break;
}
}
}
if(count ==4){
Name.robertChoose2[x][y] += 35;
}
if(count ==3){
Name.robertChoose2[x][y] += 20;
}
if(count ==2){
Name.robertChoose2[x][y] += 5;
}
if(count ==1){
Name.robertChoose2[x][y] += 1;
}
count = 0;
//纵向的白色棋子
if(location[x][y] == 0)
{
for(int i = 1; (y-i)>=0&&i < 5; i++)
{
if(location[x][y-i] == -1)
{
count++;
}else
{
break;
}
}
for(int j = 1; ((y+j)>=Name.CELL_SIZE*Name.HEIGHT)&&j < 5; j++)
{
if(location[x][y+j] == -1)
{
count++;
}else
{
break;
}
}
}
if(count ==4){
Name.robertChoose2[x][y] += 35;
}
if(count ==3){
Name.robertChoose2[x][y] += 20;
}
if(count ==2){
Name.robertChoose2[x][y] += 5;
}
if(count ==1){
Name.robertChoose2[x][y] += 1;
}
count = 0;
//切向的白色棋子
if(location[x][y] == 0)
{
for(int i = 1; (y-i)>=0&&(x-i)>=0&&i < 5; i++)
{
if(location[x-i][y-i] == -1)
{
count++;
}else
{
break;
}
}
for(int j = 1; ((y+j)>=Name.CELL_SIZE*Name.HEIGHT)&&((x+j)>=Name.CELL_SIZE*Name.WIDTH)&&(x-j)>=0&&j < 5; j++)
{
if(location[x+j][y+j] == -1)
{
count++;
}else
{
break;
}
}
}
if(count ==4){
Name.robertChoose2[x][y] += 35;
}
if(count ==3){
Name.robertChoose2[x][y] += 20;
}
if(count ==2){
Name.robertChoose2[x][y] += 5;
}
if(count ==1){
Name.robertChoose2[x][y] += 1;
}
}
}
}


private void roberDawn() {
int max = -1;
int max_a = 0;
int max_b = 0;
for(int a = 0;a < Name.HEIGHT; a++)
{
for(int b = 0; b< Name.WIDTH; b++)
{
//使机器人下的棋子下在空位上
Name.robertChoose[a][b] = Name.robertChoose1[a][b] + Name.robertChoose2[a][b];
if(Name.robertChoose[max_a][max_b] == 0)
{
if(Name.robertChoose[a][b] > max)
{
max = Name.robertChoose[a][b];
max_a = a;
max_b = b;
}
}
Name.robertChoose[a][b] = 0;
Name.robertChoose1[a][b] = 0;
Name.robertChoose2[a][b] = 0;
}
}
int x0; //棋盘交叉点的x坐标
int y0; //棋盘交叉点的y坐标
x0 = Name.X0 + max_a * Name.CELL_SIZE;
y0 = Name.Y0 + max_b * Name.CELL_SIZE;
g.setColor(Color.WHITE);
if(Name.robertChoose[max_a][max_b] == 0)
{
g.fillOval(x0 - Name.CHESS_SIZE/2, y0 - Name.CHESS_SIZE/2, Name.CHESS_SIZE, Name.CHESS_SIZE);
choose = -1;
win01Ways(max_a, max_b, choose);
win02Ways(max_a, max_b, choose);
win03Ways(max_a, max_b, choose);
}
location[max_a][max_b] =-1;

}


private void win01Ways(int x, int y, int choose)
{
int count = 1;
//判断横向是否连珠
if(choose == 1) {
for(int i = 1; (x-i)>=0&&i < 5; i++)
{
if(location[x-i][y] == 1)
{
count++;
}else
{
break;
}
}
for(int j = 1; ((x+j)>=Name.CELL_SIZE*Name.WIDTH)&&j < 5; j++)
{
if(location[x+j][y] == 1)
{
count++;
}else
{
break;
}
}
}else {
for(int i = 1; (x-i)>=0&&i < 5; i++)
{
if(location[x-i][y] == -1)
{
count++;
}else
{
break;
}
}
for(int j = 1; ((x+j)>=Name.CELL_SIZE*Name.WIDTH)&&j < 5; j++)
{
if(location[x+j][y] == -1)
{
count++;
}else
{
break;
}
}
}
if (count > 4)
{
//System.out.println("有人获胜啦!!");
javax.swing.JOptionPane ip1 = new javax.swing.JOptionPane();
ip1.showMessageDialog(null, "有人获胜了");
}
}

private void win02Ways(int x, int y, int choose)
{
int count = 1;
//判断纵向是否连珠
if(choose == 1) {
for(int i = 1; (y-i)>=0&&i < 5; i++)
{
if(location[x][y-i] == 1)
{
count++;
}else{
break;
}
}
for(int j = 1; ((y+j)>=Name.CELL_SIZE*Name.HEIGHT)&&j < 5; j++)
{
if(location[x][y+j] == 1)
{
count++;
}else{
break;
}
}
}else {
for(int i = 1; (y-i)>=0&&i < 5; i++)
{
if(location[x][y-i] == -1)
{
count++;
}else{
break;
}
}
for(int j = 1; ((y+j)>=Name.CELL_SIZE*Name.HEIGHT)&&j < 5; j++)
{
if(location[x][y+j] == -1)
{
count++;
}else{
break;
}
}
}
if (count > 4)
{
javax.swing.JOptionPane ip2 = new javax.swing.JOptionPane();
ip2.showMessageDialog(null, "有人获胜了");
}
}

private void win03Ways(int x, int y, int choose)
{
int count = 1;
//判断45度向是否连珠
if(choose == 1) {
for(int i = 1; (y-i)>=0&&(x-i)>=0&&i < 5; i++)
{
if(location[x-i][y-i] == 1)
{
count++;
}else{
break;
}
}
for(int j = 1; ((y+j)>=Name.CELL_SIZE*Name.HEIGHT)&&((x+j)>=Name.CELL_SIZE*Name.WIDTH)&&j < 5; j++)
{
if(location[x+j][y+j] == 1)
{
count++;
}else{
break;
}
}
}else {
for(int i = 1; (y-i)>=0&&(x-i)>=0&&i < 5; i++)
{
if(location[x-i][y-i] == -1)
{
count++;
}else{
break;
}
}
for(int j = 1; ((y+j)>=Name.CELL_SIZE*Name.HEIGHT)&&((x+j)>=Name.CELL_SIZE*Name.WIDTH)&&(x-j)>=0&&j < 5; j++)
{
if(location[x+j][y+j] == -1)
{
count++;
}else{
break;
}
}
}
if (count > 4)
{
javax.swing.JOptionPane ip3 = new javax.swing.JOptionPane();
ip3.showMessageDialog(null, "有人获胜了");
// JDialog dialog = new JDialog();
// dialog.setSize(200, 100);
// dialog.setTitle("有人获胜啦");
// dialog.setLocationRelativeTo(null);
// dialog.add(new JLabel("有人获胜啦!!"));
// dialog.setVisible(true);
}
}
}



--------------------------------------------------------------------
我刚刚退出来一看,既然有580行,哈哈,好有成就感。
--------------------------------------------------------------------

package cn.hsm.java;

public class Name
{
public static int X0 = 50; //横坐标的偏移量
public static int Y0 = 50; //纵坐标的偏移量
public static int CELL_SIZE= 50; // 方格的大小
public static int HEIGHT = 14; //高的数目
public static int WIDTH = 14; //宽的数目
public static int CHESS_SIZE = 40; //棋子的大小
public static int[][] robertChoose1= new int[HEIGHT][WIDTH];//定义一个看机器人下黑棋子的权值
public static int[][] robertChoose2 = new int[HEIGHT][WIDTH];//定义一个看机器人下白棋子的权值
public static int[][] robertChoose = new int[HEIGHT][WIDTH];//定义一个看机器人下棋子的权值
}


package cn.hsm.java;   

import java.awt.Color;
import java.awt.Dialog;
import java.awt.Graphics;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class MouseListenerImpl extends MouseAdapter
{
private Graphics g;
private int x1,y1;
private int choose = 1;
private int[][] location;
private boolean play = false;
public MouseListenerImpl(Graphics g ,int[][] location)
{
this.g =g;
this.location = location;
}

public void mouseReleased(MouseEvent e)
{
if(play) {
return;
}
//鼠标点击的位置
x1 = e.getX();
y1 = e.getY();
int x0; //棋盘交叉点的x坐标
int y0; //棋盘交叉点的y坐标
for (int a = 0; a < Name.WIDTH; a++)
{
for (int b = 0; b < Name.HEIGHT; b++)
{
x0 = Name.X0 + a * Name.CELL_SIZE;
y0 = Name.Y0 + b * Name.CELL_SIZE;
if((Math.abs(x1 - x0) < Name.CELL_SIZE / 2) && (Math.abs(y1 - y0) < Name.CELL_SIZE / 2) &&location[a][b] == 0)
{
//画出棋子,且分出颜色:1为黑色,-1为白色;判断当前画的棋子颜色,并将其存储到二维数组中

g.setColor(Color.BLACK);
g.fillOval(x0 - Name.CHESS_SIZE/2, y0 - Name.CHESS_SIZE/2, Name.CHESS_SIZE, Name.CHESS_SIZE);
choose = 1;
win01Ways(a, b, choose);
win02Ways(a, b, choose);
win03Ways(a, b, choose);
location[a][b] = 1;
robertchoose(a,b);
return;
/* if (choose == -1)
{
g.setColor(Color.WHITE);
g.fillOval(x0 - Name.CHESS_SIZE/2, y0 - Name.CHESS_SIZE/2, Name.CHESS_SIZE, Name.CHESS_SIZE);
location[a][b] = -1;
win01Ways(a, b, choose);
win02Ways(a, b, choose);
win03Ways(a, b, choose);
choose = 1 ;
System.out.println("white");
}
*/
}
}
}
}


/**
* 机器选择最佳位置下棋
* @param a
* @param b
*/
private void robertchoose(int a,int b)
{
int x0; //棋盘交叉点的x坐标
int y0; //棋盘交叉点的y坐标
int m;
int n ;

/* 计算可以下棋的位置的权值 */
for( m = 0;m < Name.HEIGHT;m++)
{
for( n =0;n < Name.WIDTH;n++)
{
if(location[m][n] == 0 )
{
theBestChooseBlack();
theBestChooseWhite();
}
}
}
/* 判断最大值 */
roberDawn();

for( m = 0;m < Name.HEIGHT;m++)
{
boolean next = false;
for( n =0;n < Name.WIDTH;n++)
{
if(location[m][n] == 0 )
{
theBestChooseBlack();
theBestChooseWhite();
next = true;
break;
}
}
if(next)
{
break;
}
}
}

//判断黑色最大值,确定机器人下棋子的位置
private void theBestChooseBlack()
{
for(int x = 0;x<Name.HEIGHT;x++)
{
for(int y = 0;y<Name.WIDTH;y++)
{
int count = 0;
//横向的黑色棋子
if(location[x][y] == 0)
{
for(int i = 1; (x-i)>=0&&i < 5; i++)
{
if(location[x-i][y] == 1)
{
count++;
}else
{
break;
}
}
for(int j = 1; ((x+j)>=Name.CELL_SIZE*Name.WIDTH)&&j < 5; j++)
{
if(location[x+j][y] == 1)
{
count++;
}else
{
break;
}
}
choose = 1;
}

if(count ==4)
{
Name.robertChoose1[x][y] += 22;
}
if(count ==3)
{
Name.robertChoose1[x][y] += 16;
}
if(count ==2)
{
Name.robertChoose1[x][y] += 3;
}
if(count ==1)
{
Name.robertChoose1[x][y] += 1;
}
count = 0;
//纵向的黑色棋子
if(location[x][y] == 0)
{
for(int i = 1; (y-i)>=0&&i < 5; i++)
{
if(location[x][y-i] == 1)
{
count++;
}else
{
break;
}
}
for(int j = 1; ((y+j)>=Name.CELL_SIZE*Name.HEIGHT)&&j < 5; j++)
{
if(location[x][y+j] == 1)
{
count++;
}else
{
break;
}
}
choose = 1;
}
if(count ==4)
{
Name.robertChoose1[x][y] += 22;
}
if(count ==3)
{
Name.robertChoose1[x][y] += 16;
}
if(count ==2)
{
Name.robertChoose1[x][y] += 3;
}
if(count ==1)
{
Name.robertChoose1[x][y] += 1;
}
//切向的黑色棋子

count = 0;
if(location[x][y] == 0)
{
for(int i = 1; (y-i)>=0&&(x-i)>=0&&i < 5; i++)
{
if(location[x-i][y-i] == 1)
{
count++;
}else
{
break;
}
}
for(int j = 1; ((y+j)>=Name.CELL_SIZE*Name.HEIGHT)&&((x+j)>=Name.CELL_SIZE*Name.WIDTH)&&(x-j)>=0&&j < 5; j++)
{
if(location[x+j][y+j] == 1)
{
count++;
}else
{
break;
}
}
choose = 1;
}
if(count ==4){
Name.robertChoose1[x][y] += 22;
}
if(count ==3){
Name.robertChoose1[x][y] += 16;
}
if(count ==2){
Name.robertChoose1[x][y] += 3;
}
if(count ==1){
Name.robertChoose1[x][y] += 1;
}
}
}
}


//判断白色最大值,确定机器人下棋子的位置
public void theBestChooseWhite()
{
for(int x = 0;x<Name.HEIGHT;x++)
{
for(int y = 0;y<Name.WIDTH;y++)
{
int count = 0;
//横向的白色棋子
if(location[x][y] == 0)
{
for(int i = 1; (x-i)>=0&&i < 5; i++)
{
if(location[x-i][y] == -1)
{
count++;
}else
{
break;
}
}
for(int j = 1; ((x+j)>=Name.CELL_SIZE*Name.WIDTH)&&j < 5; j++)
{
if(location[x+j][y] == -1)
{
count++;
}else
{
break;
}
}
}
if(count ==4){
Name.robertChoose2[x][y] += 35;
}
if(count ==3){
Name.robertChoose2[x][y] += 20;
}
if(count ==2){
Name.robertChoose2[x][y] += 5;
}
if(count ==1){
Name.robertChoose2[x][y] += 1;
}
count = 0;
//纵向的白色棋子
if(location[x][y] == 0)
{
for(int i = 1; (y-i)>=0&&i < 5; i++)
{
if(location[x][y-i] == -1)
{
count++;
}else
{
break;
}
}
for(int j = 1; ((y+j)>=Name.CELL_SIZE*Name.HEIGHT)&&j < 5; j++)
{
if(location[x][y+j] == -1)
{
count++;
}else
{
break;
}
}
}
if(count ==4){
Name.robertChoose2[x][y] += 35;
}
if(count ==3){
Name.robertChoose2[x][y] += 20;
}
if(count ==2){
Name.robertChoose2[x][y] += 5;
}
if(count ==1){
Name.robertChoose2[x][y] += 1;
}
count = 0;
//切向的白色棋子
if(location[x][y] == 0)
{
for(int i = 1; (y-i)>=0&&(x-i)>=0&&i < 5; i++)
{
if(location[x-i][y-i] == -1)
{
count++;
}else
{
break;
}
}
for(int j = 1; ((y+j)>=Name.CELL_SIZE*Name.HEIGHT)&&((x+j)>=Name.CELL_SIZE*Name.WIDTH)&&(x-j)>=0&&j < 5; j++)
{
if(location[x+j][y+j] == -1)
{
count++;
}else
{
break;
}
}
}
if(count ==4){
Name.robertChoose2[x][y] += 35;
}
if(count ==3){
Name.robertChoose2[x][y] += 20;
}
if(count ==2){
Name.robertChoose2[x][y] += 5;
}
if(count ==1){
Name.robertChoose2[x][y] += 1;
}
}
}
}


private void roberDawn() {
int max = -1;
int max_a = 0;
int max_b = 0;
for(int a = 0;a < Name.HEIGHT; a++)
{
for(int b = 0; b< Name.WIDTH; b++)
{
//使机器人下的棋子下在空位上
Name.robertChoose[a][b] = Name.robertChoose1[a][b] + Name.robertChoose2[a][b];
if(Name.robertChoose[max_a][max_b] == 0)
{
if(Name.robertChoose[a][b] > max)
{
max = Name.robertChoose[a][b];
max_a = a;
max_b = b;
}
}
Name.robertChoose[a][b] = 0;
Name.robertChoose1[a][b] = 0;
Name.robertChoose2[a][b] = 0;
}
}
int x0; //棋盘交叉点的x坐标
int y0; //棋盘交叉点的y坐标
x0 = Name.X0 + max_a * Name.CELL_SIZE;
y0 = Name.Y0 + max_b * Name.CELL_SIZE;
g.setColor(Color.WHITE);
if(Name.robertChoose[max_a][max_b] == 0)
{
g.fillOval(x0 - Name.CHESS_SIZE/2, y0 - Name.CHESS_SIZE/2, Name.CHESS_SIZE, Name.CHESS_SIZE);
choose = -1;
win01Ways(max_a, max_b, choose);
win02Ways(max_a, max_b, choose);
win03Ways(max_a, max_b, choose);
}
location[max_a][max_b] =-1;

}


private void win01Ways(int x, int y, int choose)
{
int count = 1;
//判断横向是否连珠
if(choose == 1)
{
System.out.println("下黑子了...");
for(int i = 1; (x-i)>=0&&i < 5; i++)
{
if(location[x-i][y] == 1)
{
count++;
}else
{
// System.out.println("下黑子了..."+count);
break;
}
}
for(int j = 1; ((x+j)<=Name.CELL_SIZE*Name.WIDTH)&&j < 5; j++)
{
if(location[x+j][y] == 1)
{
count++;
}else
{
System.out.println("下黑子了..."+count);
break;
}
}
}else {
for(int i = 1; (x-i)>=0&&i < 5; i++)
{
if(location[x-i][y] == -1)
{
count++;
}else
{
break;
}
}
for(int j = 1; ((x+j)<=Name.CELL_SIZE*Name.WIDTH)&&j < 5; j++)
{
if(location[x+j][y] == -1)
{
count++;
}else
{
break;
}
}
}
if (count > 4)
{
System.out.println("有人获胜啦!!:"+choose);
javax.swing.JOptionPane ip1 = new javax.swing.JOptionPane();
ip1.showMessageDialog(null, "有人获胜了");
play =true;
}
}

private void win02Ways(int x, int y, int choose)
{
int count = 1;
//判断纵向是否连珠
if(choose == 1)
{
for(int i = 1; (y-i)>=0&&i < 5; i++)
{
if(location[x][y-i] == 1)
{
count++;
}else{
break;
}
}
for(int j = 1; ((y+j)<=Name.CELL_SIZE*Name.HEIGHT)&&j < 5; j++)
{
if(location[x][y+j] == 1)
{
count++;
}else{
break;
}
}
}else {
for(int i = 1; (y-i)>=0&&i < 5; i++)
{
if(location[x][y-i] == -1)
{
count++;
}else{
break;
}
}
for(int j = 1; ((y+j)<=Name.CELL_SIZE*Name.HEIGHT)&&j < 5; j++)
{
if(location[x][y+j] == -1)
{
count++;
}else{
break;
}
}
}
if (count > 4)
{
javax.swing.JOptionPane ip2 = new javax.swing.JOptionPane();
ip2.showMessageDialog(null, "有人获胜了");
play =true;
}
}

private void win03Ways(int x, int y, int choose)
{
int count = 1;
//判断45度向是否连珠
if(choose == 1) {
for(int i = 1; (y-i)>=0&&(x-i)>=0&&i < 5; i++)
{
if(location[x-i][y-i] == 1)
{
count++;
}else{
break;
}
}
for(int j = 1; ((y+j)<=Name.CELL_SIZE*Name.HEIGHT)&&((x+j)>=Name.CELL_SIZE*Name.WIDTH)&&j < 5; j++)
{
if(location[x+j][y+j] == 1)
{
count++;
}else{
break;
}
}
}else {
for(int i = 1; (y-i)>=0&&(x-i)>=0&&i < 5; i++)
{
if(location[x-i][y-i] == -1)
{
count++;
}else{
break;
}
}
for(int j = 1; ((y+j)<=Name.CELL_SIZE*Name.HEIGHT)&&((x+j)>=Name.CELL_SIZE*Name.WIDTH)&&(x-j)>=0&&j < 5; j++)
{
if(location[x+j][y+j] == -1)
{
count++;
}else{
break;
}
}
}
if (count > 4)
{
javax.swing.JOptionPane ip3 = new javax.swing.JOptionPane();
ip3.showMessageDialog(null, "有人获胜了");
play =true;
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值