最近一段时间比较忙,出差很多。虽然带着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()
好了 让我们来看看效果(长按键盘左或者右方向键)
好了 今天先到这里,明天(或者后天,主要取决于孩子睡觉的早晚- -!)或会加上小球,并和挡板做精灵冲突。