2012-01-04 77 views
0

我在FLEX中更新,目前我正在使用FLEX 3.0 我想在FLEX中開發Tic Tac Toe遊戲。起初我認爲這對我來說是最簡單的,但現在它對我來說會非常艱難。我在互聯網上搜索過,但沒有一個鏈接可以幫助我,所以請給我正確的想法與正確的代碼。在這裏,我給你的示例代碼。它有點複雜,所以很抱歉。Flex中的Tic Tac Toe遊戲

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" backgroundColor="#000000" 
horizontalAlign="center" verticalAlign="middle" height="100%" width="100%" verticalGap="0" horizontalGap="0"> 

<mx:Script> 
    <![CDATA[ 
     import mx.controls.Alert; 
     import mx.controls.Image; 

     private var blnFirst:Boolean = true; 
     private var arr0:Array = new Array(); 
     private var arr1:Array = new Array(); 
     private var arr2:Array = new Array(); 
     private var count:int = 0; 
     private var arr:Array = new Array(); 
     private var pl1Won:Boolean = false; 
     private var pl2Won:Boolean = false; 

     public function img_click(event:Event):void 
     { 
      if(event.currentTarget.enabled) 
      { 
       count++; 
       if(blnFirst) 
       { 
        blnFirst = false; 
        var itemp:Image = new Image(); 
        itemp.percentHeight = 100; 
        itemp.percentWidth = 100; 
        itemp.source = "Images/Circle.png"; 
        event.currentTarget.addChild(itemp); 
        event.currentTarget.enabled = false; 
        arrayInsert(event.currentTarget.id,true); 
       } 
       else 
       { 
        blnFirst = true; 
        var itemp:Image = new Image(); 
        itemp.percentHeight = 100; 
        itemp.percentWidth = 100; 
        itemp.source = "Images/Cross.png"; 
        event.currentTarget.addChild(itemp); 
        event.currentTarget.enabled = false; 
        arrayInsert(event.currentTarget.id,false); 
       } 
      } 

      if(count == 9) 
      { 
       arr = [arr0, arr1, arr2]; 
      } 
     } 

     private function arrayInsert(id:String,value:Boolean):void 
     { 
      if(id == "box00") 
       arr0[0] = value;  
      if(id == "box01") 
       arr0[1] = value; 
      if(id == "box02") 
       arr0[2] = value; 
      if(id == "box10") 
       arr1[0] = value; 
      if(id == "box11") 
       arr1[1] = value;  
      if(id == "box12") 
       arr1[2] = value; 
      if(id == "box20") 
       arr2[0] = value;  
      if(id == "box21") 
       arr2[1] = value;  
      if(id == "box22") 
       arr2[2] = value; 
     } 

     private function btn_click():void 
     { 
         for(var i:int=0;i<3;i++) 
      { 
       for(var j:int=0;j<3;j++) 
       { 
        //very confused in this part 
       } 
      } 
          } 

    ]]> 
</mx:Script> 
<mx:VBox height="500" width="500" borderStyle="solid" borderThickness="3" borderColor="#000000" 
    backgroundColor="#ffffff" verticalGap="0" horizontalGap="0"> 

    <mx:HBox width="100%" height="33.3%" horizontalGap="0" verticalGap="0"> 

     <mx:Box height="100%" width="33.3%" borderStyle="solid" borderThickness="3" borderColor="#000000" backgroundColor="#ffffff" 
      click="{img_click(event);}" id="box00" > 
     </mx:Box> 
     <mx:Box height="100%" width="33.3%" borderStyle="solid" borderThickness="3" borderColor="#000000" backgroundColor="#ffffff" 
      click="{img_click(event);}" id="box01"> 
     </mx:Box> 
     <mx:Box height="100%" width="33.4%" borderStyle="solid" borderThickness="3" borderColor="#000000" backgroundColor="#ffffff" 
      click="{img_click(event);}" id="box02"> 
     </mx:Box> 

    </mx:HBox> 
    <mx:HBox width="100%" height="33.3%" horizontalGap="0" verticalGap="0"> 

     <mx:Box height="100%" width="33.3%" borderStyle="solid" borderThickness="3" borderColor="#000000" backgroundColor="#ffffff" 
      click="{img_click(event);}" id="box10"> 
     </mx:Box> 
     <mx:Box height="100%" width="33.3%" borderStyle="solid" borderThickness="3" borderColor="#000000" backgroundColor="#ffffff" 
      click="{img_click(event);}" id="box11"> 
     </mx:Box> 
     <mx:Box height="100%" width="33.4%" borderStyle="solid" borderThickness="3" borderColor="#000000" backgroundColor="#ffffff" 
      click="{img_click(event);}" id="box12"> 
     </mx:Box> 

    </mx:HBox> 
    <mx:HBox width="100%" height="33.4%" horizontalGap="0" verticalGap="0"> 

     <mx:Box height="100%" width="33.3%" borderStyle="solid" borderThickness="3" borderColor="#000000" backgroundColor="#ffffff" 
      click="{img_click(event);}" id="box20"> 
     </mx:Box> 
     <mx:Box height="100%" width="33.3%" borderStyle="solid" borderThickness="3" borderColor="#000000" backgroundColor="#ffffff" 
      click="{img_click(event);}" id="box21"> 
     </mx:Box> 
     <mx:Box height="100%" width="33.4%" borderStyle="solid" borderThickness="3" borderColor="#000000" backgroundColor="#ffffff" 
      click="{img_click(event);}" id="box22"> 
     </mx:Box> 

    </mx:HBox> 

</mx:VBox> 

<mx:Button click="{btn_click();}" /> 

</mx:Application> 

我有檢查btn_click()功能的中獎條件,但你可以給我的想法去改變它完成一行時。我想知道如何處理TicTacToe遊戲的數組。

+0

試着更多的是你想要達到的目標。好像你希望我們爲你完成遊戲。 – 2012-01-04 11:19:20

+0

我希望根據我的實施情況以及在某個時間點獲勝的條件邏輯,如果某個人勝出,而不是在此時如何檢查此時所有包廂是否滿足勝利條件。所以我已經給了我的代碼。請幫幫我。 – 2012-01-04 11:27:07

+2

我認爲你應該嘗試在一些較小的問題上分解這個大問題。這是一個廣泛的答案,快速而迅速地回答。 – 2012-01-04 11:40:40

回答

1

這個遊戲可以開發使用不同的邏輯。
請參閱12啓用了哪個源。 並嘗試完成你的遊戲。

2

假設您正在創建3x3網格的tic tac腳趾。 創建一個更好的可視化二維數組。 初始化它們爲0

每個在[I,J]輸入了0時間分配-1至[I,J]如果空 檢查第i行和第j列總和-3,如果還i = j或i + j = 2檢查對角線以得到總和-3,你有勝利者。

每次在a [i,j]處輸入X時,如果爲空,則將1分配給[i,j] 檢查第i行和第j列的總和3,同樣如果i = j或i + j = 2檢查對角線有總和3,你有一個贏家

+0

感謝您的答案,但我需要檢查點擊事件的框,如果空條目觸發比它給出一個例外。我想循環檢查獲勝條件... – 2012-01-04 12:10:38

+0

@Sagar你可以檢查我剛剛創建的這段代碼,如果它解決了你的目的。 [愚蠢&idiotblogspot](http://dumbandidiot.blogspot.com/2012/01/cdata-import-mx.html) – expressions 2012-01-04 15:45:36

+0

+1不錯的答案指出邏輯。 – 2012-01-05 04:56:12

1

下面寫爲學生(共初學​​者)的分配 課堂作業:http://code.google.com/p/as3-workshop/source/browse/#svn%2Ftrunk%2Fsrc%2Ftld%2Fcourse%2Flesson1(由玩家自己因此以「O」和「X」的雙方出場比賽

的功課:http://code.google.com/p/as3-workshop/source/browse/#svn%2Ftrunk%2Fsrc%2Ftld%2Fcourse%2Fhomework1 (電腦對人)

這些例子沒有很好的記錄(我們在課堂上做過評論和解釋,我沒有記錄),但考慮到沒有太多的代碼,你應該通過它。

1
package 
{ 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 
    import flash.display.Graphics; 
    import flash.text.TextField; 
    import flash.text.TextFormat; 
    /** 
    * ... 
    * @author Jeet Chauhan 
    */ 
    public class TicTacToe extends Sprite 
    { 
     private var crossTurn:Boolean = true; 
     private var rects:Vector.<Rect>; 
     var currentMove:Number = 0; 
     public function TicTacToe() 
     { 
      createBoard(); 
     } 


     private function createBoard():void 
     { 
      var g:flash.display.Graphics = this.graphics; 
      g.lineStyle(2, 0x000000); 
      g.beginFill(0xffff00); 
      g.drawRect(10, 10, 190, 190); 
      rects = new Vector.<Rect>(); 
      var r:Rect 
      for (var i:int = 0; i < 9; i++) 
      { 
       r = new Rect(); 
       this.addChild(r); 
       r.id = i; 
       r.y = 20 + Math.floor(i % 3) * 60; 
       r.x = 20 + Math.floor(i/3) * 60; 
       r.addEventListener(MouseEvent.CLICK, moveNextTurn); 
       rects.push(r); 
      } 
     } 

     private function moveNextTurn(e:MouseEvent):void 
     { 
      var target:Rect = e.target as Rect 
      target.removeEventListener(MouseEvent.CLICK, moveNextTurn); 
      var turn:Sprite; 
      if (crossTurn) { 
       turn = target.addChild(new Cross) as Sprite; 
       target.occupied = "X"; 
      } else { 
       turn = target.addChild(new Circle) as Sprite; 
       target.occupied = "O"; 
      } 
      turn.x = 15; 
      turn.y = 15; 
      currentMove++; 
      if (currentMove > 4) checkAnswer(); 
      crossTurn = !crossTurn; 
     } 

     private function checkAnswer():void 
     { 
      var winner:String = "_"; 
      for (var i:int = 0, j = 0; i < 9; i += 3, j++) 
      { 
       if ((rects[i].occupied != "_") && (rects[i].occupied == rects[i+1].occupied) && (rects[i+1].occupied == rects[i+2].occupied)) 
       { 
        winner = rects[i].occupied; 
       } 

       if ((rects[j].occupied != "_") && (rects[j].occupied == rects[j+3].occupied) && (rects[j+6].occupied == rects[j+3].occupied)) 
       { 
        winner = rects[j].occupied; 
       } 

      } 

      if(rects[4].occupied != "_"){ 
       if ((rects[0].occupied == rects[4].occupied) && (rects[8].occupied == rects[4].occupied)) 
       { 
        winner = rects[0].occupied; 
       } 

       if ((rects[2].occupied == rects[4].occupied) && (rects[6].occupied == rects[4].occupied)) 
       { 
        winner = rects[2].occupied; 
       } 
      } 

      if(winner != "_"){ 
       trace("WINNER" + winner); 
       for (i = 0; i < 9; i++) 
       { 
        if (rects[i].hasEventListener(MouseEvent.CLICK)) 
        { 
         rects[i].removeEventListener(MouseEvent.CLICK,moveNextTurn) 
        } 
       } 

       var tf:TextField = addChild(new TextField()) as TextField; 
       tf.defaultTextFormat = new TextFormat("", 20, 0xff0000); 
       tf.text = winner + " wins"; 
       tf.x = 200; 
       tf.y = 200; 
      } 
      if (currentMove == 9 && winner == "_") { 
       trace("DRAW REEPLAy"); 
       //TODO: replay logic 
      } 

     } 
    } 
} 
import flash.display.Graphics; 
import flash.display.Sprite; 

class Rect extends Sprite { 
    public var id:Number; 
    public var occupied:String = "_";// should be 0/_/X 
    function Rect() { 
     var g:Graphics = this.graphics; 
     g.lineStyle(1, 0x00ff00); 
     g.beginFill(0x000000); 
     g.drawRect(0, 0, 50, 50); 
    } 
} 


class Circle extends Sprite { 
    function Circle() { 
     var g:Graphics = this.graphics; 
     g.lineStyle(5, 0xff0000); 
     g.drawCircle(10, 10, 10); 
    } 
} 


class Cross extends Sprite { 
    function Cross() { 
     var g:Graphics = this.graphics; 
     g.lineStyle(5, 0x0000ff); 
     g.moveTo(0, 0); 
     g.lineTo(20, 20); 
     g.moveTo(20, 0); 
     g.lineTo(0, 20); 
    } 
} 

它的一個工作例子,你可以編譯它,不需要圖形,希望它有幫助

+0

我找不到playGame功能..我想你忘了把它放在答案中。請說這會幫助我很多。 – 2012-01-25 09:18:03

+0

@SagarRawal,只是刪除監聽它現在沒有用 – 2012-01-25 17:14:07

+0

不工作..我需要在mxml文件中做什麼..如果可能只是更新mxml文件的代碼。 – 2012-01-27 04:12:45