예제 #1
0
    // Update is called once per frame
    void Update()
    {
        if (timer >= period)
        {
            if (towers.Size < maxTowers * multTowers)
            {
                Vector3 newPos = grid.Draw();
                Tower   newT   = new Tower(newPos);
                newT.Add(buildy, transform);
                towers.Add(newT, multTowers);
                towers.Shuffle();

                ++curBlocks;
            }
            else if (curBlocks < maxBlocks)
            {
                Tower curT = towers.Draw();
                curT.Add(buildy, transform);

                ++curBlocks;
            }

            timer = 0;
        }

        timer += Time.deltaTime;
    }
예제 #2
0
            public void TestTowerOfHanoi()
            {
                Tower source = new Tower();

                source.Add(4);
                source.Add(3);
                source.Add(2);
                source.Add(1);

                Tower dest   = new Tower();
                Tower buffer = new Tower();

                source.MoveDisks(4, dest, buffer);

                Console.ReadKey();
            }
예제 #3
0
    public static void FindEmpTower(int direction, FieldIndex ind, Field<bool> taken, ref List<Tower> buildList)
    {
        //Debug.Log("Finding 2nd piece forward on "+tmp.ToString());
        Tower newTower = new Tower();
        FieldIndex tmp = ind.Up(direction);
        newTower.Add(ind);
        newTower.Add(tmp);
        newTower.type = TowerType.silence;
        ind = tmp;
        FieldIndex right = ind.Right(direction);
        FieldIndex left = ind.Left(direction);
        bool left_tower = left.index != -1 && taken[left] == true;
        bool right_tower = right.index != -1 && taken[right] == true;
        if(left_tower && right_tower){
        //			Debug.Log("Finding 3rd piece forward on "+tmp.ToString());
            Tower rightTower = newTower.Copy();

            newTower.Add(left);
            //Debug.Log(newTower.ToString());
            rightTower.Add(right);
            //Debug.Log(rightTower.ToString());

            tmp = left.Up(direction);
            FieldIndex tmpRight = right.Up(direction);

            if(tmp.index != -1 && taken[tmp]==true){
                newTower.Add(tmp);
        //				Debug.Log(newTower.ToString());
                buildList.Add(newTower);
            }
            if(tmpRight.index != -1 && taken[tmpRight]==true){
                rightTower.Add(tmpRight);
        //				Debug.Log(newTower.ToString());
                buildList.Add(rightTower);
            }
        }
        else if(left_tower){
            newTower.Add(left);
            tmp = left.Up(direction);

            if(tmp.index != -1 && taken[tmp]==true){
                newTower.Add(tmp);
        //				Debug.Log(newTower.ToString());
                buildList.Add(newTower);
            }
        }
        else if(right_tower){
            newTower.Add(right);
            tmp = right.Up(direction);

            if(tmp.index != -1 && taken[tmp]==true){
                newTower.Add(tmp);
        //				Debug.Log(newTower.ToString());
                buildList.Add(newTower);
            }
        }
    }
예제 #4
0
파일: Q8_6.cs 프로젝트: slao-learn/ctci
 public void MoveToTop(Tower t)
 {
     int top = disks.Pop ();
     t.Add (top);
 }
예제 #5
0
    public static void FindSquareTower(int direction, FieldIndex ind, Field<bool> taken, ref List<Tower> buildList)
    {
        Tower newTower = new Tower();
        newTower.type = TowerType.skillCap;
        //Debug.Log("Found 2nd piece forward on "+ind.ToString());
        newTower.Add(ind);
        FieldIndex tmp = ind.Up(direction);
        newTower.Add(tmp);
        ind = tmp.Right(direction);
        //Debug.Log("Looking for 3rd piece forward on "+tmp.ToString());

        if(ind.index != -1 && taken[ind]==true){
            newTower.Add(ind);
            ind = ind.Down(direction);
            //Debug.Log("Looking for 4th piece right on "+tmp.ToString());

            if(ind.index != -1 && taken[ind]==true){
                newTower.Add(ind);
        //				Debug.Log(newTower.ToString());
                buildList.Add(newTower);
            }
        }
    }
예제 #6
0
 public static void FindShootTower(int direction, FieldIndex ind, Field<bool> taken, ref List<Tower> buildList)
 {
     //Debug.Log("Finding 2nd piece forward on "+tmp.ToString());
     Tower newTower = new Tower();
     FieldIndex tmp = ind.Up(direction);
     newTower.Add(ind);
     newTower.Add(tmp);
     newTower.type = TowerType.shoot;
     ind = tmp;
     FieldIndex left = ind.Left(direction);
     FieldIndex right = ind.Right(direction);
     bool left_tower = left.index != -1 && taken[left] == true;
     bool right_tower = right.index != -1 && taken[right] == true;
     if(left_tower && right_tower){ //Shoot tower found.
         newTower.Add(left);
         newTower.Add(right);
     //			Debug.Log(newTower.ToString());
         buildList.Add(newTower);
     }
 }
예제 #7
0
    public static void FindFiveTower(int direction, FieldIndex ind, Field<bool> taken, ref List<Tower> buildList)
    {
        Tower newTower = new Tower();
        FieldIndex tmp = ind.Up(direction);
        newTower.Add(ind);
        newTower.Add(tmp);
        newTower.type = TowerType.five;
        ind = tmp;
        tmp = ind.Up(direction);

        if(tmp.index != -1 && taken[tmp] == true){
            newTower.Add(tmp);
            ind = tmp;
            tmp = ind.Up(direction);
            if(tmp.index != -1 && taken[tmp] == true){
                newTower.Add(tmp);
                ind = tmp;
                tmp = ind.Up(direction);
                if(tmp.index != -1 && taken[tmp] == true){
                    newTower.Add(tmp);
        //					Debug.Log(newTower.ToString());
                    buildList.Add(newTower);
                }
            }
        }
    }
예제 #8
0
            public void MoveTopTo(Tower tower)
            {
                var top = _disks.Pop();

                tower.Add(top);
            }
예제 #9
0
파일: Q03_4.cs 프로젝트: zs9912/ctci
            public void MoveTopTo(Tower t)
            {
                int top = _disks.Pop();

                t.Add(top);
            }
예제 #10
0
 public void MoveTopDiscToTower(Tower dest)
 {
     dest.Add(stack.Pop());
 }
예제 #11
0
    // 更新・メイン
    void UpdateMain()
    {
        // 敵生成管理の更新
        _enemyGenerator.Update();

        // 配置できるかどうか判定
        if (_cursor.Placeable == false)
        {
            // 配置できないのでここでおしまい
            return;
        }

        // カーソルの下にあるオブジェクトをチェック
        int        mask = 1 << LayerMask.NameToLayer("Tower");
        Collider2D col  = Physics2D.OverlapPoint(_cursor.GetPosition(), mask);

        _selObj = null;
        if (col != null)
        {
            // 選択中のオブジェクトを格納
            _selObj = col.gameObject;
        }

        // マウスクリック判定
        if (Input.GetMouseButtonDown(0) == false)
        {
            //クリックしていないので以下の処理は不要
            return;
        }

        if (_selObj != null)
        {
            // 砲台をクリックした
            // 選択した砲台オブジェクトを取得
            _selTower = _selObj.GetComponent <Tower>();

            // アップグレードモードに移行する
            ChangeSelMode(eSelMode.Upgrade);
        }

        switch (_selMode)
        {
        case eSelMode.Buy:
            if (_cursor.SelObj == null)
            {
                // 所持金を減らす
                int cost = Cost.TowerProduction();
                Global.UseMoney(cost);
                // 何もないので砲台を配置
                Tower.Add(_cursor.X, _cursor.Y);
                // 次のタワーの生産コストを取得する
                int cost2 = Cost.TowerProduction();
                if (Global.Money < cost2)
                {
                    // お金が足りないので通常モードに戻る
                    ChangeSelMode(eSelMode.None);
                }
            }
            break;
        }
    }
예제 #12
0
    void Start()
    {
        // ゲームパラメータ初期化
        Global.Init();

        // 敵管理を生成
        Enemy.parent = new TokenMgr <Enemy>();
        Enemy.parent.AddToken("Enemy", 128);
        Enemy.parent.AddToken("Enemy2", 128);
        //Enemy2.parent = new TokenMgr<Enemy2>("Enemy2", 128);
        // ショット管理を生成
        Shot.parent = new TokenMgr <Shot>("Shot", 128);
        // パーティクル管理を生成
        Particle.parent = new TokenMgr <Particle>("Particle", 256);
        // タワー管理を生成
        Tower.parent  = new TokenMgr <Tower>("Tower", 64);
        Tower2.parent = new TokenMgr <Tower2>("Tower2", 64);
        // マップ管理を生成
        // プレハブを取得
        GameObject prefab = null;

        prefab = Util.GetPrefab(prefab, "Field");
        // インスタンス生成
        Field field = Field.CreateInstance2 <Field>(prefab, 0, 0);

        // マップ読み込み
        field.Load();
        // パスを取得
        _path  = field.Path;
        _path2 = field.Path2;

        // コリジョンレイヤーを取得
        _lCollision  = field.lCollision;
        _lCollision2 = field.lCollision2;

        // カーソルを取得
        _cursor  = GameObject.Find("Cursor").GetComponent <Cursor>();
        _cursor2 = GameObject.Find("Cursor2").GetComponent <Cursor2>();

        // GUIを生成
        _gui  = new Gui();
        _gui2 = new Gui2();

        // 敵生成管理を生成
        _enemyGenerator  = new EnemyGenerator(_path);
        _enemyGenerator2 = new EnemyGenerator2(_path2);

        // Wave開始演出を取得
        _waveStart = MyCanvas.Find <WaveStart>("TextWaveStart");

        // 射程範囲カーソルを取得する
        _cursorRange = GameObject.Find("CursorRange").GetComponent <CursorRange>();

        // 初期状態は選択しないモード
        ChangeSelMode(eSelMode.None);
        ChangeSelMode2(eSelMode2.None);

        //初期タワー配置
        Tower.Add(-1.12f, -1.76f);
        Tower2.Add(1.12f, -1.76f);
    }
예제 #13
0
    // 更新・メイン
    void UpdateMain()
    {
        // 敵生成管理の更新
        _enemyGenerator.Update();
        _enemyGenerator2.Update();

        // カーソルの下にあるオブジェクトをチェック
        int        mask = 1 << LayerMask.NameToLayer("Tower");
        Collider2D col  = Physics2D.OverlapPoint(_cursor.GetPosition(), mask);

        _selObj = null;
        if (col != null)
        {
            // 選択中のオブジェクトを格納
            _selObj = col.gameObject;
        }

        // カーソルの下にあるオブジェクトをチェック
        int        mask2 = 1 << LayerMask.NameToLayer("Tower");
        Collider2D col2  = Physics2D.OverlapPoint(_cursor2.GetPosition(), mask2);

        _selObj2 = null;
        if (col2 != null)
        {
            // 選択中のオブジェクトを格納
            _selObj2 = col2.gameObject;
        }

        if (Input.GetButtonDown("Done1p"))
        {
            if (_selObj != null)
            {
                // 砲台をクリックした
                // 選択した砲台オブジェクトを取得
                _selTower = _selObj.GetComponent <Tower>();

                // アップグレードモードに移行する
                ChangeSelMode(eSelMode.Upgrade);
            }
            else
            {
                switch (_selMode)
                {
                case eSelMode.Buy:
                    if (_cursor.SelObj == null)
                    {
                        if (_cursor.Placeable)
                        {
                            if (_cursor._Placeable)
                            {
                                // 所持金を減らす
                                int cost = Cost.TowerProduction();
                                if (Global.Money < cost)
                                {
                                    // お金が足りないので通常モードに戻る
                                    ChangeSelMode(eSelMode.None);
                                }
                                else
                                {
                                    Global.UseMoney(cost);
                                    // 何もないので砲台を配置
                                    Tower.Add(_cursor.X, _cursor.Y);
                                    // 次のタワーの生産コストを取得する
                                    int cost2 = Cost.TowerProduction2();
                                    if (Global.Money < cost)
                                    {
                                        // お金が足りないので通常モードに戻る
                                        ChangeSelMode(eSelMode.None);
                                    }
                                }
                            }
                        }
                    }
                    break;

                case eSelMode.None:
                    ChangeSelMode(eSelMode.Buy);
                    break;

                case eSelMode.Upgrade:
                    ChangeSelMode(eSelMode.None);
                    break;
                }
            }
        }

        if (Input.GetButtonDown("Done2p"))
        {
            if (_selObj2 != null)
            {
                // 砲台をクリックした
                // 選択した砲台オブジェクトを取得
                _selTower2 = _selObj2.GetComponent <Tower2>();

                // アップグレードモードに移行する
                ChangeSelMode2(eSelMode2.Upgrade);
            }
            else
            {
                switch (_selMode2)
                {
                case eSelMode2.Buy:
                    if (_cursor2.SelObj == null)
                    {
                        if (_cursor2.Placeable)
                        {
                            if (_cursor2._Placeable)
                            {
                                // 所持金を減らす
                                int cost = Cost.TowerProduction();
                                if (Global.Money2 < cost)
                                {
                                    // お金が足りないので通常モードに戻る
                                    ChangeSelMode2(eSelMode2.None);
                                }
                                else
                                {
                                    Global.UseMoney2(cost);
                                    // 何もないので砲台を配置
                                    Tower2.Add(_cursor2.X, _cursor2.Y);
                                    // 次のタワーの生産コストを取得する
                                    int cost2 = Cost.TowerProduction2();
                                    if (Global.Money2 < cost2)
                                    {
                                        // お金が足りないので通常モードに戻る
                                        ChangeSelMode2(eSelMode2.None);
                                    }
                                }
                            }
                        }
                    }
                    break;

                case eSelMode2.None:
                    ChangeSelMode2(eSelMode2.Buy);
                    break;

                case eSelMode2.Upgrade:
                    ChangeSelMode2(eSelMode2.None);
                    break;
                }
            }
        }

        if (Input.GetButtonDown("Range1p"))
        {
            OnClickRange();
        }

        if (Input.GetButtonDown("Range2p"))
        {
            OnClickRange2();
        }

        if (Input.GetButtonDown("Firerate1p"))
        {
            OnClickFirerate();
        }

        if (Input.GetButtonDown("Firerate2p"))
        {
            OnClickFirerate2();
        }

        if (Input.GetButtonDown("Power1p"))
        {
            OnClickPower();
        }

        if (Input.GetButtonDown("Power2p"))
        {
            OnClickPower2();
        }
    }
예제 #14
0
파일: Q03_4.cs 프로젝트: quoidautre/ctci
 public void MoveTopTo(Tower tower)
 {
     var top = _disks.Pop();
     tower.Add(top);
 }