试图设置BlackJackTable,设置OO设计时遇到问题

本文关键字:设置 遇到 问题 OO BlackJackTable | 更新日期: 2023-09-27 18:20:01

我正在尝试构建一个21点游戏的控制台应用程序。BlackJackTable:桌面游戏,有6个投注点。我想我想要一个包含投注池的数组。但我在尝试填充BettingSpot[]时遇到了错误。任何关于如何更好地进行设计的建议都将不胜感激。

public abstract class TableGame
{
    // Can have 5-7 bettings spots.  Has a dealer, players, Rules
    public abstract void Rules();
    public abstract BettingSpot[] bettingSpotArray;
    public Dealer dealer = new Dealer();
}
public class BlackJackTable : TableGame
{
    // A blackjack tablegame "has a" 6 BettingSpots available that a Player chooses to occupy.  Have the Game ask the player which bettingspots they'd
    // like to place a bet on.  Bet amount must be the same for each.  Use a try catch block to make sure TotalChips >= all bets. 
    public BlackJackTable(int tableNumber)
    {
        _tableNumber = tableNumber;
    }
    public override void BlackJackRules()
    {  }
        BettingSpot spot1 = new BettingSpot(1);
        BettingSpot spot2 = new BettingSpot(2);
        BettingSpot spot3 = new BettingSpot(3);
        BettingSpot spot4 = new BettingSpot(4);
        BettingSpot spot5 = new BettingSpot(5);
        BettingSpot spot6 = new BettingSpot(6);
    public override BettingSpot[] bettingSpotArray = new BettingSpot[5];
    for (int i = 0; i < bettingSpotArray.Length; i++)
    {
        bettingSpotArray[i] = new BettingSpot[i+1];
    }
    public void QueryPlayerForBettingSpots(BettingSpot[] bettingSpotArray)
    {
        int[] BettingSpotsAvailable = new BettingSpot[5];
        for (int idx = 0; idx < 5; idx++)
            if (bettingSpotArray[idx] == 0)
                BettingSpotsAvailable[idx] 
        Console.WriteLine("Place up to 3 bets on the following available BettingSpots: {0}", bettingSpotArray.Where<BettingSpot.
    }
}
public class BettingSpot
{
    protected decimal bet = 0;
    public int _bettingSpotNumber;
    // How many spots are on the Blackjack table will determine how many seats there will be. There are six betting spots allowed, 
    // so six bettingspots are created. THere are just 6 BettingSpots available and a player can
    // occupy up to 3 BettingSpots at a time.  A bettingspot "has a" bet.  If no bet, put '0' in BettingSpotArray
    public BettingSpot(int number)
    {
        _bettingSpotNumber = number;
    }
    public Player player

    public decimal Bet
    {
        get
        {
            return bet;
        }
        set
        {
            bet = value;
    }
}

试图设置BlackJackTable,设置OO设计时遇到问题

我在您的代码中注意到了一些事情。

首先,我认为您在尝试填充bettingSpotArray[]时遇到了困难,因为您试图在类的主体中进行填充。您需要在方法或属性的主体中执行此操作——我建议使用构造函数或Rules()方法。

其次,由于您没有在抽象类中定义任何代码,您可能会发现将抽象类作为接口并让游戏类实现该接口更容易——这样,类就会知道它必须实现什么,但您不必覆盖所有内容。如果你对大多数游戏类都有某种默认逻辑,那么我同意使用一个具有基本逻辑的抽象类,"特殊"类会根据需要覆盖它。但这只是我的看法;你可能有自己使用抽象类的正当理由,而这些理由在你的问题中并不明显。

我不确定你发布的代码是否真的会编译,但我会提供一些代码示例,帮助你达到目的。

public class BlackJackTable : TableGame
{
    // If other classes need access to this I'd set it up as public
    // property, not a public field.  If not, I'd set the field to
    // private
    public override BettingSpot[] bettingSpotArray = new BettingSpot[5];
    public BlackJackTable(int tableNumber)
    {
        // I don't see a _tableNumber field in your abstract class or your 
        // inheriting class - if you don't have that field you'll get an error
        // in the compiler
        _tableNumber = tableNumber;
    }
    // Your posted code had public override void BlackJackRules, but there is
    // no BlackJackRules() method to override
    public override void Rules()
    {  
        // These are superfulous since you'll be using an array
        // for the betting spots
        //BettingSpot spot1 = new BettingSpot(1);
        //BettingSpot spot2 = new BettingSpot(2);
        //BettingSpot spot3 = new BettingSpot(3);
        //BettingSpot spot4 = new BettingSpot(4);
        //BettingSpot spot5 = new BettingSpot(5);
        //BettingSpot spot6 = new BettingSpot(6);
        // Now you can initialize your array
        for (int i = 0; i < bettingSpotArray.Length; i++)
        {
             bettingSpotArray[i] = new BettingSpot[i+1];
        }
    }
}

QueryPlayerForBettingSpots也没有什么意义,因为它提示用户输入,但不接受任何输入。也许你还没有完成那个方法?

我认为您的总体方法是正确的,但您的实现存在一些问题(我在上面已经指出)。希望这将对你推进项目有所帮助。