Ejemplo n.º 1
0
        protected override void OnCreate(Bundle bundle)
        {
            Log.Info("CreateCustomeGoalForm", "Create Custom Goal Form created");

            base.OnCreate(bundle);

            SetContentView(Resource.Layout.CreateCustomGoalForm);

            var layout = FindViewById<LinearLayout>(Resource.Id.CreateCustomGoalFormLayout);
            layout.SetBackgroundResource(Resource.Color.darkred);

            var preferences = GetSharedPreferences("Preferences.zad", FileCreationMode.Private);
            var monsterMode = preferences.GetBoolean("MonsterMode", false);

            if (!preferences.Contains("Rank"))
            {
                var preferencesEditor = preferences.Edit();
                preferencesEditor.PutInt("Rank", 0);
                preferencesEditor.Apply();
            }

            var rank = preferences.GetInt("Rank", -1);

            var customGoalNumber = FindViewById<EditText>(Resource.Id.CustomGoalNumber);

            var customGoalItems = FindViewById<EditText>(Resource.Id.CustomGoalItems);

            var customGoalRepeatCheckbox = FindViewById<CheckBox>(Resource.Id.CustomGoalRepeatCheckbox);

            var customGoalInnerLayout2 = FindViewById<LinearLayout>(Resource.Id.CustomGoalInnerLayout2);
            customGoalInnerLayout2.Visibility = ViewStates.Gone;

            var customGoalDaysNumber = FindViewById<EditText>(Resource.Id.CustomGoalDaysNumber);

            var customGoalText4 = FindViewById<TextView>(Resource.Id.CustomGoalText4);

            _customGoalSelectDate = FindViewById<Button>(Resource.Id.CustomGoalSelectDate);
            _customGoalSelectDate.Click += delegate { ShowDialog(DATE_DIALOG_ID); };

            customGoalRepeatCheckbox.Click += delegate
                {
                    if (customGoalRepeatCheckbox.Checked)
                    {
                        customGoalInnerLayout2.Visibility = ViewStates.Visible;
                        customGoalText4.Text = "until";
                    }
                    else
                    {
                        customGoalInnerLayout2.Visibility = ViewStates.Gone;
                        customGoalText4.Text = "by";
                    }
                };

            var submitCustomGoalButton = FindViewById<Button>(Resource.Id.SubmitCustomGoalButton);
            submitCustomGoalButton.Click += delegate
                {
                    if (_goalDate.CompareTo(DateTime.Today) > 0)
                    {
                        var goalNumber = int.Parse(customGoalNumber.Text);
                        var items = customGoalItems.Text;
                        var timespan = 0;
                        if (customGoalRepeatCheckbox.Checked && customGoalDaysNumber.Text != "")
                        {
                            timespan = int.Parse(customGoalDaysNumber.Text);
                        }

                        try
                        {
                            var customGoal = new CustomGoal(_goalDate, goalNumber, items, timespan);
                            customGoal.AssignMonsterData(rank);
                            var goalsList = JavaIO.LoadData<List<Goal>>(this, "Goals.zad");
                            goalsList.Add(customGoal);
                            var successfulSave = JavaIO.SaveData(this, "Goals.zad", goalsList);
                            if (successfulSave)
                            {
                                Toast.MakeText(this, "Goal Saved", ToastLength.Long).Show();
                                if (monsterMode)
                                    MakeMonsterDialog(customGoal);
                                Finish();
                            }
                            else
                            {
                                Toast.MakeText(this, "Error saving goal", ToastLength.Long).Show();
                            }
                        }
                        catch (Exception e)
                        {
                            Toast.MakeText(this, "Error: " + e.Message, ToastLength.Long).Show();
                        }
                    }
                    else
                    {
                        Toast.MakeText(this, "Error: Date must be in future", ToastLength.Long).Show();
                    }
                };
        }
Ejemplo n.º 2
0
        public void Solve()
        {
            puzzle = new Domain().BuildLogic((domain, state) =>
            {
                //
                //    01 02 03 04
                //    05 06 07 08
                //    09 10 11 12
                //    13 14 15
                //
                //
                string[] invalid_north = new string[] { "1", "2", "3", "4" };
                string[] invalid_east  = new string[] { "4", "8", "12", "16" };
                string[] invalid_south = new string[] { "13", "14", "15", "16" };
                string[] invalid_west  = new string[] { "1", "5", "9", "13" };

                Func <State, string> BlankPosition = (st) => { return(st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item2 == "Blank").Item3); };
                Func <State, bool> CanFlipNorth    = (st) => { return(!invalid_north.Contains(BlankPosition(st))); };
                Func <State, bool> CanFlipEast     = (st) => { return(!invalid_east.Contains(BlankPosition(st))); };
                Func <State, bool> CanFlipSouth    = (st) => { return(!invalid_south.Contains(BlankPosition(st))); };
                Func <State, bool> CanFlipWest     = (st) => { return(!invalid_west.Contains(BlankPosition(st))); };

                Action <State> FlipNorth = (State st) =>
                {
                    var slot     = st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item2 == "Blank").Item3;
                    int pos      = int.Parse(slot);
                    string brick = st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item3 == (pos - 4).ToString()).Item2;
                    st.Relations.Remove(st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item3 == (pos - 4).ToString()));
                    st.Relations.Remove(st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item3 == (pos).ToString()));
                    st.Relations.Add(new Tuple <string, string, string>("Board", brick, pos.ToString()));
                    st.Relations.Add(new Tuple <string, string, string>("Board", "Blank", (pos - 4).ToString()));
                };
                Action <State> FlipEast = (State st) =>
                {
                    var slot     = st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item2 == "Blank").Item3;
                    int pos      = int.Parse(slot);
                    string brick = st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item3 == (pos + 1).ToString()).Item2;
                    st.Relations.Remove(st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item3 == (pos + 1).ToString()));
                    st.Relations.Remove(st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item3 == (pos).ToString()));
                    st.Relations.Add(new Tuple <string, string, string>("Board", brick, pos.ToString()));
                    st.Relations.Add(new Tuple <string, string, string>("Board", "Blank", (pos + 1).ToString()));
                };
                Action <State> FlipSouth = (State st) =>
                {
                    var slot     = st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item2 == "Blank").Item3;
                    int pos      = int.Parse(slot);
                    string brick = st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item3 == (pos + 4).ToString()).Item2;
                    st.Relations.Remove(st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item3 == (pos + 4).ToString()));
                    st.Relations.Remove(st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item3 == (pos).ToString()));
                    st.Relations.Add(new Tuple <string, string, string>("Board", brick, pos.ToString()));
                    st.Relations.Add(new Tuple <string, string, string>("Board", "Blank", (pos + 4).ToString()));
                };
                Action <State> FlipWest = (State st) =>
                {
                    var slot     = st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item2 == "Blank").Item3;
                    int pos      = int.Parse(slot);
                    string brick = st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item3 == (pos - 1).ToString()).Item2;
                    st.Relations.Remove(st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item3 == (pos - 1).ToString()));
                    st.Relations.Remove(st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item3 == (pos).ToString()));
                    st.Relations.Add(new Tuple <string, string, string>("Board", brick, pos.ToString()));
                    st.Relations.Add(new Tuple <string, string, string>("Board", "Blank", (pos - 1).ToString()));
                };

                state.PlanningActions.Add(new PlanningAction("Flip North")
                                          .AssignPrejudicate(st => CanFlipNorth(st))
                                          .AssignPostAction(st => FlipNorth(st))
                                          );
                state.PlanningActions.Add(new PlanningAction("Flip East")
                                          .AssignPrejudicate(st => CanFlipEast(st))
                                          .AssignPostAction(st => FlipEast(st))
                                          );
                state.PlanningActions.Add(new PlanningAction("Flip South")
                                          .AssignPrejudicate(st => CanFlipSouth(st))
                                          .AssignPostAction(st => FlipSouth(st))
                                          );
                state.PlanningActions.Add(new PlanningAction("Flip West")
                                          .AssignPrejudicate(st => CanFlipWest(st))
                                          .AssignPostAction(st => FlipWest(st))
                                          );



                state.Relations.Add(new Tuple <string, string, string>("Board", "Brick 1", "1"));
                state.Relations.Add(new Tuple <string, string, string>("Board", "Brick 2", "2"));
                state.Relations.Add(new Tuple <string, string, string>("Board", "Brick 3", "13"));
                state.Relations.Add(new Tuple <string, string, string>("Board", "Brick 4", "12"));
                state.Relations.Add(new Tuple <string, string, string>("Board", "Brick 5", "11"));
                state.Relations.Add(new Tuple <string, string, string>("Board", "Brick 6", "10"));
                state.Relations.Add(new Tuple <string, string, string>("Board", "Brick 7", "9"));
                state.Relations.Add(new Tuple <string, string, string>("Board", "Brick 8", "8"));
                state.Relations.Add(new Tuple <string, string, string>("Board", "Brick 9", "7"));
                state.Relations.Add(new Tuple <string, string, string>("Board", "Brick 10", "6"));
                state.Relations.Add(new Tuple <string, string, string>("Board", "Brick 11", "5"));
                state.Relations.Add(new Tuple <string, string, string>("Board", "Brick 12", "4"));
                state.Relations.Add(new Tuple <string, string, string>("Board", "Brick 13", "3"));
                state.Relations.Add(new Tuple <string, string, string>("Board", "Brick 14", "14"));
                state.Relations.Add(new Tuple <string, string, string>("Board", "Brick 15", "15"));
                state.Relations.Add(new Tuple <string, string, string>("Board", "Blank", "16"));
            }
                                             ).AssignGoal(
                new Goal("Solve Puzzle").RelationalTarget("Board", "Brick 15", "16")
                );

            // Todo: write custom goal that uses Manhattan Distance
            var cg  = new CustomGoal().AssignGoal(delegate(State x) { return(0.0); });
            var cg2 = new CustomGoal().AssignGoal(state => { return(0.0); });

            //puzzle.State.PlanningActions[0].Execute(puzzle.State);

            IPlan p = new DFSPlan().SetMaxSearchDepth(10);

            p.Search(puzzle.State, puzzle.Goal);

            Assert.GreaterOrEqual(puzzle.Goal.Fulfillment(p.GetFinalState()), 1.0);
        }
Ejemplo n.º 3
0
        public void Solve()
        {
            puzzle = new Domain().BuildLogic((domain, state) =>
            {
                //
                //    01 02 03 04
                //    05 06 07 08
                //    09 10 11 12
                //    13 14 15
                //
                //
                string[] invalid_north = new string[] { "1", "2", "3", "4" };
                string[] invalid_east = new string[] { "4", "8", "12", "16" };
                string[] invalid_south = new string[] { "13", "14", "15", "16" };
                string[] invalid_west = new string[] { "1", "5", "9", "13" };

                Func<State, string> BlankPosition = (st) => { return st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item2 == "Blank").Item3; };
                Func<State, bool> CanFlipNorth = (st) => { return !invalid_north.Contains(BlankPosition(st)); };
                Func<State, bool> CanFlipEast = (st) => { return !invalid_east.Contains(BlankPosition(st)); };
                Func<State, bool> CanFlipSouth = (st) => { return !invalid_south.Contains(BlankPosition(st)); };
                Func<State, bool> CanFlipWest = (st) => { return !invalid_west.Contains(BlankPosition(st)); };

                Action<State> FlipNorth = (State st) =>
                {
                    var slot = st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item2 == "Blank").Item3;
                    int pos = int.Parse(slot);
                    string brick = st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item3 == (pos - 4).ToString()).Item2;
                    st.Relations.Remove(st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item3 == (pos - 4).ToString()));
                    st.Relations.Remove(st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item3 == (pos).ToString()));
                    st.Relations.Add(new Tuple<string, string, string>("Board", brick, pos.ToString()));
                    st.Relations.Add(new Tuple<string, string, string>("Board", "Blank", (pos - 4).ToString()));
                };
                Action<State> FlipEast = (State st) =>
                {
                    var slot = st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item2 == "Blank").Item3;
                    int pos = int.Parse(slot);
                    string brick = st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item3 == (pos + 1).ToString()).Item2;
                    st.Relations.Remove(st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item3 == (pos + 1).ToString()));
                    st.Relations.Remove(st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item3 == (pos).ToString()));
                    st.Relations.Add(new Tuple<string, string, string>("Board", brick, pos.ToString()));
                    st.Relations.Add(new Tuple<string, string, string>("Board", "Blank", (pos + 1).ToString()));
                };
                Action<State> FlipSouth = (State st) =>
                {
                    var slot = st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item2 == "Blank").Item3;
                    int pos = int.Parse(slot);
                    string brick = st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item3 == (pos + 4).ToString()).Item2;
                    st.Relations.Remove(st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item3 == (pos + 4).ToString()));
                    st.Relations.Remove(st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item3 == (pos).ToString()));
                    st.Relations.Add(new Tuple<string, string, string>("Board", brick, pos.ToString()));
                    st.Relations.Add(new Tuple<string, string, string>("Board", "Blank", (pos + 4).ToString()));
                };
                Action<State> FlipWest = (State st) =>
                {
                    var slot = st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item2 == "Blank").Item3;
                    int pos = int.Parse(slot);
                    string brick = st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item3 == (pos - 1).ToString()).Item2;
                    st.Relations.Remove(st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item3 == (pos - 1).ToString()));
                    st.Relations.Remove(st.Relations.Find(rel => rel.Item1 == "Board" && rel.Item3 == (pos).ToString()));
                    st.Relations.Add(new Tuple<string, string, string>("Board", brick, pos.ToString()));
                    st.Relations.Add(new Tuple<string, string, string>("Board", "Blank", (pos - 1).ToString()));
                };

                state.PlanningActions.Add(new PlanningAction("Flip North")
                                       .AssignPrejudicate(st => CanFlipNorth(st))
                                       .AssignPostAction(st => FlipNorth(st))
                                      );
                state.PlanningActions.Add(new PlanningAction("Flip East")
                                         .AssignPrejudicate(st => CanFlipEast(st))
                                         .AssignPostAction(st => FlipEast(st))
                                        );
                state.PlanningActions.Add(new PlanningAction("Flip South")
                                         .AssignPrejudicate(st => CanFlipSouth(st))
                                         .AssignPostAction(st => FlipSouth(st))
                                        );
                state.PlanningActions.Add(new PlanningAction("Flip West")
                                         .AssignPrejudicate(st => CanFlipWest(st))
                                         .AssignPostAction(st => FlipWest(st))
                                        );

                state.Relations.Add(new Tuple<string, string, string>("Board", "Brick 1", "1"));
                state.Relations.Add(new Tuple<string, string, string>("Board", "Brick 2", "2"));
                state.Relations.Add(new Tuple<string, string, string>("Board", "Brick 3", "13"));
                state.Relations.Add(new Tuple<string, string, string>("Board", "Brick 4", "12"));
                state.Relations.Add(new Tuple<string, string, string>("Board", "Brick 5", "11"));
                state.Relations.Add(new Tuple<string, string, string>("Board", "Brick 6", "10"));
                state.Relations.Add(new Tuple<string, string, string>("Board", "Brick 7", "9"));
                state.Relations.Add(new Tuple<string, string, string>("Board", "Brick 8", "8"));
                state.Relations.Add(new Tuple<string, string, string>("Board", "Brick 9", "7"));
                state.Relations.Add(new Tuple<string, string, string>("Board", "Brick 10", "6"));
                state.Relations.Add(new Tuple<string, string, string>("Board", "Brick 11", "5"));
                state.Relations.Add(new Tuple<string, string, string>("Board", "Brick 12", "4"));
                state.Relations.Add(new Tuple<string, string, string>("Board", "Brick 13", "3"));
                state.Relations.Add(new Tuple<string, string, string>("Board", "Brick 14", "14"));
                state.Relations.Add(new Tuple<string, string, string>("Board", "Brick 15", "15"));
                state.Relations.Add(new Tuple<string, string, string>("Board", "Blank", "16"));
            }
            ).AssignGoal(
                new Goal("Solve Puzzle").RelationalTarget("Board", "Brick 15", "16")
            );

            // Todo: write custom goal that uses Manhattan Distance
            var cg =  new CustomGoal().AssignGoal(delegate(State x) { return 0.0; });
            var cg2 = new CustomGoal().AssignGoal( state => { return 0.0; });

            //puzzle.State.PlanningActions[0].Execute(puzzle.State);

            IPlan p = new DFSPlan().SetMaxSearchDepth(10);
            p.Search(puzzle.State, puzzle.Goal);

            Assert.GreaterOrEqual(puzzle.Goal.Fulfillment(p.GetFinalState()), 1.0);
        }
Ejemplo n.º 4
0
        protected override void OnCreate(Bundle bundle)
        {
            Log.Info("MainMenu", "Main Menu Created");
            base.OnCreate(bundle);

            SetContentView(Resource.Layout.MainMenu);

            var preferences = GetSharedPreferences("Preferences.zad", FileCreationMode.Private);
            var preferencesEditor = preferences.Edit();

            if (!preferences.Contains("Rank"))
            {
                preferencesEditor.PutInt("Rank", 0);
                preferencesEditor.Apply();
            }

            if (!preferences.Contains("MonsterMode"))
            {
                preferencesEditor.PutBoolean("MonsterMode", true);
                preferencesEditor.Apply();
            }

            var rank = preferences.GetInt("Rank", -1);

            try
            {
                var goalsList = JavaIO.LoadData<List<Goal>>(this, "Goals.zad");
                if (goalsList == null)
                {
                    goalsList = new List<Goal>();
                    JavaIO.SaveData(this, "Goals.zad", goalsList);
                }
            }
            catch (FileNotFoundException)
            {
                var goalsList = new List<Goal>();
                JavaIO.SaveData(this, "Goals.zad", goalsList);
            }

            try
            {
                var rewardsList = JavaIO.LoadData<List<Goal>>(this, "Rewards.zad");
                if (rewardsList == null)
                {
                    rewardsList = new List<Goal>();
                    JavaIO.SaveData(this, "Rewards.zad", rewardsList);
                }
            }
            catch (FileNotFoundException)
            {
                var rewardsList = new List<Goal>();
                JavaIO.SaveData(this, "Rewards.zad", rewardsList);
            }

            var goalsButton = FindViewById<Button>(Resource.Id.GoalsButton);
            goalsButton.Click += delegate { StartActivity(typeof (GoalsMenu)); };

            var rewardsButton = FindViewById<Button>(Resource.Id.RewardsButton);
            rewardsButton.Click += delegate { StartActivity(typeof (RewardsMenu)); };

            var socialButton = FindViewById<Button>(Resource.Id.SocialButton);
            //            socialButton.Click += delegate { StartActivity(typeof (SocialMenu)); };
            socialButton.Visibility = ViewStates.Gone;

            var settingsButton = FindViewById<Button>(Resource.Id.SettingsButton);
            settingsButton.Click += delegate { StartActivity(typeof (SettingsMenu)); };

            var setupButton = FindViewById<Button>(Resource.Id.SetupButton);
            setupButton.Click += delegate
                {
                    var idesOfMarch2020 = new DateTime(2020, 3, 15);
                    var fitnessGoal = new FitnessGoal(DateTime.Today, 23, FitnessItems.Pullups, 7);
                    var dietGoal = new DietGoal(idesOfMarch2020, -15, DietItems.Pounds, 7);
                    var customGoal = new CustomGoal(DateTime.Today, 8, "good deeds", 8);
                    var futureCustomGoal = new CustomGoal(idesOfMarch2020, 42, "paintings");

                    fitnessGoal.AssignMonsterData(rank);
                    dietGoal.AssignMonsterData(rank);
                    customGoal.AssignMonsterData(rank);
                    futureCustomGoal.AssignMonsterData(rank);

                    customGoal.UpdateProgress(15);

                    var goalsList = new List<Goal> {fitnessGoal, dietGoal, customGoal, futureCustomGoal};
                    var successfulGoalSave = JavaIO.SaveData(this, "Goals.zad", goalsList);

                    var completeLongDietReward = new Reward("Long Diet", "You are awesome", new List<Goal> {dietGoal});
                    var doGoodDeedsReward = new Reward("Good Deeds Game", "Psychonauts: 5e728-vvd79-6hwx2", new List<Goal> {customGoal});

                    var rewardsList = new List<Reward> {completeLongDietReward, doGoodDeedsReward};
                    var successfulRewardSave = JavaIO.SaveData(this, "Rewards.zad", rewardsList);

                    if (successfulRewardSave && successfulGoalSave)
                    {
                        Toast.MakeText(this, "Setup Complete", ToastLength.Short).Show();
                    }
                    else if (!successfulGoalSave)
                    {
                        Toast.MakeText(this, "Goal Setup Failed", ToastLength.Short).Show();
                    }
                    else
                    {
                        Toast.MakeText(this, "Reward Setup Failed", ToastLength.Short).Show();
                    }
                };

            var monsterDemoButton = FindViewById<Button>(Resource.Id.MonsterDemoButton);
            //            monsterDemoButton.Click += delegate { StartActivity(typeof (MonsterDisplay)); };
            monsterDemoButton.Visibility = ViewStates.Gone;

            var pushActivityButton = FindViewById<Button>(Resource.Id.PushActivityButton);
            pushActivityButton.Click += delegate { StartActivity(typeof (PushActivity)); };
            pushActivityButton.Visibility = ViewStates.Gone;
        }