qingshansima(司马青衫) 说的很正确,就是这样判断的。如果是问AI的话,可能有不少种,我记得有一期的开发高手上面有一个程序实现,查查看吧

解决方案 »

  1.   

    手机上每次在玩家着棋(按下5)时,判断棋局的输赢,然后用一个 Alert 显示哪一方赢了以及当前的比分,返回后开始新的一局。判断的逻辑是,在当前所下的棋子的0/180度、90/270度、45/225度、135/315度四个方向上分别往两头按照由近至远的顺序判断各5个棋子是否是当前下棋方的棋子,如果是则累加到一个变量上,如果在到达5之前出现“否”的情况,则中止在这一方向或这一角度的判断,变量归1(应为当前棋子肯定是当前下棋方下完的棋子)并进行下一个方向或角度。在判断是否是当前方时,用当前 isPlayer1 变量和棋子对象的 isPlayer1 变量进行比交。源代码如下:    int player1win,player2win;
        protected synchronized void keyPressed(int keyCode) {
            
            ...
            
            else if (action == Canvas.FIRE) {
                if(chesses[selectedY][selectedX]==null){
                    chesses[selectedY][selectedX]=new Chesses(this.isPlayer1);
                    if(checkWin()){
                        String winner;
                        if(isPlayer1){
                            winner="白方胜利";
                            player1win++;
                        }
                        else{
                            winner="红方胜利";
                            player2win++;
                        }
                        try{
                            Thread.sleep(3000);
                        }catch(Exception e){
                        }
                        Alert winAlert=new Alert("",
                                    winner+"\n白方  "+player1win+" : "+player2win+"  红方",
                                    null,AlertType.INFO);
                        winAlert.setTimeout(Alert.FOREVER);
                        Display.getDisplay(gobang).setCurrent(winAlert,this);
                        init();
                        repaint();
                    }
                    this.isPlayer1=!this.isPlayer1;//切换下棋方(FROMJ2MEDEV。COM)
                }
            }
            repaint();
        }
        private boolean checkWin(){
            int num=1;
            if(num<5){
                num=1;
                for(int i=1;i<=4;i++){
                    if(isPlayer1(selectedX-i,selectedY)){
                    num++;
                    }
                    else break;
                }
                for(int i=1;i<=4;i++){
                    if(isPlayer1(selectedX+i,selectedY)){
                    num++;
                    }
                    else break;
                }
            }
            if(num<5){
                num=1;
                for(int i=1;i<=4;i++){
                    if(isPlayer1(selectedX,selectedY-i)){
                    num++;
                    }
                    else break;
                }
                for(int i=1;i<=4;i++){
                    if(isPlayer1(selectedX,selectedY+i))
                        num++;
                    else break;
                }
            }
            if(num<5){
                num=1;
                for(int i=1;i<=4;i++){
                    if(isPlayer1(selectedX-i,selectedY-i))
                        num++;
                    else break;
                }
                for(int i=1;i<=4;i++){
                    if(isPlayer1(selectedX+i,selectedY+i))
                        num++;
                    else break;
                }
            }
            if(num<5){
                num=1;
                for(int i=1;i<=4;i++){
                    if(isPlayer1(selectedX+i,selectedY-i))
                        num++;
                    else break;
                }
                for(int i=1;i<=4;i++){
                    if(isPlayer1(selectedX-i,selectedY+i))
                        num++;
                    else break;
                }
            }
            if(num>=5)
                return true;
            else
                return false;
        }
        private boolean isPlayer1(int y,int x){
            if(x<=15 && x>=0 && y<=15 && y>=0 && chesses[x][y]!=null){
                if(chesses[x][y].isPlayer1==this.isPlayer1)
                    return true;
                else
                    return false;
            }
            else return false;
        } 
      

  2.   

    是PLAYER VS PLAYEER的时候不是AI。是转自J2MEDEV的贴