Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
大家來寫貪食蛇
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Weizhong Yang
August 10, 2013
Technology
4.4k
7
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
大家來寫貪食蛇
iOSDevCamp Taipei 2013 workshop
Weizhong Yang
August 10, 2013
More Decks by Weizhong Yang
See All by Weizhong Yang
導入 Flutter 前你應該知道的事
zonble
7
1.3k
那些年,被蘋果 Ban 掉的 API
zonble
0
140
為視障朋友打造行動應用
zonble
16
1.3k
Aspect Oriented Programming
zonble
2
240
Mac OS X 與 iOS 的 Audio API
zonble
11
1k
Debug Debug
zonble
6
430
Retina Mac
zonble
3
250
HTML 5 Native Drag
zonble
3
540
Other Decks in Technology
See All in Technology
[AWS Summit Japan 2026]迷っているあなたへ_小さな一歩が、やがて自分を助けてくれる
sh_fk2
1
340
生成 AI 実践ガイド (概略版) AIガバナンス編
asei
0
150
When Platform Engineering Meets GenAI
sucitw
0
150
PostgreSQL 19 新機能概要 OSC Hokkaido 2026
nori_shinoda
0
200
現場のトークンマネジメント
dak2
1
160
AWS Security Hub CSPMの成功・失敗体験
cmusudakeisuke
0
440
OTel × Datadog で 「AI活用」を計測し、改善に繋げる
shihochan
2
550
【セミナー資料】Claude Code をセキュアに使うための考え方と設定の勘どころ / Claude Code Webinar 20260616
masahirokawahara
2
440
【Cyber-sec+】経営層を"動かす"ための考え方
hssh2_bin
0
200
あなたの知らないPDFのアクセシビリティ
lycorptech_jp
PRO
0
230
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
2k
Kiroで書いた 設計書 が AI レビューの 採点基準 になる
ezaki
0
140
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
220
Building Adaptive Systems
keathley
44
3.1k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Embracing the Ebb and Flow
colly
88
5.1k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
200
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
780
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
170
Practical Orchestrator
shlominoach
191
11k
Statistics for Hackers
jakevdp
799
230k
The agentic SEO stack - context over prompts
schlessera
0
820
Transcript
⼤大家來寫 貪⻝⾷食蛇! Saturday, August 10,
About me Saturday, August 10,
About me • Lead iOS/Mac Developer at KKBOX • Mac
developer since2005, iOS developer since2008 • Other projects: Yahoo KeyKey! Boshiamy X1, Hami Music for iOS, and so on. • I do C, Objective-C, and Python Saturday, August 10,
Saturday, August 10,
我覺得是不錯的練習 • MVC架構 • DTO (Data Transfer Objects) • Quartz
2D 平⾯面繪圖 • Delegate/Protocol 設計 • Queue資料結構 • NSTimer Saturday, August 10,
應該三個多⼩小時可以 寫出來… (我⾃自⼰己寫過⼀一遍) 還是⼀一邊看環法賽⼀一邊很不專⼼心的寫 Saturday, August 10,
Saturday, August 10,
KKBOX的iOS訓練 • Selector⇢⼩小算盤 • ⼿手動記憶體管理 • Category⇢字串反轉 • Delegate⇢API包裝/Unit Test
• Block⇢API包裝 • OperationQueue⇢API包裝 • Quartz 2D與Notification⇢填字遊戲 • NSCoder/Sqlite/Localization…⇢看書練習 • CoreAnimation⇢動態歌詞 • UIAutomation 與 Accessibility • Audio API⇢Audio Player ⼤大概是在 這個地⽅方 Saturday, August 10,
貪⻝⾷食蛇? • 蛇的⾝身體所在位置 • 蛇現在的⻑⾧長度?吃到⽔水 果之後,往那邊變⻑⾧長? • 蛇的現在的移動⽅方向? 怎麼改變⽅方向? •
蛇超出邊界該怎麼辦? 邊界有多⼤大? • ⽔水果的位置 • 是不是吃到了⽔水果 • 吃到⽔水果之後,下⼀一個 ⽔水果在哪裡? • 該怎麼畫蛇跟⽔水果? • 頭撞到⾝身體了嗎? 我們應該如何妥當處理這些東⻄西? Saturday, August 10,
物件封裝 • 我們在畫⾯面中有⼀一條蛇 • 屬性:⾝身體的位置、蛇的⽅方向 • ⽅方法:改變⽅方向、移動⼀一格 Saturday, August 10,
MVC架構 • Model:我們的蛇與⽔水果的Point • View:繪製蛇與⽔水果的View • Controller: • 分派⽔水果的位置 •
使⽤用 Timer更新蛇的狀態、檢查是否吃 到⽔水果與撞到⾝身體 • 接收改變蛇的⽅方向的Touch事件 Saturday, August 10,
實作流程 • 撰寫蛇的Model • 對蛇的Model做單元測試 • 撰寫繪製蛇與⽔水果的View • 撰寫Controller •
整合! Saturday, August 10,
Model Saturday, August 10,
我們應該如何描述蛇與 ⽔水果的位置? • 我們可以使⽤用CGPoint • 不過不是很好,CGPoint的x與y是float • 我們希望x與y是整數 Saturday, August
10,
Data Transfer Objects • 只有屬性,沒有⽅方法的物件 • 當成 Structure 來⽤用 •
在Cocoa裡頭,我們也可以將 Structure 包進NSValue裡頭就是了… • [NSValue valueWithBytes: objCType:]; Saturday, August 10,
蛇的⾝身體的資料結構 • 不要想得太複雜,蛇的移動並不是⾝身體 的每個點都在移動 • 其實就只是,在頭的地⽅方增加⼀一個點, 然後把尾巴那個點去掉 • 先進先出⇢Queue Saturday,
August 10,
Saturday, August 10,
蛇的⽅方向 • 蛇應該要知道⾃自⼰己的⽅方向 • 改變⽅方向只能90度: • 往左右⾛走,只能改成上下 • 往上下⾛走,只能改成左右 Saturday,
August 10,
單元測試 Saturday, August 10,
3A原則 • Arrange • Act • Assert Saturday, August 10,
單元測試 • 我們的DTO裡頭的屬性是否正確? • 建⽴立蛇之後,⻑⾧長度位置是否正確? • 移動蛇之後,位置是否正確? • 把蛇的⾝身體加⻑⾧長之後,是否有加對? •
蛇是否會正確撞到⾃自⼰己⾝身體? Saturday, August 10,
View Saturday, August 10,
View • View 要跟Controller詢問蛇與⽔水果在哪裡 • 我們可以把蛇與⽔水果變成View的屬性, 從Controller設過去,但是這樣Controller 就要定時更新View,這樣很醜 • ⽐比較好的作法是,把Controller變成View
的delegate Saturday, August 10,
View • Subclass ⼀一個UIView • 實作drawRect: • 在drawRect:裡頭問delegate蛇與⽔水果在哪 • ⽤用UIBezierPath畫就好
• 所以我們要設計⼀一個詢問蛇與⽔水果在哪 的protocol Saturday, August 10,
Delegation/Protocol • @property (weak) id <Protocol> delegate; • 然後設計⼀一組 Protocol
• 例 -(Snake *)viewDidRequestSnake:(View *)v; • Controller要去實作delegate methods Saturday, August 10,
Controller Saturday, August 10,
Controller • 成員變數 • 蛇的Model • ⽔水果的Model • 繪製蛇與⽔水果View •
遊戲歡迎與結束畫⾯面 • Timer Saturday, August 10,
Controller • 如何接收Swipe事件? • ⽤用UIGestureRecognizer Saturday, August 10,
Let’s Do It! Saturday, August 10,