Python编程从入门到实践 12-5侧面射击

第一步:首先创建一个文件夹,任意命名,便于多个文件放在里面。在刚创建的文件夹中在创建一个文件夹命名为images,将飞船的图片放在里面。

第二步:编写各大模块:主模块(运行游戏所用),设置对象模块(游戏中的相关参数),飞船对象模块(对象含有飞船的各种属性),子弹对象模块(含有飞船的各大模块),游戏功能模块(实现飞船和子弹的移动等等)。

注意:如果代码不能正常运行,将文件的编码改成uicode UTF-8在设置里设置

Geany设置方式为下

主模块

import sys #导入sys模块,sys模块包含了与Python解释器和它的环境有关的函数。
import pygame#导入pygame模块
from bullet import Bullet#导入子弹类
def check_events(ai_settings,screen,ship,bullets):#监控键盘和鼠标事件的函数
	for event in pygame.event.get():#不断地从队列中获取事件
		if event.type  == pygame.QUIT:#如果事件类型是鼠标点x(右上角),则游戏退出,如果没有这句话,则鼠标点击右上角的关闭无任何反应
			sys.exit()
		elif event.type == pygame.KEYDOWN:#当检测到的事件是一个键盘被按下去时
			if event.key == pygame.K_UP:
				ship.moving_up = True
			elif event.key == pygame.K_DOWN:
				ship.moving_down = True 
			elif event.key == pygame.K_SPACE:
				if len(bullets) <ai_settings.bullets_allowed:#如果子弹数量小于限制数量,增加子弹到bullets列表
					new_bullet = Bullet(ai_settings,screen,ship)#创建子弹
					bullets.add(new_bullet)#向列表中添加元素
		elif event.type == pygame.KEYUP:#当检测的事件是键盘没有按的
			if event.key == pygame.K_UP:
				ship.moving_up = False
			elif event.key == pygame.K_DOWN:
				ship.moving_down = False
#每当用户按键时,都将在pygame中注册一个事件,事件通过pygame的函数pygame.event.get()来获取
#每次按键后,将在pygame注册一个KEYDOWN事件
def update_screen(settings,screen,ship,bullets):#定义画图函数
	screen.fill(settings.bg_color)#填充背景色额
	for bullet in bullets.sprites():
		bullet.draw_bullet()#画子弹,列表有多少个子弹就画多少次
	ship.blitme()#画出小飞船
	pygame.display.flip()#更新整个带显示的surface对象到屏幕上
#pygame.display:pygame用于控制窗口和屏幕显示的模块
#pygame.display.flip():更新待显示的Surface对象到屏幕上
def update_bullets(bullets,ship):#当子弹到达屏幕右侧时删除子弹
	bullets.update()#子弹信息更新
	for bullet in bullets:
		if bullet.rect.right > ship.screen_rect.right:
			bullets.remove(bullet)#从列表中删除元素
#######################
#如有疑问联系QQ18087576#
######################

 

设置对象模块

#文件名称为setting.py
import pygame#导入pygame模块
class Settings():#定义设置类,在python中首字母大写的名称是类,这个类定义中是空的,表示我们要从空白创建这个类
	def __init__(self):#python调用__init__()方法创建Settings()实例
		self.screen_width = 888#屏幕的宽度所占像素大小
		self.screen_height = 666#屏幕的高度所占像素大小
		self.bg_color = (230,233,32)#屏幕的背景颜色组合
		self.ship_speed_factor = 1.5#单位事件内飞船的移动像素
		self.bullet_speed_factor = 1#单位事件内子弹的移动像素
		self.bullet_width  = 3#子弹的宽度
		self.bullet_height = 8#子弹的高度
		self.bullet_bg_color = 11,33,44#子弹的背景色
		self.bullets_allowed = 10#限制子弹的数量为10颗
#######################
#如有疑问联系QQ18087576#
######################

 飞船对象模块

import pygame#导入pygame模块
from setting import Settings
class Ship():#定义飞船类,类有很多属性
	def __init__(self,settings,screen):#特殊的方法,与两条__与其他方法便于区别,self相当于宗法制的皇帝,settings,screen是大臣级别相同
		self.image = pygame.image.load('images/ship.bmp')#载入图片,images是文件夹名,ship.bmp是文件名称
		self.screen = screen#属性的参数为值传递
		self.settings = settings
		self.rect = self.image.get_rect()#获取船的外接矩形
		self.screen_rect = screen.get_rect()#获取游戏窗口的外接矩形
		self.rect.centery = self.screen_rect.centery#将对象放在屏幕中间竖直方向上
		self.moving_up = False#创建标志,当满足条件为真,便于飞船的移动
		self.moving_down = False
		
	def blitme(self):#定义绘出飞船的函数
		self.screen.blit(self.image,self.rect)#在指定位置画出飞船
	def update(self,settings):#定义飞船的位置更新函数
		if self.moving_up and self.rect.centery > 0 :#纵坐标大于0,限制出窗口
			self.rect.centery -= settings.ship_speed_factor
		if self.moving_down and self.rect.centery <self.screen_rect.bottom:
			self.rect.centery += settings.ship_speed_factor
#,Pygame是跨平台Python模块,专为电子游戏设计,
#包含图像、声音。建立在SDL基础上,允许实时电子游戏
#研发而无需被低级语言(如机器语言和汇编语言)束缚。
#######################
#如有疑问联系QQ18087576#
######################

子弹对象模块

import pygame#导入pygame
from pygame.sprite import Sprite#从pygame.sprite模块中导入Sprite(精灵)类
#详细了解网址www.pygame.org/docs/ref/sprite.html#pygame.sprite.Sprite
class Bullet(Sprite):#继承精灵类
    """docstring for Bullets"""
    def __init__(self,settings, screen, ship):
        super(Bullet, self).__init__()#子类继承父类Python2.7的旧式用法,Python3以上为super().__init__()
        self.screen = screen#绘制子弹所在的底图,将子弹画在背景
        self.rect = pygame.Rect(0, 0, settings.bullet_width, settings.bullet_height)#子弹的外接矩形设置
        self.rect.centery = ship.rect.centery#子弹的纵坐标为飞船的纵坐标,这样才能让子弹看成是飞船发射的
        self.rect.right = ship.rect.right#子弹的外接矩形最右边
        self.x = float(self.rect.x)# 存储小数表示的子弹位置
        self.color = settings.bullet_bg_color#设置子弹的颜色
        self.speed_factor = settings.bullet_speed_factor#单位时间内子弹移动的像素大小
    def update(self):#更新子弹位置的函数
        self.x += self.speed_factor#子弹发射后,纵坐标不变,横坐标增加
        self.rect.x = self.x
    def draw_bullet(self):#将子弹的图像画出来
        pygame.draw.rect(self.screen, self.color, self.rect)#在Surface(背景图)对象上绘制一个矩形,形式参数为Surface对象,子弹的颜色,子弹的矩形
'''pygame'''        
###########################################################
#pygame是跨平台Python模块,专为电子游戏设计,包含声音,图像。建  #
#立在SDL的基础上,允许实时电子游戏研发无需被低级语言(例如:机器语  #
#言和汇编语言)束缚                                         #
###########################################################
#Pygame is a cross-platform set of Python modules designed#
# for writing video games. It includes computer graphics  #
#and sound libraries designed to be used with the Python  #
#programming language.                                    #
###########################################################
'''SDL'''
###########################################################
#SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体  #
#开发库,使用C语言写成.,SDL提供了数种控制图像,声音,输出入的函数, #
#让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux,  #
#Windows,Mac OS X等)的应用软件。目前SDL多用于开发游戏,模拟器  #
#,媒体播放器等多媒体应用领域,                                #
###########################################################
#精灵可以认为成是一个个小图片,一种可以在屏幕上移动的图形对象,并 #
#且可以与其他图形对象交互。精灵图像可以是使用pygame绘制函数绘制的#
#图像,也可以是原来就有的图像文件。                           #  
###########################################################
#######################
#如有疑问联系QQ18087576#
######################

 游戏功能模块

 

 

import sys #导入sys模块,sys模块包含了与Python解释器和它的环境有关的函数。
import pygame#导入pygame模块
from bullet import Bullet#导入子弹类
def check_events(ai_settings,screen,ship,bullets):#监控键盘和鼠标事件的函数
	for event in pygame.event.get():#不断地从队列中获取事件
		if event.type  == pygame.QUIT:#如果事件类型是鼠标点x(右上角),则游戏退出,如果没有这句话,则鼠标点击右上角的关闭无任何反应
			sys.exit()
		elif event.type == pygame.KEYDOWN:#当检测到的事件是一个键盘被按下去时
			if event.key == pygame.K_UP:
				ship.moving_up = True
			elif event.key == pygame.K_DOWN:
				ship.moving_down = True 
			elif event.key == pygame.K_SPACE:
				if len(bullets) <ai_settings.bullets_allowed:#如果子弹数量小于限制数量,增加子弹到bullets列表
					new_bullet = Bullet(ai_settings,screen,ship)#创建子弹
					bullets.add(new_bullet)#向列表中添加元素
		elif event.type == pygame.KEYUP:#当检测的事件是键盘没有按的
			if event.key == pygame.K_UP:
				ship.moving_up = False
			elif event.key == pygame.K_DOWN:
				ship.moving_down = False
#每当用户按键时,都将在pygame中注册一个事件,事件通过pygame的函数pygame.event.get()来获取
#每次按键后,将在pygame注册一个KEYDOWN事件
def update_screen(settings,screen,ship,bullets):#定义画图函数
	screen.fill(settings.bg_color)#填充背景色额
	for bullet in bullets.sprites():
		bullet.draw_bullet()#画子弹,列表有多少个子弹就画多少次
	ship.blitme()#画出小飞船
	pygame.display.flip()#更新整个带显示的surface对象到屏幕上
#pygame.display:pygame用于控制窗口和屏幕显示的模块
#pygame.display.flip():更新待显示的Surface对象到屏幕上
def update_bullets(bullets,ship):#当子弹到达屏幕右侧时删除子弹
	bullets.update()#子弹信息更新
	for bullet in bullets:
		if bullet.rect.right > ship.screen_rect.right:
			bullets.remove(bullet)#从列表中删除元素
#######################
#如有疑问联系QQ18087576#
######################

运行即可

©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值