Um jogo estilo memory match (formar pares) desenvolvido em C# com WPF (XAML) no Visual Studio. O objetivo é encontrar todos os pares de animais no menor tempo possível ⏱️. Esse projeto é ideal para praticar C#, WPF, eventos e manipulação de UI com XAML.
- 🎮 Formar pares de animais clicando nos blocos.
- 🐱🐰🐻 Diversos emojis de animais.
- ⏱️ Cronômetro em tempo real que mede quanto tempo você levou.
- 🔄 Reinício automático ao final da partida (clicando no tempo).
- 🎲 Randomização das posições dos animais a cada partida.
- 🖥️ Interface leve e responsiva feita em WPF.
- C# (linguagem principal)
- WPF (Windows Presentation Foundation)
- XAML para a interface gráfica
- Visual Studio como IDE
- DispatcherTimer (para controlar o cronômetro)
📦 MatchGame
┣ 📜 MainWindow.xaml # Layout principal (UI)
┣ 📜 MainWindow.xaml.cs # Lógica do jogo (C#)
┣ 📜 App.xaml # Configurações globais do WPF
┣ 📜 App.xaml.cs # Inicialização do app
┗ 📜 MatchGame.csproj # Arquivo de configuração do projeto
-
Pré-requisitos
- Visual Studio (versão 2019 ou superior recomendada).
- .NET Desktop Development instalado.
-
Clonar o repositório
git clone https://github.com/SEU_USUARIO/MatchGame.git cd MatchGame -
Abrir no Visual Studio
- Clique duas vezes no arquivo
MatchGame.csprojou - Abra o Visual Studio →
File→Open→Project/Solution.
- Clique duas vezes no arquivo
-
Rodar o jogo
- Pressione
F5(Debug) ouCtrl + F5(Run without Debug).
- Pressione
-
Clique em um dos blocos (
?) para revelar o animal escondido. -
Clique em outro bloco para tentar formar o par.
- ✅ Se forem iguais → o par desaparece.
- ❌ Se forem diferentes → o primeiro bloco é revelado novamente.
-
Continue até encontrar todos os 8 pares.
-
O cronômetro será exibido no rodapé.
-
Ao terminar, clique no cronômetro para recomeçar a partida.
O setup do jogo é feito com uma lista de emojis e embaralhamento aleatório:
List<string> animalEmoji = new List<string>()
{
"🐿️", "🐱", "🐭", "🐺", "🐰", "🦊", "🐻", "🐼",
"🐿️", "🐱", "🐭", "🐺", "🐰", "🦊", "🐻", "🐼"
};
Random random = new Random();
foreach (TextBlock textBlock in mainGrid.Children.OfType<TextBlock>())
{
if (textBlock.Name != "timeTextBlock")
{
int index = random.Next(animalEmoji.Count);
string nextEmoji = animalEmoji[index];
textBlock.Text = nextEmoji;
animalEmoji.RemoveAt(index);
}
}O cronômetro é controlado com DispatcherTimer:
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(.1);
timer.Tick += Timer_Tick;
timer.Start();- Implementar níveis de dificuldade (mais blocos, menos tempo).
- Adicionar efeitos sonoros para acertos/erros.
- Criar sistema de pontuação.
- Adicionar ranking de tempos.
- Suporte a temas personalizados (diferentes tipos de cartas).
- Publicar como executável (.exe) no GitHub Releases.
Contribuições são sempre bem-vindas! 💡 Se quiser colaborar:
-
Faça um fork do projeto.
-
Crie uma branch com sua feature:
git checkout -b minha-feature
-
Commit suas mudanças:
git commit -m "Adicionando nova feature" -
Faça um push:
git push origin minha-feature
-
Abra um Pull Request.
Este projeto está sob a licença MIT. Você pode usar, modificar e distribuir livremente. Veja o arquivo LICENSE para mais detalhes.
Feito com ❤️ por Iclasth Se gostou, ⭐ dê uma estrela no repositório!
