【Lua 筆記】物件導向程式設計(Object Oriented Programming,OOP) - part 11
【Lua 筆記】物件導向程式設計(Object Oriented Programming,OOP) - part 11由於有款遊戲叫做 CSO(Counter-Strike Online),內建模式創世者模式(Studio)新增使用 Lua 及其遊戲的 API,所以突發奇想製作這個筆記。 這個筆記會在一開始先著重純粹的程式設計自學,在最後的章節才會與 CSO 遊戲 API 進行應用。 小提醒:此為本筆記最後一章,恭喜你可以準備結合CSO的API實作了。 物件導向程式設計(Object Oriented Programming,OOP)物件導向程式設計(Object-Oriented Programming, OOP)是一種程式設計範式,強調使用「物件」來設計軟體和程式碼。物件是具有狀態(屬性)和行為(方法)的實體。OOP 的主要目的是提高程式碼的可重用性、可維護性和可擴展性。 舉個例子:比如我現在正在 coding,用物件導向程式設計的邏輯來看的話,就是如以下表格所示(參考自:何謂物件導向程式設計 - HackMD): 類別(class) 物件名稱(name) 物件屬性(...
【Lua 筆記】元表(MetaTable) - part 10
【Lua 筆記】元表(MetaTable) - part 10由於有款遊戲叫做 CSO(Counter-Strike Online),內建模式創世者模式(Studio)新增使用 Lua 及其遊戲的 API,所以突發奇想製作這個筆記。 這個筆記會在一開始先著重純粹的程式設計自學,在最後的章節才會與 CSO 遊戲 API 進行應用。 元表(MetaTable) 在 Lua table 中我們可以存取到對應的 key 來得到 value 值,但是卻無法對兩個 table 進行運算操作(例如相加)。因此 Lua 提供了元表(MetaTable),允許我們改變 table 的行為,每個行為關聯了對應的元方法。 所以元表(MetaTable)可以讓我們針對 table 進行一些運算操作。 而在對 table 跟 table 之間進行運算的時候,Lua 首先會檢查兩者之間是否存在元表這個東西,例如會檢查是否有 __add 存在,找到的話,則其對應的值(往往是一個函數或是 table)就是”元方法”。 有兩個很重要的函數是專門用來處理元表的: setmetatable(table, met...
【Lua 筆記】表(table) - part 9
【Lua 筆記】表(table) - part 9由於有款遊戲叫做 CSO(Counter-Strike Online),內建模式創世者模式(Studio)新增使用 Lua 及其遊戲的 API,所以突發奇想製作這個筆記。 這個筆記會在一開始先著重純粹的程式設計自學,在最後的章節才會與 CSO 遊戲 API 進行應用。 表(Table)Lua 中的表(table)是一種很強很好用的資料結構,主要有以下幾個特點: Dynamic:table 可以動態地新增或刪除項目(item),無需事先宣告 table 的大小。這讓 table 非常靈活,可以用於各種資料結構,如陣列、字典等。 Key / Value(鍵值對):table 中的資料是以鍵值對的形式進行儲存的。鍵(key)可以是任意型態的值(除了 nil),包括數字、字串或者 table 本身等。值(value)也可以是任意型態的。 Difference:表中可以同時儲存不同型態的值,表示在同一個 table 中可以同時有整數、字串、函數等不同型態的資料。 Index:Lua 中的 table 索引(index)可以是整數或者字串,...
【Lua 筆記】字串(String) - part 8
【Lua 筆記】字串(String) - part 8由於有款遊戲叫做 CSO(Counter-Strike Online),內建模式創世者模式(Studio)新增使用 Lua 及其遊戲的 API,所以突發奇想製作這個筆記。 這個筆記會在一開始先著重純粹的程式設計自學,在最後的章節才會與 CSO 遊戲 API 進行應用。 ※本文篇幅較長,十分複雜,請小心閱讀,請務必收藏!!※ 字串(String)字串(String)是由許多字元(Character)所組成的。 字元(Character):中文字、英文字母(a-z)、底線等等任何符號皆是一種字元。 字串可以用以下三種方式表示: 成對單引號括起來(’String’) 成對雙引號括起來(”String”) [[ ]] 裡面放字串 -> 多行字串 第三種方式舉例: 123456a = [[Hi, this is a stringaaaaaaaa]]print(a) 輸出結果: 12Hi, this is a stringaaaaaaaa 取得字串長度的另一種方式string.len(裡面放字串),實際上這個方式與用 # 這個運...
【Lua 筆記】作用域 / 函數 - part 7
【Lua 筆記】作用域 / 函數 - part 7由於有款遊戲叫做 CSO(Counter-Strike Online),內建模式創世者模式(Studio)新增使用 Lua 及其遊戲的 API,所以突發奇想製作這個筆記。 這個筆記會在一開始先著重純粹的程式設計自學,在最後的章節才會與 CSO 遊戲 API 進行應用。 作用域(scope)作用域(scope),表示一個變數或函數等能夠作用的範圍,什麼意思呢?請看以下例子: 12a = 10 -- 這是全域變數local a = 50 -- 這是局域變數 lua 當中的變數,沒有在前面加上 local 以外,全部都是「全域變數」,你可以把全域變數想像成是一個到哪裡都可以用的變數。 局域變數就只限縮於”目前”的範圍,什麼意思呢?也就是在變數前面宣告了 local 這個關鍵字,就只有這整個文件可以用這個變數而已,其他的文件不能存取到它的值。(這只是粗淺的解釋,實際上看的是他目前所在的作用域範圍) 具體是何種”目前”的範圍,我們在說明函數的時候稍待說明一下。 函數(function)函數(function),又被稱為副程式、函式,我們在之...
【Lua 筆記】延伸 for 迴圈 - part 6
【Lua 筆記】延伸 for 迴圈 - part 6由於有款遊戲叫做 CSO(Counter-Strike Online),內建模式創世者模式(Studio)新增使用 Lua 及其遊戲的 API,所以突發奇想製作這個筆記。 這個筆記會在一開始先著重純粹的程式設計自學,在最後的章節才會與 CSO 遊戲 API 進行應用。 for in 迴圈for 迴圈分為兩類: for do 迴圈 for in do 迴圈 之前我們說的 for 都是 for do 迴圈。 今天來談 for in do 這個迴圈,它主要是用來迭代陣列或表的。可以分別用 ipairs、pairs 進行處理。 迭代陣列值範例來源:【30天Lua重拾筆記13】基礎2: 控制-for迴圈 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 12345array = {"one", "two", "three"}for i, v in ipairs(array) do print(i, v)end 輸出結果: 1231 one2...
【Lua 筆記】陣列 - part 5
【Lua 筆記】陣列 - part 5由於有款遊戲叫做 CSO(Counter-Strike Online),內建模式創世者模式(Studio)新增使用 Lua 及其遊戲的 API,所以突發奇想製作這個筆記。 這個筆記會在一開始先著重純粹的程式設計自學,在最後的章節才會與 CSO 遊戲 API 進行應用。 陣列(Array)我們先來看看 Lua 的陣列長怎樣: 1myArray = {10, 20, 30, 40, 50} 陣列(Array),用兩個大括號 {} 將資料圍起來,在 Lua 當中並沒有給它特定的資料型態,而是被一個稱為 table(表)的資料型態所包圍起來。 所以 type(myArray) 輸出結果會是 table: 12myArray = {10, 20, 30, 40, 50}print(type(myArray)) --> table :::danger切記:Lua 的陣列索引從 1 開始。也可以自定義從 0 開始,等下會說怎麼做。::: 回歸到問題本身,各位可能仍然還會疑惑的一點是,陣列到底...
【Lua 筆記】迴圈 - part 4
【Lua 筆記】迴圈 - part 4由於有款遊戲叫做 CSO(Counter-Strike Online),內建模式創世者模式(Studio)新增使用 Lua 及其遊戲的 API,所以突發奇想製作這個筆記。 這個筆記會在一開始先著重純粹的程式設計自學,在最後的章節才會與 CSO 遊戲 API 進行應用。 迴圈(loop)迴圈即一個循環。 很多時候我們會需要重複執行一個動作,以生活舉例,像是平時上廁所(無論小便、大便)會是一個迴圈,因為這是我們不斷持續在做的事情。又或者是在長跑時,跑了好幾圈操場,這也是一種迴圈。 回到正題,Lua 共支援以下幾種迴圈語法: while for repeat…until break goto while、for 一定是每個程式語言基本配備,接下來讓我們先來看看 while 迴圈: while 迴圈while 是一種具有條件判斷的迴圈,格式如下: 123while (condition) do statementsend 當 condition 這個條件成立,也就是 condition = true 的時候,迴圈才會執行。 至於執行什麼內容呢...
【Lua 筆記】條件控制 - part 3
【Lua 筆記】條件控制 - part 3由於有款遊戲叫做 CSO(Counter-Strike Online),內建模式創世者模式(Studio)新增使用 Lua 及其遊戲的 API,所以突發奇想製作這個筆記。 這個筆記會在一開始先著重純粹的程式設計自學,在最後的章節才會與 CSO 遊戲 API 進行應用。 條件控制(Condition)條件控制,大多程式語言所用到的關鍵字為「if」。 if 就是如果的意思,為什麼要用到條件控制呢?舉個例子:”如果”今天下雨,那麼我就帶雨傘。 那”如果”今天不下雨,”否則”我就不帶雨傘。 如果是關鍵字,否則同屬之。-> if、else 關鍵字 從上面例子可以看出來,”如果”今天下雨這個條件不成立,也就是今天不下雨,則會觸發”否則”這個條件。 在進入正式的語法之前,先來個重要的觀念: 控制結構的條件式結果可以是任何值,Lua 認為 false 和 nil 為假,true 和非 nil 為真(非常重要!!!!)。要注意的是 Lua 中 0 為 true: 1234--[ 0 為 true ]if (0) then print(&qu...
【Lua 筆記】運算子 - part 2
【Lua 筆記】運算子 - part 2由於有款遊戲叫做 CSO(Counter-Strike Online),內建模式創世者模式(Studio)新增使用 Lua 及其遊戲的 API,所以突發奇想製作這個筆記。 這個筆記會在一開始先著重純粹的程式設計自學,在最後的章節才會與 CSO 遊戲 API 進行應用。 運算子(Operator)運算子(Operator),是用來告訴直譯器來執行特定的數學或邏輯運算之符號。Lua 共有以下這幾種運算子: 算術運算子(Arithmetic Operator) 關係運算子(Relational Operator) 邏輯運算子(Logical Operator) 運算子,筆者用一個簡單的例子來讓你理解: 1 + 1 1 被稱為是運算元(operand),是要拿來被運算的單元。 + 被稱為運算子(operator),在上述例子中是拿來當作數學運算的符號。 1 + 1,整體被稱為是一種運算式(expression),運算式就是運算元+運算子,而運算式也有人叫做表達式,都可以。 算術運算子(Arithmetic Operator)簡單來說,算術運算子...
【Lua 筆記】簡介 / 基本語法及資料型態 / 變數 - part 1
【Lua 筆記】簡介 / 基本語法及資料型態 / 變數 - part 1由於有款遊戲叫做 CSO(Counter-Strike Online),內建模式創世者模式(Studio)新增使用 Lua 及其遊戲的 API,所以突發奇想製作這個筆記。 這個筆記會在一開始先著重純粹的程式設計自學,在最後的章節才會與 CSO 遊戲 API 進行應用。 簡介(Introduction) Lua(葡萄牙語「月亮」)是一個簡潔、輕量、可擴充的手稿語言。Lua有著相對簡單的C語言API而很容易嵌入應用中。很多應用程式使用Lua作為自己的嵌入式手稿語言,以此來實現可組態性、可擴充性。 - Wekipedia Lua 建立日期:1993年。by 羅伯托·耶魯薩林斯希、Luiz Henrique de Figueiredo、Waldemar Celes 特性: Lua 是一種輕量語言,它的官方版本只包括一個精簡的核心和最基本的函式庫。這使得Lua體積小、啟動速度快。它用 ANSI C 語言編寫,並以原始碼形式開放,編譯後的完整參考直譯器只有大約247kB,到5.4.3版本,該體積變成 283kB(Li...
【C++ 筆記】迴圈(loop) - part 6
【C++ 筆記】迴圈(loop) - part 6很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 三大迴圈式while 迴圈while 迴圈語法: 1234while(condition){ statement(s);} while 迴圈可以帶有條件,條件成立(True)時才會執行 statement(s); 的區塊。 True 時,一直執行直到 False 停止,跳出 while 迴圈。 Image Source:While迴圈 - 維基百科,自由的百科全書 以下是一個簡單範例: 12345678910111213141516171819#include <iostream>using namespace std;int main() { int number, sum = 0, i = 1; cout << "...
【APCS】m932. 2. 蜜蜂觀察 - Python 解
【APCS】m932. 2. 蜜蜂觀察 - Python 解詳細資訊:https://zerojudge.tw/ShowProblem?problemid=m932 身為一個高中程式小白,上次在APCS考場中遇到這題,我瞬間懵了一下,雖說最後有解出來,但似乎我的答案並不是 AC。 註:這篇文章其實很早就寫完了,只不過現在才發XD。這篇文只是純粹因為解出我不會的題目,感到欣喜若狂,所以藉此分享。 以下是程式碼: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556import sysm, n, k = map(int, sys.stdin.readline().split())mm, nn = m-1, n-1mat = [list(input()) for _ in range(m)]step = [int(i) for i in input().split()]result = []x, y = mm, 0for i in r...
【Python進階教學】進階排序法:快速排序法 / 合併排序法【part 17】
【Python進階教學】進階排序法:快速排序法 / 合併排序法【part 17】哈囉大家好,很感謝你點進本文章,我是一名高中生,是電腦社社團的社長,由於我並不是 Python 這方面非常精通的專家,所以若文章有些錯誤請見諒,也可向我指正錯誤。另外本文章的用意是作為電腦社社團的教材使用而編寫的。 那麼,讓我們開始吧。 快速排序法(Quick Sort) (快速排序法概念圖)Image Source:Unraveling QuickSort: The Fast and Versatile Sorting Algorithm | by Nathal Dawson | Medium 快速排序法步驟: 序列中尋找一個基準值(pivot) 進行快速排序法,所有比基準值小的排左邊,比他大的排右邊。 使用遞迴式對左右兩邊的子序列作與 2. 相同排序。 註:基準值可使用隨機的抽取方式,或是自定義一個基準值。 看到這邊,或許你發現到快速排序法其實類似於二分法的步驟,只不過特別的是,快速排序法需要使用到遞迴式,這個概念使用到了所謂的 分治法(divide and conquer) 的其中一種。 讓...
【C++ 筆記】運算子(下) - part 5
【C++ 筆記】運算子(下) - part 5很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 運算子(Operator)讓我們回顧 part 3 內容, C++ 有支援以下運算子: 算術運算子 - part 3 已學過 關係運算子 - part 3 已學過 邏輯運算子 位元運算子 指定運算子 運算元(Operand):在運算式中,運算元是資料的值。在例子「1 + 1」當中,兩個「1」都是運算元,運算元是被操作、運算的物件。 運算子(Operator):運算子是一個進行操作的符號。在例子「1 + 1」當中,「+」就是一個運算子,表示加法操作、運算。 運算式(Expression):運算式是由運算元和運算子組成的結構,用於進行計算並回傳結果。在例子中,「1 + 1」就是一個運算式,進行加法運算並回傳結果為「2」。 算術運算子:就是數學運算子,+、-、*、/、%、++、— 等運算子。 關係運算...





