我已经看到了在Java中定义静态数组的不同方法.或者:
String[] suit = new String[] {
"spades",
"hearts",
"diamonds",
"clubs"
};
Run Code Online (Sandbox Code Playgroud)
......或仅
String[] suit = {
"spades",
"hearts",
"diamonds",
"clubs"
};
Run Code Online (Sandbox Code Playgroud)
或者作为一个 List
List suit = Arrays.asList(
"spades",
"hearts",
"diamonds",
"clubs"
);
Run Code Online (Sandbox Code Playgroud)
是否存在差异(当然,列表定义除外)?
什么是更好的方式(表现明智)?
有谁知道评估7张扑克牌手的快速算法?比一组7中的每21张5张牌组合更加有效率的东西.
干杯,
皮特
我正在考虑改编半流行的纸牌游戏.我想让它在没有中央服务器的情况下运行,而我正试图想出一个不必信任客户就会让作弊变得不可能的方案.
我看到的基本问题是每个玩家都有几堆牌(平局牌,当前牌和弃牌牌).任何一个玩家都不可能改变这些桩的构成,除非游戏规则允许(即绘制或丢弃牌),玩家也不能知道他们或他们的对手的桩是什么.
我觉得应该有一些方法可以使用像公钥加密这样的东西来完成这个,但我一直在我的方案中找到漏洞.任何人都可以建议一个协议或指向我这个主题的一些资源?
[编辑]好的,所以我一直在考虑这个问题,这是我想出的一个想法.如果你可以戳它的任何漏洞,请告诉我.
在随机播放时,玩家有一堆牌,其价值为他们所知.他们采用这些值,将随机盐连接到每个值,然后哈希它们.他们记录盐,并将哈希传给他们的对手.
对手连接他们自己的盐,再次哈希,然后将哈希洗牌并将牌组传回原来的牌手.
我相信在这一点上,牌组已被随机化,玩家都无法了解这些价值观.然而,当一张牌被抽出时,对手可以揭示他们的盐,允许第一个玩家确定原始值是什么,并且当玩牌时玩家展示他们自己的盐,允许对手验证牌值.
这是我第一次出现堆栈溢出,所以如果格式不适合该网站,我很抱歉.我刚刚开始学习编程,差不多已经过去了2周.我正在从http://openbookproject.net/thinkcs/python/english3e/index.html学习python, 直到现在一切都很好,我刚刚被困了好几个小时.我google了很多但找不到合适的解决方案来解决我的问题所以我在这里.
正如CH17所解释的那样,我试图让OldMaidGame()运行没有问题.http://openbookproject.net/thinkcs/python/english3e/ch17.html - 大部分代码也来自前一章.
我发现的是我无法使用Deck.remove,Hand.remove_matches或任何其他类型的删除功能.经过一些调试后,我发现当程序检查卡片/手/等中是否存在给定卡片时会出现问题.它不可能匹配.然后经过一些回顾章节,(在第16章),我发现'如果卡在甲板/手/等:删除(卡)'等查找.cmp()的对象,以确定卡实际上是否存在于deck/hand/etc中.这是我在电子书给定代码上添加'ace'之后的cmp版本.
def __cmp__(self, other):
""" Compares cards, returns 1 if greater, -1 if lesser, 0 if equal """
# check the suits
if self.suit > other.suit: return 1
if self.suit < other.suit: return -1
# suits are the same... check ranks
# check for aces first.
if self.rank == 1 and other.rank == 1: return 0
if self.rank == 1 and other.rank != 1: return 1
if self.rank …Run Code Online (Sandbox Code Playgroud) 我正在尝试为一个列出一副卡片内容的项目编写一个代码,询问该人想要洗牌的次数,然后将它们洗牌.它必须使用一个方法来使用System.Random类创建两个随机整数.
这些是我的课程:
Program.cs中:
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Deck mydeck = new Deck();
foreach (Card c in mydeck.Cards)
{
Console.WriteLine(c);
}
Console.WriteLine("How Many Times Do You Want To Shuffle?");
}
}
}
Run Code Online (Sandbox Code Playgroud)
Deck.cs:
namespace ConsoleApplication1
{
class Deck
{
Card[] cards = new Card[52];
string[] numbers = new string[] { "2", "3", "4", "5", "6", "7", "8", "9", "J", "Q", "K" };
public Deck()
{
int i = 0;
foreach(string s in numbers)
{ …Run Code Online (Sandbox Code Playgroud) 当我需要在Java/Android中随机播放一副扑克牌时,我Collections.shuffle(List<?> list)当然会使用它.我一直这样做,结果似乎可以接受.但他们不是.
如本文所述,有52个!52张牌扑克牌可能独一无二的洗牌.这相当于约2 ^ 226.
但是,Collections.shuffle(List<?> list)使用new Random()默认它采用了48位的种子,因此只能创建2 ^ 48独特的洗牌-这仅是3.49*10^(-52)所有可能的洗牌%的!
那么如何以正确的方式洗牌呢?
我已经开始使用了SecureRandom,但最后还够吗?
List<Card> cards = new ArrayList<Card>();
...
SecureRandom secureRandom;
try {
secureRandom = SecureRandom.getInstance("SHA1PRNG");
}
catch (NoSuchAlgorithmException e) {
secureRandom = new SecureRandom();
}
secureRandom.nextBytes(new byte[20]); // force SecureRandom to seed itself
Collections.shuffle(cards, secureRandom);
Run Code Online (Sandbox Code Playgroud) 我对游戏开发比较陌生,所以我决定从头开始创建一个体验和娱乐的爱好项目.特定游戏类似于被称为Three Card Brag的扑克游戏.游戏在电影Lock,Stock和Two Smoking Barrels中播放.
我一直在阅读有关游戏开发的一些关于SO的主题,但主要是这个问题.这有助于改进我创建对象的原始方式.
我遇到的一个特殊问题是定义游戏状态.我最初的方法是将所有内容分开(例如将芯片堆栈保留在一个Player类中),但在阅读了我之前提到的问题的响应之后,似乎所有可能的游戏状态都应保持在一个GameState对象中.我想出的基本上是这样的:
abstract class CardGameState
{
protected List<Player> _Players;
protected Player _CurrentPlayer;
protected Dictionary<Player, int> _Chips;
protected Dictionary<Player, Hand> _CurrentHand;
protected Dictionary<Player, PlayerStatuses> _PlayerStatus; // PlayerStatuses.InHand, PlayerStatuses.Folded, PlayerStatuses.SittingOut, etc.
/* etc. */
Run Code Online (Sandbox Code Playgroud)
其中每个CardGameState都通过一些动作修改:
public interface IAction
{
string Name { get; }
CardGameState Apply(CardGameState state);
bool IsLegal(CardGameState state);
}
Run Code Online (Sandbox Code Playgroud)
现在我非常强烈地认为这会破坏面向对象编程的目的,因为与播放器特定相关的数据(在这种情况下,他的芯片堆栈,手和当前状态)不会被Player对象封装.
另一方面,如果玩家要提高赌注,我会创建一个RaiseAction实现IAction,但IAction界面只接受当前的游戏状态,如果芯片堆栈存储在Player类中,我认为这不是理想的. …
是否有最好的价值,以便我赢得最大比例的游戏?如果是这样,它是什么?
编辑:是否存在可以针对给定限制计算的确切获胜概率,与对手无关?(自大学以来我没有完成概率和统计).我有兴趣将其视为将其与模拟结果进行对比的答案.
编辑:修复了我的算法中的错误,更新了结果表.
我一直在玩一个改进的二十一点游戏,其中一些相当讨厌的规则调整来自标准规则.我将与标准二十一点规则不同的规则用于斜体,并为不熟悉的人提供二十一点规则.
一副牌由52张牌组成,以下13个值各有四张:
2,3,4,5,6,7,8,9,10,J,Q,K,A
卡的其他财产都不相关.
Ruby的表示形式是:
CARDS = ((2..11).to_a+[10]*3)*4
Run Code Online (Sandbox Code Playgroud)
我一直在接近这个如下:
这是在Ruby中实现的算法:
#!/usr/bin/env ruby
class Array
def shuffle
sort_by { rand }
end
def shuffle!
self.replace shuffle
end
def score
sort.each_with_index.inject(0){|s,(c,i)|
s+c > …Run Code Online (Sandbox Code Playgroud) 我一直在玩弄在Python写一些简单的纸牌游戏的乐趣,我想一个图形用户界面(GUI)添加到游戏.你会为一个简单的纸牌游戏编写GUI来推荐哪个库?
我正在为一副纸牌编写一个代码,这些卡片可以洗牌.我测试了代码,但我真的不知道它是否真的正在做它应该正确做的事情?你怎么看?
这是shuffle方法的代码:
public void shuffle()
{
for( int x = myDeck.size(); x > 0 ; x--)
{
Random rn = new Random();
int index1 = rn.nextInt(52);
Card c = myDeck.remove(index1);
myDeck.add(c);
}
}
Run Code Online (Sandbox Code Playgroud)
我的输出似乎在它的数字中被洗牌,但不是像黑桃心脏卡这样的名字,
例如,当我测试代码时,这是我的输出:
Deuce of spades
Seven of spades
Eight of spades
Ace of spades
Three of hearts
Five of hearts
Six of hearts
Seven of hearts
Nine of hearts
Ten of hearts
Queen of hearts
King of hearts
Ace of hearts
Seven of diamonds
Eight of diamonds …Run Code Online (Sandbox Code Playgroud)