博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[python] 小游戏 - play_plane
阅读量:5865 次
发布时间:2019-06-19

本文共 4412 字,大约阅读时间需要 14 分钟。

  GitHub:

 

  目前只做了第一部分:一个界面,有个飞机,可以左右移动,放子弹。

  暂无计划做第二部分。

 

  alien_invasion.py

import sysimport pygamefrom settings import Settingsfrom ship import Shipimport game_functions as gffrom pygame.sprite import Groupdef run_game():    # 初始化游戏并创建一个屏幕对象    pygame.init()    ai_settings = Settings()    screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screnn_height))    pygame.display.set_caption('Alien Invasion')    # 创建一艘飞船    ship = Ship(ai_settings, screen)    # 创建一个存储的子弹组    bullets = Group()    # 设置背景色    bg_color = (230, 230, 230)    # 开始游戏的主循环    while True:        gf.check_events(ai_settings, screen, ship, bullets)        ship.update()        gf.update_bullets(bullets)        gf.update_screen(ai_settings, screen, ship, bullets)run_game()

 

  bullet.py

import pygamefrom pygame.sprite import Spriteclass Bullet(Sprite):    def __init__(self, ai_settings, screen, ship):        super(Bullet, self).__init__()        self.screen = screen        self.rect = pygame.Rect(0, 0, ai_settings.bullet_width, ai_settings.bullet_height)        self.rect.centerx = ship.rect.centerx        self.rect.top = ship.rect.top        # 存储用小数表示的子弹位置        self.y = float(self.rect.y)        self.color = ai_settings.bullet_color        self.speed_factor = ai_settings.bullet_speed_factor    def update(self):        self.y -= self.speed_factor        # 更新子弹位置        self.rect.y = self.y    def draw_bullet(self):        pygame.draw.rect(self.screen, self.color, self.rect)

 

  game_functions

import sysimport pygamefrom bullet import Bulletdef check_events(ai_settings, screen, ship, bullets):    # 监听键盘和鼠标的事件    for event in pygame.event.get():        if event.type == pygame.QUIT:            sys.exit()        elif event.type == pygame.KEYDOWN:            check_keydown_events(event, ai_settings, screen, ship, bullets)        elif event.type == pygame.KEYUP:            check_keyup_events(event, ship)def update_screen(ai_settings, screen, ship, bullets):    # 每次循环时都重绘屏幕    screen.fill(ai_settings.bg_color)    # 在飞船和外星人后面重绘所有子弹    for bullet in bullets.sprites():        bullet.draw_bullet()    ship.blitme()    # 让最近绘制的屏幕可见    pygame.display.flip()def check_keydown_events(event, ai_settings, screen, ship, bullets):    if event.key == pygame.K_RIGHT:        ship.moving_right = True    elif event.key == pygame.K_LEFT:        ship.moving_left = True    elif event.key == pygame.K_SPACE:        # 创建一颗子弹,并将其加入到编组 bullets 中        fire_bullet(ai_settings, screen, ship, bullets)def check_keyup_events(event, ship):    if event.key == pygame.K_RIGHT:        ship.moving_right = False    elif event.key == pygame.K_LEFT:        ship.moving_left = Falsedef update_bullets(bullets):    bullets.update()    # 删除已经消失的子弹    for bullet in bullets.copy():        if bullet.rect.bottom <= 0:            bullets.remove(bullet)def fire_bullet(ai_settings, screen, ship, bullets):    if len(bullets) < ai_settings.bullets_allowed:        new_bullet = Bullet(ai_settings, screen, ship)        bullets.add(new_bullet)

  settings.py

class Settings():    def __init__(self):        # 屏幕设置        self.screen_width = 1200        self.screnn_height = 800        self.bg_color = (230, 230, 230)        self.ship_speed_factor = 1.5        # 子弹设置        self.bullet_speed_factor = 1        self.bullet_width = 3        self.bullet_height = 15        self.bullet_color = 60, 60, 60        self.bullets_allowed = 5

  ship.py

import pygameclass Ship():    def __init__(self, ai_settings, screen):        self.screen = screen        self.ai_settings = ai_settings        # 加载飞船图像并获取其外接矩形        self.image = pygame.image.load('images/ship.bmp')        self.rect = self.image.get_rect()        self.screen_rect = screen.get_rect()        # 将每艘新飞船放在屏幕底部中央        self.rect.centerx = self.screen_rect.centerx        self.rect.bottom = self.screen_rect.bottom        # 在飞船的属性 center 中存储小数值        self.center = float(self.rect.centerx)        # 移动标识        self.moving_right = False        self.moving_left = False    def blitme(self):        # 屏幕指定位置绘制飞船        self.screen.blit(self.image, self.rect)    def update(self):        if self.moving_right and self.rect.right < self.screen_rect.right:            self.center += self.ai_settings.ship_speed_factor        elif self.moving_left and self.rect.left > 0:            self.center -= self.ai_settings.ship_speed_factor        # 更新 rect 对象        self.rect.centerx = self.center

 

转载地址:http://bvynx.baihongyu.com/

你可能感兴趣的文章
html中css、div命名规范
查看>>
thickbox 关于动态生成 无法跳出弹出框的问题
查看>>
10大主流压力测试工具推荐(转载)
查看>>
sublime text3 FTP直接上传
查看>>
推荐 30 款最好的免费项目管理软件
查看>>
TortoiseGit学习系列之TortoiseGit是什么?
查看>>
Android 3.0 r1中文API文档(104) —— ViewTreeObserver
查看>>
在Winform开发框架中,利用DevExpress控件实现数据的快速录入和选择
查看>>
Android Studio Module疑问
查看>>
Linux、Windows中的相对路径和绝对路径
查看>>
虚拟机之The VMware Authorization Service is not running
查看>>
CS架构和BS架构的区别
查看>>
Codeforces 708A Letters Cyclic Shift
查看>>
Haproxy+Keepalived负载均衡
查看>>
Spark入门到精通视频学习资料--第六章:Machine Learning on Spark(1讲)
查看>>
Android 旋转字体 实现(应用角标,如:新,火等关键字)
查看>>
Android抽象布局——include、merge 、ViewStub
查看>>
2.5. mysqlcheck — A Table Maintenance and Repair Program
查看>>
openMP多线程编程
查看>>
173.2. Redmine 运行
查看>>