Professional Documents
Culture Documents
Estou trabalhando em um jogo de cartas e então resolvi contribuir para a comunidade com um simples porém promissor sistema
de DECK de baralho!.
VI no google que muita gente tem dificuldae na hora de começar seus jogos de CARTAS. O Maior dificuldade que eu notei foi no
desenvolvimento de uma classe que gerencie o DECK e a distribuição cartas. Então vou contribuir com este pequeno porém
dificultoso COMEÇO! Tenho certeza que apartir daqui, aqueles que tinham esta dificuldade, conseguirão dar continuidade e
expandir o mesmo!.
VAMOS LA:
Fiz pequena baseada no baralho comun de 52 Cartas (sem o coringa), Sendo 13 cartas em 4 Naipes Diferente.
Ass, 2,3,4,5,6,7,8,9,10,Vallete, Dama, Rei.
> Vocês serão capazes de Gerar o DECK em ordem e automaticamente.
> Poderão Embaralhar o DECK
> Poderão Retirar uma carta do Deck (por vez) e logicamente receber a carta Retirada do DECK.
VOcês vão observar que após o deck ser gerado e embaralhado, a ação de retirar uma carta é consistem em pegar a proxima carta
do DECK. Ex: Se seu deck estiver em ordem, (AC,2O,3E,4P) e retirar uma carta do deck, esta carta sera a (ACopas), e a proxima
(2Ouro), E asism sucessivamente. Para aumentar a segurança contra hacks, vocês poderão efetuar o Embaralhamento após cada
retirada e ou Antes e apos cada Retirada. Isto vai depender do estilo de jogo que vc vai fazer apartir daqui
Cards.Collections.cs
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System;
namespace Cards.Collections
{
/// <summary>
/// Naipe de cartas use: ([string] para nomes e [int] para valores numéricos) Ao iniciar um novo Deck
/// 52 Cartas são ordenadas de 1 a 13 com ordem de Naipe
/// </summary>
public enum Naipe
{
Paus = 1, //Paus
Ouro = 2, //Ouro
Copas = 3, //Copas
Espada = 4, //Espada
}
/// <summary>
/// Valores de cartas use: ([string] para nomes e [int] para valores numéricos)
/// </summary>
public enum CardValue
{
Ass = 1, //As
Dois = 2,
Tres = 3,
Quatro = 4,
Cinco = 5,
Seis = 6,
Sete = 7,
Oito = 8,
Nove = 9,
Dez = 10,
Valete = 11,
Dama = 12,
Rei = 13,
}
/// <summary>
/// Retorna ou Seta Naipe e Valor da carta
/// </summary>
public class Card
{
public Naipe Naipe { get; set; }
public CardValue CardValue { get; set; }
}
http://www.unidev.com.br/index.php?/topic/55769deckdebaralhocontribui%C3%A7%C3%A3o/ 1/5
27/04/2017 Deck de Baralho Contribuição Unity3D Fórum
/// <summary>
/// //DECK é Maço de cartas do qual apartir dele são distribuidas as cartas para os jogadores
/// </summary>
public class Deck
{
public List<Card> Cards { get; set; } //NAIPE e VALOR
public Deck()
{
Reset();
}
/// <summary>
/// Inicia DECK com 52 Cartas em ordem
/// </summary>
public void Reset()
{
Cards = Enumerable.Range(1, 4).SelectMany(
naipe => Enumerable.Range(1, 13).Select(
cardValue => new Card() { Naipe = (Naipe)naipe, CardValue = (CardValue)cardValue })).ToList();
}
/// <summary>
/// Embaralha ordem das cartas do deck
/// </summary>
public void DeckMix()
{
Cards = Cards.OrderBy(cardValue => Guid.NewGuid()).ToList();
}
/// <summary>
/// Remove a proxima carta do DECK e retorna esta Carta
/// </summary>
public Card TakeCard()
{
if (Cards.Count > 0)
{
Card card = Cards.FirstOrDefault(); //Pega o primeiro da sequencia no Deck
Cards.Remove(card); //Removemos esta carta do Deck
return card;
}
else
{
return null;
}
}
}
COMO USAR?
using Cards.Collections; //OBSERVE A INCLUSAO DO NAMESPACE QUE EU CRIEI ANTERIORMENTE
public class testCards : MonoBehaviour {
private Deck deck; //Nosso Maço de cartas
void start()
{
deck = new Deck(); //Acabamos de criar nosso maço de cartas com 52 cartas ordenadas Agora é ser feliz
}
}
Quandidade de cartas no deck:
http://www.unidev.com.br/index.php?/topic/55769deckdebaralhocontribui%C3%A7%C3%A3o/ 2/5
27/04/2017 Deck de Baralho Contribuição Unity3D Fórum
Debug.Log(Mydeck.Cards.Count); //52
Quantidade de Cartas por NAIPE:
Mydeck = new Deck();
Debug.Log(Mydeck.Cards.Count(card => card.Naipe == Naipe.Copas)); //13
Debug.Log(Mydeck.Cards.Count(card => card.Naipe == Naipe.Espada)); //13
Debug.Log(Mydeck.Cards.Count(card => card.Naipe == Naipe.Ouro)); //13
Debug.Log(Mydeck.Cards.Count(card => card.Naipe == Naipe.Paus)); //13
Todas as Cartas do DECK:
Mydeck = new Deck();
for (int a = 0; a < Mydeck.Cards.Count; a++)
{
Debug.Log(Mydeck.Cards[a].CardValue + " de " + Mydeck.Cards[a].Naipe);
}
Vericando a carta por VALOR
for (int a = 0; a < Mydeck.Cards.Count; a++)
{
Debug.Log((int)Mydeck.Cards[a].CardValue); //Ass = 1 / Valete = 11 etc etc
}
Paus = 1, //Paus
Ouro = 2, //Ouro
Copas = 3, //Copas
Espada = 4, //Espada
for (int a = 0; a < Mydeck.Cards.Count; a++)
{
Debug.Log((int)Mydeck.Cards[a].Naipe);
}
Embaralhando o DECK e Mostrando novamente as cartas:
Mydeck.DeckMix(); //Embaralhou o deck. Use quantas vezes necessitar do embaralho
for (int a = 0; a < Mydeck.Cards.Count; a++)
{
Debug.Log(Mydeck.Cards[a].CardValue + " de " + Mydeck.Cards[a].Naipe);
}
Criando o deck, Embaralhando, Pegando uma carta e Embaralhando novamente.
Mydeck.DeckMix(); //Embaralha
Card card = Mydeck.TakeCard(); //Pega uma carta e remove ela do Deck
Debug.Log(card.CardValue + " de " + card.Naipe); //Mostra a carta removida do deck
Mydeck.DeckMix(); //Embaralhamos as cartas restantes do deck
E se quiserem um exemplo VISUAL do DECK fiz um exemplo simples com onGUI.
using UnityEngine;
using System.Collections;
using System.Linq;
http://www.unidev.com.br/index.php?/topic/55769deckdebaralhocontribui%C3%A7%C3%A3o/ 3/5
27/04/2017 Deck de Baralho Contribuição Unity3D Fórum
using Cards.Collections;
public class teste2 : MonoBehaviour {
private Deck deck; //Maço de cartas
private GUIStyle StyleDeck;
private Vector2 ScrollDeck = Vector2.zero;
void Start ()
{
Mydeck = new Deck();
StyleDeck = new GUIStyle();
StyleDeck.fontSize = 10;
StyleDeck.normal.textColor = Color.white;
StyleDeck.padding = new RectOffset(10, 5, 0, 0);
}
// Update is called once per frame
void Update ()
{
if (Input.GetKeyDown(KeyCode.M))
{
for (int a = 0; a < Mydeck.Cards.Count; a++)
{
Debug.Log(Mydeck.Cards[a].CardValue + " of the "+Mydeck.Cards[a].Naipe);
}
}
if (Input.GetKeyDown(KeyCode.E))
{
Mydeck.DeckMix();
}
if (Input.GetKeyDown(KeyCode.P))
{
Card card = Mydeck.TakeCard();
if (card != null)
{
Debug.Log(card.CardValue + " " + card.Naipe);
}
}
}
void OnGUI()
{
GUI.BeginGroup(new Rect(10, 10, 200, Screen.height‐20));
GUI.Box(new Rect(0, 0, 190, Screen.height ‐ 30), "DECK");
ScrollDeck = GUI.BeginScrollView(new Rect(0, 30, 190, Screen.height ‐ 120), ScrollDeck, new Rect(0, 0, 0, 26
for (int a = 0; a < Mydeck.Cards.Count; a++)
{
//GUILayout.Label(DeckText += deck.Cards[a].CardValue + " de " + deck.Cards[a].Naipe + "\n");
GUI.Box(new Rect(10,26*a,160,26),Mydeck.Cards[a].CardValue + " de " + Mydeck.Cards[a].Naipe);
}
GUI.EndScrollView();
if (GUI.Button(new Rect(100, Screen.height ‐ 60, 80, 22), "Embaralhar")) { Mydeck.DeckMix(); }
GUI.EndGroup();
}
http://www.unidev.com.br/index.php?/topic/55769deckdebaralhocontribui%C3%A7%C3%A3o/ 4/5
27/04/2017 Deck de Baralho Contribuição Unity3D Fórum
}
Aperte (E ) para Embaralhar
Aperte (P) para pegar uma carta e mostrar do LOG a carta que pegou. A s cartas do deck serao atualizadas!
http://www.unidev.com.br/index.php?/topic/55769deckdebaralhocontribui%C3%A7%C3%A3o/ 5/5