<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                >[success] # 中介者模式 ~~~ ~~~ >[info] ## 書中泡泡堂游戲例子 ~~~ ~~~ >[danger] ##### 書中作者最初構想寫的思路 ~~~ 1.定義一個玩家類'Player',玩家類屬性分別有'name 用戶名字','enemy 用戶的敵人對象', 'win 勝利觸發的方法','lose 失敗觸發的方法','die 角色死亡執行觸發自己失敗方法和對手的勝利方法' ~~~ ~~~ // 定義一個玩家類 function Player(name){ this.name = name this.enemy = null // 敵人 } // 勝利方法 Player.prototype.win = function () { console.log(this.name + 'won') } // 失敗方法 Player.prototype.lose = function () { console.log(this.name+'lose') } // 死亡方法 Player.prototype.die = function () { this.lose(); this.enemy.win() } // -------------創建生成用戶-------------- var player1 = new Player('w') var player2 = new Player('c') player1.enemy = player2 player2.enemy = player1 player1.die() ~~~ >[danger] ##### 代碼升級 增加玩家 ~~~ 1.剛才的玩家是兩個人這把玩家增加到八個人,玩家數量增多后,剛才的'Player'類也需要 進行簡單的合理化升級 2.現在的玩家類比剛才多了'一群對手'和'一群隊友',因此'enemies 變成數組用來存儲敵人', 還多了一個'partners 隊友列表','state 當前玩家狀態','teamColor 隊伍顏色' 3.在方法上'die' 方法和之前不同,思路是玩家如果死亡循環玩家的所有的隊友看看是不是都死了, 如果都死了就通知所有失敗玩家和勝利玩家 4.整個案例還創建了一個工廠函數,用來分配沒給個隊伍的對應隊友 ~~~ ~~~ function Player(name, teamColor) { this.partners = [] // 隊友列表 this.enemies = [] // 敵人列表 this.state = 'live' // 玩家狀態 this.name = name // 玩家姓名 this.teamColor = teamColor // 隊伍顏色 } // 玩家勝利觸發的方法 Player.prototype.win = function () { console.log('winner' + this.name) } // 玩家失敗觸發的方法 Player.prototype.lose = function () { console.log('loser' + this.name) } // 玩家死亡觸發的方法 Player.prototype.die =function () { var all_dead = true this.state = 'dead' // 玩家狀態死亡 for(var i = 0,partner;partner = this.partners[i++];){ if(partner.state !== 'dead'){ // 隊伍中還有玩家沒死以為隊伍還沒有失敗 all_dead = false break } } if(all_dead === true){ this.lose() for ( var i = 0, partner; partner = this.partners[ i++ ]; ){ // 通知所有隊友玩家游戲失敗 partner.lose(); } for ( var i = 0, enemy; enemy = this.enemies[ i++ ]; ){ // 通知所有敵人游戲勝利 enemy.win(); } } } var players = []; var playerFactory = function( name, teamColor ){ var newPlayer = new Player( name, teamColor ); // 創建新玩家 for ( var i = 0, player; player = players[ i++ ]; ){ // 通知所有的玩家,有新角色加入 if ( player.teamColor === newPlayer.teamColor ){ // 如果是同一隊的玩家 player.partners.push( newPlayer ); // 相互添加到隊友列表 newPlayer.partners.push( player ); }else{ player.enemies.push( newPlayer ); // 相互添加到敵人列表 newPlayer.enemies.push( player ); } } players.push( newPlayer ); return newPlayer; }; // --------使用------- //紅隊: var player1 = playerFactory( '皮蛋', 'red' ), player2 = playerFactory( '小乖', 'red' ), player3 = playerFactory( '寶寶', 'red' ), player4 = playerFactory( '小強', 'red' ); //藍隊: var player5 = playerFactory( '黑妞', 'blue' ), player6 = playerFactory( '蔥頭', 'blue' ), player7 = playerFactory( '胖墩', 'blue' ), player8 = playerFactory( '海盜', 'blue' ); // 紅隊團滅 player1.die(); player2.die(); player4.die(); player3.die(); ~~~ >[danger] ##### 總結這兩版的代碼 ~~~ 1.' 問題:' 1.1.每個對象的狀態發生改變,比如角色移動、吃到道具或者死亡 時,都必須要顯式地遍歷通知其他對象。 如果任務角色上升到幾百,那么每次玩家死亡都要需要循環他的隊友來判斷是否隊伍失敗,讓整個代碼, 每個玩家和其他玩家都是緊 緊耦合在一起的。 ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看