获得一副牌中的牌的得分值的最佳方法是什么

2024-01-05

我想知道创建一副带有分数的纸牌或计算分数的最佳方法是什么?正如您将在下面看到的,我有一个计算类来处理卡片分数,检查卡片是什么并给它一个值并计算获胜者。

我正在创建一个二十一点游戏,我已经随机生成了卡牌,但现在每张卡牌的分数都遇到了麻烦......

我只是想向您展示我迄今为止所上的课程,以便您可以了解我在做什么以及我在哪里。

我知道这是很多代码,对于那些愿意尝试提供帮助的人来说并不困难,但请尝试并耐心等待我......

卡类

     public static class Card
{
    // Should be enumes eg. Privat enume suite{}
    private static string[] Suite = new string[4] {"Clubs", "Hearts", "Spades", "Diamonds" };
    private static string[] FaceValue = new string[13] {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King" };


    public static List<string> CreateDeck()
    {
        List<string> deckOfCards = new List<string>();

        for (int s = 0; s < 4; s++ )
        {
            string sut = Suite[s];

            for (int fV = 0; fV < 13; fV++)
            {
                string value = FaceValue[fV];

                deckOfCards.Add(sut + value);
            }
        }
        // End of For loop.
        deckOfCards.Shuffle();

        return deckOfCards;
    }

    public static void Shuffle<T>(this IList<T> list)
    {
        Random rng = new Random();
        int n = list.Count;
        while (n > 1)
        {
            n--;
            int k = rng.Next(n + 1);
            T value = list[k];
            list[k] = list[n];
            list[n] = value;
        }
    }
}

庄家类别(这是庄家将获得、洗牌和发牌的中心类别)

    class Dealer
{
    private List<string> randomisedCards;

    public Dealer()
    {
        randomisedCards = Card.CreateDeck();
    }


    public string dealCard()
    {
        string randCard = randomisedCards[0];
        randomisedCards.RemoveAt(0);


        // Creating the object.
        Calculate c = new Calculate(randCard);

        return randCard;
    }
}

玩家等级

    class Player
{
    // Member variables.
    private int newPlayerScore;
    private int newPlayerWin;
    private int newPlayerLosses;
    private int newPlayerTies;


    // Defalut constructor used to set the member variables to their default values and will be used to reset
    // the players details.
    public Player()
    {
        newPlayerScore = 0;
        newPlayerWin = 0;
        newPlayerLosses = 0;
        newPlayerTies = 0;
    }

    // Propertie used to get and set the players score.
    public int calcPlayerScore
    {
        get
        {
            return newPlayerScore;
        }
        set
        {
            newPlayerScore = value;
        }
    }


    public void getPlayerDetails()
    {
        Calculate c = new Calculate(newPlayerScore);

    }
}

计算类别(这是我用来计算获胜者和每张卡的分数的方法,这是我的问题,因为这不是最好的方法)

    class Calculate
{
    Player p = new Player();

    // Member variable.
    private string newCard;
    private int pScore;
    private int dScore;


    // Overloaded constructor.
    public Calculate(string card)
    {
        newCard = card;
    }

    public Calculate(int playerScore)
    {
        pScore = playerScore;
    }

    public void calculateScore()
    {
        switch (newCard)
        {
            case "Spades2":
            case "Hearts2":
            case "Diamonds2":
            case "Clubs2":
                pScore = 2;
                p.calcPlayerScore = pScore;
                break;

            case "Spades3":
            case "Hearts3":
            case "Diamonds3":
            case "Clubs3":
                pScore = 3;
                p.calcPlayerScore = pScore;
                break;

            case "Spades4":
            case "Hearts4":
            case "Diamonds4":
            case "Clubs4":
                pScore = 4;
                p.calcPlayerScore = pScore;
                break;

            case "Spades5":
            case "Hearts5":
            case "Diamonds5":
            case "Clubs5":
                pScore = 5;
                p.calcPlayerScore = pScore;
                break;

            case "Spades6":
            case "Hearts6":
            case "Diamonds6":
            case "Clubs6":
                pScore = 6;
                p.calcPlayerScore = pScore;
                break;

            case "Spades7":
            case "Hearts7":
            case "Diamonds7":
            case "Clubs7":
                pScore = 7;
                p.calcPlayerScore = pScore;
                break;

            case "Spades8":
            case "Hearts8":
            case "Diamonds8":
            case "Clubs8":
                pScore = 8;
                p.calcPlayerScore = pScore;
                break;

            case "Spades9":
            case "Hearts9":
            case "Diamonds9":
            case "Clubs9":
                pScore = 9;
                p.calcPlayerScore = pScore;
                break;

            default:
                pScore = 10;
                p.calcPlayerScore = pScore;
                break;
        }
    }
}

提前致谢。


不要使用简单的字符串。将它们放入枚举中并创建一个不可变的类Card这将需要三个属性Suite, Value, Score:

public enum Suite
{
    Clubs, 
    Hearts, 
    Spades, 
    Diamonds
}

public enum Value
{
    Ace, 
    Two, 
    Three, 
    Four,
    Five,
    Six,
    Seven,
    Eight,
    Nine,
    Ten,
    Jack, 
    Queen, 
    King
}

public class Card
{
    public Card(Suite suite, Value value, decimal score)
    {
        Suite = suite;
        Value = value;
        Score = score;
    }

    public Suite Suite { get; private set; }

    public Value Value { get; private set; }

    public decimal Score { get; private set; }
}

有了这些东西,你就可以创建所有想要的带有单独分数的卡片。

也许分数甚至不是卡牌本身的属性,而是只属于持有所有卡牌的玩家。如果一张牌的分数可以根据玩家持有的其他牌而改变(例如,黑杰克中的 A 可以是 1 或 11,但如果你有两张牌,则它是 21),这是有意义的。因此,在最后一种情况下,您可能应该创建一个特定于您喜欢玩的游戏的静态类,它能够为您提供所需的所有内容:

public static class BlackJack
{
    public static IEnumerable<Card> CreateNewDeck()
    {
        var suits = Enum.GetValues(typeof(Suite)).Cast<Suite>();
        var values = Enum.GetValues(typeof(Value)).Cast<Value>();

        // Create a new deck that contains all cards as often as needed.
        var simpleDeck = suits.SelecMany(suit => values.Select(value => new Card(suit, value)));
        // E.g. in one BlackJack deck you'll find all cards four times (IMHO).
        var deck = Enumerable.Repeat(simpleDeck, 4).SelectMany(x => x);
                             .ToList();

        deck.Shuffle();
        return deck;
    }

    public static decimal ComputeScore(IEnumerable<Card> playerCards)
    {
        // Iterate through all cards the player is currently holding
        // and tell the current player score.
        throw new NotImplementException();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获得一副牌中的牌的得分值的最佳方法是什么 的相关文章

  • 如何使用MemoryCache代替Timer来触发一个方法?

    以下方法通过等待已运行操作的结果来处理并发请求 对数据的请求可能会使用相同 不同的凭据同时出现 对于每组唯一的凭据 最多可以有一个GetCurrentInternal呼叫正在进行中 当准备就绪时 该呼叫的结果将返回给所有排队的服务员 pri
  • 使用 Unity 在构造函数中使用属性依赖注入

    好的 我在基类中定义了一个依赖属性 我尝试在其派生类的构造函数内部使用它 但这不起作用 该属性显示为 null Unity 在使用 container Resolve 解析实例后解析依赖属性 我的另一种选择是将 IUnityContaine
  • VB.NET 相当于 C# 属性简写吗?

    是否有与 C 等效的 VB NET public string FirstName get set 我知道你能做到 Public Property name As String Get Return name ToString End Ge
  • 如何读取扩展文件属性/文件元数据

    因此 我按照教程使用 ASP net core 将文件 上传 到本地路径 这是代码 public IActionResult About IList
  • C++ 中本地类中的静态成员变量?

    我知道我们不能宣布static本地类中的成员变量 但其原因尚不清楚 那么请问有人可以解释一下吗 另外 为什么我们不能访问非static函数内部定义的变量 内部已经定义了局部类 直接在局部类成员函数中 在下面给出的代码中 int main i
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • 如何将 #ifdef DEBUG 添加到 Xcode?

    我的项目中有一些代码永远不应该在发布版本中使用 但在测试时很有用 我想做这样的事情 ifdef DEBUG Run my debugging only code endif 在 Xcode 4 中哪里添加 DEBUG 设置 我尝试将其放入
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • 在 C# 中循环遍历文件文件夹的最简单方法是什么?

    我尝试编写一个程序 使用包含相关文件路径的配置文件来导航本地文件系统 我的问题是 在 C 中执行文件 I O 这将是从桌面应用程序到服务器并返回 和文件系统导航时使用的最佳实践是什么 我知道如何谷歌 并且找到了几种解决方案 但我想知道各种功
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • 在一个字节中存储 4 个不同的值

    我有一个任务要做 但我不知道从哪里开始 我不期待也绝对不想要代码中的答案 我想要一些关于该怎么做的指导 因为我感到有点失落 将变量打包和解包到一个字节中 您需要在一个字节中存储 4 个不同的值 这些值为 NAME RANGE BITS en
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实
  • 等待线程完成

    private void button1 Click object sender EventArgs e for int i 0 i lt 15 i Thread nova new Thread Method nova Start list
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • Process.Start() 方法在什么情况下返回 false?

    From MSDN https msdn microsoft com en us library e8zac0ca v vs 110 aspx 返回值 true 表示有新的进程资源 开始了 如果由 FileName 成员指定的进程资源 St
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大
  • 当另一个线程可能设置共享布尔标志(最多一次)时,是否可以读取共享布尔标志而不锁定它?

    我希望我的线程能够更优雅地关闭 因此我尝试实现一个简单的信号机制 我不认为我想要一个完全事件驱动的线程 所以我有一个工作人员有一种方法可以使用关键部分优雅地停止它Monitor 相当于C lock我相信 绘图线程 h class Drawi

随机推荐

  • 将类似 facebook 的按钮与动态加载的内容集成

    我正在开发的网站包含通过 AJAX 动态加载的项目列表 当您向下滚动页面时 会加载更多项目 现在 我的客户想要为每个项目添加一个类似 Facebook 的按钮 以及喜欢此按钮的人数 集成默认的点赞按钮没有问题 但是如何将点赞按钮添加到通过
  • PackageManager.getComponentEnabledSettings() 在冷启动之间是否持续存在?

    如果我使用下面的代码禁用 AndroidManifest xml 中定义的静态 BroadcastReceiver 它会在重新启动后重新启用吗 似乎不是 但文档没有说明是否应该 final ComponentName compName ne
  • 计算R中表格每一行的线性趋势线

    是否有可能在不使用循环的情况下对数据帧的每一行进行线性回归 趋势线的输出 截距 斜率 应作为新列添加到原始数据框中 为了更清楚地表达我的意图 我准备了一个非常小的数据示例 day1 lt c 1 3 1 day2 lt c 2 2 1 da
  • Python Scrapy 和 Yield

    我目前正在第一次使用 Scrapy 开发爬虫 也是第一次使用 Yield 我仍在努力思考产量问题 刮刀 抓取一页以获取日期列表 解析 使用这些日期来格式化 URL 然后抓取 parse page contents 在此页面上 它找到每个单独
  • 使用 NSURLConnection 的自定义子类,它稍后如何“找到”类中的附加数据?

    这个博客提供了一个很好的解决方案来处理多个 NSURLConnections 创建一个自定义的 CustomURLConnection 类 它有一个额外的tag财产 http blog emmerinc be index php 2009
  • SharePoint 2010 文档库版本注释

    我想强制用户在签入文档之前添加评论 当用户选择签入时 会显示默认的弹出页面 以便选择版本和撰写评论 但评论字段不是必填字段 我们可以将其设为必填字段吗 你可以通过 EventReceiver 来做到这一点 public class Even
  • 使用 .htaccess 删除 .php 并重定向到其非 .php 版本

    我有一个网站 需要删除每个文件的 php 扩展名 然后将指向包含 php 扩展名的任何文件的任何链接重定向到同一文件 但不包含 php 我找到了以下代码 它非常有用 但是文件夹中包含的任何内容都将被重定向到根目录 如下例所示 http ww
  • 如何仅在 div 加载时运行函数?

    我只想在加载 div 时运行函数 当我加载页面时 会加载许多文件 在列表的末尾 PHP 回显一个 div 当显示这个时 jQuery 应该运行一个函数 我可以通过点击事件来完成此操作 但我希望它能够自动工作 而无需按下按钮 单击后 它的工作
  • 尝试了解 Pandoc 如何从 Markdown 转换为 Latex

    如果这是重复的话 我深表歉意 我有一个 Markdown 文件test md https www akshaygaur org test md它有两个乳胶数学模式部分 第一个乳胶块 在 md 文件中 begin flalign P 1
  • VScode:如何更改 HTML 打开和关闭标记的颜色

    如何更改 VScode 中 HTML 打开 关闭标签的颜色以匹配下图 我尝试过使用Highlight Matching Tag扩展名和以下设置 但这仅适用于选择 onFocus 标签 我希望开放标签的实际字体颜色与所有结束标签不同 谢谢你
  • 是否可以在不使用 ID 的情况下实现自增编号?

    我继续谷歌搜索并发现唯一的方法是使用 Id GeneratedValue strategy GenerationType Identity 但我已经有一个主键 我只需要另一个自动递增的字段 通过手动计算来编码确实很困难 我看到以下选项 1
  • iOS10 上的地址簿崩溃

    在 iOS10 0 中 从联系人选择器中选择联系人会使应用程序崩溃 联系人选择器显示使用ABPeoplePickerNavigationController像这样 let contactsPicker ABPeoplePickerNavig
  • maven 使用简单的命令行安装和部署第 3 方依赖项

    我们有许多未在任何地方托管的第三方依赖项 对于每一个 我们都有一个 jar 文件 我们希望能够将其安装和 或部署到我们的存储库 一些 jar 文件有自己的依赖项 我们也需要声明它们 我们为每个 jar 文件创建了 pom xml 文件 声明
  • ANR 错误 - 屏幕关闭 - 我该如何处理它们?

    我在开发人员控制台上收到此消息 指出我的应用程序已冻结 因为 ANR 意图广播 act android intent action SCREEN OFF flg 0x40000000 没有堆栈跟踪 因为这是由 Froyo 之前的用户提出的
  • 如何从 Sails JS 中的现有数据库生成模型?

    我首先从SailsJS and MySQL 我的数据库中有很多表 所以 我不知道在SailsJS有一个从数据库生成模型的工具 例如Database First in Entity Framework ASP 您应该使用 自动生成现有模型库数
  • 带有自定义适配器的 ListView

    我遵循了几个教程 但仍然无法填充我的列表视图 我究竟做错了什么 这是布局 spaced list xml
  • 在 iPhone 中计算行驶距离

    我需要找到两个地点之间的行驶距离 我不需要在地图中显示方向 只需要计算距离 我需要在我的应用程序中使用它 MapKit 允许这样做吗 有没有可以使用的替代方案 我可以使用 CloudMade 进行前向地理编码 但似乎没有获取行驶距离的选项
  • Haskell 智能构造函数的编译时检查

    我正在学习 Haskell 通过讲座 http www cis upenn edu cis194 spring13 http www cis upenn edu cis194 spring13 我有 module HanoiDisk Han
  • 如果未输入文本,则保持按钮禁用

    我想实现这样的目标 我有 4 个文本字段和 1 个选择字段 这是提交表单所需的 我想保持按钮禁用 除非文本字段具有值并且从下拉列表中选择了一个选项 我的代码是here http jsfiddle net C2mRd 3 我遇到的问题是 每当
  • 获得一副牌中的牌的得分值的最佳方法是什么

    我想知道创建一副带有分数的纸牌或计算分数的最佳方法是什么 正如您将在下面看到的 我有一个计算类来处理卡片分数 检查卡片是什么并给它一个值并计算获胜者 我正在创建一个二十一点游戏 我已经随机生成了卡牌 但现在每张卡牌的分数都遇到了麻烦 我只是