python飞机⼤战教程_Python⼊门项⽬_飞机⼤战
Python实现飞机⼤战的新⼿练习项⽬。
⽬前看了⼀个⽉左右的Python⼊门教程,推荐图灵教材《Python编程 - 从⼊门到实践》,看完基础的语法部分,可以开始做⼀些⼩项⽬的练⼿,进⼀步巩固基础知识。
飞机⼤战是⼀个有趣⽽⼜可以综合运⽤⼊门语法的项⽬。该项⽬⾮常能训练⼊门时的逻辑思维,对初级的语法有相对全⾯的运⽤。尤其是⾸次学习中遇到的“类”,对于⾃⼰这种编程新⼿来说⽐较抽象,该项⽬有很多类的使⽤,跟着教材进⾏编写,同时融⼊⾃⼰的创意,⼀个项⽬下来,能基本掌握类的使⽤。
现公布⾃⼰编写的源代码如下,与有兴趣学习的朋友共享。
模块⼀:主程序 ——综合调⽤各⼦模块
import pygame
from setting import Setting
from rocket import Rocket
import game_functions as gf
from pygame.sprite import Group
from game_stats import GameStats
from button import Button
from scoreboard import Scoreboard
def run_game():
# 初始化游戏并创建⼀个屏幕对象
pygame.init()
game_setting = Setting()
screen = pygame.display.set_mode((game_setting.width, game_setting.height))
pygame.display.set_caption("Developed by Hansen")
play_button = Button(screen, "PLAY GAME")
# 创建⼀艘⽕箭
rocket = Rocket(screen, game_setting)
# 创建存储⼦弹的编组
bullets = Group()
# 创建外星⼈
aliens = Group()
# 创建⼀个⽤于存储统计信息的实例, 并创建记分牌
stats = GameStats(game_setting)
sb = Scoreboard(game_setting, screen, stats)
# 开始游戏主循环
while True:
gf.check_events(rocket, game_setting, screen, bullets, stats, play_button, aliens, sb)
if stats.game_active:
rocket.update()
gf.update_bullet(rocket, bullets, aliens, stats, game_setting, sb)
gf.update_alien(aliens, rocket, stats, bullets, game_setting, screen,
sb)
# 设定创建⼀个alien的速率
stats.program_run += 1
if stats.program_run % game_setting.alien_generate == 0:
gf.update_screen(screen, game_setting, rocket, bullets, aliens, stats,
play_button, sb)
run_game()
模块⼆:创建可以⾃由移动的飞船类(程序中命名为Rocket)
import pygame
from pygame.sprite import Sprite
class Rocket(Sprite):
def __init__(self, screen, game_setting):
"""初始化飞船"""
super().__init__()
self.screen = screen
self.game_setting = game_setting
# 加载⽕箭图⽚并获得外接矩形
self.image = pygame.image.load('images/rocket.png')
< = _rect()
self.screen_rect = _rect()
# 将⽕箭放在屏幕底部
# 移动判别标志
# 在⽕箭的属性center中存储⼩数值
< = enterx)
# 在⽕箭的属性bottom中存储⼩数值
self.bottom = bottom)
def update(self):
# 控制左右移动并限制移动边界
ving_right ight < self.screen_rect.right: += self.ket_speed
ving_left left > 0:
< -= self.ket_speed
# 控制上下移动并限制移动边界
ving_up op > 0:
self.bottom -= self.ket_speed
ving_down bottom < self.screen_rect.bottom: self.bottom += self.ket_speed
# 根据更新rect对象
# 根据self.middle更新rect对象
def blitme(self):
self.screen.blit(self.image, )
def set_center(self):
"""让飞船在屏幕上居中"""
< = self.x
self.bottom = self.screen_rect.bottom
模块三:创建准备从飞船发射的⼦弹类
import pygame
from pygame.sprite import Sprite
class Bullet(Sprite):
def __init__(self, game_setting, rocket, screen):
super().__init__()
self.screen = screen
# 在(0,0)位置创建表⽰⼦弹的矩形,并设置其位置到⽕箭发射处
< = pygame.Rect(0, 0, game_setting.bullet_width,
game_setting.bullet_height)
# 加载⼦弹颜⾊和速度参数
self.speed = game_setting.bullet_speed
# 在⼦弹的Y轴⽅向设置浮点型存储值,可以更精准移动
self.Y = op)
# 管理⼦弹的位置
def update(self):
self.Y -= self.speed
# 更新⼦弹在Y⽅向的位置
# 在屏幕中画出⼦弹
def draw_bullet(self):
(self.screen, lor, )
模块四:创建随机从屏幕上出现的外星飞船类
import pygame
from pygame.sprite import Sprite
class Alien(Sprite):
def __init__(self, rocket, game_setting, screen, stats):
super().__init__()
self.screen = screen
self.game_setting = game_setting
self.stats = stats
# 加载Alien图⽚并获得外接矩形
self.image = pygame.image.load('images/alien.png')
< = _rect()
# 加载alien移动速度
self.speed = game_setting.alien_speed
# 绘制alien, 让其在⽔平轴线上随机出现,与画⾯上边框距离为⽕箭的⾼度 = width
< = 50
self.x = )
self.y = )
def update(self):
# 更新alien在Y轴的位置
self.y += self.speed * \
pow(self.game_setting.speedup_scale, (self.stats.game_level - 1)) = self.y
def blitme(self):
# 在指定位置绘制alien
self.screen.blit(self.image, )
模块五:创建游戏开始和结束时出现在屏幕的启动按钮
python新建项目教程import pygame.ftfont
class Button():
def __init__(self, screen, msg):
"""初始化按钮属性"""
self.screen = screen
self.screen_rect = _rect()
# 设置按钮的属性
self.width, self.height = 220, 50
self.button_color = (65, 65, 65)
<_color = (255, 255, 255)
self.font = pygame.font.SysFont(None, 48)
# 创建按钮并在屏幕居中
< = pygame.Rect(0, 0, self.width, self.height)
# 按钮标签只需创建⼀次
self.prep_msg(msg)
def prep_msg(self, msg):
"""将msg渲染为图像,并使其在按钮上居中"""
self.msg_image = der(msg, True, _color, self.button_color)
self.msg_image_rect = self._rect()
self.msg_ =
def draw_button(self):

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。