以下是我做的简易的五子棋,可进行人机互动哦= =。
这里主要包括界面的制作与显示,还包括判断输赢。
public class Wzq extends JFrame{ /* * 定义一个五子棋类 */ private int flat ;//判断输赢的标志 public static void main(String[] args) { //实例化一个类 Wzq wzq = new Wzq(); wzq.showFrame(); } private void showFrame(){ //设置程序的名字 this.setTitle("五子棋"); //设置大小 this.setSize(650, 650); //在屏幕中间显示 this.setLocationRelativeTo(null); //设置窗口的关闭 this.setDefaultCloseOperation(3); //设置窗口的大小无法调整 this.setResizable(false); //添加背景 background(); this.setLayout(null); //创建菜单栏 JMenuBar JMB = creatJMenuBar(); //设置菜单栏的位置 JMB.setBounds(0,0,650,30); //添加菜单栏 this.add(JMB); //添加悔棋按钮 JButton Btn_return = new JButton("悔棋"); //添加新的的一局按钮 JButton Btn_new = new JButton("新的一局"); //添加人人对战按钮 JButton Btn_PvP = new JButton("玩家之间对战"); //添加人机对战按钮 JButton Btn_PvC = new JButton("玩家与电脑对战"); //设置按钮的大小和方位 Btn_return.setBounds(100,520, 100, 40); Btn_new.setBounds(100,570,100,40); Btn_PvP.setBounds(300, 520, 200, 40); Btn_PvC.setBounds(300, 570, 200, 40); //把按钮添加在面板上 this.add(Btn_return); this.add(Btn_new); this.add(Btn_PvP); this.add(Btn_PvC); //创建按钮的事件处理类 MyActionListener MAL = new MyActionListener(this); //添加监听器 Btn_return.addActionListener(MAL); Btn_new.addActionListener(MAL); Btn_PvP.addActionListener(MAL); Btn_PvC.addActionListener(MAL); //窗口显示 this.setVisible(true); //创建事件处理类 MyMouseListener MML = new MyMouseListener(this); //添加监听器 this.addMouseListener(MML); } // private JMenuBar creatJMenuBar() { JMenuBar JMB = new JMenuBar(); String [] arrayMenu = {"游戏","帮助"}; String [][] arrayItem = {{"玩家之间的对战","玩家与电脑对战","悔棋","清空棋盘"},{"查看帮助","关于Chess"}}; //遍历arrayMenu数组 for(int i=0;i<arrayMenu.length;i++) { JMenu Menu = new JMenu(arrayMenu[i]); for(int j=0;j<arrayItem[i].length;j++) { JMenuItem item = new JMenuItem(arrayItem[i][j]); Menu.add(item); } JMB.add(Menu); } return JMB; } //重绘 public void paint(Graphics g) { super.paint(g); //重绘棋盘 ChessBoard(g); //判断输赢的依据归0 flat = 0; //重绘棋子 for(int i=0;i<Data.XYList.size();i++) { ChessmanCoordinate CC = Data.XYList.get(i); //将X,Y经过处理得到棋盘二维数组上的坐标 int List_X = (int)(CC.X_Chessman-Data.X_Board)/Data.Width_Board; int List_Y = (int)(CC.Y_Chessman-Data.Y_Board)/Data.Width_Board; if(i%2==0) { g.setColor(Color.black); Data.Chess[List_X][List_Y]=1; g.fillOval(CC.X_Chessman-Data.Radius/2, CC.Y_Chessman-Data.Radius/2, Data.Radius, Data.Radius); } else{ g.setColor(Color.white); Data.Chess[List_X][List_Y]=-1; g.fillOval(CC.X_Chessman-Data.Radius/2, CC.Y_Chessman-Data.Radius/2, Data.Radius, Data.Radius); } } //判断输赢 Judge_winner(); } /** * 判断输赢的方法 */ public void Judge_winner(){ for(int i=0;i<Data.X_number;i++){ for(int j=0;j<Data.Y_number;j++){ if(Data.Chess[i][j]==1){ if((j+4)<Data.X_number&&Data.Chess[i][j+4]==1){ if(Data.Chess[i][j+1]==1&&Data.Chess[i][j+2]==1&&Data.Chess[i][j+3]==1){ flat = 1; break; } } else if((i+4)<Data.X_number&&Data.Chess[i+4][j]==1){ if(Data.Chess[i+3][j]==1&&Data.Chess[i+2][j]==1&&Data.Chess[i+1][j]==1){ flat = 1; break; } } else if((i+4)<Data.X_number&&(j+4)<Data.X_number&&Data.Chess[i+4][j+4]==1){ if(Data.Chess[i+1][j+1]==1&&Data.Chess[i+2][j+2]==1&&Data.Chess[i+3][j+3]==1){ flat = 1; break; } } else if((i+4)<Data.X_number&&(j-4)>=0&&Data.Chess[i+4][j-4]==1){ if(Data.Chess[i+1][j-1]==1&&Data.Chess[i+2][j-2]==1&&Data.Chess[i+3][j-3]==1){ flat = 1; break; } } } else if(Data.Chess[i][j]==-1){ if((j+4)<Data.X_number&&Data.Chess[i][j+4]==-1){ if(Data.Chess[i][j+1]==-1&&Data.Chess[i][j+2]==-1&&Data.Chess[i][j+3]==-1){ flat = -1; break; } } else if((i+4)<Data.X_number&&Data.Chess[i+4][j]==-1){ if(Data.Chess[i+3][j]==-1&&Data.Chess[i+2][j]==-1&&Data.Chess[i+1][j]==-1){ flat = -1; break; } } else if((i+4)<Data.X_number&&(j+4)<Data.X_number&&Data.Chess[i+4][j+4]==-1){ if(Data.Chess[i+1][j+1]==-1&&Data.Chess[i+2][j+2]==-1&&Data.Chess[i+3][j+3]==-1){ flat = -1; break; } } else if((i+4)<Data.X_number&&(j-4)>=0&&Data.Chess[i+4][j-4]==-1){ if(Data.Chess[i+1][j-1]==-1&&Data.Chess[i+2][j-2]==-1&&Data.Chess[i+3][j-3]==-1){ flat = -1; break; } } } } if(flat == 1){ System.out.println("黑棋赢"); break; } else if(flat == -1){ System.out.println("白棋赢"); break; } } } /** *创建一个构造棋盘的方法 */ public void ChessBoard(Graphics g){ //通过两个循环来构造棋盘 for(int i=0;i<Data.X_number;i++) { g.drawLine(Data.X_Board, Data.Y_Board+i*Data.Width_Board, Data.X_Board+Data.Width_Board*(Data.Y_number-1), Data.Y_Board+i*Data.Width_Board); } for(int j=0;j<Data.Y_number;j++) { g.drawLine(Data.X_Board+j*Data.Width_Board, Data.Y_Board, Data.X_Board+j*Data.Width_Board, Data.Y_Board+Data.Width_Board*(Data.X_number-1)); } } /** * 创造一个设置背景的方法 */ public void background(){ //实例化一个ImageIcon对象 ImageIcon image = new ImageIcon("image/background.jpg"); //实例化一个JLabel对象 JLabel JLB = new JLabel(image); //设置标签的大小的起始位置 JLB.setBounds(0, 0,this.getWidth(),this.getHeight()); //获取窗体上LayoutComponent面板对象,向该面板添加一个标签,同时制定该标签显示在该面板的最上层 this.getLayeredPane().add(JLB, new Integer(Integer.MIN_VALUE)); //获取LayeredPanel面板上的另一层面板对象ContentPanel JPanel contentPanel = (JPanel)this.getContentPane(); //设置contentPanel面板为透明 contentPanel.setOpaque(false); } }
这里是保存棋子坐标的类
//用于保存棋子的坐标的类 public class ChessmanCoordinate { public int X_Chessman; public int Y_Chessman; }
这是一个保存数据的地方。
public class Data { //设置棋盘的起点位置 public static final int X_Board=100; public static final int Y_Board=70; //设置棋盘中格子的宽度 public static final int Width_Board = 33; //设置棋盘中横线的数目 public static final int X_number = 15; //设置棋盘中纵线的数目 public static final int Y_number = 15; //设置棋盘线条宽度 public static final int lineWidth = 1; //设置棋子的半径 public static final int Radius = 30; //保存棋子的坐标 public static List<ChessmanCoordinate> XYList = new ArrayList<ChessmanCoordinate>(); //标志制定位子上的值 public static final int [][] Chess = new int[X_number][Y_number]; //保存棋盘上的状况 public static final int [][] Value = new int[X_number][Y_number]; //防守权值设置 public static final int Value_1 = 2; public static final int Value_Life_2 = 60; public static final int Value_Dead_2 = 10; public static final int Value_Life_3 = 800; public static final int Value_Dead_3 = 50; public static final int Value_4 = 3000; public static final int Value_Galton = 90; //进攻权值设置 public static final int Attack_Value_2 = 55; public static final int Attack_Value_3 = 150; public static final int Attack_Value_4 = 900; public static final int Attack_Value_5 = 10000; //输出权值表的方法 public static void print(){ for(int i=0;i<Data.X_number;i++){ for(int j=0;j<Data.Y_number;j++){ System.out.print(Value[j][i]+"\t"); } System.out.println(); } System.out.println(); } }
这里是按钮监听器,负责对按钮功能的实现。
public class MyActionListener implements ActionListener{ //扩大参数适用范围 private JFrame JF; public static int Choose_P_or_C=0; public MyActionListener(JFrame JF) { this.JF = JF; } @Override public void actionPerformed(ActionEvent arg0) { // TODO 自动生成的方法存根 if(arg0.getActionCommand().equals("新的一局")){ int ChessNumber = Data.XYList.size(); for(int i=0;i<ChessNumber;i++){ ChessmanCoordinate CC1 = Data.XYList.get(Data.XYList.size()-1); //将X,Y经过处理得到棋盘二维数组上的坐标 int List_X1 = (CC1.X_Chessman-Data.X_Board)/Data.Width_Board; int List_Y1 = (CC1.Y_Chessman-Data.Y_Board)/Data.Width_Board; Data.Chess[List_X1][List_Y1]=0; Data.XYList.remove(Data.XYList.size()-1); } }else if(arg0.getActionCommand().equals("悔棋")){ if(Data.XYList.size()!=0){ ChessmanCoordinate CC1 = Data.XYList.get(Data.XYList.size()-1); //将X,Y经过处理得到棋盘二维数组上的坐标 int List_X1 = (CC1.X_Chessman-Data.X_Board)/Data.Width_Board; int List_Y1 = (CC1.Y_Chessman-Data.Y_Board)/Data.Width_Board; Data.Chess[List_X1][List_Y1]=0; Data.XYList.remove(Data.XYList.size()-1); } }else if(arg0.getActionCommand().equals("玩家之间对战")){ //先清空棋盘 int ChessNumber = Data.XYList.size(); for(int i=0;i<ChessNumber;i++){ ChessmanCoordinate CC1 = Data.XYList.get(Data.XYList.size()-1); //将X,Y经过处理得到棋盘二维数组上的坐标 int List_X1 = (CC1.X_Chessman-Data.X_Board)/Data.Width_Board; int List_Y1 = (CC1.Y_Chessman-Data.Y_Board)/Data.Width_Board; Data.Chess[List_X1][List_Y1]=0; Data.XYList.remove(Data.XYList.size()-1); } Choose_P_or_C= 1; }else if(arg0.getActionCommand().equals("玩家与电脑对战")){ //先清空棋盘 int ChessNumber = Data.XYList.size(); for(int i=0;i<ChessNumber;i++){ ChessmanCoordinate CC1 = Data.XYList.get(Data.XYList.size()-1); //将X,Y经过处理得到棋盘二维数组上的坐标 int List_X1 = (CC1.X_Chessman-Data.X_Board)/Data.Width_Board; int List_Y1 = (CC1.Y_Chessman-Data.Y_Board)/Data.Width_Board; Data.Chess[List_X1][List_Y1]=0; Data.XYList.remove(Data.XYList.size()-1); } Choose_P_or_C=2; } //调用重绘的方法 JF.repaint(); }
这里是人机对战时机器的分析过程。其实如果我学过一些算法的话应该可以优化一下,至少不会那么长= =
public class MyMouseListener implements MouseListener{ //扩大参数适用范围 private JFrame JF; private int WhetherAdd; private int Pre_BestValue_X; private int Pre_BestValue_Y; public MyMouseListener(JFrame JF){ this.JF = JF; } @Override public void mouseClicked(MouseEvent arg0) { // TODO 自动生成的方法存根 } @Override public void mouseEntered(MouseEvent arg0) { // TODO 自动生成的方法存根 } @Override public void mouseExited(MouseEvent arg0) { // TODO 自动生成的方法存根 } @Override public void mousePressed(MouseEvent arg0) { // TODO 自动生成的方法存根 int X_Chessman = arg0.getX(); int Y_Chessman = arg0.getY(); WhetherAdd =0; if(X_Chessman>=Data.X_Board&&X_Chessman<=Data.X_Board+(Data.Y_number-1)*Data.Width_Board&&Y_Chessman>=Data.Y_Board&&Y_Chessman<=Data.Y_Board+(Data.X_number-1)*Data.Width_Board) { //对坐标进行处理,保证在交叉点上 int quotient_X = (X_Chessman-Data.X_Board)/Data.Width_Board; int quotient_Y = (Y_Chessman-Data.Y_Board)/Data.Width_Board; float remainder_X = (X_Chessman-Data.X_Board)%Data.Width_Board; float remainder_Y = (Y_Chessman-Data.Y_Board)%Data.Width_Board; if(remainder_X<Data.Width_Board/2){ X_Chessman = Data.X_Board+quotient_X*Data.Width_Board; } else{ X_Chessman = Data.X_Board+(quotient_X+1)*Data.Width_Board; } if(remainder_Y<Data.Width_Board/2){ Y_Chessman = Data.Y_Board+quotient_Y*Data.Width_Board; } else{ Y_Chessman = Data.Y_Board+(quotient_Y+1)*Data.Width_Board; } if(MyActionListener.Choose_P_or_C==1){ //人人对战 PvP(X_Chessman,Y_Chessman); }else if(MyActionListener.Choose_P_or_C==2) //人机对战 PvC(X_Chessman,Y_Chessman); } //调用重绘 JF.repaint(); } //人人对战的方法 public void PvP(int X_Chessman,int Y_Chessman){ //实例化一个ChessmanCoordinate对象,当点在棋盘上且不覆盖给的点的情况下才输入数据 if(Data.XYList.size()==0) { ChessmanCoordinate CC1 = new ChessmanCoordinate(); CC1.X_Chessman = X_Chessman; CC1.Y_Chessman = Y_Chessman; //添加到队列中 Data.XYList.add(CC1); } else { for(int i=0;i<Data.XYList.size();i++) { ChessmanCoordinate CCC1 = Data.XYList.get(i); if(CCC1.X_Chessman==X_Chessman&&CCC1.Y_Chessman==Y_Chessman) { break; } else if(i==Data.XYList.size()-1) { ChessmanCoordinate CC1 = new ChessmanCoordinate(); CC1.X_Chessman = X_Chessman; CC1.Y_Chessman = Y_Chessman; //添加到队列中 Data.XYList.add(CC1); //调用重绘 JF.repaint(); } } } } //人机对战的方法 public void PvC(int X_Chessman,int Y_Chessman){ //清空权值表 ReFresh_Value(); //实例化一个ChessmanCoordinate对象,当点在棋盘上且不覆盖给的点的情况下才输入数据 if(Data.XYList.size()==0) { ChessmanCoordinate CC1 = new ChessmanCoordinate(); CC1.X_Chessman = X_Chessman; CC1.Y_Chessman = Y_Chessman; /////////////////////////////////////////////////////////////////////////////////////////////////// int List_X = (int)(CC1.X_Chessman-Data.X_Board)/Data.Width_Board; int List_Y = (int)(CC1.Y_Chessman-Data.Y_Board)/Data.Width_Board; Data.Chess[List_X][List_Y]=1; /////////////////////////////////////////////////////////////////////////////////////////////////// //添加到队列中 Data.XYList.add(CC1); //调用重绘 JF.repaint(); //获取棋盘上的状况 Get_Station(); } else { for(int i=0;i<Data.XYList.size();i++) { ChessmanCoordinate CCC1 = Data.XYList.get(i); if(CCC1.X_Chessman==X_Chessman&&CCC1.Y_Chessman==Y_Chessman) { return; } else if(i==Data.XYList.size()-1) { WhetherAdd = 1; } } if(WhetherAdd == 1){ ChessmanCoordinate CC1 = new ChessmanCoordinate(); CC1.X_Chessman = X_Chessman; CC1.Y_Chessman = Y_Chessman; int List_X = (int)(CC1.X_Chessman-Data.X_Board)/Data.Width_Board; int List_Y = (int)(CC1.Y_Chessman-Data.Y_Board)/Data.Width_Board; Data.Chess[List_X][List_Y]=1; //添加到队列中 Data.XYList.add(CC1); //调用重绘 JF.repaint(); //获取棋盘上的状况 Get_Station(); } } //输出权值表 Data.print(); //寻找权值最高点 int BestValue_X = 0; int BestValue_Y = 0; int Best = 0; for(int i=0;i<Data.X_number;i++){ for(int j=0;j<Data.Y_number;j++){ if(Data.Value[i][j]>Best){ Best = Data.Value[i][j]; BestValue_X = i; BestValue_Y = j; } } } /* * 预判的过程 */ Pre_BestValue_X = 0; Pre_BestValue_Y = 0; if(Best<310){ Pre_Judge(); if(Data.Value[Pre_BestValue_X][Pre_BestValue_Y]>=900){ BestValue_X = Pre_BestValue_X; BestValue_Y = Pre_BestValue_Y; } } System.out.println("Pre_BestValue_X = "+Pre_BestValue_X+"Pre_BestValue_Y = "+Pre_BestValue_Y); ChessmanCoordinate CC2 = new ChessmanCoordinate(); CC2.X_Chessman = BestValue_X*Data.Width_Board+Data.X_Board; CC2.Y_Chessman = BestValue_Y*Data.Width_Board+Data.Y_Board; Data.Chess[BestValue_X][BestValue_Y]=-1; Data.Value[BestValue_X][BestValue_Y]=0; //添加到队列中 Data.XYList.add(CC2); //调用重绘 JF.repaint(); } /** * 构建预判的方法 */ public void Pre_Judge(){ int Pre_Best=0; int Chang1_X,Chang1_Y; for(int j=0;j<Data.X_number;j++){ for(int i=0;i<Data.Y_number;i++){ if(Data.Chess[i][j]==0){ Data.Chess[i][j]=1; Chang1_X = i; Chang1_Y = j; Get_Station(); for(int m=0;m<Data.X_number;m++){ for(int n=0;n<Data.Y_number;n++){ if(Data.Value[n][m]>Pre_Best){ Pre_Best = Data.Value[n][m]; Pre_BestValue_X = i; Pre_BestValue_Y = j; } } } Data.Chess[i][j]=0; } } } } /** * 获取棋盘上的状况的方法 */ public void Get_Station(){ for(int j=0;j<Data.X_number;j++){ for(int i=0;i<Data.Y_number;i++){ if(Data.Chess[i][j]==0){ //单棋子判断的方法 Defence_one(i,j); //双棋子判断的方法 Defence_two(i,j); //三棋子判断的方法 Defence_three(i,j); //四棋子判断的方法 Defence_four(i,j); /* * 梅花阵判断 */ if((i+2)<Data.X_number&&(j+2)<Data.Y_number&&(i-2)>=0&&(j-2)>=0){ if(Data.Chess[i][j+1]==1&&Data.Chess[i][j+2]!=-1&&Data.Chess[i][j-1]==1&&Data.Chess[i][j-2]!=-1&&Data.Chess[i+1][j]==1&&Data.Chess[i+2][j]!=-1&&Data.Chess[i-1][j]==1&&Data.Chess[i-2][j]!=-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Galton; } if(Data.Chess[i+1][j+1]==1&&Data.Chess[i+2][j+2]!=-1&&Data.Chess[i-1][j-1]==1&&Data.Chess[i-2][j-2]!=-1&&Data.Chess[i+1][j-1]==1&&Data.Chess[i+2][j-2]!=-1&&Data.Chess[i-1][j+1]==1&&Data.Chess[i-1][j+1]!=-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Galton; } } } } } /* * 进攻部分 */ for(int j=0;j<Data.X_number;j++){ for(int i=0;i<Data.Y_number;i++){ if(Data.Chess[i][j]==0){ //形成2棋子的方法 Attack_two(i,j); //形成3棋子的方法 Attack_three(i,j); //形成4棋子的方法 Attack_four(i,j); //形成5棋子的方法 Attack_five(i,j); } } } } /* * 构建单棋子判断的方法(防守) */ public void Defence_one(int i,int j){ if((j+1)<Data.X_number&&Data.Chess[i][j+1]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_1; } if((i+1)<Data.X_number&&(j+1)<Data.X_number&&Data.Chess[i+1][j+1]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_1; } if((i-1)>=0&&(j+1)<Data.X_number&&Data.Chess[i-1][j+1]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_1; } if((i+1)<Data.X_number&&Data.Chess[i+1][j]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_1; } if((i-1)>=0&&Data.Chess[i-1][j]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_1; } if((i+1)<Data.X_number&&(j-1)>=0&&Data.Chess[i+1][j-1]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_1; } if((i-1)>=0&&(j-1)>=0&&Data.Chess[i-1][j-1]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_1; } if((j-1)>=0&&Data.Chess[i][j-1]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_1; } } /* * 构建双棋子判断的方法(防守) */ public void Defence_two(int i,int j){ /* * 双棋子横向判断 */ //横二连活 if((i+3)<Data.X_number&&Data.Chess[i+1][j]==1&&Data.Chess[i+2][j]==1&&Data.Chess[i+3][j]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Life_2; } //横二连死 if((i+3)<Data.X_number&&Data.Chess[i+1][j]==1&&Data.Chess[i+2][j]==1&&Data.Chess[i+3][j]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_2; } //横二连活 if((i-3)>=0&&Data.Chess[i-1][j]==1&&Data.Chess[i-2][j]==1&&Data.Chess[i-3][j]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Life_2; } //横二连死 if((i-3)>=0&&Data.Chess[i-1][j]==1&&Data.Chess[i-2][j]==1&&Data.Chess[i-3][j]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_2; } /* * 双棋子纵向判断 */ //纵二连活 if((j+3)<Data.X_number&&Data.Chess[i][j+1]==1&&Data.Chess[i][j+2]==1&&Data.Chess[i][j+3]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Life_2; } //纵二连死 if((j+3)<Data.X_number&&Data.Chess[i][j+1]==1&&Data.Chess[i][j+2]==1&&Data.Chess[i][j+3]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_2; } //纵二连活 if((j-3)>=0&&Data.Chess[i][j-1]==1&&Data.Chess[i][j-2]==1&&Data.Chess[i][j-3]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Life_2; } //纵二连死 if((j-3)>=0&&Data.Chess[i][j-1]==1&&Data.Chess[i][j-2]==1&&Data.Chess[i][j-3]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_2; } /* * 双棋子斜向判断 */ //斜二连活 if((i+3)<Data.X_number&&(j+3)<Data.X_number&&Data.Chess[i+1][j+1]==1&&Data.Chess[i+2][j+2]==1&&Data.Chess[i+3][j+3]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Life_2; } //斜二连死 if((i+3)<Data.X_number&&(j+3)<Data.X_number&&Data.Chess[i+1][j+1]==1&&Data.Chess[i+2][j+2]==1&&Data.Chess[i+3][j+3]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_2; } //斜二连活 if((i-3)>=0&&(j-3)>=0&&Data.Chess[i-1][j-1]==1&&Data.Chess[i-2][j-2]==1&&Data.Chess[i-3][j-3]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Life_2; } //斜二连死 if((i-3)>=0&&(j-3)>=0&&Data.Chess[i-1][j-1]==1&&Data.Chess[i-2][j-2]==1&&Data.Chess[i-3][j-3]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_2; } //斜二连活 if((i-3)>=0&&(j+3)<Data.X_number&&Data.Chess[i-1][j+1]==1&&Data.Chess[i-2][j+2]==1&&Data.Chess[i-3][j+3]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Life_2; } //斜二连死 if((i-3)>=0&&(j+3)<Data.X_number&&Data.Chess[i-1][j+1]==1&&Data.Chess[i-2][j+2]==1&&Data.Chess[i-3][j+3]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_2; } //斜二连活 if((i+3)<Data.X_number&&(j-3)>=0&&Data.Chess[i+1][j-1]==1&&Data.Chess[i+2][j-2]==1&&Data.Chess[i+3][j-3]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Life_2; } //斜二连死 if((i+3)<Data.X_number&&(j-3)>=0&&Data.Chess[i+1][j-1]==1&&Data.Chess[i+2][j-2]==1&&Data.Chess[i+3][j-3]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_2; } } /* * 构建三棋子判断的方法(防守) */ public void Defence_three(int i,int j){ /* * 三棋子横向判断 */ //横三连活 if((i+4)<Data.X_number&&Data.Chess[i+1][j]==1&&Data.Chess[i+2][j]==1&&Data.Chess[i+3][j]==1&&Data.Chess[i+4][j]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Life_3; } //横三连死 if((i+4)<Data.X_number&&Data.Chess[i+1][j]==1&&Data.Chess[i+2][j]==1&&Data.Chess[i+3][j]==1&&Data.Chess[i+4][j]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_3; } //横三连活 if((i-4)>=0&&Data.Chess[i-1][j]==1&&Data.Chess[i-2][j]==1&&Data.Chess[i-3][j]==1&&Data.Chess[i-4][j]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Life_3; } //横三连死 if((i-4)>=0&&Data.Chess[i-1][j]==1&&Data.Chess[i-2][j]==1&&Data.Chess[i-3][j]==1&&Data.Chess[i-4][j]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_3; } //横2-1连活 if((i+3)<Data.X_number&&(i-2)>=0&&Data.Chess[i+1][j]==1&&Data.Chess[i+2][j]==1&&Data.Chess[i+3][j]==0&&Data.Chess[i-1][j]==1&&Data.Chess[i-2][j]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Life_3; } //横1-2连活 if((i+2)<Data.X_number&&(i-3)>=0&&Data.Chess[i+1][j]==1&&Data.Chess[i+2][j]==0&&Data.Chess[i-3][j]==0&&Data.Chess[i-1][j]==1&&Data.Chess[i-2][j]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Life_3; } //横2-1连死 if((i+3)<Data.X_number&&(i-2)>=0&&Data.Chess[i+1][j]==1&&Data.Chess[i+2][j]==1&&Data.Chess[i+3][j]==-1&&Data.Chess[i-1][j]==1&&Data.Chess[i-2][j]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_3; } //横2-1连死 if((i+3)<Data.X_number&&(i-2)>=0&&Data.Chess[i+1][j]==1&&Data.Chess[i+2][j]==1&&Data.Chess[i+3][j]==0&&Data.Chess[i-1][j]==1&&Data.Chess[i-2][j]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_3; } //横1-2连死 if((i+2)<Data.X_number&&(i-3)>=0&&Data.Chess[i+1][j]==1&&Data.Chess[i+2][j]==-1&&Data.Chess[i-3][j]==0&&Data.Chess[i-1][j]==1&&Data.Chess[i-2][j]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_3; } //横1-2连死 if((i+2)<Data.X_number&&(i-3)>=0&&Data.Chess[i+1][j]==1&&Data.Chess[i+2][j]==0&&Data.Chess[i-3][j]==-1&&Data.Chess[i-1][j]==1&&Data.Chess[i-2][j]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_3; } /* * 三棋子纵向判断 */ //纵三连活 if((j+4)<Data.X_number&&Data.Chess[i][j+1]==1&&Data.Chess[i][j+2]==1&&Data.Chess[i][j+3]==1&&Data.Chess[i][j+4]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Life_3; } //纵三连死 if((j+4)<Data.X_number&&Data.Chess[i][j+1]==1&&Data.Chess[i][j+2]==1&&Data.Chess[i][j+3]==1&&Data.Chess[i][j+4]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_3; } //纵三连活 if((j-4)>=0&&Data.Chess[i][j-1]==1&&Data.Chess[i][j-2]==1&&Data.Chess[i][j-3]==1&&Data.Chess[i][j-4]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Life_3; } //纵三连死 if((j-4)>=0&&Data.Chess[i][j-1]==1&&Data.Chess[i][j-2]==1&&Data.Chess[i][j-3]==1&&Data.Chess[i][j-4]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_3; } //纵2-1连活 if((j+3)<Data.X_number&&(j-2)>=0&&Data.Chess[i][j+1]==1&&Data.Chess[i][j+2]==1&&Data.Chess[i][j+3]==0&&Data.Chess[i][j-1]==1&&Data.Chess[i][j-2]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Life_3; } //纵1-2连活 if((j+2)<Data.X_number&&(j-3)>=0&&Data.Chess[i][j+1]==1&&Data.Chess[i][j+2]==0&&Data.Chess[i][j-3]==0&&Data.Chess[i][j-1]==1&&Data.Chess[i][j-2]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Life_3; } //纵2-1连死 if((j+3)<Data.X_number&&(j-2)>=0&&Data.Chess[i][j+1]==1&&Data.Chess[i][j+2]==1&&Data.Chess[i][j+3]==-1&&Data.Chess[i][j-1]==1&&Data.Chess[i][j-2]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_3; } //纵2-1连死 if((j+3)<Data.X_number&&(j-2)>=0&&Data.Chess[i][j+1]==1&&Data.Chess[i][j+2]==1&&Data.Chess[i][j+3]==0&&Data.Chess[i][j-1]==1&&Data.Chess[i][j-2]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_3; } //纵1-2连死 if((j+2)<Data.X_number&&(j-3)>=0&&Data.Chess[i][j+1]==1&&Data.Chess[i][j+2]==-1&&Data.Chess[i][j-3]==0&&Data.Chess[i][j-1]==1&&Data.Chess[i][j-2]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_3; } //纵1-2连死 if((j+2)<Data.X_number&&(j-3)>=0&&Data.Chess[i][j+1]==1&&Data.Chess[i][j+2]==0&&Data.Chess[i][j-3]==-1&&Data.Chess[i][j-1]==1&&Data.Chess[i][j-2]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_3; } /* * 三棋子斜向判断 */ //斜三连活 if((i+4)<Data.X_number&&(j+4)<Data.X_number&&Data.Chess[i+1][j+1]==1&&Data.Chess[i+2][j+2]==1&&Data.Chess[i+3][j+3]==1&&Data.Chess[i+4][j+4]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Life_3; } //斜三连死 if((i+4)<Data.X_number&&(j+4)<Data.X_number&&Data.Chess[i+1][j+1]==1&&Data.Chess[i+2][j+2]==1&&Data.Chess[i+3][j+3]==1&&Data.Chess[i+4][j+4]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_3; } //斜三连活 if((i-4)>=0&&(j-4)>=0&&Data.Chess[i-1][j-1]==1&&Data.Chess[i-2][j-2]==1&&Data.Chess[i-3][j-3]==1&&Data.Chess[i-4][j-4]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Life_3; } //斜三连死 if((i-4)>=0&&(j-4)>=0&&Data.Chess[i-1][j-1]==1&&Data.Chess[i-2][j-2]==1&&Data.Chess[i-3][j-3]==1&&Data.Chess[i-4][j-4]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_3; } //斜三连活 if((i-4)>=0&&(j+4)<Data.X_number&&Data.Chess[i-1][j+1]==1&&Data.Chess[i-2][j+2]==1&&Data.Chess[i-3][j+3]==1&&Data.Chess[i-4][j+4]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Life_3; } //斜三连死 if((i-4)>=0&&(j+4)<Data.X_number&&Data.Chess[i-1][j+1]==1&&Data.Chess[i-2][j+2]==1&&Data.Chess[i-3][j+3]==1&&Data.Chess[i-4][j+4]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_3; } //斜三连活 if((i+4)<Data.X_number&&(j-4)>=0&&Data.Chess[i+1][j-1]==1&&Data.Chess[i+2][j-2]==1&&Data.Chess[i+3][j-3]==1&&Data.Chess[i+4][j-4]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Life_3; } //斜三连死 if((i+4)<Data.X_number&&(j-4)>=0&&Data.Chess[i+1][j-1]==1&&Data.Chess[i+2][j-2]==1&&Data.Chess[i+3][j-3]==1&&Data.Chess[i+4][j-4]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_3; } //斜2-1连活 if((i+3)<Data.X_number&&(i-2)>=0&&(j+3)<Data.X_number&&(j-2)>=0&&Data.Chess[i+1][j+1]==1&&Data.Chess[i+2][j+2]==1&&Data.Chess[i+3][j+3]==0&&Data.Chess[i-1][j-1]==1&&Data.Chess[i-2][j-2]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Life_3; } //斜1-2连活 if((i+2)<Data.X_number&&(i-3)>=0&&(j+2)<Data.X_number&&(j-3)>=0&&Data.Chess[i+1][j+1]==1&&Data.Chess[i+2][j+2]==0&&Data.Chess[i-3][j-3]==0&&Data.Chess[i-1][j-1]==1&&Data.Chess[i-2][j-2]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Life_3; } //斜2-1连死 if((i+3)<Data.X_number&&(i-2)>=0&&(j+3)<Data.X_number&&(j-2)>=0&&Data.Chess[i+1][j+1]==1&&Data.Chess[i+2][j+2]==1&&Data.Chess[i+3][j+3]==-1&&Data.Chess[i-1][j-1]==1&&Data.Chess[i-2][j-2]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_3; } //斜2-1连死 if((i+3)<Data.X_number&&(i-2)>=0&&(j+3)<Data.X_number&&(j-2)>=0&&Data.Chess[i+1][j+1]==1&&Data.Chess[i+2][j+2]==1&&Data.Chess[i+3][j+3]==0&&Data.Chess[i-1][j-1]==1&&Data.Chess[i-2][j-2]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_3; } //斜1-2连死 if((i+2)<Data.X_number&&(i-3)>=0&&(j+2)<Data.X_number&&(j-3)>=0&&Data.Chess[i+1][j+1]==1&&Data.Chess[i+2][j+2]==-1&&Data.Chess[i-3][j-3]==0&&Data.Chess[i-1][j-1]==1&&Data.Chess[i-2][j-2]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_3; } //斜1-2连死 if((i+2)<Data.X_number&&(i-3)>=0&&(j+2)<Data.X_number&&(j-3)>=0&&Data.Chess[i+1][j+1]==1&&Data.Chess[i+2][j+2]==0&&Data.Chess[i-3][j-3]==-1&&Data.Chess[i-1][j-1]==1&&Data.Chess[i-2][j-2]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_3; } //斜2-1连活 if((i+3)<Data.X_number&&(i-2)>=0&&(j+2)<Data.X_number&&(j-3)>=0&&Data.Chess[i+1][j-1]==1&&Data.Chess[i+2][j-2]==1&&Data.Chess[i+3][j-3]==0&&Data.Chess[i-1][j+1]==1&&Data.Chess[i-2][j+2]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Life_3; } //斜1-2连活 if((i+2)<Data.X_number&&(i-3)>=0&&(j+3)<Data.X_number&&(j-2)>=0&&Data.Chess[i+1][j-1]==1&&Data.Chess[i+2][j-2]==0&&Data.Chess[i-3][j+3]==0&&Data.Chess[i-1][j+1]==1&&Data.Chess[i-2][j+2]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Life_3; } //斜2-1连死 if((i+3)<Data.X_number&&(i-2)>=0&&(j+2)<Data.X_number&&(j-3)>=0&&Data.Chess[i+1][j-1]==1&&Data.Chess[i+2][j-2]==1&&Data.Chess[i+3][j-3]==-1&&Data.Chess[i-1][j+1]==1&&Data.Chess[i-2][j+2]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_3; } //斜2-1连死 if((i+3)<Data.X_number&&(i-2)>=0&&(j+2)<Data.X_number&&(j-3)>=0&&Data.Chess[i+1][j-1]==1&&Data.Chess[i+2][j-2]==1&&Data.Chess[i+3][j-3]==0&&Data.Chess[i-1][j+1]==1&&Data.Chess[i-2][j+2]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_3; } //斜1-2连死 if((i+2)<Data.X_number&&(i-3)>=0&&(j+3)<Data.X_number&&(j-2)>=0&&Data.Chess[i+1][j-1]==1&&Data.Chess[i+2][j-2]==-1&&Data.Chess[i-3][j+3]==0&&Data.Chess[i-1][j+1]==1&&Data.Chess[i-2][j+2]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_3; } //斜1-2连死 if((i+2)<Data.X_number&&(i-3)>=0&&(j+3)<Data.X_number&&(j-2)>=0&&Data.Chess[i+1][j-1]==1&&Data.Chess[i+2][j-2]==0&&Data.Chess[i-3][j+3]==-1&&Data.Chess[i-1][j+1]==1&&Data.Chess[i-2][j+2]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_Dead_3; } } /* * 构建四棋子判断的方法(防守) */ public void Defence_four(int i,int j){ /* * 四棋子横向判断 */ //横四连 if((i+4)<Data.X_number&&Data.Chess[i+1][j]==1&&Data.Chess[i+2][j]==1&&Data.Chess[i+3][j]==1&&Data.Chess[i+4][j]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_4; } //横四连 if((i-4)>=0&&Data.Chess[i-1][j]==1&&Data.Chess[i-2][j]==1&&Data.Chess[i-3][j]==1&&Data.Chess[i-4][j]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_4; } //横3-1连 if((i+3)<Data.X_number&&(i-1)>=0&&Data.Chess[i+1][j]==1&&Data.Chess[i+2][j]==1&&Data.Chess[i+3][j]==1&&Data.Chess[i-1][j]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_4; } //横1-3连 if((i+1)<Data.X_number&&(i-3)>=0&&Data.Chess[i-1][j]==1&&Data.Chess[i-2][j]==1&&Data.Chess[i-3][j]==1&&Data.Chess[i+1][j]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_4; } //横2-2连 if((i+2)<Data.X_number&&(i-2)>=0&&Data.Chess[i-1][j]==1&&Data.Chess[i-2][j]==1&&Data.Chess[i+2][j]==1&&Data.Chess[i+1][j]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_4; } /* * 四棋子纵向判断 */ //纵四连 if((j+4)<Data.X_number&&Data.Chess[i][j+1]==1&&Data.Chess[i][j+2]==1&&Data.Chess[i][j+3]==1&&Data.Chess[i][j+4]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_4; } //纵四连 if((j-4)>=0&&Data.Chess[i][j-1]==1&&Data.Chess[i][j-2]==1&&Data.Chess[i][j-3]==1&&Data.Chess[i][j-4]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_4; } //纵3-1连 if((j+3)<Data.X_number&&(j-1)>=0&&Data.Chess[i][j+1]==1&&Data.Chess[i][j+2]==1&&Data.Chess[i][j+3]==1&&Data.Chess[i][j-1]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_4; } //纵1-3连 if((j+1)<Data.X_number&&(j-3)>=0&&Data.Chess[i][j-1]==1&&Data.Chess[i][j-2]==1&&Data.Chess[i][j-3]==1&&Data.Chess[i][j+1]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_4; } //纵2-2连 if((j+2)<Data.X_number&&(j-2)>=0&&Data.Chess[i][j-1]==1&&Data.Chess[i][j-2]==1&&Data.Chess[i][j+2]==1&&Data.Chess[i][j+1]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_4; } /* * 四棋子斜向判断 */ //斜四连 if((i+4)<Data.X_number&&(j+4)<Data.X_number&&Data.Chess[i+1][j+1]==1&&(j+4)<Data.X_number&&Data.Chess[i+2][j+2]==1&&Data.Chess[i+3][j+3]==1&&Data.Chess[i+4][j+4]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_4; } //斜四连 if((i-4)>=0&&(j-4)>=0&&Data.Chess[i-1][j-1]==1&&Data.Chess[i-2][j-2]==1&&Data.Chess[i-3][j-3]==1&&Data.Chess[i-4][j-4]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_4; } //斜四连 if((i-4)>=0&&(j+4)<Data.X_number&&Data.Chess[i-1][j+1]==1&&Data.Chess[i-2][j+2]==1&&Data.Chess[i-3][j+3]==1&&Data.Chess[i-4][j+4]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_4; } //斜四连 if((i+4)<Data.X_number&&(j-4)>=0&&Data.Chess[i+1][j-1]==1&&Data.Chess[i+2][j-2]==1&&Data.Chess[i+3][j-3]==1&&Data.Chess[i+4][j-4]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_4; } //斜3-1连 if((i+3)<Data.X_number&&(i-1)>=0&&(j+3)<Data.X_number&&(j-1)>=0&&Data.Chess[i+1][j+1]==1&&Data.Chess[i+2][j+2]==1&&Data.Chess[i+3][j+3]==1&&Data.Chess[i-1][j-1]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_4; } //斜1-3连 if((i+1)<Data.X_number&&(i-3)>=0&&(j+1)<Data.X_number&&(j-3)>=0&&Data.Chess[i-1][j-1]==1&&Data.Chess[i-2][j-2]==1&&Data.Chess[i-3][j-3]==1&&Data.Chess[i+1][j+1]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_4; } //斜2-2连 if((i+2)<Data.X_number&&(i-2)>=0&&(j+2)<Data.X_number&&(j-2)>=0&&Data.Chess[i-1][j-1]==1&&Data.Chess[i-2][j-2]==1&&Data.Chess[i+2][j+2]==1&&Data.Chess[i+1][j+1]==1){ Data.Value[i][j]=Data.Value[i][j]+Data.Value_4; } } /* * 构建形成双棋子的方法(进攻) */ public void Attack_two(int i,int j){ if((j+1)<Data.X_number&&Data.Chess[i][j+1]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_2; } if((i+1)<Data.X_number&&(j+1)<Data.X_number&&Data.Chess[i+1][j+1]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_2; } if((i-1)>=0&&(j+1)<Data.X_number&&Data.Chess[i-1][j+1]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_2; } if((i+1)<Data.X_number&&Data.Chess[i+1][j]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_2; } if((i-1)>=0&&Data.Chess[i-1][j]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_2; } if((i+1)<Data.X_number&&(j-1)>=0&&Data.Chess[i+1][j-1]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_2; } if((i-1)>=0&&(j-1)>=0&&Data.Chess[i-1][j-1]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_2; } if((j-1)>=0&&Data.Chess[i][j-1]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_2; } } /* * 构建形成3棋子的方法(进攻) */ public void Attack_three(int i,int j){ /* * 横向形成3棋子的方法 */ //中间不空子 if((i+4)<Data.X_number&&Data.Chess[i+1][j]==-1&&Data.Chess[i+2][j]==-1&&Data.Chess[i+3][j]==0&&Data.Chess[i+4][j]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i+3)<Data.X_number&&(i-1)>=0&&Data.Chess[i+1][j]==-1&&Data.Chess[i+2][j]==-1&&Data.Chess[i+3][j]==0&&Data.Chess[i-1][j]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i+2)<Data.X_number&&(i-2)>=0&&Data.Chess[i+1][j]==-1&&Data.Chess[i+2][j]==-1&&Data.Chess[i-1][j]==0&&Data.Chess[i-2][j]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i-4)>=0&&Data.Chess[i-1][j]==-1&&Data.Chess[i-2][j]==-1&&Data.Chess[i-3][j]==0&&Data.Chess[i-4][j]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i-3)>=0&&(i+1)<Data.X_number&&Data.Chess[i-1][j]==-1&&Data.Chess[i-2][j]==-1&&Data.Chess[i-3][j]==0&&Data.Chess[i+1][j]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i-2)>=0&&(i+2)<Data.X_number&&Data.Chess[i-1][j]==-1&&Data.Chess[i-2][j]==-1&&Data.Chess[i+1][j]==0&&Data.Chess[i+2][j]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } //中间空1子 if((i+4)<Data.X_number&&Data.Chess[i+1][j]==0&&Data.Chess[i+2][j]==-1&&Data.Chess[i+3][j]==-1&&Data.Chess[i+4][j]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i+3)<Data.X_number&&(i-1)>=0&&Data.Chess[i+1][j]==0&&Data.Chess[i+2][j]==-1&&Data.Chess[i+3][j]==-1&&Data.Chess[i-1][j]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i-4)>=0&&Data.Chess[i-1][j]==0&&Data.Chess[i-2][j]==-1&&Data.Chess[i-3][j]==-1&&Data.Chess[i-4][j]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i-3)>=0&&(i+1)<Data.X_number&&Data.Chess[i-1][j]==0&&Data.Chess[i-2][j]==-1&&Data.Chess[i-3][j]==-1&&Data.Chess[i+1][j]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } //中间空2子 if((i+4)<Data.X_number&&Data.Chess[i+1][j]==0&&Data.Chess[i+2][j]==0&&Data.Chess[i+3][j]==-1&&Data.Chess[i+4][j]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i-4)>=0&&Data.Chess[i-1][j]==0&&Data.Chess[i-2][j]==0&&Data.Chess[i-3][j]==-1&&Data.Chess[i-4][j]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } /* * 纵向形成3子 */ //中间不空子 if((j+4)<Data.X_number&&Data.Chess[i][j+1]==-1&&Data.Chess[i][j+2]==-1&&Data.Chess[i][j+3]==0&&Data.Chess[i][j+4]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((j+3)<Data.X_number&&(j-1)>=0&&Data.Chess[i][j+1]==-1&&Data.Chess[i][j+2]==-1&&Data.Chess[i][j+3]==0&&Data.Chess[i][j-1]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((j+2)<Data.X_number&&(j-2)>=0&&Data.Chess[i][j+1]==-1&&Data.Chess[i][j+2]==-1&&Data.Chess[i][j-1]==0&&Data.Chess[i][j-2]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((j-4)>=0&&Data.Chess[i][j-1]==-1&&Data.Chess[i][j-2]==-1&&Data.Chess[i][j-3]==0&&Data.Chess[i][j-4]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((j-3)>=0&&(j+1)<Data.X_number&&Data.Chess[i][j-1]==-1&&Data.Chess[i][j-2]==-1&&Data.Chess[i][j-3]==0&&Data.Chess[i][j+1]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((j-2)>=0&&(j+2)<Data.X_number&&Data.Chess[i][j-1]==-1&&Data.Chess[i][j-2]==-1&&Data.Chess[i][j+1]==0&&Data.Chess[i][j+2]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } //中间空1子 if((j+4)<Data.X_number&&Data.Chess[i][j+1]==0&&Data.Chess[i][j+2]==-1&&Data.Chess[i][j+3]==-1&&Data.Chess[i][j+4]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((j+3)<Data.X_number&&(j-1)>=0&&Data.Chess[i][j+1]==0&&Data.Chess[i][j+2]==-1&&Data.Chess[i][j+3]==-1&&Data.Chess[i][j-1]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((j-4)>=0&&Data.Chess[i][j-1]==0&&Data.Chess[i][j-2]==-1&&Data.Chess[i][j-3]==-1&&Data.Chess[i][j-4]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((j-3)>=0&&(j+1)<Data.X_number&&Data.Chess[i][j-1]==0&&Data.Chess[i][j-2]==-1&&Data.Chess[i][j-3]==-1&&Data.Chess[i][j+1]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } //中间空2子 if((j+4)<Data.X_number&&Data.Chess[i][j+1]==0&&Data.Chess[i][j+2]==0&&Data.Chess[i][j+3]==-1&&Data.Chess[i][j+4]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((j-4)>=0&&Data.Chess[i][j-1]==0&&Data.Chess[i][j-2]==0&&Data.Chess[i][j-3]==-1&&Data.Chess[i][j-4]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } /* * 斜向形成3子 */ //中间不空子 if((j+4)<Data.X_number&&(i+4)<Data.X_number&&Data.Chess[i+1][j+1]==-1&&Data.Chess[i+2][j+2]==-1&&Data.Chess[i+3][j+3]==0&&Data.Chess[i+4][j+4]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i+3)<Data.X_number&&(i-1)>=0&&(j+3)<Data.X_number&&(j-1)>=0&&Data.Chess[i+1][j+1]==-1&&Data.Chess[i+2][j+2]==-1&&Data.Chess[i+3][j+3]==0&&Data.Chess[i-1][j-1]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i+2)<Data.X_number&&(i-2)>=0&&(j+2)<Data.X_number&&(j-2)>=0&&Data.Chess[i+1][j+1]==-1&&Data.Chess[i+2][j+2]==-1&&Data.Chess[i-1][j-1]==0&&Data.Chess[i-2][j-2]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i-4)>=0&&(j-4)>=0&&Data.Chess[i-1][j-1]==-1&&Data.Chess[i-2][j-2]==-1&&Data.Chess[i-3][j-3]==0&&Data.Chess[i-4][j-4]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i-3)>=0&&(i+1)<Data.X_number&&(j-3)>=0&&(j+1)<Data.X_number&&Data.Chess[i-1][j-1]==-1&&Data.Chess[i-2][j-2]==-1&&Data.Chess[i-3][j-3]==0&&Data.Chess[i+1][j+1]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i-2)>=0&&(i+2)<Data.X_number&&(j-2)>=0&&(j+2)<Data.X_number&&Data.Chess[i-1][j-1]==-1&&Data.Chess[i-2][j-2]==-1&&Data.Chess[i+1][j+1]==0&&Data.Chess[i+2][j+2]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((j-4)>=0&&(i+4)<Data.X_number&&Data.Chess[i+1][j-1]==-1&&Data.Chess[i+2][j-2]==-1&&Data.Chess[i+3][j-3]==0&&Data.Chess[i+4][j-4]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i+3)<Data.X_number&&(i-1)>=0&&(j+1)<Data.X_number&&(j-3)>=0&&Data.Chess[i+1][j-1]==-1&&Data.Chess[i+2][j-2]==-1&&Data.Chess[i+3][j-3]==0&&Data.Chess[i-1][j+1]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i+2)<Data.X_number&&(i-2)>=0&&(j+2)<Data.X_number&&(j-2)>=0&&Data.Chess[i+1][j-1]==-1&&Data.Chess[i+2][j-2]==-1&&Data.Chess[i-1][j+1]==0&&Data.Chess[i-2][j+2]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i-4)>=0&&(j+4)<Data.X_number&&Data.Chess[i-1][j+1]==-1&&Data.Chess[i-2][j+2]==-1&&Data.Chess[i-3][j+3]==0&&Data.Chess[i-4][j+4]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i-3)>=0&&(i+1)<Data.X_number&&(j-1)>=0&&(j+3)<Data.X_number&&Data.Chess[i-1][j+1]==-1&&Data.Chess[i-2][j+2]==-1&&Data.Chess[i-3][j+3]==0&&Data.Chess[i+1][j-1]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i-2)>=0&&(i+2)<Data.X_number&&(j-2)>=0&&(j+2)<Data.X_number&&Data.Chess[i-1][j+1]==-1&&Data.Chess[i-2][j+2]==-1&&Data.Chess[i+1][j-1]==0&&Data.Chess[i+2][j-2]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } //中间空1子 if((i+4)<Data.X_number&&(j+4)<Data.X_number&&Data.Chess[i+1][j+1]==0&&Data.Chess[i+2][j+2]==-1&&Data.Chess[i+3][j+3]==-1&&Data.Chess[i+4][j+4]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i+3)<Data.X_number&&(i-1)>=0&&(j+3)<Data.X_number&&(j-1)>=0&&Data.Chess[i+1][j+1]==0&&Data.Chess[i+2][j+2]==-1&&Data.Chess[i+3][j+3]==-1&&Data.Chess[i-1][j-1]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i-4)>=0&&(j-4)>=0&&Data.Chess[i-1][j-1]==0&&Data.Chess[i-2][j-2]==-1&&Data.Chess[i-3][j-3]==-1&&Data.Chess[i-4][j-4]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i-3)>=0&&(i+1)<Data.X_number&&(j-3)>=0&&(j+1)<Data.X_number&&Data.Chess[i-1][j-1]==0&&Data.Chess[i-2][j-2]==-1&&Data.Chess[i-3][j-3]==-1&&Data.Chess[i+1][j+1]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i+4)<Data.X_number&&(j-4)>=0&&Data.Chess[i+1][j-1]==0&&Data.Chess[i+2][j-2]==-1&&Data.Chess[i+3][j-3]==-1&&Data.Chess[i+4][j-4]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i+3)<Data.X_number&&(i-1)>=0&&(j+1)<Data.X_number&&(j-3)>=0&&Data.Chess[i+1][j-1]==0&&Data.Chess[i+2][j-2]==-1&&Data.Chess[i+3][j-3]==-1&&Data.Chess[i-1][j+1]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i-4)>=0&&(j+4)<Data.X_number&&Data.Chess[i-1][j+1]==0&&Data.Chess[i-2][j+2]==-1&&Data.Chess[i-3][j+3]==-1&&Data.Chess[i-4][j+4]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i-3)>=0&&(i+1)<Data.X_number&&(j-1)>=0&&(j+3)<Data.X_number&&Data.Chess[i-1][j+1]==0&&Data.Chess[i-2][j+2]==-1&&Data.Chess[i-3][j+3]==-1&&Data.Chess[i+1][j-1]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } //中间空2子 if((i+4)<Data.X_number&&(j+4)<Data.X_number&&Data.Chess[i+1][j+1]==0&&Data.Chess[i+2][j+2]==0&&Data.Chess[i+3][j+3]==-1&&Data.Chess[i+4][j+4]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i-4)>=0&&(j-4)>=0&&Data.Chess[i-1][j-1]==0&&Data.Chess[i-2][j-2]==0&&Data.Chess[i-3][j-3]==-1&&Data.Chess[i-4][j-4]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i+4)<Data.X_number&&(j-4)>=0&&Data.Chess[i+1][j-1]==0&&Data.Chess[i+2][j-2]==0&&Data.Chess[i+3][j-3]==-1&&Data.Chess[i+4][j-4]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } if((i-4)>=0&&(j+4)<Data.X_number&&Data.Chess[i-1][j+1]==0&&Data.Chess[i-2][j+2]==0&&Data.Chess[i-3][j+3]==-1&&Data.Chess[i-4][j+4]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_3; } } /* * 构建形成4棋子的方法(进攻) */ public void Attack_four(int i,int j){ /* * 横向形成4棋子 */ //中间不空子 if((i+4)<Data.X_number&&Data.Chess[i+1][j]==-1&&Data.Chess[i+2][j]==-1&&Data.Chess[i+3][j]==-1&&Data.Chess[i+4][j]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_4; } if((i-4)>=0&&Data.Chess[i-1][j]==-1&&Data.Chess[i-2][j]==-1&&Data.Chess[i-3][j]==-1&&Data.Chess[i-4][j]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_4; } if((i+3)<Data.X_number&&(i-1)>=0&&Data.Chess[i+1][j]==-1&&Data.Chess[i+2][j]==-1&&Data.Chess[i+3][j]==-1&&Data.Chess[i-1][j]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_4; } //中间空1子 if((i+4)<Data.X_number&&Data.Chess[i+1][j]==0&&Data.Chess[i+2][j]==-1&&Data.Chess[i+3][j]==-1&&Data.Chess[i+4][j]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_4; } if((i-4)>=0&&Data.Chess[i-1][j]==0&&Data.Chess[i-2][j]==-1&&Data.Chess[i-3][j]==-1&&Data.Chess[i-4][j]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_4; } /* * 纵向形成4棋子 */ //中间不空子 if((j+4)<Data.X_number&&Data.Chess[i][j+1]==-1&&Data.Chess[i][j+2]==-1&&Data.Chess[i][j+3]==-1&&Data.Chess[i][j+4]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_4; } if((j-4)>=0&&Data.Chess[i][j-1]==-1&&Data.Chess[i][j-2]==-1&&Data.Chess[i][j-3]==-1&&Data.Chess[i][j-4]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_4; } if((j+3)<Data.X_number&&(j-1)>=0&&Data.Chess[i][j+1]==-1&&Data.Chess[i][j+2]==-1&&Data.Chess[i][j+3]==-1&&Data.Chess[i][j-1]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_4; } //中间空1子 if((j+4)<Data.X_number&&Data.Chess[i][j+1]==0&&Data.Chess[i][j+2]==-1&&Data.Chess[i][j+3]==-1&&Data.Chess[i][j+4]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_4; } if((j-4)>=0&&Data.Chess[i][j-1]==0&&Data.Chess[i][j-2]==-1&&Data.Chess[i][j-3]==-1&&Data.Chess[i][j-4]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_4; } /* * 斜向形成4棋子 */ //中间不空子 if((j+4)<Data.X_number&&(i+4)<Data.X_number&&Data.Chess[i+1][j+1]==-1&&Data.Chess[i+2][j+2]==-1&&Data.Chess[i+3][j+3]==-1&&Data.Chess[i+4][j+4]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_4; } if((j-4)>=0&&(i-4)>=0&&Data.Chess[i-1][j-1]==-1&&Data.Chess[i-2][j-2]==-1&&Data.Chess[i-3][j-3]==-1&&Data.Chess[i-4][j-4]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_4; } if((j-4)>=0&&(i+4)<Data.X_number&&Data.Chess[i+1][j-1]==-1&&Data.Chess[i+2][j-2]==-1&&Data.Chess[i+3][j-3]==-1&&Data.Chess[i+4][j-4]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_4; } if((j+4)<Data.X_number&&(i-4)>=0&&Data.Chess[i-1][j+1]==-1&&Data.Chess[i-2][j+2]==-1&&Data.Chess[i-3][j+3]==-1&&Data.Chess[i-4][j+4]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_4; } if((i+3)<Data.X_number&&(i-1)>=0&&(j+3)<Data.X_number&&(j-1)>=0&&Data.Chess[i+1][j+1]==-1&&Data.Chess[i+2][j+2]==-1&&Data.Chess[i+3][j+3]==-1&&Data.Chess[i-1][j-1]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_4; } if((i-3)>=0&&(i+1)<Data.X_number&&(j-3)>=0&&(j+1)<Data.X_number&&Data.Chess[i-1][j-1]==-1&&Data.Chess[i-2][j-2]==-1&&Data.Chess[i-3][j-3]==-1&&Data.Chess[i+1][j+1]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_4; } if((i+3)<Data.X_number&&(i-1)>=0&&(j-3)>=0&&(j+1)<Data.X_number&&Data.Chess[i+1][j-1]==-1&&Data.Chess[i+2][j-2]==-1&&Data.Chess[i+3][j-3]==-1&&Data.Chess[i-1][j+1]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_4; } if((i-3)>=0&&(i+1)<Data.X_number&&(j+3)<Data.X_number&&(j-1)>=0&&Data.Chess[i-1][j+1]==-1&&Data.Chess[i-2][j+2]==-1&&Data.Chess[i-3][j+3]==-1&&Data.Chess[i+1][j-1]==0){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_4; } //中间空1子 if((j+4)<Data.X_number&&(i+4)<Data.X_number&&Data.Chess[i+1][j+1]==0&&Data.Chess[i+2][j+2]==-1&&Data.Chess[i+3][j+3]==-1&&Data.Chess[i+4][j+4]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_4; } if((j-4)>=0&&(i-4)>=0&&Data.Chess[i-1][j-1]==0&&Data.Chess[i-2][j-2]==-1&&Data.Chess[i-3][j-3]==-1&&Data.Chess[i-4][j-4]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_4; } if((j-4)>=0&&(i+4)<Data.X_number&&Data.Chess[i+1][j-1]==0&&Data.Chess[i+2][j-2]==-1&&Data.Chess[i+3][j-3]==-1&&Data.Chess[i+4][j-4]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_4; } if((j+4)<Data.X_number&&(i-4)>=0&&Data.Chess[i-1][j+1]==0&&Data.Chess[i-2][j+2]==-1&&Data.Chess[i-3][j+3]==-1&&Data.Chess[i-4][j+4]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_4; } } /* * 构建形成5棋子的方法(进攻) */ public void Attack_five(int i,int j){ /* * 横向形成5棋子 */ if((j+4)<Data.Y_number&&Data.Chess[i][j+1]==-1&&Data.Chess[i][j+2]==-1&&Data.Chess[i][j+3]==-1&&Data.Chess[i][j+4]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_5; } if((j+3)<Data.Y_number&&(j-1)>=0&&Data.Chess[i][j+1]==-1&&Data.Chess[i][j+2]==-1&&Data.Chess[i][j+3]==-1&&Data.Chess[i][j-1]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_5; } if((j+2)<Data.Y_number&&(j-2)>=0&&Data.Chess[i][j+1]==-1&&Data.Chess[i][j+2]==-1&&Data.Chess[i][j-2]==-1&&Data.Chess[i][j-1]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_5; } if((j+1)<Data.Y_number&&(j-3)>=0&&Data.Chess[i][j-1]==-1&&Data.Chess[i][j-2]==-1&&Data.Chess[i][j-3]==-1&&Data.Chess[i][j+1]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_5; } if((j-4)>=0&&Data.Chess[i][j-1]==-1&&Data.Chess[i][j-2]==-1&&Data.Chess[i][j-3]==-1&&Data.Chess[i][j-4]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_5; } /* * 纵向形成5棋子 */ if((i+4)<Data.Y_number&&Data.Chess[i+1][j]==-1&&Data.Chess[i+2][j]==-1&&Data.Chess[i+3][j]==-1&&Data.Chess[i+4][j]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_5; } if((i+3)<Data.Y_number&&(i-1)>=0&&Data.Chess[i+1][j]==-1&&Data.Chess[i+2][j]==-1&&Data.Chess[i+3][j]==-1&&Data.Chess[i-1][j]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_5; } if((i+2)<Data.Y_number&&(i-2)>=0&&Data.Chess[i+1][j]==-1&&Data.Chess[i+2][j]==-1&&Data.Chess[i-2][j]==-1&&Data.Chess[i-1][j]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_5; } if((i+1)<Data.Y_number&&(i-3)>=0&&Data.Chess[i-1][j]==-1&&Data.Chess[i-2][j]==-1&&Data.Chess[i-3][j]==-1&&Data.Chess[i+1][j]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_5; } if((i-4)>=0&&Data.Chess[i-1][j]==-1&&Data.Chess[i-2][j]==-1&&Data.Chess[i-3][j]==-1&&Data.Chess[i-4][j]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_5; } /* * 斜向形成5棋子 */ if((i+4)<Data.Y_number&&(j+4)<Data.Y_number&&Data.Chess[i+1][j+1]==-1&&Data.Chess[i+2][j+2]==-1&&Data.Chess[i+3][j+3]==-1&&Data.Chess[i+4][j+4]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_5; } if((i+3)<Data.Y_number&&(i-1)>=0&&(j+3)<Data.Y_number&&(j-1)>=0&&Data.Chess[i+1][j+1]==-1&&Data.Chess[i+2][j+2]==-1&&Data.Chess[i+3][j+3]==-1&&Data.Chess[i-1][j-1]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_5; } if((i+2)<Data.Y_number&&(i-2)>=0&&(j+2)<Data.Y_number&&(j-2)>=0&&Data.Chess[i+1][j+1]==-1&&Data.Chess[i+2][j+2]==-1&&Data.Chess[i-2][j-2]==-1&&Data.Chess[i-1][j-1]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_5; } if((i+1)<Data.Y_number&&(i-3)>=0&&(j+1)<Data.Y_number&&(j-3)>=0&&Data.Chess[i-1][j-1]==-1&&Data.Chess[i-2][j-2]==-1&&Data.Chess[i-3][j-3]==-1&&Data.Chess[i+1][j+1]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_5; } if((i-4)>=0&&(j-4)>=0&&Data.Chess[i-1][j-1]==-1&&Data.Chess[i-2][j-2]==-1&&Data.Chess[i-3][j-3]==-1&&Data.Chess[i-4][j-4]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_5; } if((i-4)>=0&&(j+4)<Data.Y_number&&Data.Chess[i-1][j+1]==-1&&Data.Chess[i-2][j+2]==-1&&Data.Chess[i-3][j+3]==-1&&Data.Chess[i-4][j+4]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_5; } if((i+1)<Data.Y_number&&(i-3)>=0&&(j+3)<Data.Y_number&&(j-1)>=0&&Data.Chess[i-1][j+1]==-1&&Data.Chess[i-2][j+2]==-1&&Data.Chess[i-3][j+3]==-1&&Data.Chess[i+1][j-1]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_5; } if((i+2)<Data.Y_number&&(i-2)>=0&&(j+2)<Data.Y_number&&(j-2)>=0&&Data.Chess[i-1][j+1]==-1&&Data.Chess[i-2][j+2]==-1&&Data.Chess[i+2][j-2]==-1&&Data.Chess[i+1][j-1]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_5; } if((i+3)<Data.Y_number&&(i-1)>=0&&(j+1)<Data.Y_number&&(j-3)>=0&&Data.Chess[i+1][j-1]==-1&&Data.Chess[i+2][j-2]==-1&&Data.Chess[i+3][j-3]==-1&&Data.Chess[i-1][j+1]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_5; } if((i+4)<Data.Y_number&&(j-4)>=0&&Data.Chess[i+1][j-1]==-1&&Data.Chess[i+2][j-2]==-1&&Data.Chess[i+3][j-3]==-1&&Data.Chess[i+4][j-4]==-1){ Data.Value[i][j]=Data.Value[i][j]+Data.Attack_Value_5; } } /** * 清空权值表的方法 */ public void ReFresh_Value(){ for(int i=0;i<Data.X_number;i++){ for(int j=0;j<Data.Y_number;j++){ Data.Value[i][j]=0; } } } @Override public void mouseReleased(MouseEvent arg0) { // TODO 自动生成的方法存根 } }
使用方法:
先点击 新的一局 再来选择是比赛方式 玩家之间对战或者玩家与电脑对战。
悔棋每次只悔一个棋子。
在重新开始时,点击新的一局或者是任何一种比赛方式都可。
相关推荐
在本项目中,"java实现简易五子棋"是一个基于Java编程语言开发的五子棋游戏,主要用于教学目的,帮助学生理解和应用Java编程中的各种函数和方法。通过这个项目,开发者能够深入学习如何利用Java来构建一个交互式的...
使用HTML5的canvas制作的非人机的简易五子棋使用HTML5的canvas制作的非人机的简易五子棋使用HTML5的canvas制作的非人机的简易五子棋使用HTML5的canvas制作的非人机的简易五子棋
在Java编程语言中实现一个简易五子棋游戏是一项常见的练习任务,它可以帮助初学者深入理解面向对象编程、事件处理和图形用户界面(GUI)的设计。下面将详细解释这个项目涉及的关键知识点。 1. **Java Swing GUI**: ...
c++简易五子棋代码
这个简易五子棋小游戏就是这样一个实例,它展示了如何将自定义View应用于游戏开发中。下面我们将深入探讨这个项目中涉及的关键知识点。 首先,五子棋游戏的界面通常由棋盘和棋子组成,这需要我们自定义两个关键的...
【标题】:“java编写的简易五子棋游戏” 在编程领域,Java是一种广泛使用的面向对象的编程语言,因其跨平台的特性而深受开发者喜爱。本项目是一个基于Java编写的简易五子棋游戏,旨在帮助初学者理解Java语言基础...
【五子棋六_dq_简易五子棋_】是一个基于C#编程语言开发的简易五子棋游戏项目。此程序旨在提供一个简单的界面,让用户能够体验到经典的五子棋对弈乐趣。C#是一种广泛应用于桌面应用、游戏开发、Web服务等领域的面向...
易语言源码易语言简易五子棋源码.rar 易语言源码易语言简易五子棋源码.rar 易语言源码易语言简易五子棋源码.rar 易语言源码易语言简易五子棋源码.rar 易语言源码易语言简易五子棋源码.rar 易语言源码易语言简易...
【C++Builder简易五子棋】是一款基于C++Builder编程环境开发的桌面游戏,它实现了基本的五子棋对弈功能,让玩家可以与计算机或另一名玩家进行对战。这款程序展示了C++Builder在图形用户界面(GUI)设计和算法实现上...
一个简单的五子棋程序 一个简单的人工智能算法
【简易五子棋小游戏开发详解】 五子棋是一款广受欢迎的两人对弈策略游戏,而“简易五子棋”则是用C语言实现的版本。在本文中,我们将深入探讨这款小游戏的设计理念、主要功能和核心代码实现,以及如何通过C语言来...
在"五子棋.rar_UIZ_c++五子棋_简易五子棋"项目中,开发者用C++实现了这一经典游戏的基本功能。 首先,我们要了解C++的基础知识。C++是一种静态类型的、编译式的、通用的、大小写敏感的、不仅支持过程化编程,也支持...
《C# VS简易五子棋:编程艺术与实践解析》 在编程的世界里,游戏开发是一种极好的学习和实践方式,尤其是对于初学者而言。本文将深入探讨如何使用C#语言在Visual Studio(VS)环境下开发一款五子棋游戏。这款五子棋...
【标题】"山东大学简易五子棋"是一个基于C++编程语言和Microsoft Foundation Classes (MFC)库开发的五子棋游戏,它是山东大学数据结构课程设计的一部分。这个项目旨在帮助学生将理论学习的数据结构知识应用到实际的...
### 知识点详解:简易五子棋的Java制作 #### 一、基本论述与设计考量 五子棋,作为一款历史悠久且广受欢迎的棋类游戏,其规则简单明了,但开发一款既能满足基本需求又能提升用户体验的五子棋程序,却需要深入的...
这个“简易五子棋最基本功能”的项目,正如其名,主要实现了五子棋游戏的核心功能,但未进行界面美化。下面我们将深入探讨该项目涉及的IT知识点。 1. **游戏逻辑**: - **棋盘与棋子**:五子棋的棋盘通常是15x15的...