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
大家來寫貪食蛇
iOSDevCamp Taipei 2013 workshop
Weizhong Yang
August 10, 2013
More Decks by Weizhong Yang
See All by Weizhong Yang
導入 Flutter 前你應該知道的事
zonble
7
1.2k
那些年,被蘋果 Ban 掉的 API
zonble
0
120
為視障朋友打造行動應用
zonble
16
1.3k
Aspect Oriented Programming
zonble
2
240
Mac OS X 與 iOS 的 Audio API
zonble
11
1k
Debug Debug
zonble
6
400
Retina Mac
zonble
3
240
HTML 5 Native Drag
zonble
3
530
Other Decks in Technology
See All in Technology
Building Production-Ready Agents Microsoft Agent Framework
_mertmetin
0
140
自動テストだけで リリース判断できるチームへ - 鍵はテストの量ではなくリリース判断基準の再設計にあった / Redesigning Release Criteria for Lightweight Releases
ewa
5
2.6k
AndroidアプリとCopilot Studioの統合
nakasho
0
190
ファインディの事業拡大を支える 拡張可能なデータ基盤へのリアーキテクチャ
hiracky16
0
690
Claude Code を安全に使おう勉強会 / Claude Code Security Basics
masahirokawahara
12
39k
Angular Architecture Revisited Modernizing Angular Architectural Patterns
rainerhahnekamp
0
110
Digital Independence: Why, When and How
wannesrams
0
220
要件定義の精度を高めるための型と生成AIの活用 / Using Types and Generative AI to Improve the Accuracy of Requirements Definition
haru860
0
260
「誰一人取り残されない」 AIエージェント時代のプロダクト設計思想 Product Management Summit 2026
mizushimac
1
2.5k
Oracle Cloud Infrastructure:2026年4月度サービス・アップデート
oracle4engineer
PRO
0
240
プラットフォームエンジニアリングの実践 - AWS コンテナサービスで構築する社内プラットフォーム / AWS Containers Platform Meetup #1
literalice
1
230
Scovilleモバイルエンジニア募集中.pdf
julienrudin
0
140
Featured
See All Featured
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
780
A designer walks into a library…
pauljervisheath
211
24k
The browser strikes back
jonoalderson
0
1k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
Designing for Timeless Needs
cassininazir
0
210
Into the Great Unknown - MozCon
thekraken
41
2.4k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
For a Future-Friendly Web
brad_frost
183
10k
Music & Morning Musume
bryan
47
7.2k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
390
Mobile First: as difficult as doing things right
swwweet
225
10k
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,