Skip to content
Greg's Space
Go back

VB.NET 新手入門:給 15 歲的你,第一次寫程式

如果你玩過角色扮演遊戲(RPG),一定知道角色有「血量」「等級」「金錢」這些數值,遇到怪物要判斷「打贏了嗎」,練功要「重複打怪很多次」。寫程式其實就是在做同樣的事——只是換成用文字告訴電腦該怎麼做。

這篇文章會用 VB.NET 這個語言,帶你認識程式最基礎的幾個概念。VB.NET 的語法很像英文句子(例如用 If...Then...Else、End If),對第一次寫程式的人來說算是比較好讀的一種。

準備工具

VB.NET 是微軟的語言,最簡單的開發方式是安裝免費的 Visual Studio Community(到官網下載,選「.NET 桌面開發」的項目就好)。安裝完之後,建立一個新專案,選 「主控台應用程式 (Console App)」,語言選 Visual Basic,就可以開始寫了。

主控台應用程式的意思是:程式執行時會跳出一個黑底白字的視窗,你在裡面看輸出、打輸入,很適合拿來練基礎語法。

第一支程式:Hello World

幾乎每個人學程式的第一步都是讓電腦印出一句話:

Module Program
    Sub Main()
        Console.WriteLine("哈囉,我是新手玩家!")
    End Sub
End Module

逐行拆解:

變數:幫角色存數值

變數就是拿一個盒子,裝一個數值,並且幫這個盒子取名字。在 VB.NET 裡用 Dim(Dimension 的縮寫,可以理解成「宣告」)來開一個盒子:

Dim playerName As String = "小明"
Dim hp As Integer = 100
Dim attackPower As Double = 12.5
Dim isAlive As Boolean = True

這裡出現了幾種常見的資料型別:

型別用途範例
String文字角色名字 "小明"
Integer整數血量 100
Double小數攻擊力 12.5
Boolean是非題(只有 True / False)是否存活 True

盒子裡的數值之後可以再換掉:

hp = hp - 20   ' 被打了一下,扣 20 血
Console.WriteLine("目前血量:" & hp)

& 是 VB.NET 用來把文字跟數字接在一起的符號。另外你應該注意到了,' 開頭的那句沒有被執行——那是註解,是寫給人看的說明,電腦會直接忽略它。

從鍵盤讀取輸入

光是印東西不夠好玩,我們讓玩家可以自己輸入:

Console.Write("請輸入你的名字:")
Dim name As String = Console.ReadLine()
Console.WriteLine("歡迎進入遊戲," & name & "!")

Console.ReadLine() 會暫停程式,等玩家在視窗裡打字、按下 Enter,把打的內容存進變數裡。

判斷式:遇到怪物要怎麼辦

If...Then...Else 就是在做決定,跟中文的「如果…就…否則…」一模一樣:

Dim monsterHp As Integer = 30
Dim playerAttack As Integer = 45

If playerAttack >= monsterHp Then
    Console.WriteLine("怪物被打倒了!獲得經驗值。")
Else
    Console.WriteLine("怪物還沒死,換它攻擊你。")
End If

常用的比較符號:

符號意思
=等於
<>不等於
> / <大於 / 小於
>= / <=大於等於 / 小於等於

如果條件不只一個,可以用 ElseIf 繼續接:

Dim score As Integer = 75

If score >= 90 Then
    Console.WriteLine("評價:S")
ElseIf score >= 60 Then
    Console.WriteLine("評價:及格")
Else
    Console.WriteLine("評價:不及格,再努力!")
End If

迴圈:重複打怪練等

迴圈就是叫電腦「同一件事重複做很多次」,不用自己複製貼上。

For 迴圈:知道要重複幾次的時候用,例如「打 5 次怪」:

For round As Integer = 1 To 5
    Console.WriteLine("第 " & round & " 回合,攻擊怪物!")
Next

這段會依序印出「第 1 回合」到「第 5 回合」,round 這個變數每跑一次就自動 +1。

While 迴圈:不知道要重複幾次,只知道「條件成立就繼續」的時候用,例如「血量沒歸零就一直打」:

Dim monsterHp As Integer = 50

While monsterHp > 0
    monsterHp = monsterHp - 10
    Console.WriteLine("攻擊一次!怪物剩餘血量:" & monsterHp)
End While

Console.WriteLine("怪物死亡!")

要特別小心:While 迴圈裡一定要有讓條件最終會變成 False 的動作(像上面每次都扣血),不然程式會永遠跑下去,這叫「無窮迴圈」。

陣列:一次管理很多角色

如果隊伍裡有好幾個角色,一個一個開變數太麻煩,可以用陣列把它們放進同一個籃子:

Dim teamNames() As String = {"戰士", "法師", "弓箭手"}

For i As Integer = 0 To teamNames.Length - 1
    Console.WriteLine("隊員:" & teamNames(i))
Next

有兩個重點:

Sub 跟 Function:把重複的動作包起來

如果「攻擊」這個動作到處都要用,與其每次都重寫一遍,不如包成一個「招式」,要用的時候直接喊招式名字就好。

Sub:做一件事,但不回傳任何結果:

Sub Attack(attackerName As String, damage As Integer)
    Console.WriteLine(attackerName & " 造成了 " & damage & " 點傷害!")
End Sub

呼叫的時候:

Attack("戰士", 25)
Attack("法師", 40)

Function:做一件事,而且會回傳一個結果給你,很像數學裡的函數:

Function CalculateDamage(baseAttack As Integer, isCritical As Boolean) As Integer
    If isCritical Then
        Return baseAttack * 2
    Else
        Return baseAttack
    End If
End Function

呼叫方式:

Dim finalDamage As Integer = CalculateDamage(20, True)
Console.WriteLine("實際傷害:" & finalDamage)   ' 印出 40

Function 名字後面 As Integer 是在說「這個函式最後會交回來一個整數」,內部用 Return 把結果送出去。

小專案:猜數字遊戲

把上面學到的變數、迴圈、判斷式全部湊在一起,寫一個完整的小遊戲:電腦心裡想一個數字,玩家猜,猜錯就提示「太大」或「太小」。

Module Program
    Sub Main()
        Dim answer As Integer = 42
        Dim guess As Integer = 0
        Dim tryCount As Integer = 0

        Console.WriteLine("我心裡想了一個 1 到 100 的數字,你來猜猜看!")

        While guess <> answer
            Console.Write("請輸入你猜的數字:")
            guess = CInt(Console.ReadLine())
            tryCount = tryCount + 1

            If guess > answer Then
                Console.WriteLine("太大了!")
            ElseIf guess < answer Then
                Console.WriteLine("太小了!")
            Else
                Console.WriteLine("答對了!你總共猜了 " & tryCount & " 次。")
            End If
        End While
    End Sub
End Module

新出現的 CInt(...) 是在做型別轉換:Console.ReadLine() 讀進來的永遠是文字(String),但我們要拿它跟整數 answer 比大小,所以要先用 CInt 把文字轉成 Integer。

學到這裡,你已經會了

這些幾乎是所有程式語言都會有的基本功,之後不管是學 Python、C#,還是 JavaScript,你會發現「變數、判斷、迴圈、函式」這四樣東西永遠都在,換的只是寫法。接下來可以試著自己改一改猜數字遊戲,例如限制猜的次數、加上「猜錯太多次就 Game Over」,動手改壞掉再修好,是學程式最快的方式。



Previous Post
什麼是 SIGReg?用手電筒影子檢查 AI 有沒有偷懶
Next Post
用 deepagents + Textual 打造一個會寫程式的終端機個人助理