Python开发微信打飞机游戏续

# -*- coding: utf-8 -*-
# @Author: Clarence
# @Date:   2018-03-19 23:45:29
# @Last Modified by:   Clarence
# @Last Modified time: 2018-03-21 21:33:48
"""
常用键盘事件的检响应有两种方法:
1.通过键盘事件的检测,执行相应的代码
2.pygame.key.get_pressed() 返回一个包含键盘上所有按键Bool类型值的序列
	Returns a sequence of boolean values representing the state of 
the every key on the keyboard. Use the key constant values to index 
the array.A True value means the that button is pressed.
建议对于偶然触发的事件用第一种方法,频繁触发的键盘事件使用第二种方法
控制飞机方向使用第二种方法
"""
import pygame

class MyPlane(pygame.sprite.Sprite):
	def __init__(self, bg_size):
		pygame.sprite.Sprite.__init__(self)
		#不断切换飞机的两张图片会产生喷气效果
		self.image1 = pygame.image.load("images/me1.png").convert_alpha()
		self.image2 = pygame.image.load("images/me2.png").convert_alpha()
		# 将受到撞击的图片Surface对象放入到列表中
		self.destroy_images = []
		self.destroy_images.extend([\
			pygame.image.load("images/me_destroy_1.png").convert_alpha(),\
			pygame.image.load("images/me_destroy_2.png").convert_alpha(),\
			pygame.image.load("images/me_destroy_3.png").convert_alpha(),\
			pygame.image.load("images/me_destroy_4.png").convert_alpha()\
			])

		self.rect  = self.image1.get_rect()
		self.width, self.height = bg_size[0], bg_size[1]
		#飞机的起始位置在屏幕的下方中央位置 距离底部状态栏大约60像素位置
		self.rect.left, self.rect.top=\
		(self.width - self.rect.width) // 2,\
		(self.height - self.rect.height - 60)

		self.speed = 10
		self.active = True
		self.invincible = False
		#将传进来的Surface对象中的非透明部分设置为mask 飞机边缘之外矩形之内的都是透明部分
		self.mask = pygame.mask.from_surface(self.image1)

	#定义四个方法描述飞机的上下左右移动
	def moveUp(self):
		if self.rect.top > 0:
			self.rect.top -= self.speed
		else:
			self.rect.top = 0

	def moveDown(self):
		if self.rect.bottom < self.height -60:
			self.rect.top += self.speed
		else:
			self.rect.bottom = self.height - 60

	def moveLeft(self):
		if self.rect.left > 0:
			self.rect.left -= self.speed
		else:
			self.rect.left = 0

	def moveRight(self):
		if self.rect.right < self.width:
			self.rect.left += self.speed
		else:
			self.rect.right = self.width

	def reset(self):	
		self.rect.left, self.rect.top = \
		(self.width - self.rect.width) // 2,\
		(self.height - self.rect.height - 60)

		self.active = True
		# 无敌状态只有三秒钟的时间
		self.invincible = True


myplane模块中只需要定义我方飞机类就可以了,共有五个方法,赋予了飞机上下左右飞行的功能,同时也可以让飞机

从新初始化

下面是supply补给模块

# -*- coding: utf-8 -*-
# @Author: Clarence
# @Date:   2018-03-19 23:46:02
# @Last Modified by:   Clarence
# @Last Modified time: 2018-03-21 21:33:52
"""
补给初始化的时候在界面上方100个像素的时候掉落
"""
import  pygame
from random import *

class Bullet_Supply(pygame.sprite.Sprite):
	def __init__(self, bg_size):
		pygame.sprite.Sprite.__init__(self)

		self.image = pygame.image.load("images/bullet_supply.png").convert_alpha()
		self.rect = self.image.get_rect()
		self.width, self.height = bg_size[0], bg_size[1]
		self.rect.left, self.rect.bottom = \
		randint(0, self.width - self.rect.width), -100

		self.speed = 5
		self.active = False
		self.mask = pygame.mask.from_surface(self.image)


	def move(self):
		if self.rect.top < self.height:
			self.rect.top += self.speed
		else:
			self.active = False

	def reset(self):
		self.active = True
		self.rect.left, self.rect.bottom = \
	randint(0, self.width - self.rect.width), -100


class Bomb_Supply(pygame.sprite.Sprite):
	def __init__(self, bg_size):
		pygame.sprite.Sprite.__init__(self)

		self.image = pygame.image.load("images/bomb_supply.png").convert_alpha()
		self.rect = self.image.get_rect()
		self.width, self.height = bg_size[0], bg_size[1]
		self.rect.left, self.rect.bottom = \
		randint(0, self.width - self.rect.width), -100

		self.speed = 5
		self.active = False
		self.mask = pygame.mask.from_surface(self.image)


	def move(self):
		if self.rect.top < self.height:
			self.rect.top += self.speed
		else:
			self.active = False

	def reset(self):
		self.active = True
		self.rect.left, self.rect.bottom = \
	randint(0, self.width - self.rect.width), -100


接下来是bullet子弹模块,子弹类共有两种,一种普通黄色子弹,另一种蓝色超级子弹

# -*- coding: utf-8 -*-
# @Author: Clarence
# @Date:   2018-03-19 23:45:49
# @Last Modified by:   Clarence
# @Last Modified time: 2018-03-21 11:02:53
import pygame

class Bullet1(pygame.sprite.Sprite):
	def __init__(self, position):
		pygame.sprite.Sprite.__init__(self)

		self.image = pygame.image.load("images/bullet1.png").convert_alpha()
		self.rect = self.image.get_rect()
		self.rect.left, self.rect.top = position 
		self.speed = 12
		self.active = True
		self.mask = pygame.mask.from_surface(self.image)

	def move(self):
		self.rect.top -= self.speed 

		if self.rect.top < 0:
			self.active = False

	def reset(self, position):
		self.rect.left, self.rect.top = position
		self.active = True

class Bullet2(pygame.sprite.Sprite):
	def __init__(self, position):
		pygame.sprite.Sprite.__init__(self)

		self.image = pygame.image.load("images/bullet2.png").convert_alpha()
		self.rect = self.image.get_rect()
		self.rect.left, self.rect.top = position 
		self.speed = 12
		self.active = False
		self.mask = pygame.mask.from_surface(self.image)

	def move(self):
		self.rect.top -= self.speed 

		if self.rect.top < 0:
			self.active = False

	def reset(self, position):
		self.rect.left, self.rect.top = position
		self.active = True

敌机模块中,总共有大中小三个敌机类

# -*- coding: utf-8 -*-
# @Author: Clarence
# @Date:   2018-03-19 23:34:54
# @Last Modified by:   Clarence
# @Last Modified time: 2018-03-21 21:33:40
"""
敌机只能向下移动 移出屏幕后重新生成位置
"""
import pygame 
from random import *

class SmallEnemy(pygame.sprite.Sprite):
	def __init__(self, bg_size):
		pygame.sprite.Sprite.__init__(self)

		self.image = pygame.image.load("images/enemy1.png").convert_alpha()
		self.destroy_images = []
		self.destroy_images.extend([\
			pygame.image.load("images/enemy1_down1.png").convert_alpha(),\
			pygame.image.load("images/enemy1_down2.png").convert_alpha(),\
			pygame.image.load("images/enemy1_down3.png").convert_alpha(),\
			pygame.image.load("images/enemy1_down4.png").convert_alpha()\
			])
		self.rect = self.image.get_rect()
		self.width, self.height = bg_size[0], bg_size[1]
		# active属性表示敌机的存活状态,True绘制正常画面,False绘制毁灭画面
		self.active = True
		self.speed = 2
		self.rect.left, self.rect.top = \
		randint(0, self.width -self.rect.width), \
		randint(-5 * self.height, 0)
		self.mask = pygame.mask.from_surface(self.image)

	def move(self):
		if self.rect.top < self.height:
			self.rect.top += self.speed
		else:
			self.reset()

	def reset(self):
		self.active = True
		self.rect.left, self.rect.top = \
		randint(0, self.width -self.rect.width), \
		randint(-5 * self.height, 0)


class MidEnemy(pygame.sprite.Sprite):
	energy = 8 #energy是类变量,可以由类名直接调用,也可以用对象来调用
	def __init__(self, bg_size):
		pygame.sprite.Sprite.__init__(self)

		self.image = pygame.image.load("images/enemy2.png").convert_alpha()
		self.image_hit = pygame.image.load("images/enemy2_hit.png").convert_alpha()
		self.destroy_images = []
		self.destroy_images.extend([\
			pygame.image.load("images/enemy2_down1.png").convert_alpha(),\
			pygame.image.load("images/enemy2_down2.png").convert_alpha(),\
			pygame.image.load("images/enemy2_down3.png").convert_alpha(),\
			pygame.image.load("images/enemy2_down4.png").convert_alpha()\
			])
		self.rect = self.image.get_rect()
		self.width, self.height = bg_size[0], bg_size[1]
		# active属性表示敌机的存活状态,True绘制正常画面,False绘制毁灭画面
		self.active = True
		self.speed = 1
		self.rect.left, self.rect.top = \
		randint(0, self.width -self.rect.width), \
		randint(-10 * self.height, -self.height)
		self.mask = pygame.mask.from_surface(self.image)
		self.energy = MidEnemy.energy
		# hit属性表示是否被击中,检测这个属性来切换到击中的图片
		self.hit = False

	def move(self):
		if self.rect.top < self.height:
			self.rect.top += self.speed
		else:
			self.reset()

	def reset(self):
		self.active = True
		self.energy = MidEnemy.energy
		self.rect.left, self.rect.top = \
		randint(0, self.width -self.rect.width), \
		randint(-10 * self.height, -self.height)


class BigEnemy(pygame.sprite.Sprite):
	energy = 20
	def __init__(self, bg_size):
		pygame.sprite.Sprite.__init__(self)

		self.image1 = pygame.image.load("images/enemy3_n1.png").convert_alpha()
		self.image2 = pygame.image.load("images/enemy3_n2.png").convert_alpha()
		#飞机被打中的图片特效
		self.image_hit = pygame.image.load("images/enemy3_hit.png").convert_alpha()
		self.destroy_images = []
		self.destroy_images.extend([\
			pygame.image.load("images/enemy3_down1.png").convert_alpha(),\
			pygame.image.load("images/enemy3_down2.png").convert_alpha(),\
			pygame.image.load("images/enemy3_down3.png").convert_alpha(),\
			pygame.image.load("images/enemy3_down4.png").convert_alpha(),\
			pygame.image.load("images/enemy3_down5.png").convert_alpha(),\
			pygame.image.load("images/enemy3_down6.png").convert_alpha()\
			])
		self.rect = self.image1.get_rect()
		self.width, self.height = bg_size[0], bg_size[1]
		self.speed = 1
		# active属性表示敌机的存活状态,True绘制正常画面,False绘制毁灭画面
		self.active = True
		self.rect.left, self.rect.top = \
		randint(0, self.width -self.rect.width), \
		randint(-15 * self.height, -5 * self.height)
		self.mask = pygame.mask.from_surface(self.image1)
		self.energy = BigEnemy.energy
		self.hit = False

	def move(self):
		if self.rect.top < self.height:
			self.rect.top += self.speed
		else:
			self.reset()

	def reset(self):
		self.active = True
		self.energy = BigEnemy.energy
		self.rect.left, self.rect.top = \
		randint(0, self.width -self.rect.width), \
		randint(-15 * self.height, -5 * self.height)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

youaresherlock

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值