WPF - Adivinhe a Carta (C#)


 Hoje veremos um jogo bem simples feito na plataforma WPF usando a linguagem C#.

Hoje veremos um joguinho feito na plataforma WPF com C# cujo objetivo é adivinhar a carta com a imagem do Trump.

Abaixo vemos a apresentação do jogo:

O jogo é bem simples:

- Temos uma pasta chamada Imagens no projeto contendo 4 imagens que serão embaralhadas e exibidas na interface;
- Para embaralhar as cartas o usuário deve clicar no botão Iniciar;
- Após embaralhar as cartas o usuário deve clicar na carta na qual acha que a imagem do Trump esta;

Recursos Usados:

Código do projeto

Abra o VS 2017 Community e crie um projeto usando a linguagem C# usando o template WPF app (.NEt Framework) com o nome Trump.

Defina o código abaixo no arquivo MainWindow.xaml :

<Window x:Class="WpfApp1.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:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="Onde está o Trump ?" Height="350" Width="473" ResizeMode="CanMinimize" Background="#FF4B4B4B" WindowStartupLocation="CenterScreen">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="15*"/>
            <ColumnDefinition Width="4*"/>
        </Grid.ColumnDefinitions>
        <Image x:Name="carta_0" HorizontalAlignment="Left" Height="160" Margin="35,60,0,0" VerticalAlignment="Top" Width="120" Source="images/a1.png" 
MouseDown="Image_MouseDown" Cursor="Hand"/>
        <Image x:Name="carta_1" HorizontalAlignment="Left" Height="160" Margin="170,60,0,0" VerticalAlignment="Top" Width="120" Source="images/trump.png" 
MouseDown="Image_MouseDown" Cursor="Hand"/>
        <Image x:Name="carta_2" HorizontalAlignment="Left" Height="160" Margin="306,60,0,0" VerticalAlignment="Top" Width="120" Source="images/a2.png" 
MouseDown="Image_MouseDown" 
Cursor="Hand" Grid.ColumnSpan="2"/>
        <Button x:Name="btnIniciar" Content="Iniciar" HorizontalAlignment="Left" Margin="35,248,0,0" VerticalAlignment="Top" Width="102" Height="36" Background="#FF3CBD00" 
Foreground="White" FontSize="18" Click="btnIniciar_Click"/>
        <TextBlock x:Name="txtStatus" HorizontalAlignment="Left" Margin="157,259,0,0" TextWrapping="Wrap" Text="---" VerticalAlignment="Top" Height="23" Width="269" 
Foreground="White" TextAlignment="Center" FontSize="16" Grid.ColumnSpan="2"/>
        <Label x:Name="qLbl1" Content="?" HorizontalAlignment="Left" Margin="76,-4,0,0" VerticalAlignment="Top" Foreground="#FFFFF300" FontSize="48" Height="63"/>
        <Label x:Name="qLbl2" Content="?" HorizontalAlignment="Left" Margin="213,-4,0,0" VerticalAlignment="Top" Foreground="#FFFFF300" FontSize="48" Height="63"/>
        <Label x:Name="qLbl3" Content="?" HorizontalAlignment="Left" Margin="347,-4,0,0" VerticalAlignment="Top" Foreground="#FFFFF300" FontSize="48" Height="63" Grid.ColumnSpan="2"/>
        <TextBlock x:Name="txtPlacar" HorizontalAlignment="Left" Margin="10,290,0,0" TextWrapping="Wrap" Text="Placar :" VerticalAlignment="Top" Foreground="White" Width="196" 
FontStyle="Italic" FontSize="16"/>
    </Grid>
</Window>
   

O código define 3 imagens , 1 button , 1 TextBlock , 3 Labels e um TextBlock para exibir o placar. Usamos também um Timer.

A seguir no arquivo code-behind MainWindow.xaml.cs inclua o código abaixo:

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Threading;
namespace WpfApp1
{
    public partial class MainWindow : Window
    {
        string[] arr = { "a1", "a2", "trump" };
        int contaTempo = 0;
        int placar = 0;
        Brush statusTxtColor;
        DispatcherTimer timer = new DispatcherTimer();        
        public MainWindow()
        {
            InitializeComponent();
            HabilitaCarta(false);
            txtStatus.Text = "";
            timer.Tick += Timer_Tick;
            timer.Interval = new TimeSpan(0,0,0,0,100);
            qLbl1.Visibility = qLbl2.Visibility = qLbl3.Visibility = Visibility.Collapsed;
            carta_0.Source = carta_1.Source = carta_2.Source = GetImagem("back");            
        }
        private void Timer_Tick(object sender, EventArgs e)
        {
            defineCarta();
        }
        //Define as cartas
        private void defineCarta()
        {
            contaTempo++;
            Embaralhar(arr);
            if (contaTempo < 8)
            {
                AbreCarta();
            }
            else
            {
                EncerraEmbaralhar();
            }
        }
        //Pega as imagens
        private BitmapImage GetImagem(string img)
        {
            BitmapImage image = new BitmapImage();
            image.BeginInit();
            image.UriSource = new Uri("imagens/" + img + ".png",UriKind.Relative);
            image.EndInit();
            return image;
        }
        // Encerra o embaralhamento
        private void EncerraEmbaralhar()
        {
            carta_0.Source = carta_1.Source = carta_2.Source = GetImagem("back");
            qLbl1.Visibility = qLbl2.Visibility = qLbl3.Visibility = Visibility.Visible;
            txtStatus.Text = "Onde esta o Trump ?";
            timer.Stop();
            contaTempo = 0;
            btnIniciar.IsEnabled = true;
            HabilitaCarta(true);
        }
        //Embaralha o array
        private void Embaralhar( string[] array)
        {
            Random random = new Random();
            int n = array.Length;  
            for (int i = 0; i < n;  i++) 
            {               
                int r = i + random.Next(n - i); 
                string t = array[r];  
                array[r] = array[i];
                array[i] = t;
            }
            arr = array;
        }     
        //evento click da carta
        private void Image_MouseDown(object sender, MouseButtonEventArgs e)
        {
            AbreCarta();
            HabilitaCarta(false);
            Image carta =(Image) sender;
            char[] splitChar =  { '_' };
            string[] numeroString = carta.Name.Split(splitChar);
            int numeroCarta = int.Parse(numeroString[1]);
            VerificaResultado(numeroCarta);          
        }
        // Verifica o resultado
        private void VerificaResultado(int numero)
        {
            string resultado = "";
           
            if (arr[numero] == "trump")
            {
                statusTxtColor = Brushes.GreenYellow;
                resultado = "PARABÉNS... Achou o Trump !!";
                placar += 10;
            }
            else
            {
                statusTxtColor = Brushes.Yellow;
                resultado = "ERROU... Tente outra vez!!";
                placar -= 5;
                if (placar <= 0)
                {
                    placar = 0;
                }
            }
            txtStatus.Foreground = statusTxtColor;
            txtStatus.Text = resultado;
            txtPlacar.Text ="Placar: "+ placar.ToString();
        }
        private void btnIniciar_Click(object sender, RoutedEventArgs e)
        {
            timer.Start();
            statusTxtColor = Brushes.White;
            txtStatus.Foreground = statusTxtColor;
            txtStatus.Text = "Aguarde...";
            HabilitaCarta(false);
            btnIniciar.IsEnabled = false;
            qLbl1.Visibility = qLbl2.Visibility = qLbl3.Visibility = Visibility.Collapsed;
        }
        // Habilita o click da carta
        private void HabilitaCarta( bool habilita )
        {
            carta_0.IsEnabled = carta_1.IsEnabled = carta_2.IsEnabled = habilita;
        }
        //Abre a  carta
        private void AbreCarta()
        {
            carta_0.Source = GetImagem(arr[0]);
            carta_1.Source = GetImagem(arr[1]);
            carta_2.Source = GetImagem(arr[2]);
        }
        // Fecha a carta
        private void FechaCarta()
        {
            carta_0.Source = carta_1.Source = carta_2.Source = GetImagem("back");
        }
    }
}

O código é bem simples e já esta comentado.

Então divirta-se... (Fique à vontade para mudar a imagem do Trump se não gostar...)

Pegue o código do projeto aqui : Trump.zip

"Portanto, agora nenhuma condenação há para os que estão em Cristo Jesus, que não andam segundo a carne, mas segundo o Espírito."
Romanos 8:1

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti