SchultzGames
Para tirar dúvidas, crie um tópico especifico na área "Dúvidas em Geral" e aguarde ser respondido. Evite comentar em tópicos não relacionados a sua dúvida :D
TÓPICOS RECENTES:
Tópico:
Postado em:
Postado por:
Fazer um variável bool ficar alternando de verdadeiro pra falso.
Fazer inimigo jogar coisas no player
Problema com um projeto na Unity 3d, versão 2018.4.26
Como alterar um GameObject dentro de uma array
Mini-Map
[RESOLVIDO] Rotação, c#.
objeto ir lentamente para uma posicao!
Numeros da calculadora nao fica em fileira ajudem?
Não consigo fazer verificação se meu texto esta escrito "12345"...
Configurar NPCs
Coletar um item e equipar sem inventario
Emulador fica com tela preta qnd inicia meu jogo android
INTERCALAÇÃO ENTRE 2 ATAQUES DE UM INIMIGO
Problemas de Python no Blender.
[RESOLVIDO] Instanciar objetos com um limite.
[RESOLVIDO] Câmera do Sketch ao exportar para Unity
Erro no Lightmap
Empurrar e puxar caixas com animação POR FAVOR.
[RESOLVIDO] Teclado do celular
Alguem tem os escripts pra sair sangue do inimigo e do player
Arrays com texturas diferentes!!
[RESOLVIDO] COMO RETIRAR UMA ANIMAÇAO DE UMA FBX
FORMACAO DE EQUIPE
Opinião sobre meu projeto (O Labirinto)
[RESOLVIDO] Jogador por nome dentro do jogo
Problema 'Unity Package Manager Error'
Package Manager, erro de dependência
[RESOLVIDO] Como mostrar a posição Y do objeto em um texto
sistema de valores com mensagem por faixa
[RESOLVIDO]Como fazer uma imagem desaparecer lentamente.
Opinião sobre um projeto (Burst Task)
Oportunidade de Freelancer
[ARQUIVOS INDISPONÍVEIS]Sistema PDV, Lojas Em Geral - C#
[RESOLVIDO] Como mostro algumas variáveis em um editor de inspector
[RESOLVIDO] Não consigo somar valor do texto
Projeto de um jogo em 3D... (Estou pensando em mudar a engine dele)
[RESOLVIDOS] script animator
Meu objeto me atravessa quando esta girando.
Limitar area de movimento da Camera
particulas e som iniciarem e pararem com o tempo!!??
[TUTORIAL] FPS Camera e movimento
Como faço Load Scene aleatorio?
Nao consigo alterar o valor da variavel de outro script
Tutorial script para passar de fase por pontos.
usar resultado em text de fórmula e multiplicar por um valor
Como verificar se foi meu player que tocou no CUBO?
[RESOLVIDO] player apontar a arma para o centro da tela
Verificar espaco se ocupado ou nao e limitar as instancias!!
Como faço para saber o ping na Photon engine?
Objeto atravessando colisor
Camera tremer ao pressionar tecla
[RESOLVIDO] Mover objeto depois de instanciado ate o player
[TUTORIAL] Unity 5 - Sistema Completo de PORTAS E CHAVES
Troca de Material por input
Imagem do celular no jogo!
[TUTORIAL] Camera de visão noturna (Night vision) na Unity 5
Unity - Trigger detectando os dois personagens - ERRO!
Ajuda com respawn do inimigo
[TUTORIAL] Banco de dados || MySQL
[RESOLVIDO] Qual é o nome desse efeito?
Spawn SlenderMan
Temporizador/Cronometro/TimerEvents
Como resolver este erro na Play store do google?
Como criar uma onda
Duvida com codigo toutch
[RESOLVIDO] Dúvida sobre menu
Ajuda c#
[RESOLVIDO] Camera Touch Mobile sem atrapalhar os botoes UI
[RESOLVIDO]Erro: Your project path contains non-ASCII characters....
script 2D double jump erro no 2 pulo que não pla ou pula alto demais
[TUTORIAL] Unity 5 - Pulo Duplo (Double Jump) para 2D e 3D
[RESOLVIDO]Operação com toggle group
Instanciar jogadores num array de transform - Photon Multiplayer
Como posso fazer um botão de ligar um GameObject aleatorio?
Como eu passo os valores de direção pro animator ?
Sistema de Escala de Renderização sem URP ou HDRP
[RESOLVIDO] Efeito de distorcer/esticar/borrar a imagem do jogo
ajuda: desenvolver sistema de inventario/mochila
[RESOLVIDO] [Character Controller] o Capsula Collider Dele é Só pra Bonito??
[RESOLVIDO] Instanciar obj filho que muda textura com botaoUIi!
[RESOLVIDO] Qual a melhor forma de configurar resolução para mobile?
Spawnar se tiver mesa disponivel
[RESOLVIDO] Ajuda com iluminação
[RESOLVIDO] Erro Som.
script para Mouse Look
operação com inputfield
[RESOLVIDO] Erro Material C#
[RESOLVIDO] Script para detecção de inimigos
Salvar Dados Binários no Servidor e Reabrir em jogo - Unity
[RESOLVIDO] Dúvida com o Novo Input System
Carregamento de caixas
ANIMAÇÃO EM MESH
Como ativar um gameobjet com uma tag especifica?
[TUTORIAL] Resolver bug dos reflexos, Unity 5.5+
Ajuda para criar um botão continuar.
ao buildar para android o jogo tem compotamento diferente
NavMeshAgent
[RESOLVIDO] Alguem pode me ajudar? [Gradle error, o que fazer?]
Como Modificar ossos de animações via script
Hoje à(s) 9:03 pm
Hoje à(s) 8:39 pm
Hoje à(s) 2:08 pm
Hoje à(s) 12:24 pm
Hoje à(s) 11:24 am
Ontem à(s) 11:08 pm
Ontem à(s) 6:14 pm
Ontem à(s) 6:03 pm
Ontem à(s) 6:00 pm
Ontem à(s) 4:13 pm
Ontem à(s) 2:19 am
Ontem à(s) 2:15 am
Sab Jun 19, 2021 1:28 pm
Sab Jun 19, 2021 10:05 am
Sab Jun 19, 2021 9:15 am
Sex Jun 18, 2021 9:20 pm
Sex Jun 18, 2021 8:35 pm
Sex Jun 18, 2021 1:58 pm
Sex Jun 18, 2021 9:30 am
Sex Jun 18, 2021 12:26 am
Qui Jun 17, 2021 8:05 pm
Qui Jun 17, 2021 5:05 pm
Qua Jun 16, 2021 10:13 am
Ter Jun 15, 2021 11:31 am
Ter Jun 15, 2021 8:39 am
Seg Jun 14, 2021 7:53 pm
Seg Jun 14, 2021 7:05 pm
Seg Jun 14, 2021 3:47 pm
Seg Jun 14, 2021 3:40 pm
Seg Jun 14, 2021 3:30 pm
Dom Jun 13, 2021 10:24 pm
Dom Jun 13, 2021 6:01 pm
Dom Jun 13, 2021 5:59 pm
Dom Jun 13, 2021 5:49 pm
Dom Jun 13, 2021 11:39 am
Sab Jun 12, 2021 9:46 am
Sab Jun 12, 2021 9:37 am
Sex Jun 11, 2021 5:43 pm
Sex Jun 11, 2021 11:10 am
Sex Jun 11, 2021 9:12 am
Qui Jun 10, 2021 8:31 pm
Qui Jun 10, 2021 4:45 pm
Qui Jun 10, 2021 4:41 pm
Qui Jun 10, 2021 4:38 pm
Qui Jun 10, 2021 1:51 pm
Qua Jun 09, 2021 7:23 pm
Qua Jun 09, 2021 12:30 am
Ter Jun 08, 2021 11:50 pm
Ter Jun 08, 2021 6:23 pm
Ter Jun 08, 2021 4:36 pm
Ter Jun 08, 2021 2:57 am
Seg Jun 07, 2021 8:33 pm
Seg Jun 07, 2021 2:02 pm
Seg Jun 07, 2021 1:06 pm
Seg Jun 07, 2021 11:11 am
Dom Jun 06, 2021 9:36 pm
Dom Jun 06, 2021 6:41 pm
Dom Jun 06, 2021 1:49 pm
Sab Jun 05, 2021 4:59 pm
Sab Jun 05, 2021 1:00 am
Sex Jun 04, 2021 10:14 pm
Sex Jun 04, 2021 7:02 pm
Sex Jun 04, 2021 1:57 pm
Qui Jun 03, 2021 11:11 pm
Qui Jun 03, 2021 4:41 pm
Qui Jun 03, 2021 11:25 am
Qua Jun 02, 2021 6:21 pm
Qua Jun 02, 2021 2:51 pm
Qua Jun 02, 2021 2:10 pm
Ter Jun 01, 2021 3:53 pm
Ter Jun 01, 2021 3:44 pm
Ter Jun 01, 2021 2:18 pm
Seg Maio 31, 2021 9:49 pm
Seg Maio 31, 2021 7:35 pm
Seg Maio 31, 2021 12:13 pm
Dom Maio 30, 2021 11:24 pm
Dom Maio 30, 2021 10:13 pm
Dom Maio 30, 2021 3:16 pm
Sab Maio 29, 2021 1:39 pm
Sab Maio 29, 2021 12:10 pm
Sex Maio 28, 2021 6:16 pm
Sex Maio 28, 2021 4:31 pm
Sex Maio 28, 2021 3:51 pm
Sex Maio 28, 2021 9:17 am
Qui Maio 27, 2021 11:03 pm
Qui Maio 27, 2021 3:45 pm
Qua Maio 26, 2021 3:29 pm
Qua Maio 26, 2021 2:03 pm
Ter Maio 25, 2021 2:38 pm
Ter Maio 25, 2021 10:51 am
Seg Maio 24, 2021 11:02 pm
Seg Maio 24, 2021 4:17 pm
Seg Maio 24, 2021 12:33 am
Dom Maio 23, 2021 9:54 pm
Dom Maio 23, 2021 4:35 pm
Sab Maio 22, 2021 12:22 pm
Sab Maio 22, 2021 9:18 am
Sab Maio 22, 2021 12:20 am
Sex Maio 21, 2021 8:53 pm
vinicius12412
Fagner
Pokedlg
Maston
marx478
Mozinhas2
Joaozim500
IDK
jhonih00010
ProBrStalker
JulioWinchester
Crash Psycho
ViniciusTKH
Fagner
Pokedlg
Leooo101006
MarceloYBP
TIKO
Fagner
Felipe42
Fagner
Felipe42
Cristhofer Marques
Fagner
capim22
Leandroigor
Pokedlg
amanda.ilg
Fagner
jeancvo3
poyser
Chilinger
Chilinger
Charlesoff
jhonih00010
NoctisDregon
Phirdy
diegopds
TigerStudios
capim22
Alessa1120
JulioWinchester
JulioWinchester
JulioWinchester
eduardonog30
jhonih00010
gui78h3
Pokedlg
Charlesoff
Charlesoff
JulioWinchester
capim22
hancyaragon
Mozinhas2
Fagner
MarcosSchultz
WLCS22
paulo.andrade
Celerom
Neyuriki
ItzDoog
MatheusEleodoro
JulioWinchester
Joana
loucoporjogo
Pokedlg
Mozinhas2
Fagner
eduardonog30
Phirdy
Phirdy
eduardonog30
DevFrustrada
Jäger
danisanca
Franttyck
Rangel Oblivion
marcoemayelli
rafaelsmoreiras
Pokedlg
verme1311
thgsousa342
Charlesoff
Pokedlg
SERGIOCS
eduardonog30
Pokedlg
danisanca
CleiMac
RenatoBarreto
Pokedlg
Franttyck
MayLeone
NerdGuin
lauderson
Matrirxp
hellside
verme1311
hendrick22

[TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01

Ir em baixo

TUTORIAL [TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01

Mensagem por MayLeone Dom Maio 27, 2018 2:17 pm

[TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 Apps.41556.13510798882888389.32419535-75e8-4225-b6d4-a9b3637973e8
Olá, bem vindos a mais um tutorial aqui do blog! Hoje nós iremos desenvolver uma aplicação que será um jogo de truco entre dois jogadores e offline (ou seja, o segundo jogador será uma inteligência artificial).
Por ser um sistema complexo (principalmente por conta da I.A) este tutorial será dividido em partes, para que cada etapa do desenvolvimento seja compreendida com extrema clareza.
O sistema terá: I.A inteligente que irá saber jogar as cartas corretas de acordo com a rodada corrente, verificador de empates e vitórias, sistema de aumento de apostas (pedir truco e etc), embaralhamento e distribuição de cartas, sorteio da vira e definição da manilha, possibilidade de jogar uma carta da mão para a mesa, construção de uma classe que irá gerenciar as cartas existentes no jogo e gerenciamento de arquivos.
Caso não saiba como jogar o Truco paulista (onde este tutorial está sendo embasado) recomendo que antes leia este pequeno tutorial: http://recantodamay.blogspot.com.br/2016/01/truco.html para aprender a jogar.

O resultado final será mais ou menos este:





E caso queira baixar a aplicação para testá-la: Clique aqui!




Iniciando com as imagens:
Primeiramente você deve ter as imagens das cartas salvas em seu pc.
Para isto, vá até o google e pesquise por imagens de cartas de baralhos e salve aquele que você achar mais agradável. Eu irei utilizar essas cartas para este tutorial:


[TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 BaD50



Para recortar cada sprite (imagem da carta) separadamente você pode utilizar o programa ShoeBox para isto. (É necessário ter instalado o Adobe Air para executar o ShoeBox!)
Com o ShoeBox aberto, apenas arraste a imagem que você deseja que tenha as sprites cortados para a opção "Extract Sprites". Ao fazer isto, esta janela irá abrir:



[TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 Untitled%2B1



E ao clicar em "Save" automaticamente todas as sprites serão extraídas da imagem em questão.
Com as imagens das cartas separadas, delete os curingas e as cartas de valor 8, 9 e 10 porque elas não pertencem ao jogo de truco.
Agora na imagem do verso da carta, coloque seu nome de "verso".
Para as outras cartas jogáveis faremos o seguinte: No jogo, precisamos de alguma forma identificar cada carta para então sabermos qual está sendo utilizada, por exemplo, a opção de querer jogar um 7 de copas. Para jogá-la, de alguma forma o programa precisará saber qual dessas imagens de fato representam o 7 de copas, então para descobrirmos a carta correta com relação à sua imagem, vamos nomeá-las da seguinte forma: Uma letra e um valor, sendo a letra a inicial do seu naipe (Por exemplo, espadas é "E") e o seu respectivo valor no jogo.
Lembrando que as cartas terão esses valores:



Valores das cartas:

4 -> 4
5 -> 5
6 -> 6
7 -> 7
Q -> 8
J -> 9
K -> 10
A -> 11
2 -> 12
3  -> 13



Então se por exemplo queremos representar a carta 7 de copas, devemos colocar seu nome de "C7", ou por exemplo, o valete de espadas ficaria ''E9'', e assim por diante...
No final, você teria algo como isto:



[TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 Untitled%2B2



Agora devemos importar essas imagens para o nosso projeto.
Com seu projeto aberto, vá até "Solution Explorer" e em "Properties" com o lado direito do mouse em vá em "Open", clicando na janela de "Resources", vá em "Add Resource" e em "Add Existing File", onde você vai procurar a pasta em seu PC onde as imagens das cartas se encontram, passando todas elas para este local, selecionando-as e clicando em "Abrir".
Depois de importar os arquivos gráficos para o projeto você pode fechar essa janela e voltar ao seu formulário.





Design do formulário:
Agora que temos todas as imagens prontas para serem utilizadas, vamos ao design de formulário, onde você pode desenvolvê-lo como desejar, apenas lembrando que devemos ter 6 pictureboxes para mostrar as cartas em nossas mãos e nas mãos da I.A.
Essas pictureboxes devem conter as tags (de 0 a 5) de acordo com sua indexação (por exemplo, a picturebox 1 deve ter a tag 0, a picturebox 2 tag 1, e assim sucessivamente)...
As pictureboxes responsáveis por mostrar as cartas do jogador podem ter a propriedade "Cursor" em "Hand" para dar a ideia de que elas podem ser clicadas.
Devemos ter também uma outra picturebox que irá exibir a vira e que possui o nome de "pbVira".
Para as labels, teremos labels que contam os pontos de cada jogador (lblPontos1 e lblPontos2) a label que informa o valor da aposta atual (lblApostas), a label que informa o valor da manilha (lblManilha) e três labels (que eu deixei o texto como bolinhas) que representam quem ganhou a mão atual (lbl1, lbl2, e lbl3).
Também utilizei outras labels que irão informar o que cada objeto representa, e duas pictureboxes: Uma para representar o baralho de cartas e a outra para mostrar a ordem dos naipes nas manilhas.
Ao final, o formulário ficou assim:


[TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 Untitled%2B3



Todas as pictureboxes estão marcadas em "AutoSize" em "SizeMode" e possuem como imagem inicial o verso da carta (com exceção da ordem de naipes).




Criando as cartas:
Temos então até o momento as IMAGENS das cartas importadas para o projeto, mas ainda não temos de fato algo que crie/implemente essas cartas para nós no jogo, correto?
Vamos então criar uma nova classe em nossa aplicação que terá como nome "Cartas", ou seja, através dessa classe teremos instâncias que serão de fato nossas cartas jogáveis.
Para criar uma nova classe no Visual Studio, vá em "Solution Explorer" e clique com o lado direito do mouse no projeto indo à opção "Add >> Class":



[TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 Untitled%2B4



Com a classe de nossas cartas criada, pense: O que uma carta de fato possui? Naipes e valores, não é? Pois então! Vamos iniciar a construção de nossa classe criando suas propriedades, ou seja, um char para representar o naipe e um int para representar o valor.
Precisamos também saber se a carta está de fato em nossa mão ou se já foi jogada à mesa, então para isso, também precisaremos de um booleano que irá gerenciar tal ação:



[TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 Untitled%2B5



Tendo nossas propriedades criadas, devemos também pensar nos campos dessa classe: Um deles será privado que será justamente a representação da imagem da carta no jogo (ou seja, um campo do tipo "Image").
Os outros dois campos são o baralho das cartas (ou seja, onde as nossas cartas ficarão guardadas para serem sorteadas) e o valor da vira.
Lembrando que esses dois últimos campos são dados que não pertencem à instância da classe, mas sim ao jogo como um todo, portanto devem ser estáticos.
O valor da vira será um simples int, enquanto a coleção que irá guardar nossas cartas (o baralho) será um dicionário que terá como chave uma string (ou seja, justamente o nome da carta, para sabermos qual delas queremos manipular) e o valor será uma imagem (Image) porque ele irá armazenar as imagens das cartas de acordo com seus respectivos nomes:


[TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 Untitled%2B6



Lembrando que para utilizar as classes "Dictionary" e "Image" é necessário fazer referências às bibliotecas "Collections" e "Drawing" em seu projeto:

[TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 Untitled%2B7

Agora que temos nossos campos e propriedades da classe, podemos criar seu construtor.
Para construir essa classe devemos ter suas informações a serem fornecidas quando a instanciamos, que seria o seu naipe e o seu valor, e também devemos lembrar que quando a carta é distribuída, ela é colocada em nossa mão, ou seja, a propriedade "Mao" deve iniciar como "True", logo, teremos algo como isto:

[TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 Untitled%2B8





Armazenando as cartas no dicionário:
Agora que temos propriedades, campos e o construtor da classe, podemos começar a implementar seus métodos.
Um deles seria o método que mostre a imagem correta de acordo com a Picturebox, mas antes de desenvolvermos este método precisamos colocar nossos recursos gráficos (as imagens das cartas) dentro do dicionário.
Então para acessarmos o diretório "Resourcers" do projeto, devemos fazer referências às bibliotecas "Resourcers" e "Globalization":


[TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 Untitled%2B9

A biblioteca "Resoucers" irá nos permitir utilizar classes como "ResoucerSet" que contém métodos que gerenciam e manipulam os arquivos dentro do diretório, enquanto a biblioteca "Globalization" nos permite utilizar as classe de cultura do arquivo.

Vamos então criar o método que inicializa os recursos gráficos no dicionário (ele deve ser estático por implementar um campo estático):


[TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 Untitled%2B10

Para inicializar um loop foreach dentro do diretório, precisamos criar uma variável que nos forneça "acesso" a estes conteúdos.
Essa variável irá receber um retorno do tipo "ResourceSet", ela deve conter a informação do local do diretório, ou seja: Properties.Resoucers.
Podemos então utilizar  a classe"ResouceManager" e seu método "GetResouceSet":


Código:
ResourceSet res = Properties.Resources.ResourceManager.GetResourceSet();


Esse método pede três parâmetros: O primeiro é a cultura corrente do arquivo, e para ter acesso a isto, basta utilizar a classe "CultureInfo" e sua propriedade "CurrentUICulture".
Os outros dois parâmetros são booleanos, um que irá carregar o arquivo caso ele não tenha sido carregado (se for true) e o outro se estiver true irá tentar carregar o arquivo caso ele não tenha sido encontrado.
Deixaremos ambos em true:


Código:
ResourceSet res = Properties.Resources.ResourceManager.GetResourceSet(CultureInfo.CurrentUICulture, true, true);


*Consulte a documentação .Net para compreender essas classes.


Agora que temos esta variável de acesso criada, podemos percorrer com o foreach todos os arquivos de imagens dentro do diretório dos recursos.
Para podemos obter o nome daquele arquivo e o seu valor, podemos fazer com que a variável de passagem do loop seja do tipo "DictionaryEntry".
Podemos então obter por meio das propriedades "Key" e "Value" da classe "DictionaryEntry" o nome do arquivo e seu valor, e então armazená-los em variáveis distintas:


[TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 Untitled%2B11

Como vamos percorrer um diretório que pode não apenas possuir imagens, mas também outros tipos de arquivos (áudios, por exemplo) devemos realizar uma verificação para validar se aquele recurso é de fato um arquivo de imagem (Bitmap):

[TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 Untitled%2B12

Como também não queremos que o arquivo de imagem "verso" seja colocado dentro do baralho, podemos verificar se o nome daquele arquivo é diferente de "verso":

[TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 Untitled%2B13

Agora sim, caso o arquivo seja uma imagem e ela não seja o verso das cartas, podemos adicioná-la ao nosso dicionário "Baralho", lembrando que a sua chave é o seu nome:

[TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 Untitled%2B14

Você pode notar que realizei um casting em "imagemArquivo" para "Image", isto porque esta variável era do tipo "object" e precisamos convertê-la para "Image" para podemos utilizada na Picturebox.
E este método está pronto!

Agora que temos um método que adiciona os recursos gráficos dentro do nosso dicionário, vamos criar o método que armazena a imagem correspondente da carta:

Ela vai ser pública e irá pertencer à instância (ou seja, não será estática) com o tipo de retorno "Image", tendo como parâmetro justamente o naipe (char) e o outro de seu valor como carta (int), para servir justamente como chave do dicionário.
Devemos então criar uma variável que receba a concatenação dos parâmetros, assim teremos justamente o nome de alguma carta dentro do diretório de recursos, como por exemplo, "C7", lembra-se?
E então retornamos a imagem da carta sendo justamente o arquivo dentro do dicionário de acordo com a chave de parâmetros:


[TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 Untitled%2B15

Nós teremos ainda outros métodos a serem implementados nessa classe, mas para esta parte do tutorial, já está de bom tamanho!
O que iremos fazer agora é utilizar essa classe:






Instanciando as cartas:
Depois de implementarmos a classe responsável pelas cartas do jogo, vamos sortear aleatoriamente do baralho (dicionário) 6 cartas: 3 para o player e 3 para a I.A e fazê-las com que sejam mostradas nas respectivas pictureboxes.

Para tal, volte ao design do formulário e dê F7 no teclado para abrir a codificação do formulário.
Nele crie um vetor de tamanho 6 do tipo "Cartas" para armazenar os objetos dessa classe, um outro vetor do tipo "PictureBox" para armazenar as pictureboxes do formulário, e um vetor do tipo "char" para guardar os 4 naipes das cartas. Instancie também a classe Random:


[TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 Untitled%2B16

Agora crie um método que chame o método estático "IniciarRecursos" da classe "Cartas" para adicionar as cartas dentro do dicionário.
Também adicione as pictureboxes dentro do vetor.
Não se esqueça de chamar este método de inicialização dentro do construtor do formulário:


[TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 Untitled%2B20

Agora vamos criar o método que sorteie aleatoriamente do baralho 6 cartas, sendo 3 para o player e 3 para a I.A
Para não sortearmos cartas repetidas, criamos uma lista do tipo "string" que irá armazenar a chave da carta sorteada, assim verificamos se aquela carta tem a chave dentro dessa lista, e caso tiver, não sortearemos, pois ela já foi sorteada antes.
Também precisamos randomizar os naipes, para isto, crie uma variável que irá armazenar o valor randomizado do vetor de naipes, e outra que armazene o valor da carta (entre 4 e 14):


[TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 Untitled%2B18

Como queremos sortear 6 cartas distintas, podemos colocar essas randomizações dentro de um laço for que repita 6 vezes.

Dentro deste laço, podemos criar uma estrutura "while" que irá impedir que a carta seja sorteada de novo, ou seja, até que este laço fique "true" deve-se sortear uma carta nova, ou seja, até que não contenha a chave da carta na lista de repetidas:

[TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 Untitled%2B21

Caso não contenha essa chave na lista de cartas repetidas, instancia-se um novo objeto da classe "Cartas" dentro do vetor de instâncias dessa classe, passando como argumentos de seu construtor, justamente o naipe e o valor sorteados.
Também poderá utilizar o método "MostrarImagem" da instância de "Cartas" e atribuí-la à propriedade "Image" da picturebox correspondente ao contador do laço, dentro do vetor de pictureboxes, passando também como argumento o naipe e valor sorteados, para mostrar a imagem correta da carta sorteada.
Por fim, adicione essa chave na lista:

[TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 Untitled%2B23

Agora com as instâncias da classe de cartas criadas e tendo suas respectivas imagens nas pictureboxes, chame este método no construtor do formulário (após a chamada do inicializador) e perceba que toda vez que você roda o teste do projeto, 6 cartas são sorteadas aleatoriamente para cada jogador, sem repetições, por exemplo:

[TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 Untitled%2B23

Claro que as cartas da I.A não poderão ficar à mostra e ainda devemos sortear a vira, mas creio que para esta parte do tutorial já temos o bastante, não é?






Finalização:
Então é isto pessoal, este tutorial chega ao fim, mas ainda teremos as outras partes onde continuaremos com a implementação dessas classes e métodos, ok? Então fique de olho para acompanhar quando sair o resto deste tutorial!
Até o próximo.
MayLeone
MayLeone
Instrutor

Feminino PONTOS : 2341
REPUTAÇÃO : 518
Áreas de atuação : Unity & C#
Respeito as regras : [TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 Aad8pUi

http://compilemosfacil.blogspot.com.br

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01

Mensagem por augustobrito Dom Maio 27, 2018 3:36 pm

Bom tutorial =)
augustobrito
augustobrito
Mestre
Mestre

Masculino PONTOS : 2751
REPUTAÇÃO : 161
Áreas de atuação : C#, C, C++, Python & JS.
Respeito as regras : [TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 WvDYdlf

http://augustobrit.github.io

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01

Mensagem por MayLeone Dom Maio 27, 2018 6:26 pm

dimmuo escreveu:Bom tutorial =)
Obrigada!  :D
MayLeone
MayLeone
Instrutor

Feminino PONTOS : 2341
REPUTAÇÃO : 518
Áreas de atuação : Unity & C#
Respeito as regras : [TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 Aad8pUi

http://compilemosfacil.blogspot.com.br

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01

Mensagem por akio Qua Nov 28, 2018 11:28 am

Muito bom... Já saiu parte dois? Não achei '~'

akio
Iniciante
Iniciante

PONTOS : 938
REPUTAÇÃO : 0
Respeito as regras : [TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 WvDYdlf

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01

Mensagem por igorobm Qui Nov 29, 2018 1:11 am

Que isso tutorial muito bem feio, parabéns..
igorobm
igorobm
MembroAvançado

Masculino PONTOS : 1533
REPUTAÇÃO : 33
Idade : 24
Áreas de atuação : Unity, programação C#.
Respeito as regras : [TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 WvDYdlf

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01

Mensagem por MajorH Dom Maio 16, 2021 9:34 am

Queria um tutorial para fazer um jogo de cartas de duelo para jogar com meus amigos Curti isso
MajorH
MajorH
Iniciante
Iniciante

PONTOS : 39
REPUTAÇÃO : 0
Respeito as regras : [TUTORIAL] Criando jogo de cartas com I.A (C# e Visual Studio) - Parte 01 WvDYdlf

Voltar ao Topo Ir em baixo

Voltar ao Topo


 
Permissão neste fórum:
Você não pode responder aos tópicos neste fórum