[初章] 第二幕、命運多歧的人生
Tags
- 初章
「小希小希~我回來啦!想我嗎?」
『主人還差 300 元才足以購買新遊戲喔!加油加油~』「小希主人肚子餓了~」
『主人還差 300 元才足以購買新遊戲喔!加油加油~』「小希陪我玩陪我玩~」
『主人還差 300 元才足以購買新遊戲喔!加油加油~』
且不論內心如何,
表現出來毫無反應,就只是個 NPC。
因為流程上就是一直線通到結局。
如同詛咒般的宿命,沒有任何其它的可能性。
如果有,只會是自盡而已。
為了不讓小希過著如此悲慘的人生,
這次我們要教他做出抉擇。
小至玩哪款遊戲好?
大至要送心愛的主人什麼樣的遊戲才能提升好感度…等。
人生總是需要一些抉擇,以及抉擇帶來的變化。
這就是奧義流程控制的一式。
#include <stdio.h>
int main()
{
int money, price;
printf("Master, how much do you have? What's the price of the new game?\n");
scanf("%d%d", &money, &price);
if (money >= price)
{
printf("Congratulations!! You can buy it NOW!!\n");
}
else
{
printf("Master, you need %d more money. fight, fight!\n", price-money);
}
return 0;
}
奧義.命運導引
在碰上 if 之後,小希便會面臨命運的抉擇。
()
中訴說著小希如何抉擇的關鍵。
就是 money >= price
這個條件。
如果小希判斷主人的錢足夠,他就會恭喜主人。
如果不夠,會幫忙計算出差額並鼓勵主人。
變得貼心了呢。真是個好孩子。
if 在條件滿足時,會將流程導向歸屬於 if 的分支。
條件不滿足的話,歸屬於 if 的分支將被跳過。
若 if 之後跟著 else 的話,
條件不滿足時,會將流程導向歸屬於 else 的分支。
在流程依條件流向其中一方之後,
另一方會被跳過。
魚與熊掌是不能兼得的。
else 是可有可無的,
在沒有跟著 else 的情況下,
不滿足條件就不做任何事。
不加 else 等同於追加沒有指令的 else。
分支的境界線
流向明確後,重要的自然就是指令們的歸屬了。
{}
正是用來圈地的境界線。
被 if 之後的 {}
所囊括的一切,
便是歸屬於 if 這條岔道之下,必須經歷的一切。
同理,被 else 之後的 {}
所圈下的領地,
便是歸屬於 else 這條岔道下的未來。
岔路的岔路的岔路
岔路的前方,被圈定的世界中,
仍然是一塊可以寫下任何咒文的領域。
只要我們想要,就可以任意開枝散葉,
在分歧中做出更細微的分歧。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
int main()
{
int money, price;
printf("Master, how much do you have? What's the price of the new game?\n");
scanf("%d%d", &money, &price);
if (money >= price)
{
if (money == price)
{
printf("Congratulations!! Master, just match! This must be DESTINY!!");
}
else
{
printf("Congratulations!! You can buy it NOW with $%d remain!!\n", money-price);
}
}
else
{
printf("Master, you need %d more money. Fight, fight!\n", price-money);
}
return 0;
}
注意在 C 中,判斷相等必須用 ==
才行。
單只有一個等號的情況,並不是判斷相等用的。
在習慣之前可能會經常犯這錯誤,
記得分歧走錯時,可以先檢查一下。
歸屬的秩序『縮排』
在分歧越來越多層時,為了能較容易判讀,
我們在每一層 {}
下,會多內縮一層。
這個動作稱為縮排。
透過縮排,可以明確地看出歸屬關係與範圍。
當然,它不是必要的;也不影響歸屬關係。
它不影響咒文的判讀,只影響主人的閱讀而已。
或許在短短十多行咒文下,沒有什麼感覺;
在日後動輒數百數千行的複雜程度下,
『是否容易閱讀』會極大地影響『是否容易出錯』『是否容易找到出錯處』。
大部份時候不用花心思去排,
Dev CPP 也會自動幫我們處理。
必要時可以透過輸入 tab (註1) 來內縮。
內縮過頭時,也可以把前面的 tab 刪掉一些。
如果你想挑戰不縮排的Lunatic惡夢難度,
C 也能容許便是。
但在需要合作、請他人協助除錯,
或請他人幫忙檢討咒文寫法等情況,
需要讓別人看到自己寫的咒文時,
沒有做好縮排是非常不禮貌而且不應該的行為。
當然也有故意想讓人無法解讀,
以此來保護咒文內容的情形。
我想現階段是可以完全不考慮這件事的。
實戰演練 - 帶分歧的小說
有了 if 之後,小希開始有判斷能力了,
可以因應情況給出不同回應。
互動能力也變得更強了。
這次的練習,就來試試更豐富的互動吧!
有一種寫作方式是這樣的:
在一本書上,讓讀者扮演著主角,
以主角的視點看故事,並且代替主角進行抉擇。
故事會根據讀者的選擇產生變化。
故事從第一頁開始進行,
每一頁是一個劇情片段。
每一頁的頁尾會有主角可以採取的行動,
依據不同的行動會跳到不同的頁數。
照著這個順序閱讀,走到最後的結局。
串起來剛好是一個完整的故事,
依主角的選擇產生變化。
底下是一個極簡單的範例。
- p1.
轟隆隆隆!
外頭不斷傳來爆炸與咆哮聲。唉,又到了這個時候了嗎?
「公主,不好了!魔王又復活攻進來啦!請儘快避難…呃!」
話還未說完,就被魔王從背後一刀斬成兩截。
「嘿嘿嘿…公主啊,好久不見啦。」
我…該怎麼做?
- 「夠了!我受夠了每個月被復活魔王抓走的情節了!」說完拔劍往喉頭一刺… (跳p2.)
- 「魔王大人…其實,我喜歡的是你啊!我已經不想再被勇者拆散了…」(跳p3.)
- p2.
不料魔王一伸手,那閃電般的速度隨即奪走公主手中短劍。
「何必想不開呢!就算找不到滿意的勇者,也還有我在啊!」
「魔王你…嗚嗚…對不起,對不起…直到和那些勇者交往過後,才知道你的好…」
「公主…我們一起回魔王城吧。」
~END~
- p3.
「我等你這句話很久了,公主…」
「魔王…我愛你…我不會再傻到要你冒生命危險綁架我,只為了找到帥氣體貼的勇者…」
「我也愛你,公主…不會再讓那些勇者欺負你了…我們回魔王城吧!」
「嗯!」
~END~
雖然如果不使用中文很難發揮…
另外附上一些溫馨提示:
- 不要編太複雜的故事,第一次先控制在全分歧加總 3-7 段
- 不要讓故事往回跳
- 不要讓分支太複雜,讓後續發展完全獨立會比較好控制
- 編寫咒文時不必帶入頁數的概念,那是書本的硬體限制
順利的話,記得好好地把咒文收藏下來。
說不定能拿編譯後的執行檔作為遊戲作品發佈呢。