[碼農] 微軟彈珠台是由巨型switch()語句組成
https://reurl.cc/OmeMaR
以下內容轉自臉書(連結如上)
https://files.catbox.moe/0pu43a.png

前幾日微軟工程師 Dave W Plummer 分享
當初微軟推出新的作業系統 Windows NT 後
要把立體彈珠台 (Pinball) 這個內建遊戲改寫到新的作業系統
於是被交派這個任務的他看了原本的程式碼
結果發現是一個超級巨型的 swtich() 語句
底下有超過五十個 case 所組成
-----
Sent from MeowPtt on my SH-M28
--
不能亂動了
至少他還有用Switch而不是if else
switch也沒很亂吧 總比把東西亂放好
可以想像只是有點失望
很合理啊 都是用球去撞
switch成五十塊反而可以讓每塊的深度不要太深
然後發現第一個case永遠為true
巨型狀態機 這不是很棒嗎?
1993年欸,那個時候上課都在用組語
永遠true更爽了 剩下49條砍掉都不怕出事= =
用switch已經是高階語言了
好奇那個年代可以呈現出那樣的彈珠彈跳感算是很厲
害嗎?那時有物理引擎之類的東西了?
那個誰跟你說你應該總是使用if else還出了本書
至少不是寫成巢狀if else
二維運動反彈加個重力 不算太複雜
狀態機 沒有問題
還有什麼更好的寫法嗎?願聞其詳
以彈珠台這例子來說,用switch沒有什麼不好吧?
if else if else if else if else if else if else
至少比全都if好很多了
這個案例寫50個case或50個if else都算是合理用法
任天堂又贏
switch有一些比較奇怪的規則要注意 你想要穩一點就寫
50個if else然後都用{}框好 有人要叫就隨便他叫
不然要一堆if else 喔 最後的判斷要把前面全都跑過
寫到50我猜是用來判斷撞到什麼 現代可能寫成物件吧
if else要判斷的只有if裡面的東西啊 switch一樣要比較
如果那50個東西被彈珠撞的反應有明顯的樹狀結構
不過邏輯如果不複雜用switch也沒差
那就會寫成樹狀if else了 不過我也不是做這遊戲的
只是在這裡聽到switch這種程設課前幾堂就學到的東西覺得
有點奇怪而已。身為微軟的程式猿沒有更神奇的寫法嗎…
如果處理50種碰撞都是相異的小事 那並列沒什麼問題
能寫的簡單幹嘛複雜化
彈珠檯本身就是個貼圖碰撞遊戲 不管你是要顯示外觀
還是要處理彈珠碰撞 switch和if else都是最直接的選擇
我個人是比較偏好if else啦 switch你還要想一下冒號
換行 以及裡面如果要宣告變數可能會有什麼麻煩
這邊switch case很合理吧 每個事件都是平等的話 如果一
當然你內容夠簡單的話用哪個都沒差
長串if那維護才會看到吐血==
只要她會動,那就沒問題。
50個case和50個else if其實看起來也差不多
case裡面宣告變數反而還稍微有點問題
菜雞覺得用switch 很美(X
牛用奶頭走路.gif
switch它其實是個......用goto原理都出來的東西
我給它比較多尊重 夠單純的任務才會叫它上工
至少不是用if else 外加 goto
我倒是覺得是用 X-macro 加上 array,之後套 switch-c
ase
這樣只要維護 X-macro 就好
以這張圖來說 只知道是跟這50個彈珠檯零件有關的判斷
If it works, it works
如果是簡單的事情 那用簡單的語法處理很合理
如果是很複雜的行為 那開發過程中就會自己分類包裝了
一個if或switch加起來幾千行確實是不應該
不過發文者也沒說那個switch裡面有多大
用switch會好讀嗎
這個的關鍵不是在switch,而是"巨型"。無論什麼程式
碼你只要聽到某個"巨型"的東西(不管那東西是條件判
斷還是函式還是其他的什麼),那通常都會讓人類一個
頭兩個大,就這樣。
看起來就是球跟場地有互動就來跑這個switch 簡單粗
暴 比什麼不小心搜尋到整個包包造成卡頓 還是什麼
你看這顆石頭有幾百萬面但優化0分 拍賣太多人用會
壞掉 好很多
我猜碰觸物件之後該物件會觸發一個共同event,而不是每個物
件有獨立的event,然後再從參數裡面帶物件的編號,所以後面
的handler用switch case去處理,如果是這樣的話那會比if el
se好很多,包括效能的部分
我有點忘記 場上是不是可以多一顆球 這樣運作沒問題嗎
那時代的程式語言就差不多那樣吧
可以三顆噢
寫得蠻好的啊
至少不是if
switch case比if else好讀 不過要是能物件化每個物件各自
處理碰撞事件會更好擴充
或者是用jumpx跳來跳去的
多球不知道如何設計 handler再傳入ball*之類的? 但又要
忙多顆球的物理有點忙
C++的話有種想套template method XD
如果是50物件都有獨自物理特性,沒毛病啊
看他這個圖片的案例 switch確實沒啥問題 就是很多而已
童年
我比較喜歡看if else switch還要找break
不過如果內容簡單的話確實switch更合理
switch控制狀態機不是基本到不行嗎
至少不是用goto 大家就要知足 XD
難不成想看到一堆goto嗎?
拿到手的原始碼基本都是組合語言,核心的switch statemen
ts還有彩蛋藏在裡面,不過訪談沒說是什麼彩蛋
沒有問題吧 遊戲就是一個巨大的狀態機
Windows工作管理員也是他寫出來的
這東西開發的時候還 設計模式 物件導向還不是主流吧
說switch沒很亂的是不懂策略模式嗎
到底留言的會是主攻軟工還是嵌入呢?前者台灣蠻罕見了
c的case只能是數值,若他是連續的或可以構造成連續的,
可以用函數指標陣列取代。像是把每個case放到一個個func
tion再把每個function pointer放到fptr_table,code若是
case的數值,則可以一行fptr_table[code]();呼叫。必須
確保code數值一定在0到fptr數量-1之間,現代設備上效能
差不多,但好維護很多。
策略模式喔,用C寫看看啊~
18
[情報] 微軟:Windows 11 成為有史以來最安全可微軟:Windows 11 成為有史以來最安全可靠的作業系統 進桌面速度也加快 10% by Mash Yang 2023.05.30 11:42AM 微軟還強調Windows作業系統的工作列、提示訊息和快速設定執行速度均已強化,開機速度也加快了10%,若按照推薦的能源使用方式設定,耗電量可以降低約6%。 在2020年3月下旬宣布全球地區的Windows作業系統用戶正式突破10億人規模之後,微軟近期再次公布關於Windows作業系統使用相關數據,其中包含Windows 11成為微軟有史以來最安全可靠的作業系統,而新版Microsoft Edge瀏覽器不僅能快速從省電的休眠狀態下喚醒,更讓背景運作瀏覽分頁能節省高達83%記憶體使用量。![[情報] 微軟:Windows 11 成為有史以來最安全可 [情報] 微軟:Windows 11 成為有史以來最安全可](https://sw.cool3c.com/article/2023/ed70c3a4-cbb3-4f3e-956a-bd91f7c54af2.jpg?auto=compress&fix=max&w=2560)
19
[情報] 微軟3/30線上發表新版Office 365 並推出微軟3/30線上發表新版Office 365 並推出新Windows 10 訂閱服務「Life」 by Mash Yang 2020.03.17 11:12PM 微軟將推出新版Office 365,同時也有可能準備推出主打「Life」品牌,面向一般消費市場使用的Microsoft 365訂閱服務,使用者藉由訂閱方式更方便使用微軟旗下包含Windows 10與Microsoft Teams服務。 微軟稍早發出活動邀情,表示原訂在紐約舉辦的Office發表活動將調整為線上直播方式舉辦,預計在美國東岸時間3月3日上午8點 (台灣時間3月30日晚間8點)進行。 Microsoft365 Banner 1 微軟計畫在3/30舉辦線上發表內容,可能針對消費市場推出「Life」品牌服務![[情報] 微軟3/30線上發表新版Office 365 並推出 [情報] 微軟3/30線上發表新版Office 365 並推出](https://sw.cool3c.com/article/2020/9cbbfda0-dcb0-43a4-a1d0-a90eb8066a7c.jpg?fit=max&w=1400&q=80)
18
[情報] 微軟回應否認Windows 12作業系統 Windows微軟回應否認Windows 12作業系統 Windows 10/Windows 11命運反轉 gary gary · 2022-09-21 今日,微軟正式開啟Windows 11 2022年度更新(22H2)推送,作業系統版本Build 22621。 於媒體交流時刻,Windows服務與遞送副總裁John Cable、Windows市場行銷營運總經理Aaron Woodman亦就Windows 10、Windows 11及”Windows 12”相關話題做了回應說明。 其中,被問及Windows 12時,Aaron Woodman表示,並不知道有Windows 12計劃這回事。其接著指出,微軟目前的焦點仍是圍繞持續優化Windows 11,推出年度更新及其它功能改進等。過去6年的實踐證明,為14億Windows 10/Windows 11使用者持續遞送功能更新與安全更新的做法是成功且有效的。11
[情報] 在混合工作趨勢下,微軟基於雲的Windows在混合工作趨勢下,微軟基於雲的Windows搶攻蘋果與谷歌平台 由於COVID-19迫使企業開始採用混合工作模式,而且這一趨勢短中期不會反轉。微軟在看 見商機之下,決定推出雲基礎的Windows作業系統服務,這讓微軟原本觸碰不到的蘋果用 戶以及谷歌之安卓用戶,都可能變成Windows服務下的潛在用戶。6
Re: [情報] 微軟新版本發表在即!「Windows 10 還能用多久」官網給微軟不是有說win10是最後一代的作業系統了?? 以後將會以版本更新的方式而不會再歸出新的作業系統了?? 大家都知道作業系統與硬體是密切配合的。 微軟高層難道不知道若推出新系統那舊硬體怎麼辦?? 難道幾年之後多一批因為作業系統被拋棄安全支援的難民??5
Fw: [新聞] 微軟允許 Windows 11開放舊電腦安裝作者: whitefox (黑心POWER終結者) 看板: Windows 標題: [新聞] 微軟允許 Windows 11開放舊電腦安裝 時間: Sun Aug 29 17:34:17 2021 微軟允許 Windows 11開放舊電腦安裝 2021-08-29 03:14 經濟日報 / 編譯易起宇/綜合外電3
[問卦] 微軟為什麼要把Windows內建的遊戲場取消?乳題~~ 微軟以前在Windows裡有內建遊戲場在Windows 95和Windows 98的時代我最喜歡玩 彈珠台、新接龍和踩地雷,這麼經典的遊戲為什麼要拿掉? 有沒有相關的八卦阿? --4
[童年] 立體彈珠台擋桿壞了小時候流行實體彈珠台 微軟也為自己的windows95內建一個電腦版彈珠台遊戲 小孩子嘛,看到彈珠台進電腦遊戲當然會很興奮 而且更興奮的是 這台彈珠台的發球方式很不一樣![[童年] 立體彈珠台擋桿壞了 [童年] 立體彈珠台擋桿壞了](https://img.youtube.com/vi/2KBRSCA8Sbc/mqdefault.jpg)