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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Weizhong Yang
August 10, 2013
Technology
4.5k
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
250
Mac OS X 與 iOS 的 Audio API
zonble
11
1k
Debug Debug
zonble
6
440
Retina Mac
zonble
3
260
HTML 5 Native Drag
zonble
3
550
Other Decks in Technology
See All in Technology
取引先から届く 「セキュリティチェックシート」の読み解き方
kamadamakoto
0
130
Service Connect 上のサービスに ECS Service の外側から到達できなかった話
ota1022
1
150
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.2k
AI駆動開発は個人技からチーム戦へ:組織でAIを使いこなすための実践設計
moongift
PRO
0
480
MIRU 2026 チュートリアル
keisuke198619
0
860
AIコーディングの次。コードレビューと理解負荷を解消して組織の開発生産性を高める
moongift
PRO
2
2.3k
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
53k
制約理論(ToC)入門 2026版
recruitengineers
PRO
6
2k
Data Hubグループ 紹介資料
sansan33
PRO
0
3.1k
関東Kaggler会発表資料
takoi
1
160
初めてのGitHub Actions / GitHub Actions at First
tooppoo
0
150
AIは実装を速くする。では、私たちは何を今作るべきか?-立場を越えてリリースに向き合ったチーム開発の実践 / 20260801 Hiromi Nakaya and Naoki Takahashi
shift_evolve
PRO
3
440
Featured
See All Featured
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
490
Designing Powerful Visuals for Engaging Learning
tmiket
1
480
GraphQLとの向き合い方2022年版
quramy
50
15k
The Spectacular Lies of Maps
axbom
PRO
1
890
Code Review Best Practice
trishagee
74
20k
Optimising Largest Contentful Paint
csswizardry
37
3.9k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
650
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
430
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.9k
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,