C# 试图设置BlackJackTable,设置OO设计时遇到麻烦

C# 试图设置BlackJackTable,设置OO设计时遇到麻烦,c#,arrays,composition,C#,Arrays,Composition,我正试图建立一个控制台应用程序,这是一个21点游戏。BlackJackTable:桌面游戏,有6个赌注。我想我想要一个包含bettingspot的数组。但我在尝试填充BettingSpot[]时出错。任何关于如何更好地进行设计的建议都将不胜感激 public abstract class TableGame { // Can have 5-7 bettings spots. Has a dealer, players, Rules public abstract void Ru

我正试图建立一个控制台应用程序,这是一个21点游戏。BlackJackTable:桌面游戏,有6个赌注。我想我想要一个包含bettingspot的数组。但我在尝试填充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;

    }

}
公共抽象类TableGame
{
//可以有5-7个下注点。有一个庄家,玩家,规则
公共抽象无效规则();
公共抽象BettingSpot[]bettingSpotArray;
公共经销商=新经销商();
}
公共类BlackJackTable:桌面游戏
{
//21点桌面游戏“有”6个玩家选择占据的赌点。让游戏询问玩家他们想要哪个赌点
//要下注。每个下注的下注金额必须相同。请使用“尝试捕捉”块确保TotalChips>=所有下注。
公共BlackJackTable(int tableNumber)
{
_tableNumber=tableNumber;
}
公共覆盖无效规则()
{  }
BettingSpot spot1=新的BettingSpot(1);
BettingSpot spot2=新的BettingSpot(2);
BettingSpot spot3=新的BettingSpot(3);
BettingSpot spot4=新的BettingSpot(4);
BettingSpot spot5=新的BettingSpot(5);
BettingSpot spot6=新的BettingSpot(6);
公共覆盖BettingSpot[]bettingSpotArray=新BettingSpot[5];
for(int i=0;iWriteLine(“在以下可用的BettingSpot上最多下注3次:{0}”,bettingSpotArray.Where我在代码中注意到了一些事情

首先,我认为您在尝试填充
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];
        }
    }
}
公共类BlackJackTable:TableGame
{
//如果其他类需要访问此文件,我会将其设置为public
//属性,不是公共字段。如果不是,我会将字段设置为
//私人的
公共覆盖BettingSpot[]bettingSpotArray=新BettingSpot[5];
公共BlackJackTable(int tableNumber)
{
//我在您的抽象类或
//继承类-如果没有该字段,则会出现错误
//在编译器中
_tableNumber=tableNumber;
}
//你发布的代码有公共覆盖无效的规则,但是有
//没有要重写的BlackJackRules()方法
公共覆盖无效规则()
{  
//这些都是超级棒,因为你将使用一个数组
//投注点
//BettingSpot spot1=新的BettingSpot(1);
//BettingSpot spot2=新的BettingSpot(2);
//BettingSpot spot3=新的BettingSpot(3);
//BettingSpot spot4=新的BettingSpot(4);
//BettingSpot spot5=新的BettingSpot(5);
//BettingSpot spot6=新的BettingSpot(6);
//现在可以初始化数组了
for(int i=0;i
您的
QueryPlayerForBettingSpots
也没有多大意义,因为它提示用户输入,但不接受任何输入。也许您还没有完成该方法


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

我想我知道问题是什么,但只是想确定一下,您的错误是什么?