コード例 #1
0
        public override void Act(Queue <Message> messages)
        {
            try
            {
                while (messages.Count > 0)
                {
                    Message message = messages.Dequeue();
                    Console.WriteLine($"\t{message.Format()}");
                    message.Parse(out string action, out string parameters);

                    for (int i = 0; i < States.Length; i++)
                    {
                        if (States[i] == TerrainState.GettingWater)
                        {
                            States[i] = TerrainState.Water;
                        }
                    }

                    switch (action)
                    {
                    case "move":
                        if (_turns == 4)
                        {
                            States[4] = TerrainState.Fire;                  // at some point, start a fire
                        }
                        if (_turns == 20)
                        {
                            States[7] = TerrainState.Fire;
                        }
                        if (_turns == 50)
                        {
                            States[9] = TerrainState.Fire;
                        }

                        if (parameters == "right")
                        {
                            PatrolPosition++;
                        }
                        else if (parameters == "left")
                        {
                            PatrolPosition--;
                        }

                        UpdateVisualField(message.Sender);
                        _turns++;
                        break;

                    case "get-water":
                        if (States[PatrolPosition] == TerrainState.Water)
                        {
                            States[PatrolPosition] = TerrainState.GettingWater;
                            Send(message.Sender, "got-water");
                        }
                        UpdateVisualField(message.Sender);
                        break;

                    case "drop-water":
                        if (States[PatrolPosition] == TerrainState.Fire)
                        {
                            States[PatrolPosition] = TerrainState.Normal;
                            Send(message.Sender, "fire-out");
                            UpdateVisualField(message.Sender);
                        }
                        break;

                    default:
                        break;
                    }

                    _formGui.UpdateTerrainGUI();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                //Console.WriteLine(ex.ToString()); // for debugging
            }
        }
コード例 #2
0
        public override void Act(ActressMas.Message message)
        {
            try
            {
                if (_turns == 0)
                {
                    Thread.Sleep(Utils.Delay);
                }

                Console.WriteLine("\t[{1} -> {0}]: {2}", this.Name, message.Sender, message.Content);

                string action; string parameters;
                Utils.ParseMessage(message.Content, out action, out parameters);

                for (int i = 0; i < States.Length; i++)
                {
                    if (States[i] == TerrainState.GettingWater)
                    {
                        States[i] = TerrainState.Water;
                    }
                }

                switch (action)
                {
                case "move":
                    if (_turns == 4)
                    {
                        States[4] = TerrainState.Fire;                  // at some point, start a fire
                    }
                    if (_turns == 20)
                    {
                        States[7] = TerrainState.Fire;
                    }
                    if (_turns == 50)
                    {
                        States[9] = TerrainState.Fire;
                    }

                    if (parameters == "right")
                    {
                        PatrolPosition++;
                    }
                    else if (parameters == "left")
                    {
                        PatrolPosition--;
                    }

                    UpdateVisualField(message.Sender);
                    _turns++;
                    break;

                case "get-water":
                    if (States[PatrolPosition] == TerrainState.Water)
                    {
                        States[PatrolPosition] = TerrainState.GettingWater;
                        Send(message.Sender, "got-water");
                    }
                    UpdateVisualField(message.Sender);
                    break;

                case "drop-water":
                    if (States[PatrolPosition] == TerrainState.Fire)
                    {
                        States[PatrolPosition] = TerrainState.Normal;
                        Send(message.Sender, "fire-out");
                        UpdateVisualField(message.Sender);
                    }
                    break;

                default:
                    break;
                }

                _formGui.UpdateTerrainGUI();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                //Console.WriteLine(ex.ToString()); // for debugging
            }
        }