2020年10月11日 星期日

pygame玩遊戲系列(7)~遊戲中隨機出現物件並設定遊戲更新頻率

 這次我們同樣在上次的基礎上,繼續來看看如何將遊戲發展下去!

基本上,透過上一篇的說明及設定,我們應該要能夠認識所謂的pygame.rect這個重要的物件,後續我們的相關操作,都會應用到rect這個矩形座標物件的相關概念及操作!假如還不太清楚的話,建議一定要再回去好好了解一下,不然後續愈來愈複雜的設定及操作,會讓人眼花撩亂甚至錯亂的!

到上一篇為止,我們主要是完成了遊戲主體(小車)的設定及操控,但是遊戲中的其他元件,如:敵人、障礙物、禮物、射擊子彈...等等,都還沒有出現呢!

當然要讓以上各式各樣的遊戲元件出現,還要涉及到許多語法及程式概念(如:函式、物件導向等等)的認識,我們會一步一步來進化並認識這些程式及語法的操作,而在這之前,我們還是先用「土法煉鋼」的方式,一步一步來認識這些元件的基本概念,這樣不但壓力比較不大而且重要的是會對後續的函式、物件導向等的設定及操作建立比較完整的概念及基礎!

這次呢~~我們主要目標設定為:

一、如何在遊戲視窗中「隨機出現」物件並自動移動(本篇設定為禮物從天而降)

二、設定遊戲的更新頻率(讓遊戲依設定的頻率進行更新,避免因為電腦效能差異所產生的遊戲視覺差異)

好囉~~一樣先上程式碼的部分:

import pygame, sys, random
from pygame.locals import *
pygame.init()

car_img = pygame.image.load("./imgs/car6.png")
screen_width, screen_height = 500, 380  # 設定遊戲視窗寬、高參數
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption('騎車春遊趣')
screen_rect = screen.get_rect()  # 獲取遊戲視窗矩形座標參數儲存於參數:screen_rect
car_rect = car_img.get_rect()    # 獲取小車矩形座標參數儲存於參數:car_rect
car_rect.midbottom = screen_rect.midbottom    # 將小車的中心底部座標設定與視窗的中心底部座標貼齊

# 產生gift物件並設定其隨機出現於遊戲視窗上方
gift = pygame.image.load("./imgs/gift320.png")
gift_rect = gift.get_rect()
gift_rect.centerx = random.randrange(0, screen_rect.width)

clock = pygame.time.Clock()  # 實體化Clock物件

while True:
    screen.fill((255, 255, 0))   # 將遊戲視窗背景塗成黃色

    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

    key_p = pygame.key.get_pressed()
    if (key_p[pygame.K_l] or key_p[pygame.K_LEFT]) and car_rect.left >= screen_rect.left:
        car_rect.x -= 2
    if (key_p[pygame.K_r] or key_p[pygame.K_RIGHT]) and car_rect.right <= screen_rect.right:
        car_rect.x += 2

    # 透過小車矩形參數:car_rec於指定位置繪製小車(car_img)
    screen.blit(car_img, car_rect)

    # 設定禮物降落的速度,並設定若超出遊戲視窗下方,就隨機從上方再次出現並降落
    if gift_rect.top < screen_rect.bottom:
        screen.blit(gift, gift_rect)
        gift_rect.y += 1
    else:   # 重新將gift物件設定為隨機出現於遊戲視窗上方
        gift_rect.centerx = random.randrange(0, screen_rect.width)
        gift_rect.bottom = 0

    clock.tick(90)  # 設定更新頻率為90(就是每秒更新90次的意思,數字愈大~更新愈多次,車子、禮物等跑得愈快)
    pygame.display.update()    # 更新視窗

其中比較需要注意的是:

1.程式第18、45行:透過pygame.time.Clock()及 clock.tick(90) 設定遊戲更新頻率的設定

2.程式第14~16:gift(禮物物件)的設定及隨機出現位置的初始化設定及概念

3.程式第38~43行:禮物(gift)物件的降落操作設定及判斷式,並且設定讓gift落出式窗外之後如何重新隨機出現在遊戲視窗上方


現在呢~~應該可以完成遊戲中小車的自由操控及隨機出現落下的禮物

但這樣還是沒有遊戲的「感覺」啊~~~

是啊~~所以咧...還需要甚麼呢?

自己想想看囉......~~~

  • 可以設定禮物落下的數量
  • 判斷小車是否接到禮物
  • 接到禮物的話可以加分
  • 不只會落下禮物還會落下炸彈
  • 小車可以發射子彈打掉炸彈

............等等隨機自己想像及創造囉!

後續我們就會在此基礎上,繼續前進Go~~!

沒有留言:

張貼留言