C#Poker:如何在翻牌前,翻牌圈,转牌圈,河牌圈跟踪玩家并制作游戏引擎(课程)?

时间:2015-11-10 20:43:50

标签: c#

我最近在学习c#并希望创建一个简单的'控制台app扑克游戏。 我创建了类:玩家,手,甲板,经销商。经销商从牌组中取出牌并将其分配给牌手实例。我现在正在努力的是如何进一步发展?我需要做一些游戏玩法。

这就是我编码的内容:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication10
{
    class Program
    {
        static void Main(string[] args)
        {
            //Deck d = new Deck();
            Player[] players = new Player[2];
            Dealer dealer = new Dealer();

            players[0] = new Player("M");
            players[1] = new Player("T");


        foreach (var player in players)
        {
            Console.WriteLine(player.name);
        }

        Console.WriteLine();

        foreach (var player in players)
        {
            player.AddCardsToHand(dealer);
        }

        Console.WriteLine("View hand van player 1");
        foreach (string card in players[0].ViewHandCards())
        {
            Console.WriteLine(card);
        }
        Console.WriteLine();
        Console.WriteLine("View hand van player 2");

        foreach (string card in players[1].ViewHandCards())
        {
            Console.WriteLine(card);
        }

        Console.WriteLine();
        Console.WriteLine("Number of players instantiated:");
        Console.WriteLine(Player.playerCount);
        Console.WriteLine();
        Console.WriteLine("Number of hands instantiated:");
        Console.WriteLine(Hand.handCount);
        Console.WriteLine();

        dealer.SetMoneyAmount(players[0]);
        dealer.SetMoneyAmount(players[1], 150);

        Console.WriteLine("Money player 1:");
        Console.WriteLine(players[0].MoneyAmount);
        Console.WriteLine();
        Console.WriteLine("Money player 2:");
        Console.WriteLine(players[1].MoneyAmount);
        Console.WriteLine();

        int index = 0;
        dealer.SetDealer(players[index]);

        Console.WriteLine("Dealer: " + dealer.GetDealer());

        // how to know in a class how many players there are and there values?
        // create a class containing the players array?


    }
}
class Settings
{
    // static string dealer;
    public static int dealerIndex;
    public static string dealerName;
    public 
}
class User
{
    public string name;
}
class Player : User
{
    Hand h = new Hand();
    public static int playerCount;


    private double moneyAmount;
    public bool dealerButton;

    public double MoneyAmount
    {
        get
        {
            return moneyAmount;
        }
        set
        {
            moneyAmount = value;
        }
    }

    public int NumOfCardsInHand()
    {

        return h.cardsInHand;
    }
    public string[] ViewHandCards()
    {

        return h.handCards;
    }
    public void AddCardsToHand(Dealer d)
    {
        d.DealCard(h);
        d.DealCard(h);
    }
    public Player(string n)
    {
        this.name = n;
        playerCount++;
    }
}
class Hand
{
    public static int handCount;

    public int cardsInHand = 0;
    public string[] handCards = new string[2];
    public Hand()
    {
        handCount++;
    }

}
class Dealer
{
    Deck d = new Deck();
    //public void StartGame()
    //{

    //}
    public void DealCard(Hand h)
    {
        if (h.cardsInHand < 2)
        {


            if (h.cardsInHand == 0)
                h.handCards[0] = d.NextCard();
            if (h.cardsInHand == 1)
                h.handCards[1] = d.NextCard();
            h.cardsInHand++;

        }
        else
        {
            Console.WriteLine("Meer dan 2 kaarten per hand is niet toegestaan");

        }

    }
    public void SetMoneyAmount(Player p, double amount = 100)
    {
        p.MoneyAmount = amount;
    }
    public void SetDealer(Player p)
    {
        p.dealerButton = true;
        Settings.dealerName = p.name;

    }
    public string GetDealer()
    {
        return Settings.dealerName;
    }

}
class Deck
{
    public int numOfCards = 52;
    public string[] cards = new string[13];
    public string[] playingCards = new string[52];
    public string[] cardsDealt = new string[52];
    Random r = new Random();
    int y = 0;

    public string NextCard()
    {
        string nextCard = "-";

        int x = 0;

        while (x < 1)
        {
            nextCard = playingCards[r.Next(0, playingCards.Length)];

            if (!cardsDealt.Contains(nextCard))
            {
                cardsDealt[y] = nextCard;
                y++;
                x++;
            }
            else
            {
                Console.WriteLine("Reeds gedeelde kaart bijna opnieuw gedeeld!");
                x = 0;
            }

        }
        return nextCard;
    }
    public void ConstructDeck()
    {
        // spade club heart diamond
        this.cards[0] = "A";
        this.cards[1] = "K";
        this.cards[2] = "Q";
        this.cards[3] = "J";
        this.cards[4] = "10";
        this.cards[5] = "9";
        this.cards[6] = "8";
        this.cards[7] = "7";
        this.cards[8] = "6";
        this.cards[9] = "5";
        this.cards[10] = "4";
        this.cards[11] = "3";
        this.cards[12] = "2";

        int x = 0;
        foreach (string card in this.cards)
        {

            this.playingCards[x] = card + "s";
            x++;
            this.playingCards[x] = card + "c";
            x++;
            this.playingCards[x] = card + "h";
            x++;
            this.playingCards[x] = card + "d";
            x++;
        }

    }

    public Deck()
    {
        ConstructDeck();
    }
}
class Bet
{
    public double betAmount;
    public Bet(Player p, double betInput)
    {

        betAmount = betInput;
    }
}
}

我已将播放器实例放入数组中,可以像播放器[0](播放器1)一样调用它们。

我想知道我是否在正确的轨道上,更具体地说,我如何跟踪我实例化的玩家,以便其他类可以访问玩家实例变量?我指定一个玩家的经销商状态,并且需要知道从哪里开始要求其他玩家在游戏中的主动性,例如需要在某个给定点下注呼叫检查或弃牌。我不知道我需要为翻牌前游戏,翻牌游戏,转牌游戏和河牌游戏创建什么样的课程。每个游戏名称的类?我如何检查一名球员是否完成了他的行动?

我认为我应该创建一个类:preflopgame并识别经销商而不是询问主动权(投注折叠等(制作投注折叠检查类等)不是经销商的玩家并通过玩家完成其的变量跟踪在preflopgame类中的主动性?如果preflopgame被播出:类中的某种静态布尔字段表示它已完成。然后转到下一个游戏:flopgame。这是正确的思考这个游戏的方式吗?

任何建议肯定会有很大的偏见。 请原谅我的英语荷兰语。

0 个答案:

没有答案