lua模拟斗地主玩家发牌

突然想写斗地主算法了.

        

  斗地主 写了发玩家第一份手牌的算法. 


斗地主: 

                牌数: 54张 

               黑桃.梅花.红桃.方块 :13张.

                大小王:2张. 

                地主牌:3张。

                 玩家手牌:17张.

第一份玩家的手牌实现思路如下: 


         遍历13次。 

                 每次 随机4个牌型。随机13张牌值。 

        发给玩家的第一张 牌 存入玩家的手牌数组中。 

        跳过这层遍历,

        进入第二次遍历。再次随机4个牌型,13张牌值。

         与前面的玩家手牌数组中的牌值作比较,如果相等。则遍历次数不变。并把这次遍历存入玩家手牌中的数组的牌值删除。

         不相等。则遍历次数+1,直到玩家手中拥有13张手牌。则退出遍历



local game = {}
function game:Init()

    self:Data()
    self:InitData()
    self:test()
end

function game:Data()
    self.first_card = {} --第一位玩家手牌
    self.second_card = {} --第二位玩家手牌
    self.three_card = {} -- 第三位玩家手牌
end


function game:InitData()
    math.randomseed(tostring(os.time()):reverse():sub(1, 6))
    local init_num = 1
    while init_num <= 17 do
        self.first_card[init_num] = {brand_type = math.random(4) ,
            brand_value = math.random(13)}
        while true do  
              if 1 == init_num then init_num = init_num + 1 break end
              local state = self:CheckWeight(init_num)
              if not state then init_num = init_num + 1 end
            break
        end
    end
end 

function game:CheckWeight(init_num)
    for i = 1 , init_num - 1 do
        local brand_type , brand_value = self.first_card[i].brand_type ,
        self.first_card[i].brand_value
        if self.first_card[init_num].brand_type == brand_type
        and self.first_card[init_num].brand_value == brand_value then
            self.first_card[init_num] = {}
            self.first_card[init_num] = nil
            return true
        end
    end
    return false
end 

function game:test()
    for k , v in pairs(self.first_card) do
        print(v.brand_type , v.brand_value , "111111111")
    end
end 

game:Init()

    

               

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值