天道酬勤,学无止境

Manatee.Trello 移动卡片(Manatee.Trello Moving Cards)

问题

我正在编写一个小应用程序来管理 Trello Boards 仅在几个方面管理 Trello Boards,例如对列表中的卡片进行排序、根据到期日期和/或标签移动/复制卡片、定期归档列表以及基于标签生成报告,等等。因此,我一直在围绕 Manatee.Trello 库组合一个外观,以简化我的服务的界面。

我已经习惯了图书馆,事情也相对顺利。 但是,我在 Card 类上编写了一个扩展方法来在列表内或列表之间移动卡片,以及另一种重复调用此扩展方法以将所有卡片从一个列表移动到另一个列表的方法。

我的问题是,当在几个包含 7 张卡片的虚拟列表上运行代码时,它完成没有错误,但至少有一张卡片实际上没有移动(尽管多达 3 张卡片未能移动)。 我不知道这是因为我移动得太快了,还是我需要调整 TrelloConfiguration.ChangeSubmissionTime,或者什么。 我试过玩延迟,但它没有帮助。

这是我的调用代码:

public void MoveCardsBetweenLists(
    string originListName,
    string destinationListName,
    string originBoardName,
    string destinationBoardName = null)
{
    var fromBoard = GetBoard(originBoardName); // returns a Manatee.Trello.Board

    var toBoard = destinationBoardName == null
                  || destinationBoardName.Equals(originBoardName, StringComparison.OrdinalIgnoreCase)
                      ? fromBoard
                      : GetBoard(destinationBoardName);

    var fromList = GetListFromBoard(originListName, fromBoard); // returns a Manatee.Trello.List from the specified Board
    var toList = GetListFromBoard(destinationListName, toBoard);

    for (int i = 0; i < fromList.Cards.Count(); i++)
    {
        fromList.Cards[i].Move(1, toList);
    }
}

这是我在 Manatee.Trello.Card 上的扩展方法:

public static void Move(this Card card, int position, List list = null)
{
    if (list != null && list != card.List)
    {
        card.List = list;
    }

    card.Position = position;
}
回答1

我创建了一个测试来复制您想要的功能。 基本上,我在我的板上创建了 7 张卡片,将它们移动到另一个列表,然后删除它们(只是为了保持初始状态)。

private static void Run(System.Action action)
{
    var serializer = new ManateeSerializer();
    TrelloConfiguration.Serializer = serializer;
    TrelloConfiguration.Deserializer = serializer;
    TrelloConfiguration.JsonFactory = new ManateeFactory();
    TrelloConfiguration.RestClientProvider = new WebApiClientProvider();

    TrelloAuthorization.Default.AppKey = TrelloIds.AppKey;
    TrelloAuthorization.Default.UserToken = TrelloIds.UserToken;

    action();

    TrelloProcessor.Flush();
}

#region http://stackoverflow.com/q/39926431/878701

private static void Move(Card card, int position, List list = null)
{
    if (list != null && list != card.List)
    {
        card.List = list;
    }

    card.Position = position;
}

[TestMethod]
public void MovingCards()
{
    Run(() =>
            {
                var list = new List(TrelloIds.ListId);
                var cards = new List<Card>();
                for (int i = 0; i < 10; i++)
                {
                    cards.Add(list.Cards.Add("test card " + i));
                }

                var otherList = list.Board.Lists.Last();

                for(var i = 0; i < cards.Count; i++)
                {
                    Move(card, i, otherList);
                }

                foreach (var card in cards)
                {
                    card.Delete();
                }
            });
}

#endregion

快速提问:您是否在执行结束前调用了TrelloProcessor.Flush() ? 如果您不这样做,那么当应用程序结束时,某些更改可能会保留在请求处理器队列中,因此它们将永远不会被发送。 有关更多信息,请参阅我的关于处理请求的 wiki 页面。

另外,我注意到您使用1作为每次移动的位置。 通过这样做,您最终会得到一个不可靠的排序。 Trello 使用的位置数据是浮点数。 要将一张牌放在其他两张牌之间,只需取其他牌的平均值即可。 在您的情况下,(如果目标列表为空),我建议发送 indexer 变量进行排序。 如果目标列表不为空,您需要根据列表中的其他卡片计算新位置(通过 Trello 使用的平均方法)。

最后,我喜欢你的扩展代码。 如果您有您认为对添加到库中有用的想法,请随时 fork GitHub 存储库并创建拉取请求。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Manatee.Trello Moving Cards
    I'm writing a small application to manage Trello Boards in only a few aspects such as sorting Cards on a List, moving/copying Cards based on Due Date and/or Labels, archiving Lists on a regular basis and generating reports based on Labels, etc. As such, I've been putting together a facade around the Manatee.Trello library to simplify the interface for my services. I've been getting comfortable with the library and things have been relatively smooth. However, I wrote an extension method on the Card class to move Cards within or between Lists, and another method that calls this extension method
  • 如何在不移动其他 Flex 项目的情况下将 FlexBox 项目扩展到全屏?(How do you expand a FlexBox item to full screen without moving the other Flex items?)
    问题 我有一个盒子的 flexbox 布局。 当它们被点击时,这些框会扩展到全屏。 问题是当盒子展开时,它会移动其他 flex 元素,导致动画看起来很跳跃。 flex 布局还可以防止扩展框接触屏幕顶部。 这是一个小提琴,向你展示我在说什么小提琴 Box 1 实际上非常接近预期的效果,但它仍然像我上面描述的那样跳来跳去。 我尝试将所有未点击的卡片设置为“显示:无”; 但这并没有解决任何一个问题。 我还尝试在卡片展开时将容器更改为“显示:阻止”,并在未展开时将其更改为 flex。 但是,再一次,没有运气 HTML <div id=container> <div class=cards> <div class=card> <div class="face front"> Card 1 Front </div> <div class="face back"> Card 1 Back </div> </div> </div> <div class=cards> <div class=card> <div class="face front"> Card 2 Front </div> <div class="face back"> Card 2 Back </div> </div> </div> <div class=cards> <div class=card> <div class=
  • POS 在 Trello API 中的实际含义是什么(What does the POS actually mean in the Trello API)
    问题 我正在使用 dillenmeisters Trello.Net API Wrapper,并且在每张Card它都有一个POS属性。 我认为这是为了它在列表中的位置,但数字似乎是任意的,从 4 到 5 位数字不等。 反正有没有足够的意义来在列表中已经存在的另外两张Card之间“放置”一张新Card ? 回答1 编辑: 在 Trello.NET 的 0.5.9-beta1 版本中可用(在 NuGet 上): // Ways to set the position of a card trello.Cards.ChangePos(card, 1234) trello.Cards.ChangePos(card, Position.Top) trello.Cards.ChangePos(card, Position.Bottom) 我没有深入研究 pos 的工作原理,但我认为这是一个排序顺序。 如果你想在另外两张牌之间移动一张牌,你可以得到这两张牌的位置并将它们的位置相加并除以二。 例如,如果您想在卡 A 和卡 B 之间插入卡 C: 卡片 A - 位置 16 卡片 B - 位置 32 卡 C - 位置 64 (16 + 32) / 2 = 24. 将 Card C Pos 设置为 24。 卡片 A - 位置 16 卡 C - 位置 24 卡片 B - 位置 32
  • 如何在引导程序 4 中居中卡片?(How to center cards in bootstrap 4?)
    问题 我正在使用引导程序 4 alpha 3。 我想将卡片水平居中放置在页面中间。 Preview / link: http Preview / link: //codepen.io/vaibhavsingh97/full/VjRAXW 我已经尝试了 bootstrap 4 示例页面上列出的所有不同选项卡。 我怎样才能做到这一点? 回答1 为 .card 添加 css .card { margin: 0 auto; /* Added */ float: none; /* Added */ margin-bottom: 10px; /* Added */ } 这是笔 更新:您可以使用 bootstrap 4 中可用的类.mx-auto来居中卡片。 回答2 2018 年更新 不需要额外的CSS,Bootstrap 4中有多种居中方法: text-center用于中心display:inline元素用于居中display:block mx-auto display:block元素display:flex (d-flex) offset-*或mx-auto可用于使网格列居中或justify-content-center row上居中网格列 mx-auto (自动 x 轴边距)将在display:flex元素内居中,这些元素具有定义的宽度(%、vw、px 等)。 Flexbox
  • 像在耐心/克朗代克纸牌游戏中一样拖动节点(Drag nodes like in a patience/Klondike card game)
    问题 我在玩克朗代克游戏。 整个逻辑都在起作用。 我只是在 javafx 中遇到了 UI 问题。 我一直试图在没有预期结果的情况下从“画面堆”周围移动/拖动卡片。 我的卡片是一个 ImageView,里面有一个 Image。 卡片位于窗格内: Pane tableau = new Pane(); for (int i = 0; i < n; i++) { Image img = new Image("resources/images/" + (i + 1) + ".png"); ImageView imgView = new ImageView(img); imgView.setY(i * 20); //imgView Mouse Events here tableau.getChildren().add(imgView); } 我试过了: imgView.setOnMousePressed((MouseEvent mouseEvent) -> { dragDelta.x = imgView.getLayoutX() - mouseEvent.getSceneX(); dragDelta.y = imgView.getLayoutY() - mouseEvent.getSceneY(); }); imgView.setOnMouseDragged((MouseEvent
  • Jquery-UI 可排序列表与 Meteor 模板中的响应式更新效果不佳(Jquery-UI sortable list not playing nice with reactive updates in Meteor template)
    问题 我正在尝试以 http://differential.com/blog/sortable-lists-in-meteor-using-jquery-ui 中描述的方式使用 JQuery-UI 实现可排序的对象列表。 但是,我不是对单独的文档列表进行排序,而是对嵌入在单个文档中的对象列表进行排序。 也就是说,我有一个这样的文件: { name: "Name of this Rolodex", cards: [{name: "...", rank: 0, id: "some-unique-id"}, {name: "...", rank: 1, id: "some-other-unique-id"}, ... ] } 我只是想让卡片可以排序。 我的模板如下——它传递了一个 Rolodex 作为上下文: <template name="rolodex"> Rolodex Name: {{name}} <div class="cards-list"> {{#each sortedCards}} {{> cardTemplate}} {{/each}} </div> </template> 和辅助 JS 文件: Template.rolodex.helpers({ sortedCards: function() { return this.cards.sort(function
  • 动画卡片 Javascript 和 CSS(Animation cards Javascript and CSS)
    问题 我会在点击时移动卡片并将它们放在带有过渡动画的绿色桌子上; 然后当卡片在桌子上时,当我点击它们时,它们必须显示它们的正面,然后返回背面。 代码不起作用,我看到页面左侧的背面卡片,但是当我点击时没有任何反应。 var card_value = ['1B', '2B', '3B', '4B', '5B', '6B']; var card_left = []; var card_top = []; for (i = 0; 1 & lt6; i++) { card_left = 70 + 100 * (i % 4); card_top = 15 + 120 * Math.floor(i / 4); } var started = false; function moveToPlace(id) { var el = document.getElementById("card_" + id); el.style["z-index"] = "1000"; el.style["left"] = card_left[id] + "px"; el.style["top"] = card_top[id] + "px"; el.style["z-index"] = "0"; } function hideCard(id) { var el = document.getElementById(
  • Android Viewpager Tinder like UI 具有 3D 卡堆栈外观(Android Viewpager tinder like UI with 3D card stack appearance)
    问题 我正在尝试使用 ViewPager 在 android 中创建一个类似火种的 UI。 我看过这个库: https://github.com/kikoso/Swipeable-Cards : https://github.com/kikoso/Swipeable-Cards ,但我希望能够在向右滑动后看到前一张卡片,因此首选 ViewPager。 我正在寻找的特定 UI 细节是: 与当前视图下方的下一个视图的轮廓堆叠图像。 我已经能够通过 ViewPager.PageTransformer 接口实现视图的堆叠,但是我无法获得寻呼机内部后续视图的堆叠轮廓 - 赋予它 3d 外观的部分- 就像在这里 - 卡片堆叠在另一张卡片上 - http://i1.cdnds.net/14/38/300x522/friends-tinder-profiles-ross.jpg 这是我的 pageTransform 方法 public void transformPage(View view, float position) { int pageWidth = view.getWidth(); if (position < -1) { // [-Infinity,-1) // This page is way off-screen to the left. view.setAlpha(0); }
  • 使用极小极大搜索具有不完美信息的纸牌游戏(Using minimax search for card games with imperfect information)
    问题 我想使用极大极小搜索(使用 alpha-beta 修剪),或者更确切地说是极小极大搜索,让计算机程序玩纸牌游戏。 纸牌游戏实际上由 4 名玩家组成。 因此,为了能够使用 minimax 等,我将游戏简化为“我”对抗“其他人”。 每一次“移动”之后,你都可以客观地从游戏本身中读取当前状态的评价。 当所有 4 名玩家都放置了卡片时,最高者将赢得所有玩家 - 并且卡片的价值会被计算在内。 由于您不知道其他 3 名玩家之间的纸牌分布究竟如何,我认为您必须用不属于您的纸牌模拟所有可能的分布(“世界”)。 你有 12 张牌,其他 3 位玩家总共有 36 张牌。 所以我的方法是这种算法,其中player是一个介于 1 和 3 之间的数字,表示程序可能需要为其寻找动作的三个计算机玩家。 -player代表对手,即所有其他三个玩家。 private Card computerPickCard(GameState state, ArrayList<Card> cards) { int bestScore = Integer.MIN_VALUE; Card bestMove = null; int nCards = cards.size(); for (int i = 0; i < nCards; i++) { if (state.moveIsLegal(cards.get(i))) { //
  • 如何训练 ANN 玩纸牌游戏?(How to train an ANN to play a card game?)
    问题 我想教 ANN 玩 Hearts,但我被困在如何实际执行培训上。 一个朋友建议使用weka来实现实际的ANN,但我从未使用过它,所以我倾向于自定义实现。 我已经编写了规则,我可以让计算机玩游戏,每回合随机选择合法的牌。 现在我不知道将什么作为输入发送到 ANN 以及如何提取输出(每回合减少卡片数量,所以我不能让每个输出神经元成为可能的卡片)以及如何教它以及何时教它进行教学。 我的猜测是将 ANN 作为输入: 之前打过的牌,以及哪个玩家打过哪张牌的元数据本回合桌上的卡片,也具有相同的元数据 ANN手中的牌 然后让输出为 13 个神经元(每个玩家的最大牌数),其中我取了仍然在 ANN 手中的最活跃的牌。 我也不知道什么时候教它(每回合后或每场比赛后),因为拥有所有罚牌是有益的,但只有一张罚牌就不好了。 任何和所有的帮助表示赞赏。 我真的不知道还能把这个问题放在哪里。 我目前用 Swift 编写了它,但它只有 200 行,而且我知道其他几种语言,所以我可以翻译它。 回答1 请注意,神经网络可能不是这里使用的最佳选择。 更多关于答案的最后,我会先回答你的问题。 现在我不知道将什么作为输入发送到 ANN 以及如何提取输出(每回合减少卡片数量,所以我不能让每个输出神经元成为可能的卡片)以及如何教它以及何时教它进行教学。 人工神经网络需要标记的输入数据。 这意味着一对(X, y)
  • Card.io 不扫描非凸起数字信用卡(Card.io Does not scan non - Raised Digit Credit Cards)
    问题 我在使用 card.io sdk 扫描非加注数字信用卡时遇到问题。 我在card.io的官方网站上没有看到关于这个问题的任何解释。 这个sdk只适用于数字信用卡吗? 回答1 杰夫来自card.io。 简而言之,是的,sdk 仅适用于凸起的数字信用卡。 在移动设备上扫描卡片很困难,团队选择从扫描市场上最大比例的卡片开始,并且做得很好。 未来有计划支持更多卡和卡类型。 现在,请注意 sdk 不会扫描所有内容。 希望有帮助! 回答2 这很可能是因为卡片没有浮雕数字,或者不是它们支持的图案。 有关更多信息,请参阅 cardIO 的问题跟踪器。 卡IO问题
  • 二十一点极小极大算法(Blackjack minimax algorithm)
    问题 我正在实现一个带有 minimax 树的二十一点游戏,它计算概率并根据这个概率自动播放。 假设我们玩一副牌,第一个庄家拿:' 5 ',玩家拿' 5 7 ',所以玩家的总分是12。 在这种情况下,首先我试图检查玩家立场决定的所有可能概率。 如果玩家站立: 我在牌组中的剩余牌是这样的:牌组的结构(K,V) K:牌号,V:牌的数量 {1: 4, 2: 4, 3: 4, 4: 4, 5: 2, 6: 4, 7: 3, 8: 4, 9: 4, 10: 16} 现在,庄家应该传递数字 17。一些例子可以是这样的: 5(base card) + 1(11) + 1 = 17 (possibility of this hand : 4/49 * 3/48) 5(base card) + 1(11) + 2 = 18 (possibility of this hand : 4/49 * 4/48) ...... 5 (base card) + 10 + 1 + 1 = 17 (possibility of this hand : 16/49 * 4/48 * 3/48) 我的问题是,我如何计算所有这些可能性并计算玩家决定是否成立的最终可能性。 我不知道如何对这些数字组合进行编码。 编辑 : 我发现了这个计算可能组合的代码。 这和我的样子很相似。 我需要为我的问题改变这个,我希望我能做到。
  • 外键(class_id)未填充到belongs_to 关联中(Foreign key (class_id) not populating in belongs_to association)
    问题 我是 rails 新手,并在 rails3 (beta4) 上构建了一个小型测试应用程序。 我正在使用Authlogic来管理用户会话(按照本教程以标准方式设置) 我已经搭建并设置了一个卡片模型(基本上是一个帖子),并为belongs_to和has_many关系设置了基本的活动记录关联 用户名 has_many :cards 卡 belongs_to :user 我将外键列添加到我的卡片表中: user_id默认为1 一切都非常好。 我已经完成了我的观点,我可以看到关联,卡片可以属于不同的用户,这一切都很棒。 但是我在创建新卡时似乎无法获取当前活动用户 card_controller.rb def new @card = Card.new @card.user = current_user respond_to do |format| format.html # new.html.erb format.xml { render :xml => @card } end end current_user是在应用控制器中定义的,可以在这里查看 user_id传递NULL并且没有任何内容写入数据库user_id列,使其默认为1而不是实际登录用户的 ID。 我尝试了像@user = current_user这样显而易见的事情 这可能是一件非常简单的事情,但今天是我真正接触 Rails
  • 带有 4 向滑动手势的自定义 Android 视图(A custom Android View with 4-direction swipe gesture)
    问题 我正在开发一个显示一系列卡片的 Android 应用程序。 每张卡片几乎占据了整个屏幕。 我希望用户能够通过向左和向右滑动来查看上一张和下一张卡片,并且 ViewPager 运行良好。 但是,我也希望用户能够上下滑动卡片以喜欢/不喜欢它。 向上/向下滑动手势应根据用户的手势向上/向下移动卡片。 卡片向上/向下滑动后,应将其从卡片列表中删除。 我在网上搜索了解决方案或服装视图。 但我发现的大多数解决方案都是针对 2 向滑动(向左/向右或向上/向下)。 是否有用于 4 向滑动视图的不错的解决方案或库? 回答1 经过一些在线研究,我想出了以下效果很好的实现。 CardView 类扩展了可以在类中使用的 Fragment。 public class CardView extends Fragment { private static float CARDS_SWIPE_LENGTH = 250; private float originalX = 0; private float originalY = 0; private float startMoveX = 0; private float startMoveY = 0; public CardView() { super(); } @Override public View onCreateView
  • 使用“for”循环时出现“找不到符号”错误('Cannot Find Symbol' error when using a 'for' loop)
    问题 我是一个完整的 Java 初学者,无法理解如何在类和方法之间传递对象。 我已经取得了一些进展,但是当我尝试在 for 循环中创建扑克牌时,我的应用程序现在失败了。 如果我删除循环,它工作正常。 这是包含错误的类的第一部分: public class Testing { public static void main(String[] args) { int Deal = 1; for(int Hand = 0; Hand < Deal; ++Hand) { //instantiate and derive values for Player Card card1 = new Card(); card1.setSuit(); //assign card 1's suit card1.setValue(); //asign card 1's value //instantiate and derive values for Computer Card card2 = new Card(); card2.setSuit(); //assign card 2's suit card2.setValue(); //assign card 2's suit //compare the two cards and make sure they are different
  • 对 7 个整数数组进行排序的最快方法是什么?(What is the fastest possible way to sort an array of 7 integers?)
    问题 这是分析扑克(特别是德州扑克)赔率的程序的一部分。 我有一个我很满意的程序,但它需要一些小的优化才能完美。 我使用这种类型(当然还有其他类型): type T7Cards = array[0..6] of integer; 在决定如何对其进行排序时,关于此数组的两件事可能很重要: 每个项目都是一个从 0 到 51 的值。没有其他值是可能的。 没有重复。 绝不。 有了这些信息,排序这个数组的绝对最快的方法是什么? 我使用 Delphi,所以 pascal 代码将是最好的,但我可以阅读 C 和伪代码,尽管速度要慢一些 :-) 目前我使用快速排序,但有趣的是,这几乎不比冒泡排序快! 可能是因为项目数量少。 排序占该方法总运行时间的近 50%。 编辑: Mason Wheeler 问为什么需要优化。 原因之一是该方法将被调用 2118760 次。 基本扑克信息:所有玩家发两张牌(口袋),然后发五张牌到牌桌(前三张称为翻牌,接下来是转牌,最后一张是河牌。每个玩家选择五张最好的牌组成他们的手) 如果我口袋里有两张牌,P1 和 P2,我将使用以下循环来生成所有可能的组合: for C1 := 0 to 51-4 do if (C1<>P1) and (C1<>P2) then for C2 := C1+1 to 51-3 do if (C2<>P1) and (C2<>P2) then
  • JLabel 不会显示图像 - NullPointerException(JLabel won't display image - NullPointerException)
    问题 这是我的第一个 Java GUI 程序,实际上只是我的第二个 Java 程序,所以请放轻松 :) 我的程序是大量谷歌搜索和阅读 Java 文档的结果。 我的问题是我有一张包含 52 张卡片的精灵表,我试图使用 subImage 将这些卡片单独保存到缓冲图像数组中,并且仅出于测试目的,在窗口中显示所有 52 张卡片。 该文件位于我确定的正确目录中。 我相信我的问题在于我对 Jlabels 的使用,或者只是一个愚蠢的错误。 无论如何,这是我的班级进行精灵表拆分 package gui; import java.awt.GridLayout; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JPanel; public class crdimgs extends JPanel {/** * */ static final long serialVersionUID = 1L; public final int width = 10; public final int height = 20; public
  • 循环遍历列表时按索引从列表中删除项目(Removing items from list by index while looping through list)
    问题 public boolean isTwoPair() { boolean isTwoPair = false; Collections.sort(deck); List<Card> cards = new LinkedList<Card>(deck); System.out.println(cards); for (int i = 0; i < cards.size()-1; i++) { for (int j = i + 1; j < cards.size()-1; j++) { if (deck.get(i).equals(deck.get(j))) { cards.remove(i); cards.remove(j); System.out.println(cards); } } } return isTwoPair; } 我认为我的问题出在我的 card.remove() 上。 当我移除卡片时,下次移除卡片时,它会将其从更改的列表中移除。 有没有办法从列表中删除两个具有相同索引号的项目? 如果我必须删除索引 0,1 因为它们都是像这样的对: [Ace,Ace,Three,Four,Four] 代码像这样删除它(删除索引0) [Ace,Three,Four,Four] 而不是从第一个列表中删除索引 1(Ace) 而是从第二个列表中删除它 [Ace,Four,Four]
  • 在这里使用指针向量是不必要的还是更糟,导致内存泄漏?(Is the use of vectors of pointers here unnecessary or worse, cause memory leaks?)
    问题 我对 C++ 编程比较陌生,但我是一个 10 年的 C 程序员,所以我更喜欢指向对象的指针,而不是指向对象的引用。 我正在编写纸牌游戏 - 这种设计不安全吗? 有没有更好的办法? 无论如何,我有一个类SolitaireGame : class SolitaireGame: { public: SolitaireGame( int numsuits = 1 ); private: Deck * _deck; vector<Card> _shoe; }; Deck是这样定义的: class Deck: { public: Deck::Deck( vector<Card>& shoe ); ~Deck(); int DealsLeft() const { return deals_left; } Card * PullCard(); private: int deals_left; int num_each_deal; deque<Card *> _cards; }; Deck构造函数获取对Card对象向量(鞋子,通常为 104 张卡片)的引用,并将指向每张卡片的指针推送到它自己的指针双端队列中。 Deck::Deck( vector<Card>& shoe ) { vector<Card>::iterator iter = shoe.begin(); while( iter !=
  • 为 5 张牌的扑克手赋值的算法(Algorithm to give a value to a 5 card Poker hand)
    问题 我正在开发一个扑克游戏作为大学项目,我们目前的任务是编写一个算法来对一手 5 张牌进行评分,以便可以将两手牌的分数相互比较以确定哪手牌更好。 一手牌的分数与随机牌等在抽签时可能产生什么牌的概率无关。 - 一手牌的分数仅基于手牌中的 5 张牌,而没有其他牌在甲板上。 我们给出的示例解决方案是为每种类型的扑克牌给出一个默认分数,分数反映了这手牌的好坏——例如: //HAND TYPES: ROYAL_FLUSH = 900000 STRAIGHT_FLUSH = 800000 ... TWO_PAIR = 200000 ONE_PAR = 100000 然后如果比较两只相同类型的手牌,手牌的价值应该被计入手牌的分数。 因此,例如,以下公式可用于对一手牌进行评分: HAND_TYPE + (each card value in the hand)^(the number of occurences of that value) 因此,对于由三个皇后和两个 7 组成的满屋,得分将是: 600000 + 12^3 + 7^2 这个公式在大多数情况下都有效,但我已经确定,在某些情况下,两只相似的手可以返回完全相同的分数,而实际上一只手应该击败另一只手。 这方面的一个例子是: hand1 = 4C, 6C, 6H, JS, KC hand2 = 3H, 4H, 7C, 7D, 8H