Você está na página 1de 9

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; }

}
/// <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:

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;

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*Mydeck.Cards.Count));

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();

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!