本系列文章中,我將通過學習如何編寫程序來玩骰子游戲來教授C++編程。我選擇骰子游戲是因為它們很有趣,很容易用計算機程序模擬,我們將要學習的骰子游戲使用計算機編程第一門課程中涵蓋的所有技術。
讓我向您展示一個用C++編寫的骰子游戲(有點簡化)的簡單示例。這個骰子游戲涉及兩個骰子。每個玩家從20分開始。游戲由每個玩家擲骰子運行。如果兩個骰子滾動的總和是偶數,則該總和將添加到玩家的鍋中。如果兩個卷的總和為負數,則從玩家的底池中減去總和。第一個失去所有積分的玩家是游戲的失敗者。
以下是模擬這個游戲的程序:
#include <iostream>
#include <cstdlib>
#include <ctime>
使用命名空間std;
int main()
{
srand(時間(0));
int player1=20;
int player2=20;
int die1,die2;
while (player1 >=0 && player2 >=0) {
// 玩家1滾動
die1=rand() % 6 + 1;
die2=rand() % 6 + 1;
int sum=die1 + die2;
如果(總和%2==0){
玩家1=玩家1 + 總和;
}
否則{
玩家1=玩家1 - 總和;
}
cout << "玩家1卷的總和:" << 總和 << endl;
cout << "玩家1得分:" << player1 << endl;
cout << endl << endl;
// 玩家2卷
die1=rand() % 6 + 1;
die2=rand() % 6 + 1;
總和=die1 + die2;
如果(總和%2==0){
player2=player2 + 總和;
}
否則{
player2=player2 - 總和;
}
cout << "玩家2卷的總和:" << 總和 << endl;
cout << "Player 2 score: " << player2 << endl;
cout << endl << endl;
}
如果(player1 > player2){
cout <<“玩家1獲勝!”<< endl;
}
否則如果(player2 > player1){
cout <<“玩家2獲勝!”<< endl;
}
返回0;
}
以下是程序一次運行的輸出:
玩家1卷的總和:9
球員1分:11分
玩家2卷的總和:9
玩家2分:11
玩家1卷的總和:8
球員1分:19分
玩家2卷的總和:9
球員2分:2分
玩家1卷的總和:5
球員1分:14分
玩家2卷的總和:4
玩家2分:6
玩家1卷的總和:10
球員1分:24
玩家2卷的總和:5
球員2分:1
玩家1卷的總和:10
球員1分:34分
玩家2卷的總和:3
玩家2分:-2
玩家1獲勝!
你可以看到游戲是如何進行的。如果骰子的總和是偶數,玩家將獲得積分,如果骰子的總和是奇數,玩家將失去積分。當一名玩家(在這種情況下是玩家2)的分數低于0時,游戲結束。
該程序使用典型編程課程前幾周涵蓋的技術,包括使用變量存儲數據、執行算術、做出決策和執行重復。您還可以使用C++的稍高級功能來改進該程序的一些部分,隨著時間的推移,您將學習這些功能。
該程序還使用一種舊技術來生成隨機數。我們需要生成隨機數來模擬滾動骰子,但稍后在課程中,我們將轉向更現代的隨機數生成技術。
還有一些本游戲中沒有使用的編程技術和功能是第一個編程課程的一部分。當我們發現可以使用它們的新骰子游戲時,我將介紹這些技術和功能。
這就是這個快速介紹的全部。在我的下一篇文章中,我將討論如何在C++中生成隨機數,因為我將在每篇文章中使用此功能。我還將用這篇文章來討論C++程序的結構。
源|游戲陀螺
自從《殺戮尖塔》在電子游戲領域成功后,肉鴿DBG(牌庫構筑類游戲)越來越受到玩家的廣泛關注。玩家在游戲中需要通過選擇、組建卡組和觸發各種組合效果來實現策略,這使得卡牌游戲具有很高的趣味性和挑戰性。作為此類游戲的開創者,《殺戮尖塔》為后來的爬塔like游戲提供了優秀的范例。
前段時間,一款由 Little Leo Games工作室開發,名為《阿斯特賴亞:六面神諭》(以下稱《阿斯特賴亞》)的爬塔like進入到了Steam的熱銷新品榜單中。雖然排名并未十分靠前,但評論區將其視為“年度最佳策略肉鴿”的言論以及1500多個評價中高達95%的好評如潮,讓這款游戲引起我的好奇。
從評論來看,這款被諸多玩家與《殺戮尖塔》相提并論,并表示設計出全新卡牌邏輯設計的爬塔like游戲,究竟有著怎么樣的魅力?
一款更具隨機性和可控性的爬塔like游戲
初次瀏覽《阿斯特賴亞》的商店頁面,你或許就會被其獨特的美術風格所吸引,游戲畫面以大面積藍色為背景,呈現出一種獨特的星月流轉的風格,仿佛是風格迥異的塔羅牌。
而在玩法上,《阿斯特賴亞》雖然也采用了《殺戮尖塔》的經典爬塔機制、卡池隨機抽選等基礎玩法,但它所走出的道路卻十分的反叛,甚至可以將其稱之為爬塔like游戲的革新之作。
與許多爬塔like采用的卡牌玩法不同,《阿斯特賴亞》是一款以骰子構筑為基礎的游戲。那么,使用骰子代替卡牌的效果如何?
不抽牌,改擲骰子了
一方面,比起卡牌,骰子玩法的理念又有所不同了,卡牌只是一個牌面,一個骰子卻具有6個骰面。這就相當于在以往的卡牌抽取中又再加上一層不確定性,極大的增加了游戲每次對局的隨機性。
隨機擲出其中一個效果
《阿斯特賴亞》采用了骰子,意味它與傳統卡牌做出了差異化,同時還放大了肉鴿的隨機樂趣。但游戲機制往往都是牽一發而動全身。
實際上,肉鴿DBG的隨機性是一個很難平衡的機制。一方面,隨機性過高會增加游戲勝負的不可控因素,也間接導致玩家所構筑的卡組很難發揮理想效果。即使玩家構筑了一套好的卡池,也可能抵擋不住6個骰面中存在的運氣制裁,從而減少成長的樂趣;另一方面,隨機性帶來的意外挫敗感也會極大地影響玩家的游戲體驗。
對此,《阿斯特賴亞》根據骰子加入了一個新的概念,就是敵我同源的血量機制設計。
游戲采用了獨特的雙向“血條”,即凈化值與腐化值兩種指標。它并非傳統的“計數器”血條,玩家的血量由用凈化值衡量,被腐化值填滿則扣除一顆心。
藍色為凈化值,紅色為腐化值
一般來說,骰子有凈化和腐化兩大效果,當隨到腐化骰子時,必須在該回合打出。要么給自己用扣血,要么給敵人用加血。因此在對局中,常常能看到血槽來回浮動的場景。
敵人有腐化槽設定,滿了立即發動技能,因此更要謹慎使用腐化骰子
就是這套雙向血條概念,與骰子的隨機性相輔相成,構成這款游戲與市面其他爬塔like最大的區別。
根據這兩大核心改動,《阿斯特賴亞》加入了許多種可控的機制,將血條系統和骰子相互關聯,以平衡骰子高隨機性可能帶來的負面影響,圍繞“雙向”設計來增加策略性。
在游戲內,骰子具備了正/負收益的兩種不同的效果。主要分為3大類,有全是凈化效果的“保守骰子”,也有各占一半的“均衡骰子”,還有腐化占多數的“冒險骰子”。
游戲中不乏有6面全是負面效果的骰子
一般來說,保守骰子的效果都遠不如冒險骰子好,但這樣設計,就只是讓游戲陷入純粹的賭運。為此,游戲在這套敵我同源的血條加入美德機制,讓腐化效果也能起到作用。
美德技能相當于角色技能。游戲將這些技能的觸發條件與血條相掛鉤。當自身腐化值到達一定刻度后,便能夠使用相應的美德技能,且技能強度與腐化值成正比。讓“雙向”血量設計成為一種風險與收益并存的機制。
像這種技能卡在極限最后一格的角色,就十分考驗玩家的控風險能力
而在設定上技能不只是傷害,還有著“重投”或改變骰子性質等關鍵作用。通過這個精妙的血量機制,讓骰子的隨機性得到了一定程度的多用途解法。很多情況下,讓自己“掉血”反而能起到更好的效果。
給自己喂腐化骰子,適當賣血來解鎖美德技能獲得即時戰力
在數個效果各異的骰子和技能的配合下,骰子的正負反饋之間的界限變得模糊。讓腐化骰面擁有了產生正收益的機會,負反饋的骰子也能順理成章地能融入構筑。使得游戲的策略深度得到延伸。
在這一基礎上,游戲再通過角色設計進一步讓玩家能夠把控對局。游戲共有6個不同的角色,通過角色特性與骰子聯動等創造了各種流派玩法。
角色之間分別有具備了不同的特性。不同角色的美德技能刻度、數量也不盡相同。例如專門利用腐化來打出高傷害體系的塞拉里烏斯。
值得一提的是,對局內除了主角外還有另一守衛角色。守衛能夠固定使用一種骰子,像是能夠使用“重新投擲”的守衛也是其增加對局可控性的關鍵之一。
其中一名角色赫維留斯還能與守護進行聯動
當玩家熟練掌握角色特性后,就能構筑合適的骰子庫,對骰子和技能更好地把控,成型后打出各種意想不到的效果,極大豐富了游戲的可玩性。
除此之外,游戲在爬塔的一些隨機事件和鍛造商店等,也讓玩家能更好構筑理想骰子庫。玩家能夠在爬塔中觸發構筑事件、復制骰子、清洗骰子庫等。
其中類似遺跡的恒心/黑洞祝福,也是在風險和收益并存的一大選項。這種設計使得玩家需要在風險與收益之間做出權衡,從而增加了游戲的策略性。
《阿斯特賴亞》在許多方面都展現出了與傳統爬塔類游戲的不同。憑借骰子和雙向血條的設計,即使是相似的元素,也能帶來全新的游戲體驗。盡管如此,它仍然沒有脫離爬塔like游戲的核心樂趣。圍繞著雙向的設定,《阿斯特賴亞》的機制設計渾然一體,讓爬塔like在隨機性上有更大的操作空間。
在核心體驗上,《阿斯特賴亞》的構筑深度更傾向于單一路線,在前期圍繞一個核心骰子流派決定后面的打法,降低了構筑卡牌打出Combo的爽快感。轉而大幅度提高了每回合的解場以及對局中的現場解題的樂趣。這種設計變相提高了爬塔like的對局思考比重,使得玩家在游戲中需要更加注重策略性和靈活性。無論怎樣,這都是肉鴿DBG的一次新突破。
或是《殺戮尖塔》后該品類最大突破
《阿斯特賴亞》以其巧妙的構思和創新設計,為爬塔like帶來了新的可能性和發展方向。盡管如此,它仍然存在一些缺點,例如傷害數值的顯示不全、骰子的詞條表達復雜、高難度模式體驗不佳,以及骰子辨識度低等問題。
不過令人欣慰的是,從玩家的評論中可以看出他們對這款敢于創新的游戲給予了足夠的包容。大多數差評中都包含了玩家自己的意見和建議,而不是不明所以的批評。這表明玩家們對一款好游戲依然保持著高度的認可和支持。
對于玩家提出的中肯建議,開發者也將會予以重視,并結合游戲的實際情況進行改進和完善。
自2019年《殺戮尖塔》成為爆款以來,越來越多的肉鴿卡牌游戲出現了設計思路的高度同質化。在這個背景下,創新成為了玩家們愈發渴望的品質。《阿斯特賴亞》的出現,就像是在久旱之后迎來了甘霖,給這個領域的游戲帶來了新的生機。
在很多陷入同質化的游戲品類中,敢于創新的新游戲,即使在某些方面還不夠成熟,往往更能獲得玩家的青睞。畢竟,《殺戮尖塔》不也是在接受玩家反饋的基礎上,逐步改進,最終才擁有了如今突破性的體驗嗎?
在玩家與開發者共同努力下,我們期待著《阿斯特賴亞》的開發團隊能夠積極地吸收玩家們的寶貴建議,不斷地改進和優化游戲,使之成為一款更優秀的佳作。
【tóu】子,也稱為色【shǎi】子,正因為其產生的不確定性但又是可控的(1/6的概率),所以在日常的很多活動中起著不可或缺的作用,也是一個隨手可觸的物件。骰子的引入讓游戲的走向充滿了變數,孩子對或然性有了一個認知及對其的接受態度,骰子也具有一個數字相關的特征,這樣或然性和數字相交則是更多的情景產生,這些是需要不斷進行動態計算予以應對。國外在數學啟蒙中,也是利用了骰子這些特點,通過骰子游戲來驅動孩子的運算思維,在玩中完成這些數學任務。
本文收集整理了些有代表性的13個骰子游戲,父母可在家中和孩子一起玩。文中游戲將按照由易至難順序給予呈現。
繪畫一棵蘋果樹,樹上的蘋果各標上1~6的數字,游戲的基本任務是通過擲骰子給數字與骰子上面點數一致的蘋果涂顏色,這也是骰子游戲最簡單的形式之一,孩子對數有了認知之后就可以玩,也是培養孩子數感開始。
父母與孩子一起玩時,相互輪流投,直至各自將蘋果樹上的蘋果分完,根據情況創造更多投的機會讓孩子分到更多的蘋果,剛開始玩,讓他們贏更重要。
也可以變換一些形式,讓游戲有更多承載
首先定義組成向日葵花的每個部分與骰子點數的對應關系,游戲的任務是通過擲骰子來完成向日葵花的拼接,孩子與父母比賽看誰先拼好花。
這個游戲確實對孩子精細動作和對物品的組成結構的觀察都有一定的要求,父母可以更換更多的主題來保持游戲的新鮮性,如畫一只狗熊、小羊羔(定義點數與動物身體部位的對應關系)、做一些手工拼接等。
使用2個骰子(或3個骰子)投擲,找出點數排列組成的最大數(如投到的點數為為3點和6點,則組成的最大數為63),孩子與父母各自獲得的“最大數”相互比較, 最大者在本輪獲勝。
這個游戲孩子需要對數的大小有一定的概念(小一些的孩子可以讓大小進行一些直觀對應,如和樂高數量和高矮對應等),游戲中讓孩子來對數的大小判斷和選擇。
相對于單骰的簡單和直接,使用兩骰子點數進行加法計算則使難度上升一級(6以內的加法運算),這樣標簽選擇范圍為2-12之間的數字,玩家獲取數字與所投的兩個骰子點數之和一致的積木并涂色,涂積木數量多的玩家獲勝。
剛開始玩時可以提供孩子一些豆子進行計數,再者可以寫在紙上(列出數字和公式),再后讓孩子進行心算且速度越來越快。通過這種方式“搶”蘋果、草莓,讓“枯燥”的算術運算持續下去。
兩個玩家使用3個骰子來決定比賽的節奏,從1開始,接著是2,依次3,4,...直至12,優先完成者獲勝。具體規則如下:
(如下圖,藍方擲出1,3,6,存在1點,則藍方將藍色棋子移入第一步)
(如下圖,藍方擲出3,4,5,不存在2點,則交替由紅方來投)
(如下圖,藍方擲出1,1,6,不存在2點,但是1+1=2,藍方可將棋子從1移到2)
也可以使用1個骰子進行類似的比賽,除了范圍縮為1~6外,更重要的是每步Get it機率為1/6,很可能兩人擲來擲去一直無法前進,這會降低游戲的效率和繼續玩下去的興趣。
游戲可以在這個基礎上,進行一些規則調整使游戲更有側重性:
這個游戲使用1個骰子,一個玩家只有不擲出“1”,就會一直投,每次所投點數累加起來,但若擲出“1”,則本輪所投的點數清零。最先獲得100點的玩家獲勝。具體規則如下:
這個游戲相對于之前的游戲,運算范圍拓寬到100以內,更重要在玩的過程中,速度和風險并存,在未擲出“1”之前,可以不斷地投快速增加自己的點數,但是風險成本也快速地增加,需要進行抉擇,是否繼續投擲下去,“風險意識”應該是孩子的一個收獲。
游戲使用2個骰子,玩家選出1個自己出局的數字,如“6”,“8”,“9”等,若所擲點數之和不是玩家的“出局數”,則一直累加,且繼續投擲,直至出現“出局數”為止,本輪結束投擲權利交替給其他玩家,但本輪所得的點數不清零。在規定N輪后,點數累加所得分數高者勝出。
這個游戲計算量開始增大,且應該對5以上的加法有強化記憶性,如出局數為8,則會有2+6,3+5,4+4組合,經過這樣的訓練,孩子不會以計數方式進行運算。
游戲使用3個骰子,玩家首先擲出3個骰子,保留最大點數的骰子,可繼續選擇投擲其余2個,在產生的結果中繼續保留較大點數的骰子,并繼續選擇投擲第3個骰子,三次投擲點數相加獲得本輪最終得分,在規定N輪后,各輪累加得分高者勝出。
當然很可能第一次投擲的得分最大,但若不是“666”組合,其實都可通過選擇投擲權利來獲取最大的可能,即使結果不理想,孩子也會意識到,選擇不僅意味著“更好”,也可能“更壞”,需要學會評估,是否值得嘗試。
游戲使用3個骰子,玩家擲出3個骰子,并根據棋盤上數字的布局來選擇他們的排列數,(如擲出5,2,1,則有125,521,215,152,512等排列數,但這次不再是選擇最大的數,而是根據棋局選出最適合的數),并在棋盤上與排列數一致的位置布一子,像五子棋一樣,最先將己方四個棋子連成一條線的玩家獲勝。
四子棋的棋盤數字都是10的倍數,故由骰子產生的排列數需要進行四舍五入處理。
這個游戲雖然數學計算量不大,但對布局、策略這些對弈思維有了要求,是一個新的臺階。
其他版本
四舍五入到千位(需要5個骰子)
四舍五入到百分位(需要3個骰子)
這個游戲使用骰子數量將增加到5個,但游戲的計算形式仍是以加法計算為主,由玩家擲出5個骰子,若沒有“2”或“5”的骰子產生,則5個骰子累加之和為本輪的得分并交替其他玩家繼續投;若存在“2”或“5“的骰子,則除去”2“或”5“的骰子外,重新投擲其他骰子,沒有產生”2“或”5“的骰子,累加這次投擲骰子得分,若存在,去除”2“或”5“的骰子的骰子繼續投擲,循環往復。
這個游戲除了算數運算外,存在一定的計算機編程思維,讓孩子體驗一下條件邏輯判斷的具體場景。
游戲使用5個骰子,玩家擲出5個骰子,若存在3對(3個一樣的點數)情況,則獲得3點(Point),4對可獲得6點,5對獲得12點。 但如果只有2對,則投擲其余3個骰子,成為3對則獲得點數,沒有則本輪得分為0。在規定的幾輪后,累計點數最多的玩家獲勝。
通過引入點數(Point),可以將加法運算拓寬到更廣的范圍,如1000以內。
游戲使用6個骰子,玩家投擲5個骰子,若存在”12”,”123”,”1234” 等情況,就像連接起來的小火車,從1開始順序連接不斷裂,每個數字可看作一節車廂,火車最少兩節,每節可獲得5個積分點,這樣“1234”就是20點(4X5),先到100點的玩家獲勝。
這個游戲可以引入乘法運算,積分點可以是5的倍數,也可以是2、3...等倍數。
游戲進化到乘法模式下,具體規則如下:
這些游戲的開展不需要特別的工具:幾個骰子、供記錄和計算的紙張足矣,另附加一些模版(文章涉及到的游戲模版可公眾號留言獲取),其實在游戲涉及到模版,如分蘋果、分香蕉等,建議游戲必要模版和孩子一起手工準備,這樣也間接鍛煉了他們的精細動作能力,而且主題變化萬千,保持游戲的新鮮性。另游戲名稱中涉及英文名的為原版游戲名稱,列出以供參考。