您的位置:首页 > 移动开发

教你用python写游戏之flappy bird(2)

2014-03-01 19:11 162 查看
  二、开始

  上一篇中,我们已经分析过了2个核心,bird和pipe。这一单元,我要讲诉的就是bird。

  首先呢,我们需要创建一个对象,这个对象取名为Bird。

  Bird具有以下属性:

  1)图片。具体来说就是他长什么样。

  2)大小。长多大。

  3)是否撞到了。还记得游戏规则么,撞到就gameover了。

  4)速度。每一帧移动多远。

  这只bird没事还会往下掉,点一下就会往上飞,这就是两个动作。

  于是,编写了如下代码:

class Bird(pygame.sprite.Sprite):
def __init__(self,bird_img,pos):
pygame.sprite.Sprite.__init__(self)
self.image = bird_img
self.rect = self.image.get_rect()
self.rect.midbottom = pos
self.speed = 1
self.is_hit = False
def move(self):
self.rect.left += self.speed
self.rect.top += self.speed
def click(self):
self.rect.top -= 1.5*self.speed
  还记得最开始我说过,flappy bird所有的图片资源都在一张图片altas.png上。

  pygame提供了一个函数,可以让我们方便的取出资源。

 

  我们先载入图片

#load img
game_img = pygame.image.load('res/img/atlas.png')
bg_rect = pygame.Rect(0,0,288,512)
bg_img = game_img.subsurface(bg_rect).convert() 然后分别获取需要的图片。
#config bird
bird_rect = pygame.Rect(0,970,48,48)
bird_pos = [100,230]
bird_img = game_img.subsurface(bird_rect).convert_alpha()
bird = Bird(bird_img,bird_pos)


  这样 bird和bg(background)的图片就落实了。
  最后,因为是在电脑上运行,点屏幕就需要改成相应的按下空格键。

key_pressed = pygame.key.get_pressed()
if not bird.is_hit:
if key_pressed[K_SPACE]:
bird.click()

 终于,今天的任务完成了,虽然,虽然程序有点小bug,但这是下一篇要说的问题了。

完整代码如下:

# -*- coding: utf-8 -*-
"""
@author: Kevio
"""
import pygame
from pygame.locals import *
from sys import exit
import random

# configure
screen_w = 288
screen_h = 512

# class
class Bird(pygame.sprite.Sprite): def __init__(self,bird_img,pos): pygame.sprite.Sprite.__init__(self) self.image = bird_img self.rect = self.image.get_rect() self.rect.midbottom = pos self.speed = 1 self.is_hit = False def move(self): self.rect.left += self.speed self.rect.top += self.speed def click(self): self.rect.top -= 1.5*self.speed

# init the game
pygame.init()
screen = pygame.display.set_mode((screen_w,screen_h))
pygame.display.set_caption('flappy bird @Kevio')

#load img
game_img = pygame.image.load('res/img/atlas.png')
bg_rect = pygame.Rect(0,0,288,512)
bg_img = game_img.subsurface(bg_rect).convert()
#config bird bird_rect = pygame.Rect(0,970,48,48) bird_pos = [100,230] bird_img = game_img.subsurface(bird_rect).convert_alpha() bird = Bird(bird_img,bird_pos)
#config the game
score = 0
clock = pygame.time.Clock()
running = True

while running:
clock.tick(60)

screen.fill(0)
screen.blit(bg_img,(0,0))

if not bird.is_hit:
screen.blit(bird.image,bird.rect)
bird.move()
else:
running = False

pygame.display.update()

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

key_pressed = pygame.key.get_pressed()
if not bird.is_hit:
if key_pressed[K_SPACE]:
bird.click()


 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: