Hoje temos um joguinho bem simples para relaxar. O Famoso Pedra, Papel, Tesoura ou jokenpô feito na linguagem C#. |
Este jogo muito antigo também conhecido como Jokenpô é de origem japonesa e é muito fácil de jogar.
Para quem não sabe do que se trata, o jogo pedra, papel e tesoura é um joguinho que se joga com as mãos, formando símbolos:
punho fechado para pedra,
mão aberta para papel
dedos indicador e médio em formato de “V”, para tesoura.
Os jogadores devem ficar com as mãos para trás e, ao sinal, mostram os símbolos escolhidos.
Quem ganha de quem ?
Simples assim, tudo que você tem que fazer é prever a estratégia do oponente.
No programa de exemplo você escolhe uma opção e aleatória o computador escolha a outra, e aplica-se as regras acima para indicar quem é o vencedor.
O programa usa o recurso de sintetizador de voz, usando os recursos da classe SpeechSynthesizer que lê os textos presentes nos arquivos: perdedor.txt, vencedor.txt, escolha.txt e saudações.txt que estão na pasta /bin/Debug do projeto.
Como este jogo é adaptado de um origem criado por Dave Bowlin deixei nos arquivos textos o texto original em inglês e a tradução.
Recursos Usados
Criando o projeto Windows Forms
Abra o VS 2019 Community e crie um novo projeto (File-> New Project) usando a linguagem VB .NET e o template Windows Forms Application.
Informe um nome a seu gosto. Eu vou usar o nome Pedra_Papel_Tesoura;
No formulário padrão Form1.cs inclua os controles :
6 Labels
6 PictureBox
2 Buttons - btnIr e btnNovaGuia
2 Timer
Disponha os controles conforme o leiaute da figura abaixo:
Vamos agora definir o código do formulário usando os eventos dos controles e a classe SpeechSynthesizer.
Definindo o código do projeto
Variáveis globais definidas no formulário
int venceu, perdeu, empate,
compEscolha = 0;
SpeechSynthesizer sintVoz = new SpeechSynthesizer();
List<string> escolha;
List<string> vencedor;
List<string> perdedor;
List<string> saudacoes;
Random acaso = new Random();
1- Código do evento Load do formulário
private void Form1_Load(object sender, EventArgs e) { GetVoz(); timerContador.Interval = 3000;
escolha = File.ReadAllLines(@"escolha.txt").ToList();
vencedor = File.ReadAllLines(@"vencedor.txt").ToList();
perdedor = File.ReadAllLines(@"perdedor.txt").ToList();
saudacoes = File.ReadAllLines(@"saudacoes.txt").ToList();
Saudacoes();
NovoJogo();
}
|
2- Código do método NovoJogo() :
private void NovoJogo()
{
compEscolha = acaso.Next(1, 4);
labelStatus.Text = "Fiz minha escolha, agora é você...";
btn1.BackgroundImage = Properties.Resources.rock;
btn2.BackgroundImage = Properties.Resources.paper;
btn3.BackgroundImage = Properties.Resources.scissors;
picComp1.Image = Properties.Resources.question;
picComp2.Image = Properties.Resources.question2;
picComp3.Image = Properties.Resources.question3;
btn1.Enabled = true;
btn2.Enabled = true;
btn3.Enabled = true;
}
|
3- Código do método GetVoz()
private void GetVoz()
{
// obtem as vozes instaladas e escolhe uma
List<string> vozComputador = new List<string>();
foreach(InstalledVoice voz in sintVoz.GetInstalledVoices())
{
VoiceInfo info = voz.VoiceInfo;
vozComputador.Add(info.Name);
}
int x = acaso.Next(0, vozComputador.Count);
string y = vozComputador[x];
sintVoz.SelectVoice(y);
}
|
3- Código dos métodos : Escolha(), Venceu(), Perdeu() e Saudacoes()
private void Escolha()
{
int x = acaso.Next(0, escolha.Count);
string y = escolha[x];
labelStatus.Text = y;
sintVoz.SpeakAsync(y);
}
private void Venceu()
{
int x = acaso.Next(0, vencedor.Count);
string y = vencedor[x];
labelStatus.Text = y;
sintVoz.SpeakAsync(y);
}
private void Perdeu()
{
int x = acaso.Next(0, perdedor.Count);
string y = perdedor[x];
labelStatus.Text = y;
sintVoz.SpeakAsync(y);
}
private void Saudacoes()
{
int x = acaso.Next(0, saudacoes.Count);
string y = saudacoes[x];
sintVoz.SpeakAsync(y);
}
|
4- Código do evento Click do botão Btn1
Define conforme a escolha o recurso que vai carregar para exibir a imagem e ativar o sintetizador de voz:
private void Btn1_Click(object sender, EventArgs e)
{
btn1.Enabled = false;
btn2.BackgroundImage = Properties.Resources.x;
btn3.BackgroundImage = Properties.Resources.x;
btn2.Enabled = false;
btn3.Enabled = false;
switch (compEscolha)
{
case 1:
empate++;
picComp1.Image = Properties.Resources.rock;
Escolha();
labelTie.Text = empate.ToString();
timerContador.Start();
break;
case 2:
perdeu++;
picComp2.Image = Properties.Resources.paper;
Perdeu();
labelLscore.Text = perdeu.ToString();
timerContador.Start();
break;
case 3:
venceu++;
picComp3.Image = Properties.Resources.scissors;
Venceu();
labelWScore.Text = venceu.ToString();
timerContador.Start();
break;
default:
labelStatus.Text = "Umm... vamos tentar de novo.";
timerContador.Start();
break;
}
}
|
5- Código do evento Click do botão Btn2
private void Btn2_Click(object sender, EventArgs e)
{
btn2.Enabled = false;
btn1.BackgroundImage = Properties.Resources.x;
btn3.BackgroundImage = Properties.Resources.x;
btn1.Enabled = false;
btn2.Enabled = false;
switch (compEscolha)
{
case 1:
venceu++;
picComp1.Image = Properties.Resources.rock;
Venceu();
labelWScore.Text = venceu.ToString();
timerContador.Start();
break;
case 2:
empate++;
picComp2.Image = Properties.Resources.paper;
Escolha();
labelTie.Text = empate.ToString();
timerContador.Start();
break;
case 3:
perdeu++;
picComp3.Image = Properties.Resources.scissors;
Perdeu();
labelLscore.Text = perdeu.ToString();
timerContador.Start();
break;
default:
labelStatus.Text = "Umm... vamos tentar novamente.";
timerContador.Start();
break;
}
}
|
6- Código do evento Click do botão Btn3
private void Btn3_Click(object sender, EventArgs e)
{
btn3.Enabled = false;
btn1.BackgroundImage = Properties.Resources.x;
btn2.BackgroundImage = Properties.Resources.x;
btn1.Enabled = false;
btn2.Enabled = false;
switch (compEscolha)
{
case 1:
perdeu++;
picComp1.Image = Properties.Resources.rock;
Perdeu();
labelLscore.Text = perdeu.ToString();
timerContador.Start();
break;
case 2:
venceu++;
picComp2.Image = Properties.Resources.paper;
Venceu();
labelWScore.Text = venceu.ToString();
timerContador.Start();
break;
case 3:
empate++;
picComp3.Image = Properties.Resources.scissors;
Escolha();
labelTie.Text = empate.ToString();
timerContador.Start();
break;
default:
labelStatus.Text = "Umm... vamos tentar de novo.";
timerContador.Start();
break;
}
}
|
Executando o projeto teremos o seguinte resultado:
Temos assim um jogo bem simples feito com poucos recursos.
Pegue o projeto do jogo aqui : Pedra_Papel_Tesoura.zip
"E (Jesus) disse-lhes: Acautelai-vos e guardai-vos
da avareza; porque a vida de qualquer não consiste na abundância do que
possui.""
Lucas 12:15
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Visual Studio - Dica de produtividade - Quick Launch - Macoratti.net
Visual Studio - Dica de produtividade - Nuget - Macoratti.net
Criando um navegador básico com o WebBrowser - Macoratti.net
Usando o componente WebBrowser para fazer o login ... - Macoratti.net