当前位置: 首页>>代码示例>>C#>>正文


C# State.Clone方法代码示例

本文整理汇总了C#中State.Clone方法的典型用法代码示例。如果您正苦于以下问题:C# State.Clone方法的具体用法?C# State.Clone怎么用?C# State.Clone使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在State的用法示例。


在下文中一共展示了State.Clone方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: StateConstruction

		public void StateConstruction()
		{
			var blueHand = new PlayHand(new[]
			                            	{
			                            		new PlayCard(CardInfo.CardPool["Squall"]),
			                            		new PlayCard(CardInfo.CardPool["Krysta"]),
			                            		new PlayCard(CardInfo.CardPool["Wendigo"]),
			                            		new PlayCard(CardInfo.CardPool["Behemoth"]),
			                            		new PlayCard(CardInfo.CardPool["Tonberry"]),
			                            	}, true);
			var redHand = new PlayHand(new[]
			                           	{
			                           		new PlayCard(CardInfo.CardPool["Torama"]),
			                           		new PlayCard(CardInfo.CardPool["Gerogero"]),
			                           		new PlayCard(CardInfo.CardPool["Buel"]),
			                           		new PlayCard(CardInfo.CardPool["Bomb"]),
			                           		new PlayCard(CardInfo.CardPool["Diablos"]),
			                           	}, false);
			var state = new State(new PlayField(), RuleModifier.None, blueHand, redHand, true);

			Assert.That(state.bluePoints, Is.EqualTo(5));
			state.bluePoints--;
			Assert.That(state.bluePoints, Is.EqualTo(4));
			State clone = state.Clone();
			Assert.That(clone.bluePoints, Is.EqualTo(4));
			clone.bluePoints--;
			Assert.That(state.bluePoints, Is.EqualTo(4));
			Assert.That(clone.bluePoints, Is.EqualTo(3));
		}
开发者ID:13xforever,项目名称:Triple-Triad-.NET,代码行数:29,代码来源:StateTests.cs

示例2: IterationLimited

        // Runs a Monte Carlo Tree Search from the given root node
        // Limited by number of iterations
        public Node IterationLimited(State rootState, int iterations)
        {
            Node rootNode = new Node(null, null, rootState);

            for (int i = 0; i < iterations; i++)
            {
                Node node = rootNode;
                State state = rootState.Clone();

                // 1: Select
                while (node.UntriedMoves.Count == 0 && node.Children.Count != 0)
                {
                    if (state.Player == GameEngine.COMPUTER)
                    {
                        Move move = state.GetRandomMove();
                        state = state.ApplyMove(move);
                        Node parent = node;
                        node = new Node(move, parent, state);
                    }
                    else
                    {
                        node = node.SelectChild();
                        state = state.ApplyMove(node.GeneratingMove);
                    }
                }

                // 2: Expand
                if (node.UntriedMoves.Count != 0)
                {
                    Move randomMove = node.UntriedMoves[random.Next(0, node.UntriedMoves.Count)];
                    state = state.ApplyMove(randomMove);
                    node = node.AddChild(randomMove, state);
                }

                // 3: Simulation
                state = SimulateGame(state, EXPECTIMAX_POLICY);

                // 4: Backpropagation
                while (node != null)
                {
                    node.Update(state.GetResult());
                    node = node.Parent;
                }
            }
            return rootNode;
        }
开发者ID:kstrandby,项目名称:2048-AI,代码行数:48,代码来源:MonteCarlo.cs

示例3: Solve

        public override List<KeyValuePair<int, int>> Solve()
        {
            List<KeyValuePair<int, int>> result = new List<KeyValuePair<int, int>>();
            GenColumnValues();
            GenRowValues();

            RemoveEmptyRows();
            _columnIndexes = _columnIndexes.AsParallel()
                .OrderBy(i => GetColumnValue(i))
                .ToList();

            states = new List<State>();
            State state = new State();
            states.Add(state);
            Random rnd = new Random(15);
            while (!Empty())
            {
                State state2 = state.Clone();

                int column;
                int row = GetBestRow(out column);

                state.AddRow(row, GetRowValue(row));
                states.Add(state);

                row = GetBest2Row(out column);

                state2.AddRow(row, GetRowValue(row));
                states.Add(state2);

                state = states.OrderByDescending(x => x.Value *(float)(0.75 + 0.25 * rnd.NextDouble())).First();
                states.Remove(state);
                LoadState(state);
            }

            result = state.Rows.Select(x => new KeyValuePair<int, int>(x, 0)).ToList();
            //while (!Empty())
            //{
            //    int column;
            //    int row = GetSyndromRow(out column);

            //    KeyValuePair<int, int> syndromElement = new KeyValuePair<int, int>(row, column);
            //    result.Add(syndromElement);
            //}
            return result;
        }
开发者ID:rfrfrf,项目名称:set-cover-problem,代码行数:46,代码来源:MatrixPav2.cs

示例4: StateTests

        public void StateTests()
        {
            var s = new State();
            Assert.That(s.Start, Is.False);
            Assert.That(s.Final, Is.False);

            s.Start = true;
            Assert.That(s.Start, Is.True);
            Assert.That(s.Final, Is.False);

            s.Final = true;
            Assert.That(s.Start, Is.True);
            Assert.That(s.Final, Is.True);

            s.Start = false;
            Assert.That(s.Start, Is.False);
            Assert.That(s.Final, Is.True);

            var s2 = s.Clone();
            Assert.That(s2, Is.EqualTo(s));
        }
开发者ID:Davidyuk,项目名称:UCP,代码行数:21,代码来源:StateMachineTests.cs

示例5: Migrate

 public State Migrate(State s)
 {
     var newState = s.Clone() as State;
     Execute(newState);
     return newState;
 }
开发者ID:JohanGovers,项目名称:AIvsAI,代码行数:6,代码来源:PlanningAction.cs

示例6: ProcessSnapshotBuild

        /// <summary>
        /// FSNSequence 해석. 분기마다 builderState를 복제해야 하므로 새로 호출된다.
        /// </summary>
        /// <param name="builderState"></param>
        /// <param name="snapshotSeq">이번 콜에서 생성할 시퀀스 이전의 스냅샷 인덱스</param>
        /// <param name="bs"></param>
        /// <param name="linkToLast">이 메서드를 호출하기 바로 이전의 Snapshot에 연결할지 여부. 기본은 true. 선택지 등등에서 false로 해줘야함</param>
        /// <returns>이번 콜에서 생성한 시퀀스들 중 제일 첫번째 것. 다른 시퀀스 흐름과 연결할 때 사용 가능</returns>
        static Segment ProcessSnapshotBuild(State bs, FSNSnapshotSequence snapshotSeq, int prevSnapshotIndex, bool linkToLast = true)
        {
            ModuleCallQueue moduleCalls	= new ModuleCallQueue();

            Segment	sseg;														// 새로 생성할 Segment/Snapshot
            FSNSnapshot sshot;
            NewSnapshot(out sseg, out sshot);

            var firstSeg		= sseg;											// 최초 스냅샷
            var prevCallSeg		= snapshotSeq.Get(prevSnapshotIndex);			// 이번에 생성할 시퀀스의 이전 스냅샷

            var lastSeg			= prevCallSeg;									// 바로 이전에 처리한 스냅샷 (최초 루프시에는 실행 이전의 마지막 스냅샷과 동일)

            List<Segments.Control>	jumpSegs	= new List<Segments.Control>();	// 점프(goto, SwipeOption 등) 세그먼트가 등장했을 경우 여기에 보관된다
            List<Segment.CallFuncInfo> funcCalls= new List<Segment.CallFuncInfo>();	// 함수 콜이 있을 경우 여기에 먼저 누적하고 period때 한번에 처리한다

            float snapshotDelay	= 0f;											// 스냅샷에 적용할 지연 시간 (/기다리기 커맨드)
            //

            // 처음 시작할 때는 무조건 모든 객체들을 Hard-Clone한다 (분기점에서 Initial/Final 스테이트 독립을 하기 위해)

            moduleCalls.CatchupPreviousLayerState(prevCallSeg.snapshot);		// 기존의 유효한 Layer들을 활성화 (안그러면 모듈 콜을 누락해버림)
            moduleCalls.AddAllModuleCall(new Segments.HardClone(), bs.settings);

            // 스크립트 Sequence가 끝나거나 특정 명령을 만날 때까지 반복

            bool keepProcess	= true;
            while(keepProcess)
            {
                var curSeg	= bs.sequence[bs.segIndex];							// 현재 명령어 (Sequence 세그먼트)
                FSNDebug.currentProcessingScriptLine = curSeg.scriptLineNumber;	// 디버깅 정보 세팅 (줄 번호)

                switch(curSeg.type)												// 명령어 타입 체크 후 분기
                {
                //////////////////////////////////////////////////////////////
                case FSNScriptSequence.Segment.Type.Setting:							// ** 세팅
                {
                    var settingSeg		= curSeg as Segments.Setting;

                    if(settingSeg.settingMethod == Segments.Setting.SettingMethod.Pop)	// * 세팅 pop
                    {
                        if(bs.settings.ParentChain != null)
                        {
                            bs.settings	= bs.settings.ParentChain;
                        }
                        else
                        {
                            Debug.LogError("Cannot pop settings anymore - there is no settings pushed");
                        }
                    }
                    else
                    {
                        if(settingSeg.settingMethod == Segments.Setting.SettingMethod.Push)	// * Push일 경우에는 새 Chain을 생성한다
                        {
                            bs.settings	= new FSNInGameSetting.Chain(bs.settings);
                        }

                        foreach(var settingPair in settingSeg.RawSettingTable)	// Setting 설정
                        {
                            bs.settings.SetPropertyByString(settingPair.Key, settingPair.Value);
                        }
                    }

                    bs.SetSettingDirty();										// 세팅 변경됨 플래그 올리기
                }
                break;
                //////////////////////////////////////////////////////////////
                case FSNScriptSequence.Segment.Type.Text:						// ** 텍스트
                {
                    var module			= FSNEngine.Instance.GetModule(FSNEngine.ModuleType.Text) as IFSNProcessModule;

                    moduleCalls.AddCall(module, curSeg, bs.FrozenSetting);		// 해당 명령 저장
                }
                break;
                //////////////////////////////////////////////////////////////
                case FSNScriptSequence.Segment.Type.Object:						// ** 오브젝트 (이미지 등)
                {
                    var objSeg	= curSeg as Segments.Object;
                    var module	= FSNEngine.Instance.GetModuleByLayerID(objSeg.layerID) as IFSNProcessModule;

                    moduleCalls.AddCall(module, objSeg, bs.FrozenSetting);
                }
                break;
                //////////////////////////////////////////////////////////////
                case FSNScriptSequence.Segment.Type.Label:						// ** 레이블
                {
                    //var labelSeg		= curSeg as Segments.Label;
                    // 현재 이 시점에서는 labelSeg로 하는 일이 없다...
                    //Debug.Log("Label : " + labelSeg.labelName);
                }
                break;
                //////////////////////////////////////////////////////////////
//.........这里部分代码省略.........
开发者ID:rebuilder17,项目名称:fsnengine,代码行数:101,代码来源:FSNSnapshotSequence.Builder.cs

示例7: TimeLimited

        // Runs a Monte Carlo Tree Search limited by a given time limit
        public Node TimeLimited(State rootState, int timeLimit, Stopwatch timer)
        {
            Node rootNode = new Node(null, null, rootState);
            while (true)
            {
                if (timer.ElapsedMilliseconds > timeLimit)
                {
                    if (FindBestChild(rootNode.Children) == null && !rootNode.state.IsGameOver())
                    {
                        timeLimit += 10;
                        timer.Restart();
                    }
                    else
                    {
                        return rootNode;
                    }
                }
                Node node = rootNode;
                State state = rootState.Clone();

                // 1: Select
                while (node.UntriedMoves.Count == 0 && node.Children.Count != 0)
                {
                    node = node.SelectChild();
                    state = state.ApplyMove(node.GeneratingMove);
                }

                // 2: Expand
                if (node.UntriedMoves.Count != 0)
                {
                    Move randomMove = node.UntriedMoves[random.Next(0, node.UntriedMoves.Count)];
                    state = state.ApplyMove(randomMove);
                    node = node.AddChild(randomMove, state);
                }

                // 3: Simulation
                state = SimulateGame(state, EXPECTIMAX_POLICY);

                // 4: Backpropagation
                while (node != null)
                {
                    node.Update(state.GetResult());
                    node = node.Parent;
                }
            }
        }
开发者ID:kstrandby,项目名称:2048-AI,代码行数:47,代码来源:MonteCarlo.cs


注:本文中的State.Clone方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。