發表文章

加深加廣學習成果報告 - 四位元加法電路

圖片
一、動機 暑假時,我有買一本計算機概論解解讀書的悶,當成課外讀書把整本看過一遍,但我覺得沒有親自實作一次,感覺只是知識而非內化在心裡的東西。因此產生了 經過上個專案基本電子電路課程之後,對電子有了基本的認識,接下來,便是繼續完成製作一臺電腦的目標。電腦的演變是從加法器開始,也就是說,電腦發明的根本原因是計算。因此,學習製作一個可計算數學的電路,可以向我的目標邁向一大步。 二、方法 自己完成一個四位元加法電路。 三、實作歷程 尋找資料 因為紙本計算機概論電子電路只有大略的知識,所以我另外去 Neso Academy 學習一些電路知識。 ▲圖一:Neso Academy(資料來源:自行截圖) 在學習期間,為了知道其知識在電腦結構中在什麼位置,我另外看了一些與電腦相關的影片,Crash Course: Computer Science 與 Sebastian Lague 的 How Computers Work。 ▲圖二:Crash Course: Computer Science(資料來源:自行截圖) ▲圖三:How Computers Work 播放集(資料來源:自行截圖) 前者是計算機概論的簡化版,提供的資訊量跟書比廣度少,深度淺,但利用動畫使知識容易被理解;後者廣度三者最淺,但在ALU部分的知識最深,動畫也最細緻。 在尋找資料的過程,我了解到找資料時,專精於單一個資料來源,不及多個資料來源。單一個資料來源提供的知識可能只是指體的一部份,並且每個資料來源陳述的方式都不太一樣,描述相同的東西,能吸收到的東西都不相同。唯有多個資料來源,才能將育研究的知識點看透。 繪製電路圖與焊接電路 在焊接電路前,我先以Tinkercad的電路模擬,確認電路是否可以運作。 ▲圖四:利用Tinkercad電路進行電路模擬(資料來源:自行拍攝) 模擬成功後,接著繪製電路圖,方便焊接。此電路有些複雜,不好以手繪製,我找到EasyEDA來完成電路繪製。 ▲圖五:EasyEDA網頁畫面(資料來源:自行截圖) 有了電路圖後,就可以親手用萬用電路板焊電路了。我本來預計將圖中直向的電路用萬用電路板金屬面用裸單心線連接,而橫向的線路以上方跳線連接。因為直向皆為會分支的主幹,橫向只是從一個點連接到另一個點。 ▲圖六:四位元加法電路電路圖(資料來源:自行截圖) 然而,中間發生了一個小插曲,我將IC的位置焊錯

來做人生第一個遊戲吧 Unity No/Aiming 高二上學期自主學習作品

圖片
動機   國小國中,我沉迷於電腦遊戲,時常被爸媽抓到,痛打一頓,電腦因此被沒收。為了能碰到電腦,我學習程式設計,立志要做一個遊戲,這樣我就可以明目張膽的在父母面前打遊戲。 目的 做一個可以遊玩,可以帶給他人體驗的 Unity 遊戲 製作歷程 Github 「 在兩個禮拜就是成果發表會了。 」 我跟我自己說。 「 這可是你五年的夢想,不要搞砸。 」 高二上學期末,我連夜趕工,希望可以將遊戲裡所有的錯誤與瑕疵去除。這時,不幸的事情發生了。為了能隨時隨地製作,我將 Unity 編輯器與遊戲專案存在一個 USB 裡,這樣我就即使在學校,也可以插入 USB ,製作遊戲。但在我一次趕工時,不知怎麼回事, USB 居然燒掉了。我試著使用資料救援軟體,但都失敗了。當時我非常的沮喪,三個月的努力化為泡影。不知睡覺時,我哭了多少回。但我爸爸激勵我說:「傷心是不能解決問題的,成果發表是不會消失的,現在你要做的,是 測定計畫,解決問題 。」這句點醒了我。專案消失了怎麼辦,重新做一個啊。當天晚上,我開啟電腦,重新製作遊戲。重新製作不但更快速,也更純熟,品質也更好,許多不好的程式片段與架構也修得更完美。當然,我記取製作時的教訓,不在只存在 USB 裡,而 GitHub 裡。藉此機會,我學習了 Git 的使用方式,與程式版本管理。雖然不是精熟,但也學到不少經驗。 遊戲市場 為了製作遊戲,我翻閱無數篇文章,學習元件導向程式設計,在此同時,我看到許多現在工作的遊戲工程師,紀錄自己工作歷程的文章,也對此職業有著更進一步的認識。也發掘到我對遊戲製作沒有太大的興趣。遊戲製作就像是畫一幅畫,寫一篇小說,拍一部影片。這些職業,都是以某種特定形式,向人們傳遞內心實質的想法。 我製作遊戲的目的只是圓小時候的夢而已,並非想當成終身職業 。 合作 美術並非我的專長,為了使我的遊戲能看,我聯繫國中同學,希望他可以為我設計圖像。當時我認為我只需要描述一下遊戲內容,與心目中想要的成果,就可以拿到我想要的圖像,放入我的遊戲中。結果當我拿到出版的圖像時,跟我心中想的有點懸殊。我和他溝通了數次,沒有達到共識,對方一度想隨便應付了事,結果那張隨意畫出的圖正符合我意。看來 溝通合作的技巧,我還有許多不足之處 。 專案實體 https://dctime-mc.itch.io/no

高中二年級下學期自主學習作品[經典遊戲破解 - 適者生存解俄羅斯方塊]

圖片
經典遊戲破解 - 適者生存解俄羅斯方塊 作者:朱沿道 高二下自主學習作品 動機 用 Unity 做完一個遊戲,雖然感到很驕傲,但頓時失去了目標。國中二年級時,為了發洩被家長限制遊戲時間的不悅,決定奮發圖強。既然我不能玩別人的遊戲,那我自己做出來的遊戲你就拿我沒辦法了吧。因為這個原因,我學習程式設計,到了現在。 那時的我認為這個目標我會花一段時間才能完成,但沒想到在高二上就完成了。我了解到我需要一個更遠大的目標,來提供我學習程式的動力。這時突然爆發 COVID-19 ,許多人的性命在短短的一年被取走了。現在科技這麼進步,為何還是阻止不了傳染病的擴散?在反思的過程,發覺到活著的意義:相較於做遊戲,努力地迎合玩家,無止盡的跟隨大眾喜好,不如 提升人們生活品質,藉由科技改變環境 ,即使離開了人世,我的努力還是會繼續留在人世,成為未來人的階梯。數學已發展了許多世紀,幫助人們在研究領域度過重重困難。電腦是一個強大的數學工具,突破了人們對於計算的想像,將會是人類進步的另一利器。因此,我希望可以學習大數據與機器學習,將來可以充分地利用此工具,回饋給人們的生活。 人生的志向已經立定了,還是得要有一個短期目標朝向志向前進。這時,我回想起一年級下學期在社團製作的專案。那時的我對破解遊戲感到興趣,並且立刻數學課所學之期望值應用在此,還參加了小論文競賽,並且獲得了佳作。竟然此舉動受到了不錯的成效,那此時為何不要破解一個關於機器學習的遊戲? 目標 完成一個可以自動遊玩線上俄羅斯方塊的程式。 專案說明 什麼是俄羅斯方塊 俄羅斯方塊是一個益智型電腦遊戲,每一刻都會有俄羅斯方塊從版面上方掉落,可藉由鍵盤控制俄羅斯方塊左右移動與旋轉,當一列被塞滿俄羅斯方塊時,該列會消失,上面所有列向下移一格,目標為不讓堆積的俄羅斯方塊超過最上面的界線,當俄羅斯方塊超過上面界線時,遊戲結束。 確定輸入 在此使用 IPO 模型,先了解輸入的資料,接著確定輸出的格式,最後再根據輸入與輸出思考處理資料的方法。在此主要有三個欲知的資料,一是現在版面的狀況,接著是正在落下的俄羅斯方塊種類,下一個落下的俄羅斯方塊也是重要的資料。 首先,因為是線上俄羅斯方塊,唯一偵測這些資料的方法就是讀取螢幕某特定位置的顏色。至於這種方法需要先知道偵測的位置,非常麻煩,因此盡量能避免就避免。現在版面的狀況可

紙蜻蜓的受風面積與紙蜻蜓落地時間的關係 #2 [可視化使用VPython]

圖片
作品的網址在這裡:( https://www.glowscript.org/#/user/DCtime/folder/MyPrograms/program/MyFirstVPython )  一開始,我是使用 Python + Matplotlib 畫出有空氣阻力落體的x-t圖和v-t圖。( Python + Matplotlib 設計流程請看 https://dctimelearninghowtocode.blogspot.com/2021/01/python-matplotlib.html )老師看完我的專案後,提議可以使用VPython將得到的數據用3D模型"直接看到"東西在移動,不只以圖表呈現。因此我就開始製作這個專案。 一、學習VPython 學習國英數,課本、習作、講義、學校授課配合政策很輕易的成為我們學生的學習資源,但學校沒有自動提供VPython的學習資源,因此學習VPython的第一步,就是尋找可使用的學習資源。老師在推薦VPython,有提到可以去Google搜尋 "VPython石明豐教授" 關鍵字。沿著這個線索,找到了一個NTU做的網站( https://tcjd71.wixsite.com/vpython ),裡面有許多教學文章提供下載。再搭配一些Youtube的資源,和先前學的一些Python的知識,不到一天就把我需要的知識全部學完了。 VPython是一個數據可視化的一個工具,簡單來說,就是一個3D動畫製作工具,而非一個物理模擬工具。VPython只提供圖形渲染的工具,移動只能透過直接設定位置的方式,而不是製造環境去使物件動起來。 二、製作物理動畫 正式使用VPython前,要先設定VPython的開發環境。我試著用終端機下載VPython,但她總是跳出一些奇怪的錯誤訊息,可能是因為我的設備太老舊,導致有不相容的問題。為了解決這個問題,我將錯誤碼貼上Google,希望可以找到解決方法。就在此時,我找到了GlowScript,一個可在線上開發的VPython編輯器。雖然沒有像Pycharm那麼好用,但至少解決環境的問題。 (圖一:GlowScript 主頁面, 資料來源:螢幕截圖) 接下來,就是產生出物體有空氣阻力之落體之相關數據(速度與位移)。在上一篇的文章,我們已經完成這個步驟,Ctrl+C