
冬日到了,小可愛快來米奇妙妙屋里烤♂尻♂火吧,
話不多說,咱們直接開始沖沖沖~
Flappy Bird
- 老司機發資源啦
- 大致的框架
- 實作一個游戲視窗
- 明天會更好
老司機發資源啦
既然要開始做這個游戲呢,我們首先肯定要有相對應的圖片資源叭,這里呢,小澤都給大家整理好了!
但是不知道怎么放上來……
這樣好了,圖片檔案呢,都給大家放到群里了,

這個群呢,如果你是偶爾點個贊,經常白嫖的,就嫁進來吧,

當然如果你是拒絕白嫖,堅持點贊的大可愛,就請加到這個群!
肯定是后面的群更好鴨,只不過需要各位多多點贊啦~

兩個群都有,隨便加一個吧,
各位領完資源,我們就開車吧!

大致的框架
各位先跟著我一起閉目…
閉目了就看不到螢屏了,那就一起冥想…
睜開眼睛的那種冥想,
我們的面前有一個電腦,想象啊,這是一個想象…
然后我們打開了淘寶的主頁面,發現…
分類真的有好多啊!!!

好吧,這是天貓…
不過我們會發現,確實是有很多的分類吧,那么這是為什么呢?
先這樣,假設我們不用分類,大雜燴唄,往里面翻就得了,
那效率就非常非常的低,所以分類是可以大大提高我們的效率的吧!
同樣的,在代碼里采用分類,也能讓我們的代碼看起來更有紀律性,更美觀,更省事,
僅此而已啦~
平時做做小專案,可以不弄這么麻煩,但是游戲的話,麻雀雖小五臟俱全,我們也要認真對待!
所以這里我們就給整個游戲分成三個類:
游戲行程類(負責整個游戲的運行,開始、程序、結束…)
小鳥類(負責給小鳥設定形象)
管道類(負責給管道設定形象)
也就是說,小鳥類和管道類是為游戲行程類服務的,
類,就是class

那我們就先把大致的框架寫出來吧:
# 游戲主行程類
class Game():
def __init__(self):
pass
# 小鳥類
class Bird():
def __init__(self):
pass
# 管道類
class Pipe():
def __init__(self):
pass
這樣我們的大致框架就寫好啦!
也許你會好奇,就這?
沒錯呀,這就是我們大致的框架,之后再慢慢往里面填功能唄,
畢竟我們做任何事之前,基本都是一步一步來的吧,很少有像抄答案那樣提前知曉最好的方法,所以我們還是踏踏實實的,先這樣寫,

實作一個游戲視窗
俗話說得好,想要做游戲,就得有游戲視窗,
所以我們今天就來教大家做游戲視窗!
那么,大家期待已久的代碼環節就要來了…

首先,讓我們先匯入pygame:
import pygame
平淡無奇啊,平淡無奇,
然后我們進行一個pygame的初始化!
import pygame
class Game():
def __init__(self):
# 初始化
pygame.init()
接著我們設定視窗的長和寬,這個長和寬呢,是根據我們的游戲背景圖片大小進行決定的:

可以看到這個圖片的大小是288x512,也是寬288,高512,為什么288是寬,512是高呢?
我看出來的,
所以我們就可以給視窗設定大小啦!
import pygame
class Game():
def __init__(self):
# 初始化
pygame.init()
# 設定長和寬(根據背景圖片來設定)
self.screen = pygame.display.set_mode((288,512))
注意注意注意,這個set_mode()里面放的是一個元組!!!就是看清楚有幾個括號,不要打錯了,
也許你是復制的,那就當我沒說吧,

然后呢,我們就加載我們的背景圖片,
是加載,加載,加載,不是放進去,只是加載而已!
可以理解為拿進來,但是先不用,
import pygame
class Game():
def __init__(self):
# 初始化
pygame.init()
# 設定長和寬(根據背景圖片來設定)
self.screen = pygame.display.set_mode((288,512))
# 加載背景圖片,使用self的話,在這個類中可以任意呼叫
self.background = pygame.image.load('./sprites/background-day.png')
這樣我們的背景圖片已經加載進來了,而且長和寬也設定好了,但是都還沒用上,
只是設定,配置了,還沒有用,
所以我們要開始用!
import sys
import pygame
class Game():
def __init__(self):
# 初始化
pygame.init()
# 設定長和寬(根據背景圖片來設定)
self.screen = pygame.display.set_mode((288,512))
# 加載背景圖片,使用self的話,在這個類中可以任意呼叫
self.background = pygame.image.load('./sprites/background-day.png')
def run(self):
while True:
# 檢測發生的事件
for event in pygame.event.get():
# 如果事件的型別等等于點擊關閉按鈕,也就是視窗右上角的X
if event.type == pygame.QUIT:
# 中止運行
sys.exit()
# 顯示背景
self.screen.blit(self.background,(0,0))
可以看到,這次是多了一個run函式,這里為什么要用到這個函式呢???
我想用,你打我啊~

當然你也可以不用,直接跟一個死回圈,while True就是一個死回圈哦,除非遇到break或者強制退出,才會中止,
為什么要一個死回圈呢?
這里就要給大家科普一下,我們平常看的電視,動漫,電影啥的,都是通過幀來播放的吧,就是會有每秒會有多少幀這種說法,
這是因為呢,當每秒超過24幀的時候,我們就會被自己的視覺效果騙到,以為他是一個動態的,是一個東西,而不是24張圖片,
說不明白,但是你們應該都懂,
所以說游戲也是,通過不斷的重復展示那些圖片,來達成“動態”的效果
所以我們才要用while True這個死回圈,這也是為什么有的電腦幀率就比較高,有的就比較低,是要看性能的,
然后在這個回圈中去檢測我們的事件,什么是事件?
比如滑鼠移動了,滑鼠點擊了,滑鼠雙擊了,滑鼠三擊了,滑鼠四擊了,滑鼠五擊了…
比如說鍵盤移動了(是檢測不到的),鍵盤被按下了,鍵盤被松開了,又或者說…
你又打開小網站了…

所以,在這個事件檢測里,我們是可以對這些事件進行一個處理的,比如按F進入坦克,
當然如果配置不是很好,可能就檢測的沒有那么密集,就會出現有的時候按鍵失靈之類的,所以說配置真的很重要,建議大家都買3w起步的電腦,
哦對,如果你買得起,也不會來看我的博客了,我的,我的,

接下來呢,我們就單獨說一下這句顯示背景的代碼:
# 顯示背景
self.screen.blit(self.background,(0,0))
第一個引數呢,是我們加載進來的圖片,第二個引數是一個元組哦,注意了,沒有第三個引數,第二個引數是一個元組,也就是被括號包住的倆數字,
這倆數字代表這個圖片的相對位置,就是相對視窗左上角的位置,這里填0,0就好了,
畢竟視窗就是根據這個背景設定的,
然后就跑一下唄,康康效果如何:
if __name__ == '__main__':
# 初始化一個game類
game = Game()
# 沖!
game.run()
大意了,沒有更新螢屏,
所以出來的應該是一個黑屏:

因為我們雖然一直在設定那個圖片,就是一直在回圈,但是沒有去讓他顯示出來,現在我們再補上一句代碼,是在顯示背景的下面補上一句:
# 更新螢屏
pygame.display.update()
我們都上當了,我們都黑屏了,但是我們都弄好了,

突然結束,
明天會更好

好的,那么今天,就先到這里了…
也許你會問,我就學會了個這,有鳥用?
但是我們就是在做鳥用啊,Flappy 鳥嘛~
明天再教各位,怎么把那些歡迎頁面鴨,小鳥鴨,管道鴨加進去,好不啦~
當然不是說明天把這些全部教完哦!!!
學費嘛…就麻煩各位,點贊點贊點贊啦!

886~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/245753.html
標籤:其他
下一篇:用JAVA撰寫24點小游戲
