python 发射子弹
2018-01-23 00:00
387 查看
摘要: 飞船能上下移动,能够发射子弹,以及处理消失的子弹
ship.py主文件
`# -- coding:utf-8 --
import pygame
from settings_test import Settings_test
from ship_test import Ship_Test
import game_test as gt
from pygame.sprite import Group
def run_game():
run_game()
`
设置文件
子弹文件
简化主文件的函数文件
飞船文件
ship.py主文件
`# -- coding:utf-8 --
import pygame
from settings_test import Settings_test
from ship_test import Ship_Test
import game_test as gt
from pygame.sprite import Group
def run_game():
pygame.init() setscreen = Settings_test() screen = pygame.display.set_mode((setscreen.screen_width,setscreen.screen_height)) pygame.display.set_caption('Blues Screen') #新建飞船 xing = Ship_Test(setscreen,screen) #存放子弹的编组 bullets = Group() while True: gt.check_events(setscreen,screen,xing,bullets) xing.update() gt.update_bullets(setscreen,bullets) gt.update_screen(setscreen,screen,xing,bullets)
run_game()
`
设置文件
# -*- coding:utf-8 -*- class Settings_test(): def __init__(self): self.screen_width = 500 self.screen_height = 500 self.bg_color = (220, 220, 220) self.bg_color_white = (255, 255, 255) self.ship_speed_factor = 1.5 # 子弹设置【单位是像素】 self.bullet_speed_factor = 1 self.bullet_width = 15 self.bullet_height = 3 self.bullet_color = 60, 60, 60 self.bullet_allowed = 10
子弹文件
# -*- coding:utf-8 -*- import pygame from pygame.sprite import Sprite class Bullet2(Sprite): '''对飞船发射的子弹管理类''' def __init__(self,setscreen,screen,xing): '''在飞船的位置上创建一个子弹对象''' super().__init__() self.screen = screen #在(0.0)坐标处创建一个子弹的矩形,之后在调整位置 self.rect = pygame.Rect(0,0,setscreen.bullet_width,setscreen.bullet_height) #子弹不是图像,需要使用pygame的rect画一个矩形 self.rect.centery = xing.rect.centery self.rect.right = xing.rect.right #存储用小数表示的子弹位置 self.x = float(self.rect.x) self.color = setscreen.bullet_color self.speed_factor = setscreen.bullet_speed_factor def update(self): '''向右移动子弹''' #更新表示子弹位置的小数 self.x += self.speed_factor #更新表示子弹rect的位置 self.rect.x = self.x def draw_bullet(self): '''在屏幕上绘制子弹''' pygame.draw.rect(self.screen,self.color,self.rect)
简化主文件的函数文件
# -*- coding:utf-8 -*- import sys,pygame from bullet2 import Bullet2 def check_keydown_events(event,setscreen,screen,xing,bullets): if event.key == pygame.K_RIGHT: xing.moving_right = True elif event.key == pygame.K_LEFT: xing.moving_left = True elif event.key == pygame.K_DOWN: xing.moving_down = True elif event.key == pygame.K_UP: xing.moving_up = True elif event.key == pygame.K_SPACE: fire(setscreen,screen,xing,bullets) elif event.key == pygame.K_q: sys.exit() def check_keyup_events(event,xing): if event.key == pygame.K_RIGHT: xing.moving_right = False elif event.key == pygame.K_LEFT: xing.moving_left = False elif event.key == pygame.K_DOWN: xing.moving_down = False elif event.key == pygame.K_UP: xing.moving_up = False def check_events(setscreen,screen,xing,bullets): '''监控鼠标和键盘事件''' for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() elif event.type == pygame.KEYDOWN: check_keydown_events(event,setscreen,screen,xing,bullets) elif event.type == pygame.KEYUP: check_keyup_events(event,xing) def update_screen(setscreen,screen,xing,bullets): '''更新屏幕图像,显示新屏幕图像''' # 每次循环都重新绘制屏幕 screen.fill(setscreen.bg_color) #屏幕填充颜色 #显示飞船 xing.blitme() #显示子弹 for bullet i 3ff0 n bullets.sprites(): bullet.draw_bullet() # 让最新绘制的屏幕可见 pygame.display.flip() def update_bullets(setscreen,bullets): #更新子弹的位置 bullets.update() # 删除消失在屏幕的子弹 for bullet in bullets.copy(): #从子弹编组的副本中操作 if bullet.rect.right >= setscreen.screen_width: bullets.remove(bullet) # print(len(bullets)) def fire(setscreen,screen,xing,bullets): #子弹数量没有达到限制时,创建子弹并添加到编组中 if len(bullets) < setscreen.bullet_allowed: new_bullet = Bullet2(setscreen, screen, xing) bullets.add(new_bullet)
飞船文件
# -*- coding:utf-8 -*- import pygame class Ship_Test(): def __init__(self,setscreen,screen): '''加载图片并获取属性信息''' self.screen = screen self.image = pygame.image.load('images/test.bmp') self.rect = self.image.get_rect() self.screen_rect = self.screen.get_rect() #火箭放置屏幕最左边y轴中间 self.rect.centery = self.screen_rect.centery self.rect.left = self.screen_rect.left #上下方向的移动标志 self.moving_down = False self.moving_up = False self.setscreen = setscreen self.center = float(self.rect.centery) def update(self): '''更新上下移动的位置''' if self.moving_down and self.rect.bottom < self.screen_rect.bottom: self.center += self.setscreen.ship_speed_factor elif self.moving_up and self.rect.top > self.screen_rect.top: self.center -= self.setscreen.ship_speed_factor self.rect.centery = self.center def blitme(self): '''屏幕显示''' self.screen.blit(self.image,self.rect)
相关文章推荐
- Python案例:飞船向右发射子弹
- Python游戏系列之四_发射子弹
- Android基于box2d开发弹弓类游戏[五]-------------发射子弹
- 【Unity】关于发射子弹、导弹追踪的逻辑(笔记)
- swing 飞机大战 三 自己飞机的移动和发射子弹
- Unity2D - 5. 向鼠标点击处发射子弹
- Unity3D学习之飞机发射子弹。
- U3D 实现子弹发射效果
- Cocos2d-x《雷电大战》(3)-子弹无限发射
- Cocos2d-x《雷电大战》(3)-子弹无限发射
- cocos2d-x入门(4)-英雄发射子弹和碰撞检测
- 坦克大战_我方坦克发射子弹
- cocos2d-x发射子弹
- 使用对象池(ObjectPool)方式处理子弹的发射逻辑
- Cocos2d-x--发射多发子弹
- 跳跃的实现(发射子弹)
- Unity 发射子弹+弹药减少计数功能
- 利用a、s、w、d来控制移动 按下空格会发射子弹 最简单的语法用心编写也会有好的程序
- unity学习之子弹发射
- UE4蓝图发射子弹