深入淺出 C# 4/e 第六章 心得分享


建立時間: 2022年8月10日 02:47
更新時間: 2022年8月19日 21:06

心得

此心得包含第六章、附錄1 第六章、附錄2 第六章、Unity 實驗室 #3

最近一直在研究遊戲開發和念英文還有更新網站,已經快兩個月沒看這本書了
繼續看下個章節的時候,突然覺得有點陌生,雖然我已經在用 Unity 開發遊戲了
但所用的程式只有簡易的腳本

看了這麼久,這章才看到 switch 陳述式,果真有夠大本的…

.NET 6 main 建立函式

除了之前提過的 .NET 6 main 變成條列式的結構以外,這次補充建立函式
以下是第六章,第一題習題的 Program.cs 使用 .NET 6 的寫法
int RollDice() 這個就是函式

Program.cs

using WeaponDamage;

Random random = new Random();

SwordDamage swordDamage = new SwordDamage(RollDice(3));
ArrowDamage arrowDamage = new ArrowDamage(RollDice(1));

while (true)
{
    Console.Write("0 for no magic/flaming, 1 for magic, 2 for flaming, " +
                    "3 for both, anything else to quit: ");
    char key = Console.ReadKey().KeyChar;
    if (key != '0' && key != '1' && key != '2' && key != '3') return;

    Console.Write("\nS for sword, A for arrow, anything else to quit: ");
    char weaponKey = Char.ToUpper(Console.ReadKey().KeyChar);

    switch (weaponKey)
    {
        case 'A':
            arrowDamage.Roll = RollDice(1);
            arrowDamage.Magic = (key == '1' || key == '3');
            arrowDamage.Flaming = (key == '2' || key == '3');
            Console.WriteLine($"\nRolled {arrowDamage.Roll} for {arrowDamage.Damage} HP\n");
            break;
        case 'S':
            swordDamage.Roll = RollDice(3);
            swordDamage.Magic = (key == '1' || key == '3');
            swordDamage.Flaming = (key == '2' || key == '3');
            Console.WriteLine($"\nRolled {swordDamage.Roll} for {swordDamage.Damage} HP\n");
            break;
        default:
            return;
    }

}

int RollDice(int numberOfRolls)
{
    int result = 0;

    for (int i = 0; i < numberOfRolls; i++)
    {
        result += random.Next(1, 7);
    }

    return result;
}

小鳥下蛋習題

一般我們看到的 array 會是 int a[] 或者 string b[]
我在小鳥下蛋習題看到 Egg[] 一開始看到我突然當機
後來想通了

Egg.cs

using System;
namespace PigeonAndOstrich
{
    public class Egg
    {
        public double Size
        {
            get;
            private set;
        }

        public string Color
        {
            get;
            private set;
        }

        public string Description
        {
            get
            {
                return $"A {Size:0.0}cm {Color} egg";
            }
        }

        public Egg(double size, string color)
        {
            Size = size;
            Color = color;
        }     
    }
}

Egg[] 意思是這個 array 裡的值都是 Egg 型態
return new Egg[0] 就是回傳初始化0個空間,型態為 Egg 的 array

有關陣列的說明,請參考 一維陣列 (C# 程式設計手冊)

蜂巢管理遊戲

在還沒改動遊戲機制的情況下,我終於養到不會輸的情況

Snipaste_2022-08-15_01-31-49.png

MDA

這篇論文我沒有看,裡面寫的內容很有可能跟我之前在思考的賭博心態有關
博弈遊戲目的是如何使玩家輸最多錢,而玩家思考的是如何賺最多錢
遊戲是經營方提供的,他們不會很傻的讓遊戲每一局都輸
因為這樣過沒多久,這個遊戲就不會有人想玩了
究竟要怎麼設計才能好玩一直玩,輸錢輸不停呢?

有興趣的可以參考 MDA 論文

參考

觀看次數: 790
c#unity心得深入淺出
按讚追蹤 Enjoy 軟體 Facebook 粉絲專頁
每週分享資訊技術

一杯咖啡的力量,勝過千言萬語的感謝。

支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!