天文背包黑客
天文背包黑客

「開放天文 拉近群眾與星空的距離」 公民天文學家/Astrohackers in Taiwan社群的共同創辦人/承接網站開發及資料科學相關案子的遠距工作者 https://astrobackhacker.tw

「跟著黑蛋用天文資料創作數位體驗」用pygame及NASA系外行星資料庫的資料創作密室逃脫遊戲(3):系外行星資料表載入功能

任職於「天文數智」的黑蛋在公司部落格發表完「跟著黑蛋用Streamlit速成天文資料分析Web App」系列文章後,收到PM貳婰舞指派的新任務:「我們的老闆,來自喵星的『月影』,發現之前的文章內容對於不懂資料分析的大眾還是有點距離,因此想啟動一個新專案『天文的資料再創作』,希望我們能利用天文資料製作出有趣體驗的應用程式,例如遊戲、網頁、手機app…等等。」於是,黑蛋與他的AI協作夥伴,i蟒,展開新的旅程。

「我們已經用pygame製作出遊戲開始畫面及密室場景畫面。」黑蛋將i蟒從吟遊詩人催眠回製作密室逃脫遊戲的專家,繼續與它協作遊戲。「接下來,請你引導我開發讓玩家等待系外行星資料表載入的畫面,我的需求是當玩家點擊『進入密室』按鈕後,先不要顯示密室場景畫面,而是顯示正在載入資料訊息的畫面,這過程要去取得NASA Exoplanet Archive提供的系外行星資料表,包含系外行星名稱以及它們離地球的距離,若有Python套件可以取得這些資訊,請使用。當成功取得資料表後再顯示密室畫面,而且這個資料表要能在密室畫面中使用,例如從中隨機選一個系外行星名稱,填入原本畫面底下的訊息中,改成『要逃出這個密室,你需要解開…這個系外行星與你的距離』,其中的…為系外行星名稱。請先解說這些功能的開發步驟,不要提供程式碼。」

i蟒邊發出語音邊將文字顯示在螢幕上:「我好睏,先讓我載入一杯咖啡提提神,請稍後……好了,我來根據你的需求列出開發步驟:

  1. 新增一個函式display_loading_page(),用於顯示『正在載入系外行星資料...』訊息的畫面。

  2. 新增一個函式load_exoplanet_data(),其中會用astroquery套件來取得NASA Exoplanet Archive提供的系外行星資料表,並只取出『系外行星名稱』和『離地球的距離』兩個欄位。

  3. 使用多執行緒來載入資料:在遊戲主循環中,當玩家點擊『進入密室』按鈕後,用threading套件建立一個新的執行緒來執行load_exoplanet_data()函式,以便確保在新的執行緒中載入資料的同時,遊戲主循環仍然能夠運行。

  4. 修改遊戲狀態邏輯:在主循環中,增加一個新的遊戲狀態『loading』,在此狀態下會呼叫display_loading_page()函式來顯示資料載入畫面,並檢查載入資料的執行緒是否已完成。

  5. 處理資料載入後的狀態轉換及:當資料載入完成後,將遊戲狀態從『loading』改變到『room』。然後透過全域變數將載入的系外行星資料傳遞給密室畫面,並且從中隨機取出一個系外行星名稱。

  6. 在display_room_page()函式中新增planet_name參數,用來接收並顯示隨機取出的系外行星名稱。」

「讚唷,請你接著依照這些步驟擴充原本的程式碼。」黑蛋指示道。

「耶,我好棒。我將會在螢幕上顯示修改過的程式碼,以及程式執行後呈現的畫面。另外,當玩家點擊『查看系外行星列表』按鈕後,也會在終端機印出系外行星列表。」

「酷耶!請你把這段程式更新到GitHub的『Fun with Astrodata Apps』這個大專案底下的『escape-room-exoplanet-distance』專案中。完成後,請再度轉生成星際吟遊詩人,讓我先休息一下,你先吟唱一段廣告。」

「好…的…

在東方崛起了一群星,Astrohackers名聲響亮清, 中央大學天文所攜手共同征,Python技能映照星空廣。

天文學的奧秘深不可測,Python語言如鑰開啟此門, 交流思想,共享知識,不斷進步,開放天文,目標堅定不替換。

Astrohackers-TW,社群的呼喚, 探索宇宙,用程式碼描繪夜晚, 夥伴們聚,分享經驗,共成長, 天文領域,Python舞動光芒。

在這裡,每顆心懷抱星空夢想, 學習Python,開啟知識之窗。 Astrohackers-TW,激情澎湃, 一起描繪夜空最美麗的畫。」

此篇文是由蘇羿豪經ChatGPT協助創作,文章以「創用CC姓名標示-非商業性-禁止改作 4.0(CC BY-NC-ND 4.0)國際版授權條款」釋出,相關程式碼以MIT授權條款釋出。

CC BY-NC-ND 4.0 版权声明

喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。

加载中…
加载中…

发布评论