ruby – 编程技巧:如何创建简单的纸牌游戏
发布时间:2020-12-16 21:51:34 所属栏目:百科 来源:网络整理
导读:当我正在学习 Ruby语言时,我越来越接近实际编程.我正在考虑创建一个简单的纸牌游戏.我的问题不是面向Ruby的,但我知道要学习如何用真正的OOP方法来解决这个问题.在我的纸牌游戏中,我想要有四个玩家,使用一个52卡的标准甲板,没有小丑/通配符.在游戏中,我不会使
当我正在学习
Ruby语言时,我越来越接近实际编程.我正在考虑创建一个简单的纸牌游戏.我的问题不是面向Ruby的,但我知道要学习如何用真正的OOP方法来解决这个问题.在我的纸牌游戏中,我想要有四个玩家,使用一个52卡的标准甲板,没有小丑/通配符.在游戏中,我不会使用ace作为双卡,它总是最高的卡.
所以,我想知道的编程问题如下: >如何对卡片卡进行排序/随机化?有四种类型,每种都有13个值.最终只能有唯一的值,所以选择随机值可能会产生重复. 我是一个真正的Ruby nuby,我的目标是学习解决问题,所以伪代码会很棒,只是为了了解如何以编程方式解决问题.对于我的语法和写作风格,如果不清楚道歉,因为这不是我的母语. 此外,指向这些挑战的网站的指针将是一个很好的资源! 感谢您的意见,答案和反馈! 解决方法
有事让你开始
您可以通过使用0到51之间的数字轻松确保独特的卡片. Array#shuffle方法基于Knuth-Fisher-Yates随机播放算法. http://en.wikipedia.org/wiki/Fisher–Yates_shuffle class Card RANKS = %w(2 3 4 5 6 7 8 9 10 J Q K A) SUITS = %w(Spade Heart Club Diamond) attr_accessor :rank,:suit def initialize(id) self.rank = RANKS[id % 13] self.suit = SUITS[id % 4] end end class Deck attr_accessor :cards def initialize # shuffle array and init each Card self.cards = (0..51).to_a.shuffle.collect { |id| Card.new(id) } end end # people with Ruby 1.9 (or 1.8.7 with backports) can safely ignore this duck punch class Array # knuth-fisher-yates shuffle algorithm def shuffle! n = length for i in 0...n r = rand(n-i)+i self[r],self[i] = self[i],self[r] end self end def shuffle dup.shuffle! end end 测试 d = Deck.new d.cards.each do |card| puts "#{card.rank} #{card.suit}" end 产量 6 Spade 5 Heart 2 Heart 8 Heart 8 Diamond 7 Club J Diamond 4 Club K Spade 5 Diamond J Heart 8 Spade 10 Club 4 Diamond 9 Heart 7 Diamond 3 Diamond K Diamond 7 Spade Q Diamond 9 Diamond 6 Heart A Heart 9 Club A Spade 5 Club J Club Q Spade 2 Club 2 Spade Q Heart A Diamond 10 Spade 10 Diamond Q Club 3 Club A Club K Club 6 Club 10 Heart 2 Diamond 3 Spade K Heart 5 Spade 9 Spade 7 Heart 4 Spade J Spade 3 Heart 4 Heart 8 Club 6 Diamond (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |