最近一段時間比較忙,出差很多。雖然帶着surface在哪都可以擼代碼,但是,白天跑一天晚上真的是一點精力都沒有。直到這兩天回到家,慢慢的才調整過來。看了看書架上的那一堆書,緊迫感油然而生。最近還是趕緊把這本《Python遊戲編程入門》看完吧。這兩天看到介紹打磚塊的那一章。我感覺這個作者平時主要使用的開發語言肯定是C#和java,因爲他的代碼裏對變量作用域的寫法很奇怪。經常看到作者用global定義全局變量,或者是在類中寫函數的局部變量。說實話,對我這種純小白着實是有點晦澀。於是又回去惡補了一下作用域和python變量的命名空間的知識。最後還是決定按照自己的習慣把這個遊戲寫出來。好了龜速擼碼開始。首先,既然寫的是一個打磚塊遊戲。那麼大概的思路就是,先確定遊戲中的元素類型:1.磚塊(廢話)2.擋板(廢話)3.球(還是廢話),再確定各個元素所要實現的功能:當球碰到磚塊,則磚塊消失,球碰到屏幕除過下部以外的邊緣則反彈,當球拋出屏幕下沿則遊戲失敗。好了 整個遊戲思路大概就是這樣了。
好了既然確定了思路那麼開工。首先,我先把遊戲裏的元素圖片找到,這個圖片是我自己畫的,很醜(- -)。
《==磚塊 《==擋板 《==球
今天第一步就先把擋板畫出來吧。
創建一個擋板的類(繼承精靈)並生成一個實例。寫一個擋板的update()函數,讓擋板能夠左右移動。今天太晚了(這會凌晨00:32)代碼的註釋就先不加了。明天有空加。
代碼如下:
#!usr/bin/python
#!coding=utf-8
import pygame,sys
from pygame.sprite import Sprite
class Paddle(Sprite):
def __init__(self,screen):
super().__init__()
self.screen = screen
self.image = pygame.image.load('paddle.png')
self.rect = self.image.get_rect()
self.rect.bottom = 490
self.paddle_left = False
self.paddle_right = False
def update(self):
if self.paddle_left and self.rect.left > 0:
self.rect.centerx -= 8
if self.paddle_right and self.rect.right < 600:
self.rect.centerx += 8
def blitme(self):
self.screen.blit(self.image,self.rect)
pygame.init()
screen = pygame.display.set_mode((600,500))
pygame.display.set_caption('打方塊')
paddle = Paddle(screen)
timer = pygame.time.Clock()
while True:
timer.tick(50)
ticks = pygame.time.get_ticks()
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
paddle.paddle_left = True
if event.key == pygame.K_RIGHT:
paddle.paddle_right = True
elif event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
paddle.paddle_left = False
if event.key == pygame.K_RIGHT:
paddle.paddle_right = False
screen.fill((20,40,255))
paddle.update()
print(paddle.rect.centerx)
paddle.blitme()
pygame.display.flip()
好了 讓我們來看看效果(長按鍵盤左或者右方向鍵)
看起來效果還可以。
好了 今天先到這裏,明天(或者後天,主要取決於孩子睡覺的早晚- -!)或會加上小球,並和擋板做精靈衝突。