突然想写斗地主算法了.
斗地主 写了发玩家第一份手牌的算法.
斗地主:
牌数: 54张
黑桃.梅花.红桃.方块 :13张.
大小王:2张.
地主牌:3张。
玩家手牌:17张.
第一份玩家的手牌实现思路如下:
遍历13次。
每次 随机4个牌型。随机13张牌值。
发给玩家的第一张 牌 存入玩家的手牌数组中。
跳过这层遍历,
进入第二次遍历。再次随机4个牌型,13张牌值。
与前面的玩家手牌数组中的牌值作比较,如果相等。则遍历次数不变。并把这次遍历存入玩家手牌中的数组的牌值删除。
不相等。则遍历次数+1,直到玩家手中拥有13张手牌。则退出遍历
local game = {}
function game:Init()
self:Data()
self:InitData()
self:Data()
self:InitData()
self:test()
end
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
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
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
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
for k , v in pairs(self.first_card) do
print(v.brand_type , v.brand_value , "111111111")
end
end
game:Init()