Pygame从0实战8(泡泡小游戏)
2018-03-09 13:38
162 查看
1.Pygame从0实战8之泡泡小游戏 用面向对象的思想做一个泡泡拯救世界的小游戏
下面是所要用到的图片和源代码链接:点击打开链接 密码:l68h
sprite模块、Sprite类
在pygame.sprite模块中包含了一个名为Sprite类,它是pygame
自带的一个精灵。但这个类的功能比较少,因此我们新建一个类对
其继承,在Sprite类的基础上丰富,以方便我们的使用.
官方:
pygame.sprite.Sprite是精灵基类
Simple base class for visible game objects.
Sprite类中主要的方法和作用
pygame.sprite.Sprite.update -method to control sprite behavior
pygame.sprite.Sprite.add -add the sprite to groups
pygame.sprite.Sprite.remove -remove the sprite from groups
pygame.sprite.Sprite.kill -remove the Sprite from all Groups
pygame.sprite.Sprite.alive -does teh sprite belong to any groups
pygame.sprite.Sprite.groups -list of Groups that contain this Sprite
Sprite类的解释:
The base class for visible game objects. Derived classes will want to
override the Sprite.update() and assign a Sprite.image and Sprite.rect
attributes. The initializer can accept any number of Group instances to be added
to.When subclassing the Sprite, be sure to call the base initializer before
adding the Sprite to Groups.
# -*- coding: utf-8 -*-
# @Author: Clarence
# @Date: 2018-03-09 08:18:46
# @Last Modified by: Clarence
# @Last Modified time: 2018-03-09 13:33:36
import pygame
import sys
from pygame.locals import *
from random import *
class Ball(pygame.sprite.Sprite):
def __init__(self, image, position, speed, bg_size):
# Call the parent class (Sprite) constructor
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(image).convert_alpha()
self.rect = self.image.get_rect()
#小球的位置
self.rect.left, self.rect.top = position
self.speed = speed
self.width, self.height = bg_size[0], bg_size[1]
'''
Pygame.Rect.move():
moves the rectangle
move(x, y) -> Rect
Returns a new rectangle that is moved by the given offset. The
x and y arguments can be any integer value, positive or
negative.
可以在Rect对象的move方法中添加可正可负的两元素
如果要实现小球的移动,则要在类中添加一个move()方法,并且在绘图的时候调用小球
对象的move()方法
'''
def move(self):
self.rect = self.rect.move(self.speed)
#类似实现贪吃蛇穿入墙壁从对面墙壁出来(左右方向)
if self.rect.right < 0:
self.rect.left = self.width
elif self.rect.left > self.width:
self.rect.right = 0
#(上下方向) 从下往上 和 从上往下
elif self.rect.bottom < 0:
self.rect.top = self.height
elif self.rect.top > self.height:
self.rect.bottom = 0
def main():
pygame.init()
ball_image = "gray_ball.png"
bg_image = "background.png"
running = True
bg_size = width, height = 1024, 681
screen = pygame.display.set_mode(bg_size)
pygame.display.set_caption("Play the Ball")
#.png格式可以加入apha通道
background = pygame.image.load(bg_image).convert_alpha()
balls = []
for i in range(5):
#球的尺寸是100*100 随机产生小球的位置
position = randint(0, width-100), randint(0, height-100)
#两个元素的一个列表,表示x轴和y轴方向的速度
speed = [randint(-10, 10), randint(-10, 10)]
#实例化小球对象 分别传入Surface对象 位置二元组 速度两元素列表
ball = Ball(ball_image, position, speed, bg_size)
balls.append(ball) #将小球加入到小球列表中
# CLock()对象用来设置小球的帧率
clock = pygame.time.Clock()
while running:
for event in pygame.event.get():
if event.type == QUIT:
sys.exit()
screen.blit(background, (0, 0))
for each in balls:
each.move()
screen.blit(each.image, each.rect)
pygame.display.flip() #将显示缓冲区中的数据刷入显示器中
clock.tick(30)
if __name__ == "__main__":
main()
下半节介绍碰撞检测和如何加入一些声音元素,并进一步完善界面
下面是所要用到的图片和源代码链接:点击打开链接 密码:l68h
sprite模块、Sprite类
在pygame.sprite模块中包含了一个名为Sprite类,它是pygame
自带的一个精灵。但这个类的功能比较少,因此我们新建一个类对
其继承,在Sprite类的基础上丰富,以方便我们的使用.
官方:
pygame.sprite.Sprite是精灵基类
Simple base class for visible game objects.
Sprite类中主要的方法和作用
pygame.sprite.Sprite.update -method to control sprite behavior
pygame.sprite.Sprite.add -add the sprite to groups
pygame.sprite.Sprite.remove -remove the sprite from groups
pygame.sprite.Sprite.kill -remove the Sprite from all Groups
pygame.sprite.Sprite.alive -does teh sprite belong to any groups
pygame.sprite.Sprite.groups -list of Groups that contain this Sprite
Sprite类的解释:
The base class for visible game objects. Derived classes will want to
override the Sprite.update() and assign a Sprite.image and Sprite.rect
attributes. The initializer can accept any number of Group instances to be added
to.When subclassing the Sprite, be sure to call the base initializer before
adding the Sprite to Groups.
# -*- coding: utf-8 -*-
# @Author: Clarence
# @Date: 2018-03-09 08:18:46
# @Last Modified by: Clarence
# @Last Modified time: 2018-03-09 13:33:36
import pygame
import sys
from pygame.locals import *
from random import *
class Ball(pygame.sprite.Sprite):
def __init__(self, image, position, speed, bg_size):
# Call the parent class (Sprite) constructor
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(image).convert_alpha()
self.rect = self.image.get_rect()
#小球的位置
self.rect.left, self.rect.top = position
self.speed = speed
self.width, self.height = bg_size[0], bg_size[1]
'''
Pygame.Rect.move():
moves the rectangle
move(x, y) -> Rect
Returns a new rectangle that is moved by the given offset. The
x and y arguments can be any integer value, positive or
negative.
可以在Rect对象的move方法中添加可正可负的两元素
如果要实现小球的移动,则要在类中添加一个move()方法,并且在绘图的时候调用小球
对象的move()方法
'''
def move(self):
self.rect = self.rect.move(self.speed)
#类似实现贪吃蛇穿入墙壁从对面墙壁出来(左右方向)
if self.rect.right < 0:
self.rect.left = self.width
elif self.rect.left > self.width:
self.rect.right = 0
#(上下方向) 从下往上 和 从上往下
elif self.rect.bottom < 0:
self.rect.top = self.height
elif self.rect.top > self.height:
self.rect.bottom = 0
def main():
pygame.init()
ball_image = "gray_ball.png"
bg_image = "background.png"
running = True
bg_size = width, height = 1024, 681
screen = pygame.display.set_mode(bg_size)
pygame.display.set_caption("Play the Ball")
#.png格式可以加入apha通道
background = pygame.image.load(bg_image).convert_alpha()
balls = []
for i in range(5):
#球的尺寸是100*100 随机产生小球的位置
position = randint(0, width-100), randint(0, height-100)
#两个元素的一个列表,表示x轴和y轴方向的速度
speed = [randint(-10, 10), randint(-10, 10)]
#实例化小球对象 分别传入Surface对象 位置二元组 速度两元素列表
ball = Ball(ball_image, position, speed, bg_size)
balls.append(ball) #将小球加入到小球列表中
# CLock()对象用来设置小球的帧率
clock = pygame.time.Clock()
while running:
for event in pygame.event.get():
if event.type == QUIT:
sys.exit()
screen.blit(background, (0, 0))
for each in balls:
each.move()
screen.blit(each.image, each.rect)
pygame.display.flip() #将显示缓冲区中的数据刷入显示器中
clock.tick(30)
if __name__ == "__main__":
main()
下半节介绍碰撞检测和如何加入一些声音元素,并进一步完善界面
相关文章推荐
- Pygame从0实战11(泡泡小游戏完成)
- Pygame从0实战10(泡泡小游戏添加音效)
- 用Python和Pygame写游戏-从入门到精通(实战一:涂鸦画板1)
- 用Python和Pygame写游戏-从入门到精通(实战一:涂鸦画板2)
- 用Python和Pygame写游戏-从入门到精通(实战二:恶搞俄罗斯方块2)
- 用Python和Pygame写游戏-从入门到精通(实战二:恶搞俄罗斯方块1)
- 用Python和Pygame写游戏-从入门到精通(实战二:恶搞俄罗斯方块3)
- Pygame从0实战1
- 用Python和Pygame写游戏-从入门到精通(实战二:恶搞俄罗斯方块4)
- 用Python和Pygame写游戏-从入门到精通(实战一:涂鸦画板1)
- 用Python和Pygame写游戏-从入门到精通(实战三:植物大战僵尸1)
- 用Python和Pygame写游戏-从入门到精通(实战一:涂鸦画板2)
- Pygame从0实战6
- python实战游戏开发——安装pygame
- Pygame从0实战2
- Pygame从0实战5
- Pygame从0实战7
- 项目实战_Python.利用Pygame编写微信打飞机小游戏完整系列?
- python pygame实战《飞船大战外星人》
- Pygame从0实战4