進化
游戲背景
自然中蘊藏著神秘的雙螺旋基因竹椒,演繹出生命的進化樹。
前情提要
本游戲適合3-8人玩耍米辐,游戲時長約20分鐘胸完。
游戲規(guī)則
為便于理解,在以下游戲規(guī)則說明中翘贮,可以將以下名詞通俗理解為:
- 基因:牌
- 自然:牌堆
- 世紀:回合
- 隱性基因:手牌
- 顯性基因:桌面的牌
- 生物:扮演桌面的牌的玩家
- 進化:手牌疊置到桌面的牌上方
- 發(fā)生事件:執(zhí)行手牌上的文字效果
- 歷史:棄牌堆
1.游戲開始
洗混128個基因組成自然赊窥。每個生物分發(fā)4個基因,4即生物基因數量择膝。由隨機一個生物開始順時針輪流進行一個世紀誓琼。
2.游戲回合
每個生物在一個世紀內進行以下操作:
開始世紀,從自然中獲取一個基因肴捉。
當玩家沒有顯性基因時腹侣,可以進化出“門”基因,同時從自然獲取一個基因齿穗。
當玩家有顯性基因時傲隶,若玩家的隱性基因中有符合生物的進化的,則可以選擇進化出該基因窃页,同時從自然獲取一個基因跺株。
若無其他說明复濒,每個世紀只可以進化一次。選擇一個基因發(fā)生事件乒省,然后該基因變成歷史巧颈,結束回合。
3.游記結束
當有生物進化成出“屬”基因時袖扛,該生物獲勝砸泛,游戲結束。
牌組配置
128張牌
牌面文字
名詞 | 張數 | 通俗理解 | 文字 |
---|---|---|---|
廢退 | 16 | 桌面的牌最上方進入棄牌堆 | 選擇任意一個生物最高顯性基因變?yōu)闅v史蛆封。 |
用進 | 16 | 桌面的牌最上方進入棄牌堆時唇礁,棄一張手牌獲得 | 當某生物最高顯性基因將變?yōu)闅v史時,將此基因變?yōu)闅v史來獲得該基因惨篱。 |
掠奪性雜交 | 6 | 別人展示部分手牌盏筐,你來選擇部分交換 | 選擇任意一個生物讓其展示任意數量隱性基因,你選擇獲得展示或者未展示的砸讳,并返還同等數量隱性基因琢融。 |
選擇性雜交 | 6 | 別人展示全部手牌,你來選擇一張交換 | 檢索任意一個生物的全部隱性基因绣夺,并與其交換其中一個吏奸。 |
平等性雜交 | 6 | 兩個人交換全部手牌 | 選擇其他兩個生物交換所有隱性基因。 |
螺旋式雜交 | 6 | 順或逆時針互相交換一張手牌 | 選擇左或右方向陶耍,所有生物互相交換一個隱性基因。 |
群體性雜交 | 6 | 每人一張手牌打混重發(fā) | 所有生物貢獻一個隱性基因進行隨機重組她混。 |
互惠性雜交 | 6 | 互相看手牌能否打到桌面 | 選擇任意一個生物與其互相檢索對方的全部隱性基因烈钞,若包含在對方生物上可進化的基因,則進化坤按。 |
基因鎖 | 4 | 不能進化 | 標記任意一個生物毯欣,使其無法進化,任意生物進化一次后解除臭脓。 |
時間鎖 | 4 | 跳過回合 | 標記任意一個生物酗钞,跳過下一世紀,跳過后解除来累。 |
返祖 | 4 | 桌面的牌最上方收回手牌 | 選擇任意一個生物最高顯性基因變?yōu)殡[性基因砚作,同時選擇一個隱性基因變?yōu)闅v史。 |
重新進化 | 4 | 桌面的牌最上方進入棄牌堆嘹锁,同時置換一張手牌 | 選擇任意一個生物最高顯性基因變?yōu)闅v史葫录,同時和自然交換一個隱性基因。 |
瘋狂進化 | 4 | 回合進化兩次 | 標記任意一個生物领猾,使其可以在某世紀進化兩次米同,進化后解除骇扇。 |
寄生 | 3 | 獲得可以用于自己打到桌面的一張事件 | 標記任意一對生物寄生關系,在宿主生物基因發(fā)生事件時面粮,若該基因可以用于寄生生物的進化少孝,將一個隱性基因變?yōu)闅v史基因來獲得該基因,獲得后解除熬苍。 |
共生 | 3 | 別人進化時置換一張手牌 | 標記任意一對生物共生關系韭山,雙方生物在進化時,另一方可以和自然交換一個隱性基因冷溃,雙方某一生物最高顯性基因變?yōu)殡[性基因或歷史時解除钱磅。 |
集體突變 | 4 | 每人置換一張手牌 | 所有生物和自然交換一個隱性基因。 |
基因突變 | 4 | 執(zhí)行牌堆上方的兩張牌 | 選擇任意一個生物似枕,從自然中檢索兩個基因盖淡,若該基因可以用于該生物進化則進化,否則發(fā)生事件凿歼。 |
分解作用 | 2 | 獲得棄牌一張 | 標記任意一個生物褪迟,可以獲得任意變?yōu)闅v史的基因一次,獲得后解除答憔。 |
光合作用 | 2 | 選擇置換四張手牌 | 從自然中獲得生物基因數量的基因味赃,然后將生物基因數量的隱性基因變?yōu)闅v史。 |
寒武紀 | 1 | 棄牌堆符合的全打到桌面 | 選擇左或右方向虐拓,所有生物從歷史中找到符合進化的基因并進化(不可被其他事件阻止)心俗。 |
泥盆紀 | 1 | 所有人桌面的牌最上方進入棄牌堆 | 所有生物最高顯性基因變?yōu)闅v史(不可被其他事件阻止)。 |
奧陶紀 | 1 | 增加1個手牌數 | 所有生物從自然獲得一個基因(不可被其他事件阻止)蓉驹。 |
白堊紀 | 1 | 減少1個手牌數 | 所有生物選擇一個隱性基因變?yōu)闅v史(不可被其他事件阻止)城榛。 |
時間機器 | 2 | 牌堆和棄牌堆交換 | 將歷史與自然交換。 |
游戲測試
測試代碼
#-*-coding:utf-8-*-
# @Author: suhang1596
import sys
import cmd
import random
def find(grade,playerList,layerNumber):
for i in playerList:
if( int( ( i - 1 ) / 2 ) == grade ):
grade = i
if grade >= pow( 2 , layerNumber ) - 1:
return 1
else:
find( grade , playerList , layerNumber )
def creatCard(layerNumber,cardList):
x = 1
for layer in range( layerNumber ):
for node in range( pow( 2 , layer + 1) ):
for samenode in range( pow( 2 , layerNumber - layer - 1 ) ):
cardList.append( x )
cardList.append( x )
x = x + 1
def test(playerNumber,layerNumber,hd):
random.shuffle(card[layerNumber])
player = []
for i in range( playerNumber ):
player.append(card[layerNumber][hd*i:int(hd*(progress+i))])
player[i].sort()
for j in range( playerNumber ):
mark = 0
if ( player[j][0] == 1 ) | ( player[j][0] == 2 ):
for y in range( 1 , 3 ):
if (( find( y , player[j] , layerNumber ) == 1 )) :
mark += 1
if mark > 0:
mainSuccessCount[layerNumber][playerNumber] += 1
else:
mainFailCount[layerNumber][playerNumber] += 1
else:
mainFailCount[layerNumber][playerNumber] += 1
if __name__ == '__main__':
testTimes = 500
rate = 1.0
progress = 0.625
beginHandcard = 4
roundHandcard = 1
testLayerFrom=4
testLayerTo=5
testPlayerFrom=3
testPlayerTo=9
print (u'您的設定是玩到%.2f%%的進度态兴,' % (progress*100)),
print (u'起始%2d張牌狠持,每回合抽取%2d張牌!\n' % (beginHandcard,roundHandcard))
card = []
mainSuccessCount = []
mainFailCount = []
handcardNumber = []
for c in range(0,10):
card.append([])
handcardNumber.append([])
mainSuccessCount.append([])
mainFailCount.append([])
for m in range(0,10):
mainSuccessCount[c].append(0)
mainFailCount[c].append(0)
for cardNumber in range(testLayerFrom,testLayerTo):
creatCard(cardNumber,card[cardNumber])
print (u'目前的牌組設定下瞻润,%d個等級喘垂、%4d張牌,' % (cardNumber,len(card[cardNumber]),)),
print (u'玩到%.2f%%的進度有%4d張牌' % (progress,len(card[cardNumber])*progress))
for i in range(testTimes):
for testLayer in range(testLayerFrom,testLayerTo):
for testPlayer in range(testPlayerFrom,testPlayerTo):
handcardNumber[testLayer] = len(card[testLayer]) / testPlayer
test(testPlayer,testLayer,handcardNumber[testLayer])
print (u'\n經過%d次測試绍撞,\n' % (testTimes))
for testLayer in range(testLayerFrom,testLayerTo):
for testPlayer in range(testPlayerFrom,testPlayerTo):
x = float(mainSuccessCount[testLayer][testPlayer])
y = float(mainFailCount[testLayer][testPlayer])
rate = x / ( x + y )
print (u'在%2d個人中進化成功率%.2f%%,' % (testPlayer,rate*100)),
print (u'即成功了%2d個人' % (int(rate*testPlayer))),
hui = ( len(card[testLayer]) * progress - beginHandcard * testPlayer ) / roundHandcard
quan = hui/testPlayer
print (u'需要輪%2d圈%3d個回合' % (quan,hui))
print ('\n')