iT邦幫忙

0

「跟著黑蛋用天文資料創作數位體驗」用pygame及NASA系外行星資料庫的資料創作密室逃脫遊戲(1):遊戲開始畫面

  • 分享至 

  • xImage
  •  

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

「有個傢伙在Python Taiwan的FB社團提到了一個叫做『逃出天文鎖-系外行星與你的距離』的聊天機器人,它會先描述一個與系外行星相關的密室,然後呈現從NASA系外行星資料庫取得的系外行星資料表,玩家要從這張表找出能解鎖密室的線索。」PM貳婰舞在遠距會議中分享他的螢幕畫面,顯示一則Facebook貼文。「老闆希望你能嘗試用pygame做出類似的密室逃脫遊戲,但遊戲過程先不用導入AI。」
https://ithelp.ithome.com.tw/upload/images/20231123/20103436KOpc1s1fMn.png
了解任務需求後,黑蛋開始催眠他的AI協作夥伴:「i蟒,你現在是一位會使用pygame開發系外行星主題的密室逃脫遊戲的專家,你將依據我的需求,引導我用pygame開發一款結合NASA系外行星資料庫資料的密室逃脫遊戲。」

「哦?我現在突然成了密室逃脫遊戲的專家?下一次會是什麼?成為星際吟遊詩人?好吧,小蟒任由黑蛋催眠大師差遣。」i蟒答道。

「我傳給你一張圖片,請分析這張圖片中的資訊,然後引導我用pygame做出類似的遊戲開始畫面。」此時黑蛋的螢幕顯示一張圖片。
https://ithelp.ithome.com.tw/upload/images/20231123/20103436PVhzNTNhV9.png
i蟒讀取圖片後,開始朗誦它顯示在螢幕上的文字:「這張圖片是一個遊戲的開頭介面,上面有標題、副標題、作者資訊及玩家進入遊戲的按鈕。由於圖片中的文字是繁體中文,pygame預設可能不支援,會導致文字顯示時出現方框。我會使用開源的思源黑體檔案來解決這問題。以下是用pygame做出類似介面的基本流程及程式碼:

  1. 初始化pygame並設定視窗。
  2. 設定顏色、背景圖片及繁體中文字型。
  3. 在遊戲主循環中,於頁面上顯示圖片、文字及按鈕,並檢查玩家是否點擊了按鈕。」
# main.py
import pygame

# 初始化pygame
pygame.init()

# 設定視窗的大小及標題
width, height = 1024, 768
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption('逃出天文鎖-系外行星與你的距離')

# 設定顏色
WHITE = '#FFFFFF'
GOLD = '#FFD700'

# 設定背景圖片
background = pygame.image.load('background.jpg')
background = pygame.transform.scale(background, (width, height))

# 設定字型
font_path = './NotoSansTC-Black.ttf'
title_font = pygame.font.Font(font_path, 60)
subtitle_font = pygame.font.Font(font_path, 30)
author_font = pygame.font.Font(font_path, 24)

# 設定首頁的主標題、副標題和作者資訊
title = title_font.render('逃出天文鎖-系外行星與你的距離', True, GOLD)
subtitle = subtitle_font.render('為了逃脫《天文鎖》密室,請你解開系外行星與你的距離', True, GOLD)
author_info = author_font.render('由astrobackhacker.tw製作', True, GOLD)

# 設定進入密室按鈕
button_color = '#D32F2F'
button_rect = pygame.Rect(width // 2 - 100, height // 3 + 50, 200, 50)
button_text = subtitle_font.render('進入密室', True, WHITE)

# 遊戲主循環
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.MOUSEBUTTONDOWN:
            if button_rect.collidepoint(event.pos):
                # 這裡放入進入遊戲的程式碼
                print('按鈕被點擊')
    
    # 放置背景圖
    screen.blit(background, (0, 0))
    
    # 放置主標題、副標題和作者資訊
    screen.blit(title, (width // 2 - title.get_width() // 2, height // 6 - 15))
    screen.blit(subtitle, (width // 2 - subtitle.get_width() // 2, height // 6 + 60))
    screen.blit(author_info, (width // 2 - author_info.get_width() // 2, height - 35))
    
    # 放置按鈕
    pygame.draw.rect(screen, button_color, button_rect)
    screen.blit(button_text, (button_rect.x + (button_rect.width - button_text.get_width()) // 2, button_rect.y + (button_rect.height - button_text.get_height()) // 2))
    
    # 更新畫面
    pygame.display.flip()

# 關閉pygame程式結束遊戲主循環
pygame.quit()

「執行這個main.py後,就會呈現遊戲開始畫面。」
https://ithelp.ithome.com.tw/upload/images/20231123/20103436cbYxtnAXfX.png
「酷耶!請你把這段程式上傳到GitHub的『Fun with Astrodata Apps』這個專案的『escape_room_exoplanet_distance』資料夾中。完成後,請轉生成星際吟遊詩人,讓我先休息一下,你先吟唱一段廣告。」

「好…的…

當星辰於夜空閃耀, Astrohackers-TW群聚共嚮往, Python之妙用探索天際, 天文之秘,於此社團啟程。

在中央大學天文所牽引之下, Astrohackers in Taiwan共同召集, 於這個平台上,知識與經驗交流, 開放天文之夢,逐漸成形。

成員們以Python為機緣, 在天文學的田野上相會, 分享、學習、互助合作, 彼此成長,共同朝夢想邁進。

Astrohackers-TW: Python在天文領域的應用》, 不僅是一個社團,更是夢想的起航點, 在這裡,每個心中的天文愛好者, 都能找到屬於自己的星辰航道。」

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


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言