Example #1
0
        public void TargetMovement_Move_RightForward()
        {
            float   horizontal = 1f;
            float   vertical   = 1f;
            Vector3 result     = new Vector3(horizontal, 0f, vertical);

            targetMovement.Move(horizontal, vertical);
            Assert.AreEqual(result, mover.position);
        }
Example #2
0
 void OnTriggerEnter(Collider other)
 {
     if (other.CompareTag("Player"))
     {
         other.transform.position = transform.GetChild(0).position;
         camera.Move(gameObject);
         target.Move(gameObject);
     }
 }
Example #3
0
        protected Core Move(int x_move, int y_move, int x_start, int y_start, int step_x_move, int step_y_move)
        {
            // 初始化
            var answer = new Core(TargetCore);
            var record = new Core(TargetCore.GameSize);

            if (x_start < 0)
            {
                x_start += answer.Width;
            }
            if (y_start < 0)
            {
                y_start += answer.Height;
            }
            var during_step_x_move = -x_move;
            var during_step_y_move = -y_move;
            var x = x_start;
            var y = y_start;

            // 逐行/逐列处理
            while (answer[x_start, y_start] != Core.OutOfRange)
            {
                x = x_start;
                y = y_start;
                while (answer[x, y] != Core.OutOfRange)
                {
                    if (answer[x, y] != Core.None && answer[x, y] != Core.BackGround)
                    {
                        var now_number = answer[x, y];
                        // 取目标单元移动位置
                        var to        = answer.LatestBlock(x, y, x_move, y_move);
                        var to_number = answer[to.X, to.Y];
                        if (to_number == now_number)
                        {
                            // 合并
                            answer.Execute(TargetMovement.Move(x, y, to.X, to.Y));
                            answer.Execute(TargetMovement.Appear(to.X, to.Y, 2 * to_number, 1));
                            TargetCore.ToAddScore += Math.Abs(to_number * 2);
                            record[to.X, to.Y]     = answer[to.X, to.Y]; // 记录
                            answer[to.X, to.Y]     = Core.BackGround;    // 此位置已行动
                        }
                        else if (to_number + now_number == 0)
                        {
                            // 湮灭
                            answer.Execute(TargetMovement.Move(x, y, to.X, to.Y));
                            answer.Execute(TargetMovement.Disappear(to.X, to.Y, 1));
                            TargetCore.ToAddScore += Math.Abs(to_number * 4);
                            record[to.X, to.Y]     = Core.WillDelete; // 记录
                            answer[to.X, to.Y]     = Core.BackGround; // 此位置已行动
                        }
                        else
                        {
                            // 反方向检查
                            var predict        = answer.LatestBlock(x, y, -x_move, -y_move);
                            var predict_number = answer[predict.X, predict.Y];
                            // 如果反方向上已经存在了一个负值,那么停止
                            if (predict_number + now_number == 0)
                            {
                                goto while_out;
                            }
                            // 移动
                            to.Offset(-x_move, -y_move);
                            answer.Execute(TargetMovement.Move(x, y, to.X, to.Y));
                        }
                    }
while_out:
                    x += during_step_x_move;
                    y += during_step_y_move;
                }
                x_start += step_x_move;
                y_start += step_y_move;
            }
            return(answer.AddFrom(record));
        }