예제 #1
0
        public SimonSaysPage(ParticleDevice device)
        {
            ViewModel       = new SimonSaysViewModel(device);
            BindingContext  = ViewModel;
            BackgroundColor = AppColors.BackgroundColor;
            Title           = $"{device.Name} Says";

            red = new Button {
                StyleId = "red", BackgroundColor = SimonSaysColors.Red, BorderRadius = 0
            };
            blue = new Button {
                StyleId = "blue", BackgroundColor = SimonSaysColors.Blue, BorderRadius = 0
            };
            green = new Button {
                StyleId = "green", BackgroundColor = SimonSaysColors.Green, BorderRadius = 0
            };
            yellow = new Button {
                StyleId = "yellow", BackgroundColor = SimonSaysColors.Yellow, BorderRadius = 0
            };

            l1 = new ContentView {
                HorizontalOptions = LayoutOptions.FillAndExpand
            };
            l2 = new ContentView {
                HorizontalOptions = LayoutOptions.FillAndExpand
            };
            l3 = new ContentView {
                HorizontalOptions = LayoutOptions.FillAndExpand
            };
            l4 = new ContentView {
                HorizontalOptions = LayoutOptions.FillAndExpand
            };
            l5 = new ContentView {
                HorizontalOptions = LayoutOptions.FillAndExpand
            };
            l6 = new ContentView {
                HorizontalOptions = LayoutOptions.FillAndExpand
            };
            l7 = new ContentView {
                HorizontalOptions = LayoutOptions.FillAndExpand
            };
            l8 = new ContentView {
                HorizontalOptions = LayoutOptions.FillAndExpand
            };
            l9 = new ContentView {
                HorizontalOptions = LayoutOptions.FillAndExpand
            };
            l10 = new ContentView {
                HorizontalOptions = LayoutOptions.FillAndExpand
            };

            var         stackPadding = 2d;
            StackLayout lightStack   = new StackLayout
            {
                Orientation     = StackOrientation.Horizontal,
                Children        = { l1, l2, l3, l4, l5, l6, l7, l8, l9, l10 },
                Padding         = new Thickness(stackPadding, 0, stackPadding, 0),
                BackgroundColor = Color.Transparent
            };

            var clearSubmission = new Button
            {
                StyleId         = "clearMoveButton",
                Text            = "X",
                FontSize        = Device.OnPlatform(10, 8, 10),
                TextColor       = Color.Black,
                FontAttributes  = FontAttributes.Bold,
                BorderRadius    = 10,
                BackgroundColor = Color.White,
                BorderColor     = Color.Black,
                BorderWidth     = 1
            };
            StyledButton actionButton = new StyledButton {
                StyleId = "actionButton", BorderRadius = 0, TextColor = Color.White, CssStyle = "button", BorderColor = AppColors.Blue
            };

            var layout = new RelativeLayout();

            var buttonConstraint = Constraint.RelativeToParent((p) => (p.Width / 2) - AppSettings.Margin - AppSettings.ItemPadding / 2);

            layout.Children.Add(red,
                                xConstraint: Constraint.Constant(AppSettings.Margin),
                                yConstraint: Constraint.Constant(AppSettings.Margin),
                                widthConstraint: buttonConstraint,
                                heightConstraint: buttonConstraint
                                );

            layout.Children.Add(yellow,
                                xConstraint: Constraint.RelativeToParent((p) => (p.Width / 2) + AppSettings.ItemPadding / 2),
                                yConstraint: Constraint.Constant(AppSettings.Margin),
                                widthConstraint: buttonConstraint,
                                heightConstraint: buttonConstraint
                                );

            layout.Children.Add(blue,
                                xConstraint: Constraint.Constant(AppSettings.Margin),
                                yConstraint: Constraint.RelativeToView(red, (p, v) => v.Height + v.Y + AppSettings.ItemPadding),
                                widthConstraint: buttonConstraint,
                                heightConstraint: buttonConstraint
                                );

            layout.Children.Add(green,
                                xConstraint: Constraint.RelativeToParent((p) => (p.Width / 2) + AppSettings.ItemPadding / 2),
                                yConstraint: Constraint.RelativeToView(yellow, (p, v) => v.Height + v.Y + AppSettings.ItemPadding),
                                widthConstraint: buttonConstraint,
                                heightConstraint: buttonConstraint
                                );

            layout.Children.Add(lightStack,
                                xConstraint: Constraint.Constant(AppSettings.Margin - stackPadding),
                                yConstraint: Constraint.RelativeToView(blue, (p, v) => v.Height + v.Y + AppSettings.ItemPadding * 2),
                                widthConstraint: Constraint.RelativeToParent((p) => p.Width - AppSettings.Margin * 2 + stackPadding * 2),
                                heightConstraint: Constraint.Constant(25) // TODO calculate the square size based on the width of the view
                                );
            layout.Children.Add(clearSubmission,
                                xConstraint: Constraint.RelativeToParent((p) => p.Width - AppSettings.Margin - Device.OnPlatform(10, 15, 15)),
                                yConstraint: Constraint.RelativeToView(lightStack, (p, v) => Device.OnPlatform(
                                                                           v.Y - 10,
                                                                           v.Y - 15,
                                                                           v.Y - 15
                                                                           )
                                                                       ),
                                widthConstraint: Constraint.Constant(Device.OnPlatform(25, 30, 30)),
                                heightConstraint: Constraint.Constant(Device.OnPlatform(25, 30, 30))
                                );

            layout.Children.Add(actionButton,
                                xConstraint: Constraint.Constant(AppSettings.Margin),
                                yConstraint: Constraint.RelativeToParent(p => p.Height - AppSettings.Margin - AppSettings.ButtonHeight),
                                widthConstraint: Constraint.RelativeToParent(p => p.Width - AppSettings.Margin * 2),
                                heightConstraint: Constraint.Constant(50)
                                );

            Content = layout;

            red.Clicked += async(object sender, EventArgs e) =>
            {
                await ViewModel.PlayerPressButtonAsync("r");
            };
            blue.Clicked += async(object sender, EventArgs e) =>
            {
                await ViewModel.PlayerPressButtonAsync("b");
            };
            green.Clicked += async(object sender, EventArgs e) =>
            {
                await ViewModel.PlayerPressButtonAsync("g");
            };
            yellow.Clicked += async(object sender, EventArgs e) =>
            {
                await ViewModel.PlayerPressButtonAsync("y");
            };
            clearSubmission.Clicked += (object sender, EventArgs e) =>
            {
                ViewModel.ClearPlayerEntry();
            };

            red.SetBinding(Button.OpacityProperty, "RedOpacity");
            green.SetBinding(Button.OpacityProperty, "GreenOpacity");
            blue.SetBinding(Button.OpacityProperty, "BlueOpacity");
            yellow.SetBinding(Button.OpacityProperty, "YellowOpacity");

            l1.SetBinding(ContentView.BackgroundColorProperty, "L1");
            l2.SetBinding(ContentView.BackgroundColorProperty, "L2");
            l3.SetBinding(ContentView.BackgroundColorProperty, "L3");
            l4.SetBinding(ContentView.BackgroundColorProperty, "L4");
            l5.SetBinding(ContentView.BackgroundColorProperty, "L5");
            l6.SetBinding(ContentView.BackgroundColorProperty, "L6");
            l7.SetBinding(ContentView.BackgroundColorProperty, "L7");
            l8.SetBinding(ContentView.BackgroundColorProperty, "L8");
            l9.SetBinding(ContentView.BackgroundColorProperty, "L9");
            l10.SetBinding(ContentView.BackgroundColorProperty, "L10");

            clearSubmission.SetBinding(Button.IsVisibleProperty, "ShowClearButton");
            actionButton.SetBinding(Button.BackgroundColorProperty, "ActionColor");
            actionButton.SetBinding(Button.TextProperty, "ActionText");
            actionButton.SetBinding(Button.CommandProperty, "ActionCommand");
        }
예제 #2
0
        public SimonSaysPage(ParticleDevice device)
        {
            ViewModel      = new SimonSaysViewModel(device);
            BindingContext = ViewModel;

            red = new Button {
                Opacity = 0.5, BackgroundColor = Color.Red, BorderRadius = 0
            };
            blue = new Button {
                Opacity = 0.5, BackgroundColor = Color.Blue, BorderRadius = 0
            };
            green = new Button {
                Opacity = 0.5, BackgroundColor = Color.Green, BorderRadius = 0
            };
            yellow = new Button {
                Opacity = 0.5, BackgroundColor = Color.Yellow, BorderRadius = 0
            };

            var submitButton = new Button {
                Text = "Submit Move"
            };
            var startButton = new Button {
                Text = "Start"
            };
            var clearSubmission = new Button {
                Text = "Clear"
            };

            detailLabel = new Label {
                HorizontalTextAlignment = TextAlignment.Center
            };

            var layout = new RelativeLayout();

            layout.Children.Add(red,
                                xConstraint: Constraint.Constant(20),
                                yConstraint: Constraint.RelativeToParent((p) => (p.Height * 0.4) - 50),
                                widthConstraint: Constraint.Constant(100),
                                heightConstraint: Constraint.Constant(100));
            layout.Children.Add(green,
                                xConstraint: Constraint.RelativeToParent((p) => (p.Width * 0.5) - 50),
                                yConstraint: Constraint.RelativeToParent((p) => p.Width * 0.3),
                                widthConstraint: Constraint.Constant(100),
                                heightConstraint: Constraint.Constant(100));
            layout.Children.Add(blue,
                                xConstraint: Constraint.RelativeToParent((p) => p.Width - 120),
                                yConstraint: Constraint.RelativeToParent((p) => (p.Height * 0.4) - 50),
                                widthConstraint: Constraint.Constant(100),
                                heightConstraint: Constraint.Constant(100));
            layout.Children.Add(yellow,
                                xConstraint: Constraint.RelativeToParent((p) => (p.Width * 0.5) - 50),
                                yConstraint: Constraint.RelativeToView(green, (p, v) => v.Y + v.Height + 20),
                                widthConstraint: Constraint.Constant(100),
                                heightConstraint: Constraint.Constant(100));
            layout.Children.Add(submitButton,
                                xConstraint: Constraint.Constant(20),
                                yConstraint: Constraint.RelativeToParent((p) => p.Height - 110),
                                widthConstraint: Constraint.RelativeToParent((p) => p.Width - 40),
                                heightConstraint: Constraint.Constant(40));
            layout.Children.Add(startButton,
                                xConstraint: Constraint.Constant(20),
                                yConstraint: Constraint.RelativeToParent((p) => p.Height - 60),
                                widthConstraint: Constraint.RelativeToParent((p) => p.Width - 40),
                                heightConstraint: Constraint.Constant(40));
            layout.Children.Add(detailLabel,
                                xConstraint: Constraint.Constant(20),
                                yConstraint: Constraint.RelativeToView(green, (p, v) => v.Y - 60),
                                widthConstraint: Constraint.RelativeToParent((p) => p.Width - 40),
                                heightConstraint: Constraint.Constant(40));
            layout.Children.Add(clearSubmission,
                                xConstraint: Constraint.Constant(20),
                                yConstraint: Constraint.Constant(20));
            Content = layout;

            submitButton.Clicked += PressButtonAsync;
            startButton.Clicked  += async(object sender, EventArgs e) =>
            {
                await ViewModel.StartGame();
            };
            red.Clicked += async(object sender, EventArgs e) =>
            {
                await ViewModel.PlayerPressButtonAsync("r");
            };
            blue.Clicked += async(object sender, EventArgs e) =>
            {
                await ViewModel.PlayerPressButtonAsync("b");
            };
            green.Clicked += async(object sender, EventArgs e) =>
            {
                await ViewModel.PlayerPressButtonAsync("g");
            };
            yellow.Clicked += async(object sender, EventArgs e) =>
            {
                await ViewModel.PlayerPressButtonAsync("y");
            };
            clearSubmission.Clicked += (object sender, EventArgs e) =>
            {
                ViewModel.ClearEntry();
            };

            detailLabel.SetBinding(Label.TextProperty, "DetailText");
            red.SetBinding(Button.OpacityProperty, "RedOpacity");
            green.SetBinding(Button.OpacityProperty, "GreenOpacity");
            blue.SetBinding(Button.OpacityProperty, "BlueOpacity");
            yellow.SetBinding(Button.OpacityProperty, "YellowOpacity");
        }