예제 #1
0
        public static void Execute(AgentHost agentHost, ListBox lstMessage, Panel pnl3x3, Panel pnlDiagData, PictureBox pictureBoxMineCraft, CheckBox chkFullDebug)
        {
            WorldState           worldState;
            JavaScriptSerializer json_serializer = new JavaScriptSerializer();

            agentHost.setObservationsPolicy(ObservationsPolicy.LATEST_OBSERVATION_ONLY);
            agentHost.setVideoPolicy(VideoPolicy.LATEST_FRAME_ONLY);

            // main loop:
            do
            {
                // Get Worldstate
                worldState = agentHost.getWorldState();
                Thread.Sleep(500);

                // Make an Observation
                Observation objObservation = RunMission.LogMission(worldState, lstMessage, pnl3x3, pnlDiagData, chkFullDebug);

                if (worldState.is_mission_running && worldState.video_frames.Count > 0)
                {
                    // Converts the Malmo ByteVector to a Bitmap and display in pictureBoxMineCraft
                    pictureBoxMineCraft.Image = ImageConvert.GetImageFromByteArray(worldState.video_frames[0].pixels);
                    pictureBoxMineCraft.Invalidate();
                    pictureBoxMineCraft.Refresh();
                }
            }while (worldState.is_mission_running);

            lstMessage.Items.Insert(0, "Mission has stopped.");
        }
예제 #2
0
    public static void Main(string[] args)
    {
        using (AgentHost agent_host = new AgentHost())
        {
            agent_host.setVideoPolicy(AgentHost.VideoPolicy.LATEST_FRAME_ONLY);
            agent_host.setRewardsPolicy(AgentHost.RewardsPolicy.SUM_REWARDS);
            agent_host.setObservationsPolicy(AgentHost.ObservationsPolicy.LATEST_OBSERVATION_ONLY);

            WorldState world_state = agent_host.getWorldState();

            if (world_state.is_mission_running)
                Environment.Exit(1);

            if (world_state.number_of_observations_since_last_state != 0)
                Environment.Exit(1);

            if (world_state.number_of_rewards_since_last_state != 0)
                Environment.Exit(1);

            if (world_state.number_of_video_frames_since_last_state != 0)
                Environment.Exit(1);

            if (world_state.observations.Count != 0)
                Environment.Exit(1);

            if (world_state.rewards.Count != 0)
                Environment.Exit(1);

            if (world_state.video_frames.Count != 0)
                Environment.Exit(1);

            Console.WriteLine(agent_host.getUsage());
        }
    }
예제 #3
0
        // This is a sample that moves in a random direction
        public static void Execute(AgentHost agentHost, ListBox lstMessage, Panel pnl3x3, Panel pnlDiagData, PictureBox pictureBoxMineCraft, CheckBox chkFullDebug)
        {
            WorldState worldState;
            Random     rand = new Random();

            // main loop:
            do
            {
                // Get Worldstate
                worldState = agentHost.getWorldState();

                agentHost.sendCommand("move 1");
                agentHost.sendCommand(string.Format("turn {0}", rand.NextDouble()));
                Thread.Sleep(500);

                // Log Mission
                Observation objObservation = RunMission.LogMission(worldState, lstMessage, pnl3x3, pnlDiagData, chkFullDebug);

                if (worldState.is_mission_running && worldState.video_frames.Count > 0)
                {
                    // Converts the Malmo ByteVector to a Bitmap and display in pictureBoxMineCraft
                    pictureBoxMineCraft.Image = ImageConvert.GetImageFromByteArray(worldState.video_frames[0].pixels);
                    pictureBoxMineCraft.Invalidate();
                    pictureBoxMineCraft.Refresh();
                }
            }while (worldState.is_mission_running);

            lstMessage.Items.Insert(0, "Mission has stopped.");
        }
예제 #4
0
        /// <summary>
        /// Starts the module for the given host.
        /// </summary>
        /// <param name="host">The host.</param>
        public void Start(AgentHost host)
        {
            discoveryBehavior = host.Endpoint.Behaviors.Find<EndpointDiscoveryBehavior>();
            if (discoveryBehavior == null)
            {
                discoveryBehavior = new EndpointDiscoveryBehavior();
                host.Endpoint.Behaviors.Add(discoveryBehavior);
            }
            discoveryBehavior.Scopes.Add(scope);

            host.TestRunnerHost.Description.Behaviors.Add(new ServiceDiscoveryBehavior());
            host.TestRunnerHost.AddServiceEndpoint(new UdpDiscoveryEndpoint());

            host.TestRunner.CommunicationStarted += (sender, args) =>
                                                        {
                                                            lock (this)
                                                            {
                                                                counter++;
                                                                discoveryBehavior.Enabled = false;
                                                            }
                                                        };
            host.TestRunner.CommunicationFinished += (sender, args) =>
                                                         {
                                                             lock (this)
                                                             {
                                                                 counter--;
                                                                 if (counter == 0)
                                                                     discoveryBehavior.Enabled = true;
                                                             }
                                                         };
        }
예제 #5
0
        public ActionResult CauseTrouble()
        {
            ViewBag.Message = "Instantiating AgentHost creates trouble when publishing.";
            //MissionSpec mission = new MissionSpec();
            AgentHost agentHost = new AgentHost();

            return(RedirectToAction("Success"));
        }
예제 #6
0
    public static void Main(string[] args)
    {
        using (AgentHost agent_host = new AgentHost())
        {
            agent_host.setVideoPolicy(AgentHost.VideoPolicy.LATEST_FRAME_ONLY);
            agent_host.setRewardsPolicy(AgentHost.RewardsPolicy.SUM_REWARDS);
            agent_host.setObservationsPolicy(AgentHost.ObservationsPolicy.LATEST_OBSERVATION_ONLY);

            WorldState world_state = agent_host.getWorldState();

            if (world_state.has_mission_begun)
            {
                Environment.Exit(1);
            }

            if (world_state.is_mission_running)
            {
                Environment.Exit(1);
            }

            if (world_state.number_of_observations_since_last_state != 0)
            {
                Environment.Exit(1);
            }

            if (world_state.number_of_rewards_since_last_state != 0)
            {
                Environment.Exit(1);
            }

            if (world_state.number_of_video_frames_since_last_state != 0)
            {
                Environment.Exit(1);
            }

            if (world_state.observations.Count != 0)
            {
                Environment.Exit(1);
            }

            if (world_state.rewards.Count != 0)
            {
                Environment.Exit(1);
            }

            if (world_state.video_frames.Count != 0)
            {
                Environment.Exit(1);
            }

            Console.WriteLine(agent_host.getUsage());
        }
    }
예제 #7
0
 /// <summary>
 /// Stops the module for the given host.
 /// </summary>
 /// <param name="host">The host.</param>
 public void Stop(AgentHost host)
 {
     lock (this)
     {
         client.Close();
         if (announcementTimer != null)
         {
             announcementTimer.Change(Timeout.Infinite, Timeout.Infinite);
             announcementTimer = null;
         }
     }
 }
예제 #8
0
        public static void Execute(AgentHost agentHost, ListBox lstMessage, Panel pnl3x3, Panel pnlDiagData, PictureBox pictureBoxMineCraft, CheckBox chkFullDebug)
        {
            WorldState           worldState;
            JavaScriptSerializer json_serializer = new JavaScriptSerializer();

            agentHost.setObservationsPolicy(ObservationsPolicy.LATEST_OBSERVATION_ONLY);
            agentHost.setVideoPolicy(VideoPolicy.LATEST_FRAME_ONLY);

            // main loop:
            do
            {
                // Get Worldstate
                worldState = agentHost.getWorldState();
                Thread.Sleep(500);

                // Log Mission
                Observation objObservation = RunMission.LogMission(worldState, lstMessage, pnl3x3, pnlDiagData, chkFullDebug);
                var         yaw            = objObservation.Yaw;

                string current_yaw_delta = "";
                if (worldState.is_mission_running && worldState.video_frames.Count > 0)
                {
                    // do we have new Video?
                    if (worldState.video_frames.Count > 0)
                    {
                        current_yaw_delta = processFrame(worldState.video_frames[0].pixels);
                        if (current_yaw_delta != "")
                        {
                            agentHost.sendCommand(String.Format("turn {0}", current_yaw_delta));
                        }
                    }
                    else
                    {
                        agentHost.sendCommand(String.Format("turn {0}", yaw));
                    }
                }

                if (worldState.is_mission_running && worldState.video_frames.Count > 0)
                {
                    // Converts the Malmo ByteVector to a Bitmap and display in pictureBoxMineCraft
                    pictureBoxMineCraft.Image = ImageConvert.GetImageFromByteArray(worldState.video_frames[0].pixels);
                    pictureBoxMineCraft.Invalidate();
                    pictureBoxMineCraft.Refresh();
                }
            }while (worldState.is_mission_running);

            lstMessage.Items.Insert(0, "Mission has stopped.");
        }
예제 #9
0
파일: Main.cs 프로젝트: vadimas/events
        private static void LoadMinecraft(AgentHost agentHost, string XMLFile, ListBox lstMessage)
        {
            String strXMLFileContents = "";

            using (StreamReader sr = new StreamReader(XMLFile))
            {
                // Read the stream to a string, and write the string to the console.
                strXMLFileContents = sr.ReadToEnd();
            }

            MissionSpec mission = new MissionSpec(strXMLFileContents, false);

            mission.requestVideo(640, 480);

            MissionRecordSpec missionRecord = new MissionRecordSpec("./saved_data.tgz");

            missionRecord.recordCommands();
            missionRecord.recordMP4(20, 400000);
            missionRecord.recordRewards();
            missionRecord.recordObservations();

            try
            {
                agentHost.startMission(mission, missionRecord);
            }
            catch (Exception ex)
            {
                lstMessage.Items.Insert(0, String.Format("Error starting mission: {0}", ex.Message));
                Environment.Exit(1);
            }

            WorldState worldState;

            lstMessage.Items.Insert(0, "Waiting for the mission to start");
            do
            {
                Thread.Sleep(100);
                worldState = agentHost.getWorldState();

                foreach (TimestampedString error in worldState.errors)
                {
                    lstMessage.Items.Insert(0, String.Format("Error: {0}", error.text));
                }
            }while (!worldState.has_mission_begun);
        }
예제 #10
0
 private static void InitAgentHost()
 {
     _agentHost = new AgentHost();
     try
     {
         _agentHost.parse(new StringVector(Environment.GetCommandLineArgs()));
     }
     catch (Exception ex)
     {
         Console.Error.WriteLine("ERROR: {0}", ex.Message);
         Console.Error.WriteLine(_agentHost.getUsage());
         Environment.Exit(1);
     }
     if (_agentHost.receivedArgument("help"))
     {
         Console.Error.WriteLine(_agentHost.getUsage());
         Environment.Exit(0);
     }
 }
예제 #11
0
        // Get the tiles around the agent
        public static void Execute(AgentHost agentHost, ListBox lstMessage, Panel pnl3x3, Panel pnlDiagData, PictureBox pictureBoxMineCraft, CheckBox chkFullDebug)
        {
            WorldState           worldState;
            JavaScriptSerializer json_serializer = new JavaScriptSerializer();

            // main loop:
            do
            {
                // Get Worldstate
                worldState = agentHost.getWorldState();

                // Log Mission
                Observation objObservation = RunMission.LogMission(worldState, lstMessage, pnl3x3, pnlDiagData, chkFullDebug);

                if (worldState.is_mission_running && worldState.video_frames.Count > 0)
                {
                    // Converts the Malmo ByteVector to a Bitmap and display in pictureBoxMineCraft
                    pictureBoxMineCraft.Image = ImageConvert.GetImageFromByteArray(worldState.video_frames[0].pixels);
                    pictureBoxMineCraft.Invalidate();
                    pictureBoxMineCraft.Refresh();
                }

                if (objObservation.LineOfSight != null)
                {
                    // See if there is room to move
                    if ((Convert.ToDouble(objObservation.LineOfSight.z) - (objObservation.ZPos) > 1))
                    {
                        // Move
                        agentHost.sendCommand("move 1");
                        Thread.Sleep(500);
                    }
                    else
                    {
                        agentHost.sendCommand(string.Format("turn {0}", 1));
                        Thread.Sleep(500);
                    }
                }
            }while (worldState.is_mission_running);

            lstMessage.Items.Insert(0, "Mission has stopped.");
        }
예제 #12
0
        /// <summary>
        /// Starts the module for the given host.
        /// </summary>
        /// <param name="host">The host.</param>
        public void Start(AgentHost host)
        {
            lock (this)
            {
                client = CreateAnnouncementClient();
                client.Open();
                host.TestRunner.PingReceived += PingReceived;
                host.TestRunner.CommunicationStarted += CommunicationStarted;
                host.TestRunner.CommunicationFinished += CommunicationFinished;

                endpointDiscoveryMetadata = EndpointDiscoveryMetadata.FromServiceEndpoint(host.Endpoint);
                announcementTimer = new Timer(o => Announce(), null, Timeout.Infinite, Timeout.Infinite);

                Debug.Assert(endpointDiscoveryMetadata != null);

                if (!endpointDiscoveryMetadata.Scopes.Contains(scope))
                    endpointDiscoveryMetadata.Scopes.Add(scope);

                new Action(Announce).BeginInvoke(null, null);
            }
        }
예제 #13
0
        private void CheckGamepad(AgentHost agentHost)
        {
            if (!_gamepad.IsConnected)
            {
                return;
            }

            _gamepad.Update();

            CheckAndSend(agentHost, "move", _gamepad.LeftStick.Position.Y);
            CheckAndSend(agentHost, "strafe", _gamepad.LeftStick.Position.X);
            CheckAndSend(agentHost, "pitch", -_gamepad.RightStick.Position.Y);
            CheckAndSend(agentHost, "turn", _gamepad.RightStick.Position.X);
            CheckAndSend(agentHost, "crouch", _gamepad.X ? 1 : 0);
            CheckAndSend(agentHost, "jump", _gamepad.A ? 1 : 0);
            CheckAndSend(agentHost, "attack", _gamepad.RightTrigger ? 1 : 0);
            CheckAndSend(agentHost, "use", _gamepad.LeftTrigger ? 1 : 0);
            CheckAndSend(agentHost, "movesouth", _gamepad.DPad.Up ? 1 : 0);
            CheckAndSend(agentHost, "movenorth", _gamepad.DPad.Down ? 1 : 0);
            CheckAndSend(agentHost, "movewest", _gamepad.DPad.Right ? 1 : 0);
            CheckAndSend(agentHost, "moveeast", _gamepad.DPad.Left ? 1 : 0);
        }
예제 #14
0
 void RunMalmo()
 {
     // Normally we do not need this line, but we will Dispose() agentHost at the end
     // of the method because of a bug in Malmo.
     agentHost = new AgentHost();
     CreateResetNetworkEvent();
     // Deactivated for published version
     //ReadCommandLineArgs();
     InitializeMission();
     System.Diagnostics.Debug.WriteLine("Mission initialized");
     if (!TryStartMission())
     {
         CreateMissionEndEvent();
         return;
     }
     ConsoleOutputWhileMissionLoads();
     MainLoop();
     // We need to destroy the agentHost so that the data is saved. This is a bug in Malmo.
     agentHost.Dispose();
     System.Diagnostics.Debug.WriteLine("Mission has stopped.");
     // Extracts the results and moves the video to the candidates folder:
     SharpNeat.PopulationReadWrite.CreateCandidateVideoFromResults(fileName, userName);
     CreateMissionEndEvent();
 }
예제 #15
0
 /// <summary>
 /// Aborts the module for the given host.
 /// </summary>
 /// <param name="host">The host.</param>
 public void Abort(AgentHost host)
 {
     Stop(host);
 }
예제 #16
0
파일: Program.cs 프로젝트: vyraun/malmo
    public static void Main()
    {
        AgentHost agentHost = new AgentHost();

        try
        {
            agentHost.parse(new StringVector(Environment.GetCommandLineArgs()));
        }
        catch (Exception ex)
        {
            Console.Error.WriteLine("ERROR: {0}", ex.Message);
            Console.Error.WriteLine(agentHost.getUsage());
            Environment.Exit(1);
        }
        if (agentHost.receivedArgument("help"))
        {
            Console.Error.WriteLine(agentHost.getUsage());
            Environment.Exit(0);
        }

        MissionSpec mission = new MissionSpec();

        mission.timeLimitInSeconds(10);
        mission.requestVideo(320, 240);
        mission.rewardForReachingPosition(19.5f, 0.0f, 19.5f, 100.0f, 1.1f);

        MissionRecordSpec missionRecord = new MissionRecordSpec("./saved_data.tgz");

        missionRecord.recordCommands();
        missionRecord.recordMP4(20, 400000);
        missionRecord.recordRewards();
        missionRecord.recordObservations();

        try
        {
            agentHost.startMission(mission, missionRecord);
        }
        catch (Exception ex)
        {
            Console.Error.WriteLine("Error starting mission: {0}", ex.Message);
            Environment.Exit(1);
        }

        WorldState worldState;

        Console.WriteLine("Waiting for the mission to start");
        do
        {
            Console.Write(".");
            Thread.Sleep(100);
            worldState = agentHost.getWorldState();

            foreach (TimestampedString error in worldState.errors)
            {
                Console.Error.WriteLine("Error: {0}", error.text);
            }
        }while (!worldState.is_mission_running);

        Console.WriteLine();

        Random rand = new Random();

        // main loop:
        do
        {
            agentHost.sendCommand("move 1");
            agentHost.sendCommand(string.Format("turn {0}", rand.NextDouble()));
            Thread.Sleep(500);
            worldState = agentHost.getWorldState();
            Console.WriteLine(
                "video,observations,rewards received: {0}, {1}, {2}",
                worldState.number_of_video_frames_since_last_state,
                worldState.number_of_observations_since_last_state,
                worldState.number_of_rewards_since_last_state);
            foreach (TimestampedReward reward in worldState.rewards)
            {
                Console.Error.WriteLine("Summed reward: {0}", reward.getValue());
            }
            foreach (TimestampedString error in worldState.errors)
            {
                Console.Error.WriteLine("Error: {0}", error.text);
            }
        }while (worldState.is_mission_running);

        Console.WriteLine("Mission has stopped.");
    }
예제 #17
0
        private void runMission(MissionSpec mission)
        {
            string            recordPath = "none";
            MissionRecordSpec missionRecord;

            if (string.IsNullOrEmpty(Settings.Default.OutputDir))
            {
                missionRecord = new MissionRecordSpec();
            }
            else
            {
                recordPath    = Path.Combine(Settings.Default.OutputDir, Guid.NewGuid() + ".tar.gz");
                missionRecord = new MissionRecordSpec(recordPath);
                if (Settings.Default.RecordObservations)
                {
                    missionRecord.recordObservations();
                }

                if (Settings.Default.RecordRewards)
                {
                    missionRecord.recordRewards();
                }

                if (Settings.Default.RecordCommands)
                {
                    missionRecord.recordCommands();
                }

                if (Settings.Default.RecordMP4)
                {
                    missionRecord.recordMP4(Settings.Default.MP4FPS, (long)(Settings.Default.BitRate * 1024));
                }
            }

            using (AgentHost agentHost = new AgentHost())
            {
                ClientPool clientPool = new ClientPool();
                clientPool.add(new ClientInfo(Settings.Default.ClientIP, Settings.Default.ClientPort));

                try
                {
                    agentHost.startMission(mission, clientPool, missionRecord, 0, "hac");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Error Starting Mission", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }

                Dispatcher.Invoke(() =>
                {
                    Activate();
                    VideoImage.Focus();
                    startB.Content = "Set";
                    Title          = Settings.Default.Title + " : Waiting for mission start";
                    if (_recordWindow != null && _recordWindow.IsVisible)
                    {
                        _recordWindow.RecordPath = recordPath;
                    }
                });

                _isInSession = true;
                try
                {
                    WorldState worldState;
                    // wait for mission to start
                    do
                    {
                        Thread.Sleep(100);
                        worldState = agentHost.getWorldState();

                        if (worldState.errors.Any())
                        {
                            StringBuilder errors = new StringBuilder();
                            foreach (TimestampedString error in worldState.errors)
                            {
                                errors.AppendLine(error.text);
                            }

                            MessageBox.Show(errors.ToString(), "Error during mission initialization", MessageBoxButton.OK, MessageBoxImage.Error);
                            return;
                        }
                    }while (!worldState.is_mission_running && !_stopMission);

                    if (_stopMission)
                    {
                        return;
                    }

                    DateTime missionStartTime = DateTime.UtcNow;
                    _timeRemaining = _missionDuration;

                    Dispatcher.Invoke(() =>
                    {
                        startB.Content = "Go!";
                        Title          = Settings.Default.Title + " : Recording";
                    });

                    // run mission
                    TimeSpan loopTime = TimeSpan.FromSeconds(1.0 / 20);

                    _pendingCommandsMutex.Wait();
                    try
                    {
                        _pendingCommandQueue = new Queue <Tuple <string, float> >();
                    }
                    finally
                    {
                        _pendingCommandsMutex.Release();
                    }

                    _pendingMessagesMutex.Wait();
                    try
                    {
                        _pendingMessages = new Queue <string>();
                    }
                    finally
                    {
                        _pendingMessagesMutex.Release();
                    }

                    bool      failure   = false;
                    Stopwatch loopTimer = new Stopwatch();
                    do
                    {
                        loopTimer.Reset();
                        loopTimer.Start();

                        worldState = agentHost.getWorldState();

                        TimestampedVideoFrame frame = worldState.video_frames.FirstOrDefault();

                        if (frame != null)
                        {
                            if (_missionDuration != TimeSpan.Zero)
                            {
                                TimeSpan elapsed = frame.timestamp - missionStartTime;
                                _timeRemaining = _missionDuration - elapsed;
                            }

                            _pixelsMutex.Wait();
                            try
                            {
                                if (_pixels == null || _pixels.Length != frame.pixels.Count)
                                {
                                    _pixels = new byte[frame.pixels.Count];
                                    Dispatcher.Invoke(() =>
                                    {
                                        if (_bitmap.Width != frame.width || _bitmap.Height != frame.height)
                                        {
                                            _bitmap           = new WriteableBitmap(frame.width, frame.height, 72, 72, PixelFormats.Rgb24, null);
                                            VideoImage.Source = _bitmap;
                                            if (_recordWindow != null && _recordWindow.IsVisible)
                                            {
                                                _recordWindow.FrameSource = _bitmap;
                                            }
                                        }
                                    });
                                }

                                frame.pixels.CopyTo(_pixels);
                            }
                            finally
                            {
                                _pixelsMutex.Release();
                            }
                        }

                        _pendingMessagesMutex.Wait();
                        try
                        {
                            foreach (var reward in worldState.rewards)
                            {
                                _score += reward.getValue();
                                if (reward.getValue() < 0)
                                {
                                    failure = true;
                                }

                                _pendingMessages.Enqueue(string.Format("{0}> score {1}", reward.timestamp.ToString("hh:mm:ss.fff"), reward.getValue()));
                            }

                            _score = Math.Max(_score, 0);
                            _score = Math.Min(_score, 99999);

                            foreach (var observation in worldState.observations)
                            {
                                int posStart = observation.text.IndexOf("\"XPos\"");
                                if (posStart < 0)
                                {
                                    continue;
                                }

                                int posEnd = observation.text.IndexOf("\"ZPos\"");
                                posEnd = observation.text.IndexOf(',', posEnd);

                                string   posSegment = observation.text.Substring(posStart, posEnd - posStart);
                                string[] pos        = posSegment.Split(',');
                                float    x          = Convert.ToSingle(pos[0].Split(':')[1]);
                                float    y          = Convert.ToSingle(pos[1].Split(':')[1]);
                                float    z          = Convert.ToSingle(pos[2].Split(':')[1]);

                                _pendingMessages.Enqueue(string.Format("{0}> (x={1:0.00}, y={2:0.00}, z={3:0.00})", observation.timestamp.ToString("hh:mm:ss.fff"), x, y, z));
                            }
                        }
                        finally
                        {
                            _pendingMessagesMutex.Release();
                        }

                        CheckGamepad(agentHost);

                        _pendingCommandsMutex.Wait();
                        try
                        {
                            while (_pendingCommandQueue.Any())
                            {
                                var command = _pendingCommandQueue.Dequeue();
                                CheckAndSend(agentHost, command.Item1, command.Item2);
                            }
                        }
                        finally
                        {
                            _pendingCommandsMutex.Release();
                        }

                        loopTimer.Stop();
                        if (loopTimer.Elapsed < loopTime)
                        {
                            Thread.Sleep(loopTime - loopTimer.Elapsed);
                        }
                    } while (worldState.is_mission_running && !_stopMission);

                    if (_stopMission)
                    {
                        return;
                    }

                    if (!failure)
                    {
                        _score += _timeRemaining.TotalSeconds * 100;
                    }

                    _missionSuccess = !failure;

                    _pendingCommandsMutex.Wait();
                    try
                    {
                        _pendingCommandQueue = null;
                    }
                    finally
                    {
                        _pendingCommandsMutex.Release();
                    }

                    Dispatcher.Invoke(() =>
                    {
                        Title = Settings.Default.Title + " : Ready";
                        UpdateDisplayedMessages();
                        UpdateDisplayedReward();
                    });

                    _resetVerb = null;

                    var keys = _continuousCommandState.Keys.ToList();
                    foreach (var verb in keys)
                    {
                        _continuousCommandState[verb] = 0;
                    }

                    keys = _discreteCommandState.Keys.ToList();
                    foreach (var verb in keys)
                    {
                        _discreteCommandState[verb] = false;
                    }

                    if (worldState.errors.Any())
                    {
                        StringBuilder errors = new StringBuilder();
                        foreach (TimestampedString error in worldState.errors)
                        {
                            errors.AppendLine(error.text);
                        }

                        MessageBox.Show(errors.ToString(), "Error during mission initialization", MessageBoxButton.OK, MessageBoxImage.Error);
                        return;
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Error during mission", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }
                finally
                {
                    _isInSession = false;
                }
            }
        }
예제 #18
0
 /// <summary>
 /// Aborts the module for the given host.
 /// </summary>
 /// <param name="host">The host.</param>
 public void Abort(AgentHost host)
 {
 }
예제 #19
0
        /// <summary>
        /// Check the previous value for the command verb and only send a message if it has changed.
        /// </summary>
        /// <param name="agentHost">The agent host</param>
        /// <param name="verb">The verb to check</param>
        /// <param name="newValue">The measured value from the gamepad</param>
        private void CheckAndSend(AgentHost agentHost, string verb, float newValue)
        {
            switch (verb)
            {
                case "move":
                    if (!Settings.Default.IsMoveEnabled)
                    {
                        return;
                    }

                    break;

                case "strafe":
                    if (!Settings.Default.IsStrafeEnabled)
                    {
                        return;
                    }

                    break;

                case "pitch":
                    if (!Settings.Default.IsPitchEnabled)
                    {
                        return;
                    }

                    break;

                case "turn":
                    if (!Settings.Default.IsTurnEnabled)
                    {
                        return;
                    }

                    break;

                case "jump":
                    if (!Settings.Default.IsJumpEnabled)
                    {
                        return;
                    }

                    break;

                case "crouch":
                    if (!Settings.Default.IsCrouchEnabled)
                    {
                        return;
                    }

                    break;

                case "attack":
                    if (!Settings.Default.IsAttackEnabled)
                    {
                        return;
                    }

                    break;

                case "use":
                    if (!Settings.Default.IsUseEnabled)
                    {
                        return;
                    }

                    break;

                case "movenorth":
                    if (!Settings.Default.IsNorthEnabled)
                    {
                        return;
                    }

                    break;

                case "moveeast":
                    if (!Settings.Default.IsEastEnabled)
                    {
                        return;
                    }

                    break;

                case "movesouth":
                    if (!Settings.Default.IsSouthEnabled)
                    {
                        return;
                    }

                    break;

                case "movewest":
                    if (!Settings.Default.IsWestEnabled)
                    {
                        return;
                    }

                    break;
            }

            try {
                if (Settings.Default.StickyKeys && !string.IsNullOrEmpty(_resetVerb))
                {
                    string command = string.Format("{0} {1}", _resetVerb, 0);
                    addCommandToQueue(command);
                    agentHost.sendCommand(command);
                    _continuousCommandState[verb] = 0;
                }

                _resetVerb = verb;

                if (_continuousCommandState.ContainsKey(verb))
                {
                    float currentValue = _continuousCommandState[verb];
                    if (newValue != currentValue)
                    {
                        string command = string.Format("{0} {1}", verb, newValue);
                        addCommandToQueue(command);
                        agentHost.sendCommand(command);
                        _continuousCommandState[verb] = newValue;
                    }
                }
                else if(_discreteCommandState.ContainsKey(verb))
                {
                    if (newValue > 0)
                    {
                        if (!_discreteCommandState[verb])
                        {
                            _discreteCommandState[verb] = true;
                            string command = string.Format("{0} 1", verb, newValue);
                            addCommandToQueue(command);
                            agentHost.sendCommand(command);
                        }
                    }
                    else
                    {
                        _discreteCommandState[verb] = false;
                    }
                }
            }
            catch
            {                
            }
        }
예제 #20
0
    public static void Main()
    {
        AgentHost agentHost = new AgentHost();

        try
        {
            agentHost.parse(new StringVector(Environment.GetCommandLineArgs()));
        }
        catch (Exception ex)
        {
            Console.Error.WriteLine("ERROR: {0}", ex.Message);
            Console.Error.WriteLine(agentHost.getUsage());
            Environment.Exit(1);
        }
        if (agentHost.receivedArgument("help"))
        {
            Console.Error.WriteLine(agentHost.getUsage());
            Environment.Exit(0);
        }

        MissionSpec mission = new MissionSpec();

        mission.timeLimitInSeconds(10);
        mission.requestVideo(320, 240);
        mission.rewardForReachingPosition(19.5f, 0.0f, 19.5f, 100.0f, 1.1f);

        MissionRecordSpec missionRecord = new MissionRecordSpec("./saved_data.tgz");

        missionRecord.recordCommands();
        missionRecord.recordMP4(20, 400000);
        missionRecord.recordRewards();
        missionRecord.recordObservations();

        try
        {
            agentHost.startMission(mission, missionRecord);
        }
        catch (MissionException ex)
        {
            // Using catch(Exception ex) would also work, but specifying MissionException allows
            // us to access the error code:
            Console.Error.WriteLine("Error starting mission: {0}", ex.Message);
            Console.Error.WriteLine("Error code: {0}", ex.getMissionErrorCode());
            // We can do more specific error handling using this code, eg:
            if (ex.getMissionErrorCode() == MissionException.MissionErrorCode.MISSION_INSUFFICIENT_CLIENTS_AVAILABLE)
            {
                Console.Error.WriteLine("Have you started a Minecraft client?");
            }
            Environment.Exit(1);
        }

        WorldState worldState;

        Console.WriteLine("Waiting for the mission to start");
        do
        {
            Console.Write(".");
            Thread.Sleep(100);
            worldState = agentHost.getWorldState();

            foreach (TimestampedString error in worldState.errors)
            {
                Console.Error.WriteLine("Error: {0}", error.text);
            }
        }while (!worldState.has_mission_begun);

        Console.WriteLine();

        Random rand = new Random();

        // main loop:
        do
        {
            agentHost.sendCommand("move 1");
            agentHost.sendCommand(string.Format("turn {0}", rand.NextDouble()));
            Thread.Sleep(500);
            worldState = agentHost.getWorldState();
            Console.WriteLine(
                "video,observations,rewards received: {0}, {1}, {2}",
                worldState.number_of_video_frames_since_last_state,
                worldState.number_of_observations_since_last_state,
                worldState.number_of_rewards_since_last_state);
            foreach (TimestampedReward reward in worldState.rewards)
            {
                Console.Error.WriteLine("Summed reward: {0}", reward.getValue());
            }
            foreach (TimestampedString error in worldState.errors)
            {
                Console.Error.WriteLine("Error: {0}", error.text);
            }
        }while (worldState.is_mission_running);

        Console.WriteLine("Mission has stopped.");
    }
예제 #21
0
    public static void Main()
    {
        for (int run = 0; run < 1; run++)
        {
            Console.WriteLine("Run #" + run);

            AgentHost agentHost = new AgentHost();
            try
            {
                agentHost.parse(new StringVector(Environment.GetCommandLineArgs()));
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine("ERROR: {0}", ex.Message);
                Console.Error.WriteLine(agentHost.getUsage());
                Environment.Exit(1);
            }
            if (agentHost.receivedArgument("help"))
            {
                Console.Error.WriteLine(agentHost.getUsage());
                Environment.Exit(0);
            }

            bool   pretty_print = false;
            string xml          = System.IO.File.ReadAllText(System.IO.Directory.GetCurrentDirectory() + "/mission.xml");

            MissionSpec mission  = null;
            bool        validate = true;
            mission = new MissionSpec(xml, validate);

            Random rand2 = new Random();

            for (int i = 0; i < rand2.Next(5, 15); i++)
            {
                mission.drawBlock(rand2.Next(1, 10), 46, rand2.Next(1, 10), "red_flower");
            }

            MissionRecordSpec missionRecord = new MissionRecordSpec("./saved_data.tgz");
            missionRecord.recordCommands();
            missionRecord.recordMP4(20, 400000);
            missionRecord.recordRewards();
            missionRecord.recordObservations();

            bool connected = false;
            int  attempts  = 0;
            while (!connected)
            {
                try
                {
                    attempts += 1;
                    agentHost.startMission(mission, missionRecord);
                    connected = true;
                }
                catch (MissionException ex)
                {
                    // Using catch(Exception ex) would also work, but specifying MissionException allows
                    // us to access the error code:
                    Console.Error.WriteLine("Error starting mission: {0}", ex.Message);
                    Console.Error.WriteLine("Error code: {0}", ex.getMissionErrorCode());
                    // We can do more specific error handling using this code, eg:
                    if (ex.getMissionErrorCode() == MissionException.MissionErrorCode.MISSION_INSUFFICIENT_CLIENTS_AVAILABLE)
                    {
                        Console.Error.WriteLine("Have you started a Minecraft client?");
                    }
                    if (attempts >= 3)   // Give up after three goes.
                    {
                        Environment.Exit(1);
                    }
                    Thread.Sleep(1000); // Wait a second and try again.
                }
            }
            WorldState worldState;

            Console.WriteLine("Waiting for the mission to start");
            do
            {
                Console.Write(".");
                Thread.Sleep(100);
                worldState = agentHost.getWorldState();

                foreach (TimestampedString error in worldState.errors)
                {
                    Console.Error.WriteLine("Error: {0}", error.text);
                }
            }while (!worldState.has_mission_begun);

            Console.WriteLine();

            Random rand = new Random();

            Queue <JToken> apples   = new Queue <JToken>();
            bool           observed = false;

            // main loop:
            do
            {
                //agentHost.sendCommand(string.Format("turn {0}", rand.NextDouble()));
                Thread.Sleep(500);
                worldState = agentHost.getWorldState();
                //agentHost.sendCommand("pitch 1");
                if (!observed)
                {
                    JObject obj = JObject.Parse(worldState.observations[0].text);

                    JToken entities;

                    if (obj.TryGetValue("close_entities", out entities))
                    {
                        JArray entitiesArr = (JArray)entities;

                        // The first element is always our agent ? - maybe
                        for (int i = 1; i < entitiesArr.Count; i++)
                        {
                            Console.WriteLine(entitiesArr[i]["name"]);
                            if ((string)entitiesArr[i]["name"] == "red_flower")
                            {
                                apples.Enqueue(entitiesArr[i]);
                            }
                        }

                        observed = true;
                    }
                }
                else
                {
                    // Start trying to get to the apples

                    if (apples.Count == 0)
                    {
                        Console.WriteLine("Mission acomplished.");
                        return;
                    }

                    bool popped = false;
                    while (!popped)
                    {
                        var obs = agentHost.getWorldState().observations;
                        if (obs.Count > 0)
                        {
                            // Get our position
                            JObject obj = JObject.Parse(obs[0].text);

                            JToken entities;

                            if (obj.TryGetValue("close_entities", out entities))
                            {
                                JArray entitiesArr = (JArray)entities;

                                // The first element is always our agent ? - maybe
                                Console.WriteLine(entitiesArr[0]);
                                int x = (int)entitiesArr[0]["x"];
                                int z = (int)entitiesArr[0]["z"];

                                int diffX = (int)apples.Peek()["x"] - x;
                                int diffZ = (int)apples.Peek()["z"] - z;

                                Console.WriteLine(diffX + "-" + diffZ);

                                if (diffZ > 0)
                                {
                                    agentHost.sendCommand("movesouth 1");
                                }
                                else if (diffZ < 0)
                                {
                                    agentHost.sendCommand("movenorth 1");
                                }
                                if (diffX > 0)
                                {
                                    agentHost.sendCommand("moveeast 1");
                                }
                                else if (diffX < 0)
                                {
                                    agentHost.sendCommand("movewest 1");
                                }

                                /* Console.WriteLine(entitiesArr[0]);
                                 * if (diffZ > 0)
                                 * {
                                 *   if((float)entitiesArr[0]["yaw"] > 180)
                                 *       agentHost.sendCommand("turn 180");
                                 *   agentHost.sendCommand("move 1");
                                 * }
                                 * else if (diffZ < 0)
                                 * {
                                 *   agentHost.sendCommand("turn 0");
                                 *   agentHost.sendCommand("move 1");
                                 * }
                                 * if (diffX > 0)
                                 * {
                                 *   agentHost.sendCommand("turn -90");
                                 *   agentHost.sendCommand("move 1");
                                 * }
                                 * else if (diffX < 0)
                                 * {
                                 *   agentHost.sendCommand("turn 90");
                                 *   agentHost.sendCommand("move 1");
                                 * }*/

                                if (diffZ == 0 && diffX == 0)
                                {
                                    Console.WriteLine("Dequeuing");
                                    agentHost.sendCommand("move 0");
                                    apples.Dequeue();

                                    // break block
                                    agentHost.sendCommand("pitch 1");
                                    agentHost.sendCommand("attack 1");
                                    agentHost.sendCommand("jump 1");
                                    Thread.Sleep(6000);
                                    break;
                                }
                            }
                        }
                        Thread.Sleep(500);
                        //  agentHost.sendCommand("movenorth 1");
                    }
                }


                Console.WriteLine(
                    "video,observations,rewards received: {0}, {1}, {2}",
                    worldState.number_of_video_frames_since_last_state,
                    worldState.number_of_observations_since_last_state,
                    worldState.number_of_rewards_since_last_state);
                foreach (TimestampedReward reward in worldState.rewards)
                {
                    Console.Error.WriteLine("Summed reward: {0}", reward.getValue());
                }

                foreach (TimestampedString error in worldState.errors)
                {
                    Console.Error.WriteLine("Error: {0}", error.text);
                }
            }while (worldState.is_mission_running);

            Console.WriteLine("Mission has stopped.");
        }
    }
예제 #22
0
 /// <summary>
 /// Stops the module for the given host.
 /// </summary>
 /// <param name="host">The host.</param>
 public void Stop(AgentHost host)
 {
 }
예제 #23
0
        static void Main()
        {
            string missionXML = @"<?xml version=""1.0"" encoding=""UTF-8"" standalone=""no"" ?>
            <Mission xmlns=""http://ProjectMalmo.microsoft.com"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
            
              <About>
                <Summary>Hello world!</Summary>
              </About>
              
            <ServerSection>
              <ServerInitialConditions>
                <Time>
                    <StartTime>1000</StartTime>
                    <AllowPassageOfTime>false</AllowPassageOfTime>
                </Time>
                <Weather>clear</Weather>
              </ServerInitialConditions>
              <ServerHandlers>
                  <FlatWorldGenerator generatorString=""3;7,44*49,73,35:1,159:4,95:13,35:13,159:11,95:10,159:14,159:6,35:6,95:6;12;""/>
                  <DrawingDecorator>
                    <DrawSphere x=""-27"" y=""70"" z=""0"" radius=""30"" type=""air""/>" + Menger(-40, 40, -13, 27, "stone", "smooth_granite", "air") + @"
                    <DrawBlock x=""-27"" y=""39"" z=""0"" type=""diamond_block""/>
                  </DrawingDecorator>
                  <ServerQuitFromTimeUp timeLimitMs=""30000""/>
                  <ServerQuitWhenAnyAgentFinishes/>
                </ServerHandlers>
              </ServerSection>
              
              <AgentSection mode=""Survival"">
                <Name>MalmoTutorialBot</Name>
                <AgentStart>
                    <Placement x=""0.5"" y=""56.0"" z=""0.5"" yaw=""90""/>
                    <Inventory>
                        <InventoryItem slot=""8"" type=""diamond_pickaxe""/>
                    </Inventory>
                </AgentStart>
                <AgentHandlers>
                  <ObservationFromFullStats/>
                  <ContinuousMovementCommands turnSpeedDegs=""180""/>
                  <InventoryCommands/>
                  <AgentQuitFromReachingPosition>
                    <Marker x=""-26.5"" y=""40"" z=""0.5"" tolerance=""0.5"" description=""Goal_found""/>
                  </AgentQuitFromReachingPosition>
                </AgentHandlers>
              </AgentSection>
            </Mission>";

            // Create default Malmo objects:

            AgentHost agent_host = new AgentHost();

            try
            {
                agent_host.parse(new StringVector(Environment.GetCommandLineArgs()));
            }
            catch (Exception e)
            {
                Console.WriteLine("Error:{0}", e.Message);
                Console.WriteLine(agent_host.getUsage());
                Environment.Exit(1);
            }
            if (agent_host.receivedArgument("help"))
            {
                Console.WriteLine(agent_host.getUsage());
                Environment.Exit(0);
            }

            MissionSpec       my_mission        = new MissionSpec(missionXML, true);
            MissionRecordSpec my_mission_record = new MissionRecordSpec();

            // Attempt to start a mission:
            int max_retries = 3;

            for (int retry = 0; retry < max_retries; retry++)
            {
                try
                {
                    agent_host.startMission(my_mission, my_mission_record);
                    break;
                }
                catch (Exception e)
                {
                    if (retry == max_retries)
                    {
                        Console.WriteLine("Error starting mission:{0}", e.Message);
                        Environment.Exit(1);
                    }
                    else
                    {
                        Thread.Sleep(2000);
                    }
                }
            }

            // Loop until mission starts:
            Console.WriteLine("Waiting for the mission to start ");
            WorldState world_state = agent_host.getWorldState();

            while (!world_state.has_mission_begun)
            {
                Console.Write(".");
                Thread.Sleep(100);
                world_state = agent_host.getWorldState();
                foreach (TimestampedString error in world_state.errors)
                {
                    Console.WriteLine("Error:{0}", error.text);
                }
            }

            Console.WriteLine();
            Console.WriteLine("Mission running ");

            agent_host.sendCommand("hotbar.9 1");
            agent_host.sendCommand("hotbar.9 0");

            agent_host.sendCommand("pitch 0.2");
            Thread.Sleep(1000);
            agent_host.sendCommand("pitch 0");
            agent_host.sendCommand("move 1");
            agent_host.sendCommand("attack 1");

            // Loop until mission ends:
            while (world_state.is_mission_running)
            {
                Console.Write(".");
                Thread.Sleep(100);
                world_state = agent_host.getWorldState();
                foreach (TimestampedString error in world_state.errors)
                {
                    Console.WriteLine("Error:{0}", error.text);
                }
            }

            Console.WriteLine();
            Console.WriteLine("Mission ended");
            // Mission has ended.
        }
예제 #24
0
파일: Program.cs 프로젝트: CubedCode/malmo
    public static void Main()
    {
        AgentHost agentHost = new AgentHost();
        try
        {
            agentHost.parse( new StringVector( Environment.GetCommandLineArgs() ) );
        }
        catch( Exception ex )
        {
            Console.Error.WriteLine("ERROR: {0}", ex.Message);
            Console.Error.WriteLine(agentHost.getUsage());
            Environment.Exit(1);
        }
        if( agentHost.receivedArgument("help") )
        {
            Console.Error.WriteLine(agentHost.getUsage());
            Environment.Exit(0);
        }

        MissionSpec mission = new MissionSpec();
        mission.timeLimitInSeconds(10);
        mission.requestVideo( 320, 240 );
        mission.rewardForReachingPosition(19.5f,0.0f,19.5f,100.0f,1.1f);

        MissionRecordSpec missionRecord = new MissionRecordSpec("./saved_data.tgz");
        missionRecord.recordCommands();
        missionRecord.recordMP4(20, 400000);
        missionRecord.recordRewards();
        missionRecord.recordObservations();

        try
        {
            agentHost.startMission(mission, missionRecord);
        }
        catch (Exception ex)
        {
            Console.Error.WriteLine("Error starting mission: {0}", ex.Message);
            Environment.Exit(1);
        }

        WorldState worldState;

        Console.WriteLine("Waiting for the mission to start");
        do
        {
            Console.Write(".");
            Thread.Sleep(100);
            worldState = agentHost.getWorldState();

            foreach (TimestampedString error in worldState.errors) Console.Error.WriteLine("Error: {0}", error.text);
        }
        while (!worldState.is_mission_running);

        Console.WriteLine();

        Random rand = new Random();
        // main loop:
        do
        {
            agentHost.sendCommand("move 1");
            agentHost.sendCommand(string.Format("turn {0}", rand.NextDouble()));
            Thread.Sleep(500);
            worldState = agentHost.getWorldState();
            Console.WriteLine(
                "video,observations,rewards received: {0}, {1}, {2}",
                worldState.number_of_video_frames_since_last_state,
                worldState.number_of_observations_since_last_state,
                worldState.number_of_rewards_since_last_state);
            foreach (TimestampedReward reward in worldState.rewards) Console.Error.WriteLine("Summed reward: {0}", reward.getValue());
            foreach (TimestampedString error in worldState.errors) Console.Error.WriteLine("Error: {0}", error.text);
        }
        while (worldState.is_mission_running);

        Console.WriteLine("Mission has stopped.");
    }
예제 #25
0
        public void RunMalmo(IBlackBox brain)
        {
            agentHost  = new AgentHost();
            neatPlayer = new NeatAgentController(brain, agentHost);

            InitializeMission();

            CreateWorld();
            TryStartMission();

            ConsoleOutputWhileMissionLoads();

            //set agent stuck bool
            neatPlayer.AgentNotStuck = true;

            Console.WriteLine("Mission has started!");

            var  agentPosition    = new AgentPosition();
            bool gotStartPosition = false;

            Thread.Sleep(500);

            while (worldState.is_mission_running)
            {
                //Early termination of mission in case no action was performed (agent is stuck)
                if (!neatPlayer.AgentNotStuck)
                {
                    //Ensures that the video is at least 2 seconds long, showing the users that no action actually was performed
                    Thread.Sleep(2000);

                    neatPlayer.AgentHelper.endMission();
                    break;
                }

                //Give observations to agent and let agent perform actions according to these
                worldState = agentHost.getWorldState();
                if (worldState.observations.Count == 0)
                {
                    continue;
                }
                neatPlayer.AgentHelper.ConstantObservations = worldState.observations;
                neatPlayer.PerformAction();

                //Get end position and fitness grid after every performed action by the agent
                if (worldState.observations != null)
                {
                    var observations = JObject.Parse(worldState.observations[0].text);

                    if (!gotStartPosition)
                    {
                        agentPosition.initialX = (double)observations.GetValue("XPos");
                        agentPosition.initialY = (double)observations.GetValue("YPos");
                        agentPosition.initialZ = (double)observations.GetValue("ZPos");

                        gotStartPosition = true;
                    }

                    agentPosition.currentX = (double)observations.GetValue("XPos");
                    agentPosition.currentY = (double)observations.GetValue("YPos");
                    agentPosition.currentZ = (double)observations.GetValue("ZPos");
                }
            }

            neatPlayer.AgentHelper.AgentPosition = agentPosition;

            Thread.Sleep(2000);
            agentHost.Dispose();

            Console.WriteLine("Mission has ended!");
        }
예제 #26
0
 public void Initialize()
 {
     //MissionSpec mission = new MissionSpec();
     agentHost = new AgentHost();
 }
예제 #27
0
        public static void Execute(AgentHost agentHost, ListBox lstMessage, Panel pnl3x3, Panel pnlDiagData, PictureBox pictureBoxMineCraft, CheckBox chkFullDebug)
        {
            WorldState           worldState;
            JavaScriptSerializer json_serializer = new JavaScriptSerializer();

            agentHost.setObservationsPolicy(ObservationsPolicy.LATEST_OBSERVATION_ONLY);
            agentHost.setVideoPolicy(VideoPolicy.LATEST_FRAME_ONLY);

            string strMoveCommand = "";

            // main loop:
            do
            {
                // Get Worldstate
                worldState = agentHost.getWorldState();
                Thread.Sleep(500);

                // Make an Observation
                Observation objObservation = RunMission.LogMission(worldState, lstMessage, pnl3x3, pnlDiagData, chkFullDebug);

                // Only proceed if we are able to get back an Observation
                if (objObservation.floor3x3 != null)
                {
                    // Check for "lava" anywhere around us
                    if (!
                        (
                            (objObservation.floor3x3[1].ToString() == "lava") ||
                            (objObservation.floor3x3[4].ToString() == "lava") ||
                            (objObservation.floor3x3[7].ToString() == "lava")
                        ))
                    {
                        // There is no Lava -- keep moving forward
                        strMoveCommand = String.Format("{0} {1}", "move", 1);
                        agentHost.sendCommand(strMoveCommand);
                        lstMessage.Items.Insert(0, strMoveCommand);
                    }
                    else
                    {
                        // There is lava nearby
                        for (int i = 0; i < 8; i++)
                        {
                            if (objObservation.floor3x3[i].ToString() == "lava")
                            {
                                lstMessage.Items.Insert(0, String.Format("Lava found at block: {0}", i));
                            }
                        }

                        // Turn and move
                        strMoveCommand = String.Format("{0} {1}", "turn", 1);
                        agentHost.sendCommand(strMoveCommand);
                        lstMessage.Items.Insert(0, strMoveCommand);

                        strMoveCommand = String.Format("{0} {1}", "move", 1);
                        agentHost.sendCommand(strMoveCommand);
                        lstMessage.Items.Insert(0, strMoveCommand);
                    }
                }

                if (worldState.is_mission_running && worldState.video_frames.Count > 0)
                {
                    // Converts the Malmo ByteVector to a Bitmap and display in pictureBoxMineCraft
                    pictureBoxMineCraft.Image = ImageConvert.GetImageFromByteArray(worldState.video_frames[0].pixels);
                    pictureBoxMineCraft.Invalidate();
                    pictureBoxMineCraft.Refresh();
                }
            }while (worldState.is_mission_running);

            lstMessage.Items.Insert(0, "Mission has stopped.");
        }
예제 #28
0
        private void CheckGamepad(AgentHost agentHost)
        {
            if (!_gamepad.IsConnected)
            {
                return;
            }

            _gamepad.Update();

            CheckAndSend(agentHost, "move", _gamepad.LeftStick.Position.Y);
            CheckAndSend(agentHost, "strafe", _gamepad.LeftStick.Position.X);
            CheckAndSend(agentHost, "pitch", -_gamepad.RightStick.Position.Y);
            CheckAndSend(agentHost, "turn", _gamepad.RightStick.Position.X);
            CheckAndSend(agentHost, "crouch", _gamepad.X ? 1 : 0);
            CheckAndSend(agentHost, "jump", _gamepad.A ? 1 : 0);
            CheckAndSend(agentHost, "attack", _gamepad.RightTrigger ? 1 : 0);
            CheckAndSend(agentHost, "use", _gamepad.LeftTrigger ? 1 : 0);
            CheckAndSend(agentHost, "movesouth", _gamepad.DPad.Up ? 1 : 0);
            CheckAndSend(agentHost, "movenorth", _gamepad.DPad.Down ? 1 : 0);
            CheckAndSend(agentHost, "movewest", _gamepad.DPad.Right ? 1 : 0);
            CheckAndSend(agentHost, "moveeast", _gamepad.DPad.Left ? 1 : 0);            
        }
예제 #29
0
        public static void Main()
        {
            AgentHost agentHost = new AgentHost();

            try
            {
                agentHost.parse(new StringVector(Environment.GetCommandLineArgs()));
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine("ERROR: {0}", ex.Message);
                Console.Error.WriteLine(agentHost.getUsage());
                Environment.Exit(1);
            }
            if (agentHost.receivedArgument("help"))
            {
                Console.Error.WriteLine(agentHost.getUsage());
                Environment.Exit(0);
            }
            MissionSpec       my_mission        = new MissionSpec();
            MissionRecordSpec my_mission_record = new MissionRecordSpec("./saved_data.tgz");

            // Attempt to start a mission:
            int max_retries = 3;

            for (int retry = 0; retry < max_retries; retry++)
            {
                try
                {
                    agentHost.startMission(my_mission, my_mission_record);
                    break;
                }
                catch (MissionException ex)
                {
                    if (retry == max_retries - 1)
                    {
                        Console.WriteLine("Error starting mission:{0}", ex.Message);
                        Environment.Exit(1);
                    }
                    else
                    {
                        Thread.Sleep(2000);
                    }
                }
            }
            // Loop until mission starts:
            Console.WriteLine("Waiting for the mission to start ");
            WorldState world_state;

            do
            {
                Console.Write(".");
                Thread.Sleep(100);
                world_state = agentHost.getWorldState();
                foreach (TimestampedString error in world_state.errors)
                {
                    Console.Error.WriteLine("Error:{0}", error.text);
                }
            }while (!world_state.has_mission_begun);

            Console.WriteLine();
            Console.WriteLine("Mission running ");
            Console.WriteLine(my_mission.getAsXML(true));

            // Enter your commands here
            // agentHost.sendCommand("turn -0.5");
            // agentHost.sendCommand("move 1");
            // agentHost.sendCommand("jump 1");

            // Loop until mission ends:
            while (world_state.is_mission_running)
            {
                Console.Write(".");
                Thread.Sleep(100);
                world_state = agentHost.getWorldState();
                foreach (TimestampedString error in world_state.errors)
                {
                    Console.WriteLine("Error:{0}", error.text);
                }
            }
            Console.WriteLine();
            Console.WriteLine("Mission ended");
            // Mission has ended
        }
예제 #30
0
        private void runMission(MissionSpec mission)
        {
            string recordPath = "none";
            MissionRecordSpec missionRecord;
            if (string.IsNullOrEmpty(Settings.Default.OutputDir))
            {
                missionRecord = new MissionRecordSpec();
            }
            else
            {
                recordPath = Path.Combine(Settings.Default.OutputDir, Guid.NewGuid() + ".tar.gz");
                missionRecord = new MissionRecordSpec(recordPath);
                if (Settings.Default.RecordObservations)
                {
                    missionRecord.recordObservations();
                }

                if (Settings.Default.RecordRewards)
                {
                    missionRecord.recordRewards();
                }

                if (Settings.Default.RecordCommands)
                {
                    missionRecord.recordCommands();
                }

                if (Settings.Default.RecordMP4)
                {
                    missionRecord.recordMP4(Settings.Default.MP4FPS, (long)(Settings.Default.BitRate * 1024));
                }
            }

            using (AgentHost agentHost = new AgentHost())
            {
                ClientPool clientPool = new ClientPool();
                clientPool.add(new ClientInfo(Settings.Default.ClientIP, Settings.Default.ClientPort));

                try
                {
                    agentHost.startMission(mission, clientPool, missionRecord, 0, "hac");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Error Starting Mission", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }

                Dispatcher.Invoke(() =>
                {
                    Activate();
                    VideoImage.Focus();
                    startB.Content = "Set";
                    Title = Settings.Default.Title + " : Waiting for mission start";
                    if (_recordWindow != null && _recordWindow.IsVisible)
                    {
                        _recordWindow.RecordPath = recordPath;
                    }
                });

                _isInSession = true;
                try
                {
                    WorldState worldState;
                    // wait for mission to start
                    do
                    {
                        Thread.Sleep(100);
                        worldState = agentHost.getWorldState();

                        if (worldState.errors.Any())
                        {
                            StringBuilder errors = new StringBuilder();
                            foreach (TimestampedString error in worldState.errors)
                            {
                                errors.AppendLine(error.text);
                            }

                            MessageBox.Show(errors.ToString(), "Error during mission initialization", MessageBoxButton.OK, MessageBoxImage.Error);
                            return;
                        }
                    }
                    while (!worldState.is_mission_running && !_stopMission);

                    if (_stopMission)
                    {
                        return;
                    }

                    DateTime missionStartTime = DateTime.UtcNow;
                    _timeRemaining = _missionDuration;

                    Dispatcher.Invoke(() =>
                    {
                        startB.Content = "Go!";
                        Title = Settings.Default.Title + " : Recording";
                    });

                    // run mission
                    TimeSpan loopTime = TimeSpan.FromSeconds(1.0 / 20);

                    _pendingCommandsMutex.Wait();
                    try
                    {
                        _pendingCommandQueue = new Queue<Tuple<string, float>>();
                    }
                    finally
                    {
                        _pendingCommandsMutex.Release();
                    }

                    _pendingMessagesMutex.Wait();
                    try
                    {
                        _pendingMessages = new Queue<string>();
                    }
                    finally
                    {
                        _pendingMessagesMutex.Release();
                    }

                    bool failure = false;
                    Stopwatch loopTimer = new Stopwatch();
                    do
                    {
                        loopTimer.Reset();
                        loopTimer.Start();

                        worldState = agentHost.getWorldState();

                        TimestampedVideoFrame frame = worldState.video_frames.FirstOrDefault();

                        if (frame != null)
                        {
                            if (_missionDuration != TimeSpan.Zero)
                            {
                                TimeSpan elapsed = frame.timestamp - missionStartTime;
                                _timeRemaining = _missionDuration - elapsed;
                            }

                            _pixelsMutex.Wait();
                            try
                            {
                                if (_pixels == null || _pixels.Length != frame.pixels.Count)
                                {
                                    _pixels = new byte[frame.pixels.Count];
                                    Dispatcher.Invoke(() =>
                                    {
                                        if (_bitmap.Width != frame.width || _bitmap.Height != frame.height)
                                        {
                                            _bitmap = new WriteableBitmap(frame.width, frame.height, 72, 72, PixelFormats.Rgb24, null);
                                            VideoImage.Source = _bitmap;
                                            if (_recordWindow != null && _recordWindow.IsVisible)
                                            {
                                                _recordWindow.FrameSource = _bitmap;
                                            }
                                        }
                                    });
                                }

                                frame.pixels.CopyTo(_pixels);
                            }
                            finally
                            {
                                _pixelsMutex.Release();
                            }
                        }

                        _pendingMessagesMutex.Wait();
                        try
                        {
                            foreach (var reward in worldState.rewards)
                            {
                                _score += reward.getValue();
                                if (reward.getValue() < 0)
                                {
                                    failure = true;
                                }

                                _pendingMessages.Enqueue(string.Format("{0}> score {1}", reward.timestamp.ToString("hh:mm:ss.fff"), reward.getValue()));
                            }

                            _score = Math.Max(_score, 0);
                            _score = Math.Min(_score, 99999);

                            foreach (var observation in worldState.observations)
                            {
                                int posStart = observation.text.IndexOf("\"XPos\"");
                                if (posStart < 0)
                                {
                                    continue;
                                }

                                int posEnd = observation.text.IndexOf("\"ZPos\"");
                                posEnd = observation.text.IndexOf(',', posEnd);

                                string posSegment = observation.text.Substring(posStart, posEnd - posStart);
                                string[] pos = posSegment.Split(',');
                                float x = Convert.ToSingle(pos[0].Split(':')[1]);
                                float y = Convert.ToSingle(pos[1].Split(':')[1]);
                                float z = Convert.ToSingle(pos[2].Split(':')[1]);

                                _pendingMessages.Enqueue(string.Format("{0}> (x={1:0.00}, y={2:0.00}, z={3:0.00})", observation.timestamp.ToString("hh:mm:ss.fff"), x, y, z));
                            }
                        }
                        finally
                        {
                            _pendingMessagesMutex.Release();
                        }

                        CheckGamepad(agentHost);

                        _pendingCommandsMutex.Wait();
                        try
                        {
                            while (_pendingCommandQueue.Any())
                            {
                                var command = _pendingCommandQueue.Dequeue();
                                CheckAndSend(agentHost, command.Item1, command.Item2);
                            }
                        }
                        finally
                        {
                            _pendingCommandsMutex.Release();
                        }

                        loopTimer.Stop();
                        if (loopTimer.Elapsed < loopTime)
                        {
                            Thread.Sleep(loopTime - loopTimer.Elapsed);
                        }

                    } while (worldState.is_mission_running && !_stopMission);

                    if (_stopMission)
                    {
                        return;
                    }

                    if (!failure)
                    {
                        _score += _timeRemaining.TotalSeconds * 100;
                    }

                    _missionSuccess = !failure;

                    _pendingCommandsMutex.Wait();
                    try
                    {
                        _pendingCommandQueue = null;
                    }
                    finally
                    {
                        _pendingCommandsMutex.Release();
                    }

                    Dispatcher.Invoke(() =>
                    {
                        Title = Settings.Default.Title + " : Ready";
                        UpdateDisplayedMessages();
                        UpdateDisplayedReward();
                    });

                    _resetVerb = null;

                    var keys = _continuousCommandState.Keys.ToList();
                    foreach (var verb in keys)
                    {
                        _continuousCommandState[verb] = 0;
                    }

                    keys = _discreteCommandState.Keys.ToList();
                    foreach (var verb in keys)
                    {
                        _discreteCommandState[verb] = false;
                    }

                    if (worldState.errors.Any())
                    {
                        StringBuilder errors = new StringBuilder();
                        foreach (TimestampedString error in worldState.errors)
                        {
                            errors.AppendLine(error.text);
                        }

                        MessageBox.Show(errors.ToString(), "Error during mission initialization", MessageBoxButton.OK, MessageBoxImage.Error);
                        return;
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Error during mission", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }
                finally
                {
                    _isInSession = false;
                }
            }
        }    
예제 #31
0
        /// <summary>
        /// Check the previous value for the command verb and only send a message if it has changed.
        /// </summary>
        /// <param name="agentHost">The agent host</param>
        /// <param name="verb">The verb to check</param>
        /// <param name="newValue">The measured value from the gamepad</param>
        private void CheckAndSend(AgentHost agentHost, string verb, float newValue)
        {
            switch (verb)
            {
            case "move":
                if (!Settings.Default.IsMoveEnabled)
                {
                    return;
                }

                break;

            case "strafe":
                if (!Settings.Default.IsStrafeEnabled)
                {
                    return;
                }

                break;

            case "pitch":
                if (!Settings.Default.IsPitchEnabled)
                {
                    return;
                }

                break;

            case "turn":
                if (!Settings.Default.IsTurnEnabled)
                {
                    return;
                }

                break;

            case "jump":
                if (!Settings.Default.IsJumpEnabled)
                {
                    return;
                }

                break;

            case "crouch":
                if (!Settings.Default.IsCrouchEnabled)
                {
                    return;
                }

                break;

            case "attack":
                if (!Settings.Default.IsAttackEnabled)
                {
                    return;
                }

                break;

            case "use":
                if (!Settings.Default.IsUseEnabled)
                {
                    return;
                }

                break;

            case "movenorth":
                if (!Settings.Default.IsNorthEnabled)
                {
                    return;
                }

                break;

            case "moveeast":
                if (!Settings.Default.IsEastEnabled)
                {
                    return;
                }

                break;

            case "movesouth":
                if (!Settings.Default.IsSouthEnabled)
                {
                    return;
                }

                break;

            case "movewest":
                if (!Settings.Default.IsWestEnabled)
                {
                    return;
                }

                break;
            }

            try {
                if (Settings.Default.StickyKeys && !string.IsNullOrEmpty(_resetVerb))
                {
                    string command = string.Format("{0} {1}", _resetVerb, 0);
                    addCommandToQueue(command);
                    agentHost.sendCommand(command);
                    _continuousCommandState[verb] = 0;
                }

                _resetVerb = verb;

                if (_continuousCommandState.ContainsKey(verb))
                {
                    float currentValue = _continuousCommandState[verb];
                    if (newValue != currentValue)
                    {
                        string command = string.Format("{0} {1}", verb, newValue);
                        addCommandToQueue(command);
                        agentHost.sendCommand(command);
                        _continuousCommandState[verb] = newValue;
                    }
                }
                else if (_discreteCommandState.ContainsKey(verb))
                {
                    if (newValue > 0)
                    {
                        if (!_discreteCommandState[verb])
                        {
                            _discreteCommandState[verb] = true;
                            string command = string.Format("{0} 1", verb, newValue);
                            addCommandToQueue(command);
                            agentHost.sendCommand(command);
                        }
                    }
                    else
                    {
                        _discreteCommandState[verb] = false;
                    }
                }
            }
            catch
            {
            }
        }
예제 #32
0
파일: Main.cs 프로젝트: vadimas/events
        private void btnRun_Click(object sender, EventArgs e)
        {
            AgentHost agentHost = new AgentHost();

            try
            {
                agentHost.parse(new StringVector(Environment.GetCommandLineArgs()));
            }
            catch (Exception ex)
            {
                lstMessage.Items.Insert(0, String.Format("ERROR: {0}", ex.Message));
                lstMessage.Items.Insert(0, agentHost.getUsage());
                Environment.Exit(1);
            }
            if (agentHost.receivedArgument("help"))
            {
                lstMessage.Items.Insert(0, agentHost.getUsage());
                Environment.Exit(0);
            }

            // Clear debug box
            lstMessage.Items.Clear();

            // Load the .xml mission file and
            // Run the Mission
            switch (cbSelect.SelectedItem.ToString())
            {
            case "DefaultMission":
                XMLFile = $"{strBaseLocation}DefaultMission.xml";
                LoadMinecraft(agentHost, XMLFile, lstMessage);
                DefaultMission.Execute(agentHost, lstMessage, pnl3x3, pnlDiagData, pictureBoxMineCraft, chkFullDebug);
                break;

            case "AvoidTheLava":
                XMLFile = $"{strBaseLocation}AvoidTheLava.xml";
                LoadMinecraft(agentHost, XMLFile, lstMessage);
                AvoidTheLava.Execute(agentHost, lstMessage, pnl3x3, pnlDiagData, pictureBoxMineCraft, chkFullDebug);
                break;

            case "Tutorial4":
                XMLFile = $"{strBaseLocation}Tutorial4.xml";
                LoadMinecraft(agentHost, XMLFile, lstMessage);
                Tutorial4.Execute(agentHost, lstMessage, pnl3x3, pnlDiagData, pictureBoxMineCraft, chkFullDebug);
                break;

            case "Maze_2":
                XMLFile = $"{strBaseLocation}maze_2.xml";
                LoadMinecraft(agentHost, XMLFile, lstMessage);
                maze2.Execute(agentHost, lstMessage, pnl3x3, pnlDiagData, pictureBoxMineCraft, chkFullDebug);
                break;

            case "ObserveExampleOne":
                XMLFile = $"{strBaseLocation}ObserveExampleOne.xml";
                LoadMinecraft(agentHost, XMLFile, lstMessage);
                ObserveExampleOne.Execute(agentHost, lstMessage, pnl3x3, pnlDiagData, pictureBoxMineCraft, chkFullDebug);
                break;

            case "TryToNavigateByVideo":
                XMLFile = $"{strBaseLocation}TryToNavigateByVideo.xml";
                LoadMinecraft(agentHost, XMLFile, lstMessage);
                TryToNavigateByVideo.Execute(agentHost, lstMessage, pnl3x3, pnlDiagData, pictureBoxMineCraft, chkFullDebug);
                break;

            default:
                XMLFile = $"{strBaseLocation}DefaultMission.xml";
                LoadMinecraft(agentHost, XMLFile, lstMessage);
                DefaultMission.Execute(agentHost, lstMessage, pnl3x3, pnlDiagData, pictureBoxMineCraft, chkFullDebug);
                break;
            }
        }
예제 #33
0
        internal void create_agent()
        {
            var host = new AgentHost();

            this.agents_.Add(host);
        }
예제 #34
0
        static void Main()
        {
            string missionXML = @"<?xml version=""1.0"" encoding=""UTF-8"" standalone=""no"" ?>
            <Mission xmlns=""http://ProjectMalmo.microsoft.com"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
            
              <About>
                <Summary>Hello world!</Summary>
              </About>
              
            <ServerSection>
              <ServerInitialConditions>
                <Time>
                    <StartTime>1000</StartTime>
                    <AllowPassageOfTime>false</AllowPassageOfTime>
                </Time>
                <Weather>clear</Weather>
              </ServerInitialConditions>
              <ServerHandlers>
                  <FlatWorldGenerator generatorString=""3;7,44*49,73,35:1,159:4,95:13,35:13,159:11,95:10,159:14,159:6,35:6,95:6;12;""/>
                  <DrawingDecorator>
                    <DrawSphere x=""-27"" y=""70"" z=""0"" radius=""30"" type=""air""/>" + Menger(-40, 40, -13, 27, "stone", "smooth_granite", "air") + @"
                    <DrawCuboid x1=""-25"" y1=""39"" z1=""-2"" x2=""-29"" y2=""39"" z2=""2"" type=""lava""/>
                    <DrawCuboid x1=""-26"" y1=""39"" z1=""-1"" x2=""-28"" y2=""39"" z2=""1"" type=""obsidian""/>
                    <DrawBlock x=""-27"" y=""39"" z=""0"" type=""diamond_block""/>
                  </DrawingDecorator>
                  <ServerQuitFromTimeUp timeLimitMs=""30000""/>
                  <ServerQuitWhenAnyAgentFinishes/>
                </ServerHandlers>
              </ServerSection>
              
              <AgentSection mode=""Survival"">
                <Name>MalmoTutorialBot</Name>
                <AgentStart>
                    <Placement x=""0.5"" y=""56.0"" z=""0.5"" yaw=""90""/>
                    <Inventory>
                        <InventoryItem slot=""8"" type=""diamond_pickaxe""/>
                    </Inventory>
                </AgentStart>
                <AgentHandlers>
                  <ObservationFromFullStats/>
                  <ObservationFromGrid>
                      <Grid name=""floor3x3"">
                        <min x=""-1"" y=""-1"" z=""-1""/>
                        <max x=""1"" y=""-1"" z=""1""/>
                      </Grid>
                  </ObservationFromGrid>
                  <ContinuousMovementCommands turnSpeedDegs=""180""/>
                  <InventoryCommands/>
                  <AgentQuitFromTouchingBlockType>
                      <Block type=""diamond_block"" />
                  </AgentQuitFromTouchingBlockType>
                </AgentHandlers>
              </AgentSection>
            </Mission>";

            // Create default Malmo objects:

            AgentHost agent_host = new AgentHost();

            try
            {
                agent_host.parse(new StringVector(Environment.GetCommandLineArgs()));
            }
            catch (Exception e)
            {
                Console.WriteLine("Error:{0}", e.Message);
                Console.WriteLine(agent_host.getUsage());
                Environment.Exit(1);
            }
            if (agent_host.receivedArgument("help"))
            {
                Console.WriteLine(agent_host.getUsage());
                Environment.Exit(0);
            }

            MissionSpec       my_mission        = new MissionSpec(missionXML, true);
            MissionRecordSpec my_mission_record = new MissionRecordSpec();

            // Attempt to start a mission:
            int max_retries = 3;

            for (int retry = 0; retry < max_retries; retry++)
            {
                try
                {
                    agent_host.startMission(my_mission, my_mission_record);
                    break;
                }
                catch (Exception e)
                {
                    if (retry == max_retries - 1)
                    {
                        Console.WriteLine("Error starting mission:{0}", e.Message);
                        Environment.Exit(1);
                    }
                    else
                    {
                        Thread.Sleep(2000);
                    }
                }
            }

            // Loop until mission starts
            Console.WriteLine("Waiting for the mission to start ");
            WorldState world_state = agent_host.getWorldState();

            while (!world_state.has_mission_begun)
            {
                Console.Write(".");
                Thread.Sleep(100);
                world_state = agent_host.getWorldState();
                foreach (TimestampedString error in world_state.errors)
                {
                    Console.WriteLine("Error:{0}", error.text);
                }
            }
            Console.WriteLine();
            Console.WriteLine("Mission running ");

            agent_host.sendCommand("hotbar.9 1"); // Press the hotbar key
            agent_host.sendCommand("hotbar.9 0"); // Release hotbar key - agent should now be holding diamond_pickaxe
            agent_host.sendCommand("pitch 0.2");  // Start looking downward slowly
            Thread.Sleep(1000);                   // Wait a second until we are looking in roughly the right direction
            agent_host.sendCommand("pitch 0");    // Stop tilting the camera
            agent_host.sendCommand("move 1");     // And start running...
            agent_host.sendCommand("attack 1");   // Whilst flailing our pickaxe!
            bool jumping = false;

            // Loop until mission ends:
            while (world_state.is_mission_running)
            {
                Console.Write(".");
                Thread.Sleep(100);
                world_state = agent_host.getWorldState();
                foreach (TimestampedString error in world_state.errors)
                {
                    Console.WriteLine("Error:{0}", error.text);
                }
                if (world_state.number_of_observations_since_last_state > 0) // Have any observations come in?
                {
                    string  msg          = world_state.observations[world_state.observations.Count - 1].text;
                    JObject observations = JObject.Parse(msg);
                    JToken  grid         = observations.GetValue("floor3x3");
                    if (jumping is true)
                    {
                        if (grid[4].ToString() is "lava")
                        {
                            agent_host.sendCommand("jump 0");
                            jumping = false;
                        }
                    }
                    if (grid[3].ToString() is "lava")
                    {
                        agent_host.sendCommand("jump 1");
                        jumping = true;
                    }
                }
            }
            Console.WriteLine();
            Console.WriteLine("Mission ended");
            // Mission has ended.
        }
예제 #35
0
        static void Main()
        {
            string missionXML = @"<?xml version='1.0' encoding='UTF - 8' standalone='no' ?>
                < Mission xmlns = 'http://ProjectMalmo.microsoft.com' xmlns: xsi = 'http://www.w3.org/2001/XMLSchema-instance' >
  


                      < About >
  

                        < Summary > Hello world!</ Summary >
  

                         </ About >
  


                         < ServerSection >
  

                           < ServerInitialConditions >
  

                               < Time >
  

                                   < StartTime > 12000 </ StartTime >
  

                                   < AllowPassageOfTime > false </ AllowPassageOfTime >
  

                                   < Weather > rain </ Weather >
  

                               </ Time >
  

                           </ ServerInitialConditions >
  

                           < ServerHandlers >
  

                             < FlatWorldGenerator generatorString = '3;7,44*49,73,35:1,159:4,95:13,35:13,159:11,95:10,159:14,159:6,35:6,95:6;12;' />
  

                              < ServerQuitFromTimeUp timeLimitMs = '30000' />
  

                               < ServerQuitWhenAnyAgentFinishes />
  

                             </ ServerHandlers >
  

                           </ ServerSection >
  


                           < AgentSection mode = 'Survival' >
  

                              < Name > MalmoTutorialBot </ Name >
  

                              < AgentStart >
  

                                  < Placement x = '0' y = '56' z = '0' yaw = '90' />
  

                                     </ AgentStart >
  

                                     < AgentHandlers >
  

                                       < ObservationFromFullStats />
  

                                       < ContinuousMovementCommands turnSpeedDegs = '180' />
  

                                      </ AgentHandlers >
  

                                    </ AgentSection >
  

                                  </ Mission >";
            // Create default Malmo objects:

            AgentHost agent_host = new AgentHost();

            try
            {
                agent_host.parse(new StringVector(Environment.GetCommandLineArgs()));
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine("Error:{0}", ex.Message);
                Console.Error.WriteLine(agent_host.getUsage());
                Environment.Exit(1);
            }
            if (agent_host.receivedArgument("help"))
            {
                Console.Error.WriteLine(agent_host.getUsage());
                Environment.Exit(0);
            }

            MissionSpec my_mission = new MissionSpec();

            my_mission.timeLimitInSeconds(30);
            MissionRecordSpec my_mission_record = new MissionRecordSpec("./saved_data.tgz");

            // Attempt to start a mission:
            int max_retries = 3;

            for (int retry = 0; retry < max_retries; retry++)
            {
                try
                {
                    agent_host.startMission(my_mission, my_mission_record);
                    break;
                }
                catch (Exception ex)
                {
                    if (retry == max_retries - 1)
                    {
                        Console.WriteLine("Error starting mission:{0}", ex.Message);
                        Environment.Exit(1);
                    }
                    else
                    {
                        Thread.Sleep(1000);
                    }
                }
            }
            // Loop until mission starts:
            Console.WriteLine("Waiting for the mission to start ");
            WorldState world_state = agent_host.getWorldState();

            while (!world_state.has_mission_begun)
            {
                Console.Write(".");
                Thread.Sleep(100);
                world_state = agent_host.getWorldState();
                foreach (TimestampedString error in world_state.errors)
                {
                    Console.WriteLine("Error:{0}", error.text);
                }
            }
            Console.WriteLine();
            Console.WriteLine("Mission running ");

            // Commands go here //

            // Loop until mission ends:
            while (world_state.is_mission_running)
            {
                Console.Write(".");
                Thread.Sleep(100);
                world_state = agent_host.getWorldState();
                foreach (TimestampedString error in world_state.errors)
                {
                    Console.WriteLine("Error:{0}", error.text);
                }
            }
            Console.WriteLine();
            Console.WriteLine("Mission ended");
            // Mission has ended.
        }