Simon dice: "Hazme una ventana circular" -- # campo con animation campo con community-challenge campo con xaml campo con simon-says camp codereview Relacionados El problema

Simon Says: “Make me a circular window”


24
vote

problema

Español

Esta es mi primera vez que metes con ventanas y animaciones no rectangulares en WPF, por lo que mientras estoy trabajando en todos los errores que tengo con el código de juego real, estoy enviando el XAML para su revisión, yo Don "Me gusta lo redundante que sea, pero estoy seguro de que hay una manera inteligente de simplificarla.

  <Window x:Class="SimonSays.MainWindow"         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"         xmlns:simonSays="clr-namespace:SimonSays"         mc:Ignorable="d"         Height="480" Width="480"          AllowsTransparency="True" Background="Transparent" WindowStyle="None"          d:DataContext="{d:DesignInstance simonSays:SimonSaysRound}">     <Window.Clip>         <EllipseGeometry RadiusX="240" RadiusY="240" Center="242,242" />     </Window.Clip>     <Border Background="Black" BorderThickness="2">         <Border.Clip>             <EllipseGeometry Center="240,240" RadiusX="238" RadiusY="238" />         </Border.Clip>         <Grid>             <Grid.RowDefinitions>                 <RowDefinition Height="*" />                 <RowDefinition Height="Auto" />                 <RowDefinition Height="*" />             </Grid.RowDefinitions>             <Grid.ColumnDefinitions>                 <ColumnDefinition Width="*" />                 <ColumnDefinition Width="*" />             </Grid.ColumnDefinitions>              <StackPanel x:Name="MessageBar" Grid.Row="1" Grid.ColumnSpan="2" Margin="4" Height="0">                 <TextBlock x:Name="GameButton" Foreground="White" HorizontalAlignment="Center" FontSize="24" FontWeight="Bold" />                 <TextBlock x:Name="GameScoreLabel" Text="{Binding Score, StringFormat=Your score: {0}}" Foreground="White" HorizontalAlignment="Center" FontWeight="Bold" IsEnabled="False" />             </StackPanel>              <Border x:Name="Green" Margin="1" CornerRadius="16" MouseDown="Green_MouseDown">                 <Border.Clip>                     <EllipseGeometry Center="240,240" RadiusX="240" RadiusY="240" />                 </Border.Clip>                 <Border.Style>                     <Style>                         <Setter Property="Border.Background">                             <Setter.Value>                                 <RadialGradientBrush GradientOrigin="1,1" RadiusX="1" RadiusY="1">                                     <GradientStop Color="LightGreen" Offset="0.0" />                                     <GradientStop Color="DarkGreen" Offset="0.5" />                                 </RadialGradientBrush>                             </Setter.Value>                         </Setter>                         <Style.Triggers>                             <EventTrigger RoutedEvent="Border.MouseEnter">                                 <BeginStoryboard>                                     <Storyboard TargetProperty="Background.GradientStops[1].Offset" Duration="0:0:0.25">                                         <DoubleAnimation To="1.0" />                                         <Storyboard TargetProperty="Background.GradientStops[0].Offset">                                             <DoubleAnimation To="0.2" />                                         </Storyboard>                                     </Storyboard>                                 </BeginStoryboard>                             </EventTrigger>                             <EventTrigger RoutedEvent="Border.MouseLeave">                                 <BeginStoryboard>                                     <Storyboard TargetProperty="Background.GradientStops[1].Offset" Duration="0:0:0.25">                                         <DoubleAnimation To="0.5" />                                         <Storyboard TargetProperty="Background.GradientStops[0].Offset">                                             <DoubleAnimation To="0.0" />                                         </Storyboard>                                     </Storyboard>                                 </BeginStoryboard>                             </EventTrigger>                         </Style.Triggers>                     </Style>                 </Border.Style>             </Border>             <Border Grid.Column="1" x:Name="Red" Margin="1" CornerRadius="16" MouseDown="Red_MouseDown">                 <Border.Clip>                     <EllipseGeometry Center="-4,240" RadiusX="240" RadiusY="240" />                 </Border.Clip>                 <Border.Style>                     <Style>                         <Setter Property="Border.Background">                             <Setter.Value>                                 <RadialGradientBrush GradientOrigin="0,1" RadiusX="1" RadiusY="1">                                     <GradientStop Color="LightPink" Offset="0.0" />                                     <GradientStop Color="DarkRed" Offset="0.5" />                                 </RadialGradientBrush>                             </Setter.Value>                         </Setter>                         <Style.Triggers>                             <EventTrigger RoutedEvent="Border.MouseEnter">                                 <BeginStoryboard>                                     <Storyboard TargetProperty="Background.GradientStops[1].Offset" Duration="0:0:0.25">                                         <DoubleAnimation To="1.0" />                                         <Storyboard TargetProperty="Background.GradientStops[0].Offset">                                             <DoubleAnimation To="0.2" />                                         </Storyboard>                                     </Storyboard>                                 </BeginStoryboard>                             </EventTrigger>                             <EventTrigger RoutedEvent="Border.MouseLeave">                                 <BeginStoryboard>                                     <Storyboard TargetProperty="Background.GradientStops[1].Offset" Duration="0:0:0.25">                                         <DoubleAnimation To="0.5" />                                         <Storyboard TargetProperty="Background.GradientStops[0].Offset">                                             <DoubleAnimation To="0.0" />                                         </Storyboard>                                     </Storyboard>                                 </BeginStoryboard>                             </EventTrigger>                         </Style.Triggers>                     </Style>                 </Border.Style>             </Border>             <Border Grid.Row="2" x:Name="Yellow" Margin="1" CornerRadius="16" MouseDown="Yellow_MouseDown">                 <Border.Clip>                     <EllipseGeometry Center="240,-4" RadiusX="240" RadiusY="240" />                 </Border.Clip>                 <Border.Style>                     <Style>                         <Setter Property="Border.Background">                             <Setter.Value>                                 <RadialGradientBrush GradientOrigin="1,0" RadiusX="1" RadiusY="1">                                     <GradientStop Color="LightYellow" Offset="0.0" />                                     <GradientStop Color="Orange" Offset="0.5" />                                 </RadialGradientBrush>                             </Setter.Value>                         </Setter>                         <Style.Triggers>                             <EventTrigger RoutedEvent="Border.MouseEnter">                                 <BeginStoryboard>                                     <Storyboard TargetProperty="Background.GradientStops[1].Offset" Duration="0:0:0.25">                                         <DoubleAnimation To="1.0" />                                         <Storyboard TargetProperty="Background.GradientStops[0].Offset">                                             <DoubleAnimation To="0.2" />                                         </Storyboard>                                     </Storyboard>                                 </BeginStoryboard>                             </EventTrigger>                             <EventTrigger RoutedEvent="Border.MouseLeave">                                 <BeginStoryboard>                                     <Storyboard TargetProperty="Background.GradientStops[1].Offset" Duration="0:0:0.25">                                         <DoubleAnimation To="0.5" />                                         <Storyboard TargetProperty="Background.GradientStops[0].Offset">                                             <DoubleAnimation To="0.0" />                                         </Storyboard>                                     </Storyboard>                                 </BeginStoryboard>                             </EventTrigger>                         </Style.Triggers>                     </Style>                 </Border.Style>             </Border>             <Border Grid.Row="2" Grid.Column="1" x:Name="Blue" Margin="1" CornerRadius="16" MouseDown="Blue_MouseDown">                 <Border.Clip>                     <EllipseGeometry Center="-4,-4" RadiusX="240" RadiusY="240" />                 </Border.Clip>                 <Border.Style>                     <Style>                         <Setter Property="Border.Background">                             <Setter.Value>                                 <RadialGradientBrush GradientOrigin="0,0" RadiusX="1" RadiusY="1">                                     <GradientStop Color="LightSkyBlue" Offset="0.0" />                                     <GradientStop Color="Blue" Offset="0.5" />                                 </RadialGradientBrush>                             </Setter.Value>                         </Setter>                         <Style.Triggers>                             <EventTrigger RoutedEvent="Border.MouseEnter">                                 <BeginStoryboard>                                     <Storyboard TargetProperty="Background.GradientStops[1].Offset" Duration="0:0:0.25">                                         <DoubleAnimation To="1.0" />                                         <Storyboard TargetProperty="Background.GradientStops[0].Offset">                                             <DoubleAnimation To="0.2" />                                         </Storyboard>                                     </Storyboard>                                 </BeginStoryboard>                             </EventTrigger>                             <EventTrigger RoutedEvent="Border.MouseLeave">                                 <BeginStoryboard>                                     <Storyboard TargetProperty="Background.GradientStops[1].Offset" Duration="0:0:0.25">                                         <DoubleAnimation To="0.5" />                                         <Storyboard TargetProperty="Background.GradientStops[0].Offset">                                             <DoubleAnimation To="0.0" />                                         </Storyboard>                                     </Storyboard>                                 </BeginStoryboard>                             </EventTrigger>                         </Style.Triggers>                     </Style>                 </Border.Style>             </Border>         </Grid>     </Border> </Window>   

El resultado es una ventana circular con 4 cuadrantes y una banda horizontal negra que sirve como un asa para arrastrar la ventana alrededor:

simon-dice cuadrantes

También lo estoy usando para mostrar mensajes, y la puntuación del jugador:

"start!" "¡BIEN HECHO! Listo? | Tu puntuación: 5 "

Los botones / cuadrantes están deshabilitados mientras la banda de mensajes se expande (no se puede hacer clic; aunque todavía reaccionan al mouse a través), y re-habilitado cuando se colapsó después de hacer clic en el mensaje.

Sin una caja de control , la ventana solo se puede cerrar haciendo clic en la etiqueta "Game Over":

"juego Over! | Su puntuación: 0"

Tengo este código C # (entre otro código que no está listo para su revisión) en el código de atrás, para animar los clics de los botones y la banda de mensajes:

      private void AnimateMessageBand(double height)     {         var animation = new DoubleAnimation(height, new Duration(TimeSpan.FromMilliseconds(200)));         RegisterName(MessageBar.Name, MessageBar);         Storyboard.SetTargetName(animation, MessageBar.Name);         Storyboard.SetTargetProperty(animation, new PropertyPath("Height"));         var story = new Storyboard();         story.Children.Add(animation);         story.Begin(MessageBar);         story.Remove();     }      private readonly IDictionary<SimonButton, Border> _buttons;      public void HighlightSimonButton(SimonButton button)     {         var animation = new DoubleAnimation(0, 0.75, new Duration(TimeSpan.FromMilliseconds(100)));         RegisterName(button.ToString(), _buttons[button]);         Storyboard.SetTargetName(animation, button.ToString());         Storyboard.SetTargetProperty(animation, new PropertyPath("Background.GradientStops[1].Offset"));         var story = new Storyboard();         story.Children.Add(animation);         story.Begin(_buttons[button]);         story.Remove();     } 1  
Original en ingles

This is my first time messing with non-rectangular windows and animations in WPF, so while I'm working on all the bugs I'm having with the actual game code, I'm submitting the XAML for review - I don't like how redundant it is, but I'm sure there's a clever way to simplify it.

<Window x:Class="SimonSays.MainWindow"         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"         xmlns:simonSays="clr-namespace:SimonSays"         mc:Ignorable="d"         Height="480" Width="480"          AllowsTransparency="True" Background="Transparent" WindowStyle="None"          d:DataContext="{d:DesignInstance simonSays:SimonSaysRound}">     <Window.Clip>         <EllipseGeometry RadiusX="240" RadiusY="240" Center="242,242" />     </Window.Clip>     <Border Background="Black" BorderThickness="2">         <Border.Clip>             <EllipseGeometry Center="240,240" RadiusX="238" RadiusY="238" />         </Border.Clip>         <Grid>             <Grid.RowDefinitions>                 <RowDefinition Height="*" />                 <RowDefinition Height="Auto" />                 <RowDefinition Height="*" />             </Grid.RowDefinitions>             <Grid.ColumnDefinitions>                 <ColumnDefinition Width="*" />                 <ColumnDefinition Width="*" />             </Grid.ColumnDefinitions>              <StackPanel x:Name="MessageBar" Grid.Row="1" Grid.ColumnSpan="2" Margin="4" Height="0">                 <TextBlock x:Name="GameButton" Foreground="White" HorizontalAlignment="Center" FontSize="24" FontWeight="Bold" />                 <TextBlock x:Name="GameScoreLabel" Text="{Binding Score, StringFormat=Your score: \{0\}}" Foreground="White" HorizontalAlignment="Center" FontWeight="Bold" IsEnabled="False" />             </StackPanel>              <Border x:Name="Green" Margin="1" CornerRadius="16" MouseDown="Green_MouseDown">                 <Border.Clip>                     <EllipseGeometry Center="240,240" RadiusX="240" RadiusY="240" />                 </Border.Clip>                 <Border.Style>                     <Style>                         <Setter Property="Border.Background">                             <Setter.Value>                                 <RadialGradientBrush GradientOrigin="1,1" RadiusX="1" RadiusY="1">                                     <GradientStop Color="LightGreen" Offset="0.0" />                                     <GradientStop Color="DarkGreen" Offset="0.5" />                                 </RadialGradientBrush>                             </Setter.Value>                         </Setter>                         <Style.Triggers>                             <EventTrigger RoutedEvent="Border.MouseEnter">                                 <BeginStoryboard>                                     <Storyboard TargetProperty="Background.GradientStops[1].Offset" Duration="0:0:0.25">                                         <DoubleAnimation To="1.0" />                                         <Storyboard TargetProperty="Background.GradientStops[0].Offset">                                             <DoubleAnimation To="0.2" />                                         </Storyboard>                                     </Storyboard>                                 </BeginStoryboard>                             </EventTrigger>                             <EventTrigger RoutedEvent="Border.MouseLeave">                                 <BeginStoryboard>                                     <Storyboard TargetProperty="Background.GradientStops[1].Offset" Duration="0:0:0.25">                                         <DoubleAnimation To="0.5" />                                         <Storyboard TargetProperty="Background.GradientStops[0].Offset">                                             <DoubleAnimation To="0.0" />                                         </Storyboard>                                     </Storyboard>                                 </BeginStoryboard>                             </EventTrigger>                         </Style.Triggers>                     </Style>                 </Border.Style>             </Border>             <Border Grid.Column="1" x:Name="Red" Margin="1" CornerRadius="16" MouseDown="Red_MouseDown">                 <Border.Clip>                     <EllipseGeometry Center="-4,240" RadiusX="240" RadiusY="240" />                 </Border.Clip>                 <Border.Style>                     <Style>                         <Setter Property="Border.Background">                             <Setter.Value>                                 <RadialGradientBrush GradientOrigin="0,1" RadiusX="1" RadiusY="1">                                     <GradientStop Color="LightPink" Offset="0.0" />                                     <GradientStop Color="DarkRed" Offset="0.5" />                                 </RadialGradientBrush>                             </Setter.Value>                         </Setter>                         <Style.Triggers>                             <EventTrigger RoutedEvent="Border.MouseEnter">                                 <BeginStoryboard>                                     <Storyboard TargetProperty="Background.GradientStops[1].Offset" Duration="0:0:0.25">                                         <DoubleAnimation To="1.0" />                                         <Storyboard TargetProperty="Background.GradientStops[0].Offset">                                             <DoubleAnimation To="0.2" />                                         </Storyboard>                                     </Storyboard>                                 </BeginStoryboard>                             </EventTrigger>                             <EventTrigger RoutedEvent="Border.MouseLeave">                                 <BeginStoryboard>                                     <Storyboard TargetProperty="Background.GradientStops[1].Offset" Duration="0:0:0.25">                                         <DoubleAnimation To="0.5" />                                         <Storyboard TargetProperty="Background.GradientStops[0].Offset">                                             <DoubleAnimation To="0.0" />                                         </Storyboard>                                     </Storyboard>                                 </BeginStoryboard>                             </EventTrigger>                         </Style.Triggers>                     </Style>                 </Border.Style>             </Border>             <Border Grid.Row="2" x:Name="Yellow" Margin="1" CornerRadius="16" MouseDown="Yellow_MouseDown">                 <Border.Clip>                     <EllipseGeometry Center="240,-4" RadiusX="240" RadiusY="240" />                 </Border.Clip>                 <Border.Style>                     <Style>                         <Setter Property="Border.Background">                             <Setter.Value>                                 <RadialGradientBrush GradientOrigin="1,0" RadiusX="1" RadiusY="1">                                     <GradientStop Color="LightYellow" Offset="0.0" />                                     <GradientStop Color="Orange" Offset="0.5" />                                 </RadialGradientBrush>                             </Setter.Value>                         </Setter>                         <Style.Triggers>                             <EventTrigger RoutedEvent="Border.MouseEnter">                                 <BeginStoryboard>                                     <Storyboard TargetProperty="Background.GradientStops[1].Offset" Duration="0:0:0.25">                                         <DoubleAnimation To="1.0" />                                         <Storyboard TargetProperty="Background.GradientStops[0].Offset">                                             <DoubleAnimation To="0.2" />                                         </Storyboard>                                     </Storyboard>                                 </BeginStoryboard>                             </EventTrigger>                             <EventTrigger RoutedEvent="Border.MouseLeave">                                 <BeginStoryboard>                                     <Storyboard TargetProperty="Background.GradientStops[1].Offset" Duration="0:0:0.25">                                         <DoubleAnimation To="0.5" />                                         <Storyboard TargetProperty="Background.GradientStops[0].Offset">                                             <DoubleAnimation To="0.0" />                                         </Storyboard>                                     </Storyboard>                                 </BeginStoryboard>                             </EventTrigger>                         </Style.Triggers>                     </Style>                 </Border.Style>             </Border>             <Border Grid.Row="2" Grid.Column="1" x:Name="Blue" Margin="1" CornerRadius="16" MouseDown="Blue_MouseDown">                 <Border.Clip>                     <EllipseGeometry Center="-4,-4" RadiusX="240" RadiusY="240" />                 </Border.Clip>                 <Border.Style>                     <Style>                         <Setter Property="Border.Background">                             <Setter.Value>                                 <RadialGradientBrush GradientOrigin="0,0" RadiusX="1" RadiusY="1">                                     <GradientStop Color="LightSkyBlue" Offset="0.0" />                                     <GradientStop Color="Blue" Offset="0.5" />                                 </RadialGradientBrush>                             </Setter.Value>                         </Setter>                         <Style.Triggers>                             <EventTrigger RoutedEvent="Border.MouseEnter">                                 <BeginStoryboard>                                     <Storyboard TargetProperty="Background.GradientStops[1].Offset" Duration="0:0:0.25">                                         <DoubleAnimation To="1.0" />                                         <Storyboard TargetProperty="Background.GradientStops[0].Offset">                                             <DoubleAnimation To="0.2" />                                         </Storyboard>                                     </Storyboard>                                 </BeginStoryboard>                             </EventTrigger>                             <EventTrigger RoutedEvent="Border.MouseLeave">                                 <BeginStoryboard>                                     <Storyboard TargetProperty="Background.GradientStops[1].Offset" Duration="0:0:0.25">                                         <DoubleAnimation To="0.5" />                                         <Storyboard TargetProperty="Background.GradientStops[0].Offset">                                             <DoubleAnimation To="0.0" />                                         </Storyboard>                                     </Storyboard>                                 </BeginStoryboard>                             </EventTrigger>                         </Style.Triggers>                     </Style>                 </Border.Style>             </Border>         </Grid>     </Border> </Window> 

The result is a circular window with 4 quadrants and a black horizontal band that serves as a handle for dragging the window around:

Simon-Says quadrants

I'm also using it for displaying messages, and the player's score:

"Start!" "Well done! ready? | Your score: 5"

The buttons/quadrants are disabled while the message band is expanded (cannot be clicked; they still react to mouse-over though), and re-enabled when it's collapsed after clicking on the message.

Without a control box, the window can only be closed by clicking on the "Game Over" label:

"Game Over! | Your score: 0"

I have this C# code (among other code that isn't ready for review) in the code-behind, for animating the button clicks and the message band:

    private void AnimateMessageBand(double height)     {         var animation = new DoubleAnimation(height, new Duration(TimeSpan.FromMilliseconds(200)));         RegisterName(MessageBar.Name, MessageBar);         Storyboard.SetTargetName(animation, MessageBar.Name);         Storyboard.SetTargetProperty(animation, new PropertyPath("Height"));         var story = new Storyboard();         story.Children.Add(animation);         story.Begin(MessageBar);         story.Remove();     }      private readonly IDictionary<SimonButton, Border> _buttons;      public void HighlightSimonButton(SimonButton button)     {         var animation = new DoubleAnimation(0, 0.75, new Duration(TimeSpan.FromMilliseconds(100)));         RegisterName(button.ToString(), _buttons[button]);         Storyboard.SetTargetName(animation, button.ToString());         Storyboard.SetTargetProperty(animation, new PropertyPath("Background.GradientStops[1].Offset"));         var story = new Storyboard();         story.Children.Add(animation);         story.Begin(_buttons[button]);         story.Remove();     } 
              

Lista de respuestas

6
 
vote
vote
La mejor respuesta
 
  1. Usted usa Border Para crear un botón, en lugar de usar una clase real 99887776665444339 con plantilla personalizada. Debido a esto, tendrá que administrar manualmente todas las interacciones, que ya están implementadas en regular Thread0 ( 99887776655443311 , Thread2 , Thread3 , su interacción con Thread4 propiedad y teclado, etc.). Así que le sugiero que use un botón real.
  2. Bueno, tus guiones gráficos están claramente pegadas. :) ¿Por qué no los mueves a los recursos?
 
  1. You use Border to create a button, instead of using an actual Button class with custom template. Because of this you'll have to manually manage all the interactions, which are already implemented in regular Button (Clicked, IsPressed, Command, their interaction with IsEnabled property and keyboard, etc.). So i suggest you use an actual button.
  2. Well, your storyboards are clearly copy-pasted. :) Why don't you move them to resources?
 
 

Relacionados problema

12  Simon dice en JavaScript (con Knockout) - Snippet de código jugable  ( Simon says in javascript with knockout playable code snippet ) 
Resolví hacer todo el asunto con JavaScript de Vanilla como un desafío, pero el hombre, la vinculación y la gestión estatal de Knockout es demasiado fácil. ...

5  Simon dice en unidad  ( Simon says in unity ) 
He hecho que el Simon dice juego en unidad Empieza por adivinar un patrón de 3 colores y cada vez que complete el patrón un nuevo, aleatorio, se genera y...

9  Animar y jugar sonidos en Simon dice 'el camino angular'  ( Animate and play sounds in simon says the angular way ) 
Soy un codificador de Newbie y estoy tratando de aprender buenos hábitos de codificación. Estoy haciendo un Simon, dice el juego desafío del campo de código g...

10  Juego Simon / Four Tiles Game  ( Simon game four tiles game ) 
Cuando leí la comunidad Challange, no podía esperar. Así que aquí voy con el primer juego de cuatro azulejos: pantas5 Editar: Si desea ver el juego con ...

4  Simon en JavaScript  ( Simon in javascript ) 
Este es un juego de Simon usando Plain Javascript. Doy la bienvenida a cualquier comentario, sugerencias, Perspectivas o ideas para mejorar. Una opción que hi...

2  Simon dice que la implementación usando jQuery  ( Simon says implementation using jquery ) 
Me encantaría recibir algunos comentarios sobre mi implementación de "Simon dice". No he seguido el original en el que he creado una nueva secuencia cada vez,...

10  Simon-dice en AS3 - Funcionalidad de prototipos  ( Simon says in as3 prototyping functionality ) 
Mi entrada no grave para Simon dice. Basado en literal interpretación de las reglas: Crear una interfaz de usuario con cuatro botones de colores que se...

12  Simon dice / Four Tiles Game, con C ++ y SDL  ( Simon says four tiles game with c and sdl ) 
Mi opinión en la PREBASH DESAFÍO ", dice Simon" Juego, en menos de 300 líneas de C ++ (más el archivo de encabezado), usando sdl para la gestión de la ven...

5  Simon dice usando Arduino Uno  ( Simon says using arduino uno ) 
Construí un juego Simon, dice un juego de Arduino Uno. Este fue mi primer proyecto de Arduino "real". Me gustaría saber cómo mejorar, mecánica de juegos y efi...

2  Creó un juego de Simon utilizando HTML, CSS y JavaScript  ( Created a game of simon using html css and javascript ) 
Aquí está el Fiddle JS: https://jsfiddle.net/4jo9hvpk/ El código es completamente funcional. ¿Podría alguien señalar algún error en estilo? ¿Cualquier red...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos