讓你快速理解程式的功用!
- Arvin Liu
你可以在上面
匿名發問!
我還會在上面開匿名投票,大家上去玩玩看吧!
讓你匿名問問題!
(不是問題也可以)
大家都喜歡投票
「言語」とはどういう意味ですか?
當然就是傳達意思啦。
(Natural Langauge)
🅰️
當然你也有可能看不懂
💻
statement
undefined behavior
所謂的「程式」跟「Python」究竟是什麼?
想做一件事情,但這很繁瑣 😞
程式:解放你雙手的工具!
想想看,要怎麼
精準的教別人做某件事情?
Q: 請問要如何把大象放進冰箱?
其實(可能)大概就是這樣
(指電腦)
一個「也許」你一直以來都會的問題...
在台灣當店員的你,怎麼找客人錢會最好?
「最好」是什麼意思?
如果你想要找 261 元,你會怎麼做?
在台灣當店員的你,怎麼找客人錢會最好?
可是,你今天想要「自動化」,
你能想出一套流程適配所有找零的可能嗎?
在台灣當店員的你,怎麼找客人錢會最好?
從最大的幣值 1000元 開始看:
從最大的面額往下找。
從最大的幣值 1000元 開始看:
if 還要找的錢 >= 1000:
輸出: 要找 [x / 1000] 張 1000 元紙鈔
還要找的錢 扣掉 (找 1000 元紙鈔的數量 * 1000)
如果寫成程式,大概就是這樣:
應該不難吧? (真正的語法等你真的上課再說囉 😌)
然後往下繼續寫 500, 100, 50, 10, 5, 1 元的 Case
如果現在不限定國家,並且有以下限制:
那麼你覺得剛剛的解 (從最大開始看),是正確的嗎?
其實這可能是錯的,舉例來說:
想知道要怎麼建構出適合所有國家的算法嗎?
歡迎報名課程,你就會了。關鍵字:動態規劃
(指電腦)
「世界」運作的方法
看 Youtube 應該難免都會聽到「演算法」,
但這個字到底是什麼意思?
(Algorithm)
演算法 = 解決問題的方法步驟
找零程式就是種演算法!
下棋的攻防思考
Youtube的推薦系統
用電腦分析商業行為
(量化分析)
社會分析 - 判斷網軍
(文本解析)
大學程式先修檢定
(可以降低你大考門檻用的)
各種比賽增加你的經歷
(TOI 前11名可以直接保送)
模擬世界,模擬宇宙
電腦除了解決問題以外,也可以做到「模擬」。
物理的雙擺系統
(double pendulum)
遊戲的模擬世界
(圖的遊戲為 Fortnite)
在繼續之前,要先知道逐格動畫。
看起來像是個動畫
其實只是很多張圖片輪著撥放而已
溫知識:人的眼睛會自動補成連貫的,在心理學稱作
貝塔運動(Beta Movement)
怎麼描述一個速度呢?
如果給定速度,那麼下個時間點,會移動 v
怎麼描述一個速度呢?
如果給定速度,那麼下個時間點,會移動 v
結果
用程式描述就會是:
對每一個畫面做:
球的y座標 遞增 10
跑起來怎麼樣呢?
如果是掉落,應該會越來越快吧?
怎麼描述一個速度呢?
如果給定速度,那麼下個時間點,會移動 v
結果
用程式描述就會是:
對每一個畫面做:
速度 遞增 0.5
球的y座標 遞增 速度
跑起來怎麼樣呢?
如果是掉落,應該會越來越快吧?
遊戲是怎麼做的?
結果
Doodler
怎麼讓 Doodler 掉落?
對每一個畫面做:
Doodler的y速度 遞增 0.5
Doodler移動 (0, Doodler的y速度)
如果想要用左右鍵控制呢?
結果
對每一個畫面做:
if 左鍵正在被按:
Doodler 移動 (4, 0)
if 右鍵正在被按:
Doodler 移動 (-4, 0)
程式大概是這樣寫:
這樣看起來就有遊戲的雛型了吧?
通常物體都會有 Hitbox ,表示這個物體的碰撞判定。
動作遊戲的 Hitbox
(遊戲 : celeste)
(遊戲 : 東方Project的某個遊戲)
彈幕遊戲的 Hitbox
通常物體都會有 Hitbox ,表示這個物體的碰撞判定。
Doodler 在什麼條件下會往上跳呢?
看一下 Gameplay
頭撞到
Hitbox
取腳就好
通常物體都會有 Hitbox ,表示這個物體的碰撞判定。
Doodler 在什麼條件下會往上跳呢?
看一下 Gameplay
這樣會直接飛走
結果
通常物體都會有 Hitbox ,表示這個物體的碰撞判定。
Doodler 在什麼條件下會往上跳呢?
if (Doodler的腳) 撞到 (平台)
並且 (Doodler的速度 往下):
Doodler的y的速度 = 向上 13
來看看最後成果吧!
程式大概是這樣寫:
結果
對每一個畫面做:
if 左鍵正在被按:
Doodler 移動 (4, 0)
if 右鍵正在被按:
Doodler 移動 (-4, 0)
Doodler的y速度 遞增 0.5
Doodler移動 (0, Doodler的y速度)
if (Doodler的腳) 撞到 (平台)
並且 (Doodler的速度 往下):
Doodler的y的速度 = 向上 13
有感覺到邏輯串連起來的 fu 嗎?
所有程式的流程
我們只是簡單介紹一下寫遊戲的流程 (Pygame),如果你想要完善他可能還需要...
終於要到這裡了嗎?
什麼是程式語言?
用程式模擬
物體運動
什麼是演算法?
簡單動作遊戲製作
學程式可以幹嘛?
更重要的是...
說說你的
看法吧!
什麼時候要讓 Doodler 跳呢?
對於每個幀數做以下判斷:
if doodler_rect.colliderect(platform_rect) \
and v > 0:
v = -13
就可以做到反彈了!
通常物體都會有 Hitbox ,表示這個物體的碰撞判定。
doodler_rect = pygame.Rect(W//2-30, 500, 29, 8)
一開始創建 Hitbox:
( x, y, w, h)
每一幀的時候畫出這個矩形:
pygame.draw.rect(screen, (255, 0, 0), doodler_rect)
( R, G, B)
執行起來的樣子
再貼上圖片的結果
我們先定義一些平台吧!
結果
什麼時候要讓 Doodler 跳呢?
你不該在這裡,你應該在車底
Q: 怎麼寫打怪腳本?
首先,程式中的「變數」是什麼?
其實就是一個「有名字箱子」,裡面可以裝著「數值」
x
5
一個寫著 x 的箱子,裡面裝著 5。
x = 5
用程式來寫的話:
6
x
6
箱子可以重複利用,讓寫著 x 的箱子裡面變成 6
x = 6
用程式來寫的話:再寫一行
x
5
6
x
6
箱子可以重複利用,讓寫著 x 的箱子裡面變成 6
x = 6
用程式來寫的話:再寫一行
以梗圖來說, x = x + 1做了幾步:
所以,其實數學的 = 跟程式的 = 是不一樣的。
從最大的幣值 1000元 開始看:
if x >= 1000:
cnt1000 = x // 1000
print(f"找 {cnt1000} 張 1000 元紙鈔")
x = x - cnt1000 * 1000 # 更新剩下的找錢
這樣,你看懂了嗎?
看 Youtube 應該難免都會聽到「演算法」,
但這個字到底是什麼意思?
(Algorithm)
演算法(英語:algorithm),在電腦科學之中,指一個被定義好的、電腦可施行其指示的有限步驟。
演算法可以使用條件語句通過各種途徑轉移代碼執行(稱為自動決策),並推導出有效的推論(稱為自動推理),最終實現自動化。 - 維基百科
演算法 = 用程式解決問題。
找零程式其實就是演算法!
你的逐格動畫中間畫面要夠多,不然會很怪。
:想看到我跑到山上再跑回來嗎?想不想再看一次?
語言
名詞 | 符號 | 意義 | 公式 |
---|---|---|---|
位置 | x | 就...位置,或用座標表示 | |
速度 | v | 位置的變化 / 變化的時間 | |
加速度 | a | 速度的變化 / 變化的時間 | - |
如果設定為
你想知道第 x 秒的狀態...
免責聲明:物理來說, 要足夠小以上式子才成立。
這是為了方便計算才這樣寫。
名詞 | 符號 | 意義 | 公式 |
---|---|---|---|
位置 | x | 就...位置,或用座標表示 | |
速度 | v | 位置的變化 / 變化的時間 | |
加速度 | a | 速度的變化 / 變化的時間 | - |
動畫的 ,其實就是 1/fps (frames per second 影格速率)
v = v + a
x = x + v
寫成程式的話...
你沒看錯,就這樣而已!來跑跑看程式吧!
大概的結果
設定一些必要參數
YELLOW = (240, 200, 0)
WIDTH, HEIGHT = 400, 600
g = 0.5
y, v = 50, 0
r = 20
v = v + g
y = y + v
pygame.draw.circle(screen,
YELLOW, (WIDTH // 2, y), r)
每一個影格 (幀) 要做什麼?