alien_invasion:

import pygame
import sys
from time import sleep
from settings import Settings
from game_stats import GameStats
from ship import Ship
from bullet import Bullet
from alien import Alienclass AlienInvasion:#管理游戏资源和行为的类def __init__(self):pygame.init()   #初始化游戏并创建游戏资源self.settings = Settings()self.screen = pygame.display.set_mode((0,0),pygame.FULLSCREEN)self.settings.screen_width = self.screen.get_rect().widthself.settings.screen_height = self.screen.get_rect().height#self.screen = pygame.display.set_mode((self.settings.screen_width,self.settings.screen_height))#利用settings类进行设置游戏窗口pygame.display.set_caption("Alien Invasion")    #set_caption设置窗口的标题self.stats = GameStats(self)self.ship = Ship(self)self.bullet = pygame.sprite.Group()self.alien = pygame.sprite.Group()self._create_fleet()def run_game(self):while True:     #控制游戏的循环self._check_events()if self.stats.game_active:self.ship.update()self._update_bullets()self._update_aliens()self._update_screen()def _update_aliens(self):self._check_fleet_edges()self.alien.update()if pygame.sprite.spritecollideany(self.ship,self.alien):self._ship_hit()self._check_aliens_bottom()def _ship_hit(self):if self.stats.ship_left > 0:self.stats.ship_left -= 1self.alien.empty()self.bullet.empty()self._create_fleet()self.ship.center_ship()sleep(0.5)else:self.stats.game_active = Falsedef _create_fleet(self):alien = Alien(self)alien_width,alien_height = alien.rect.sizeavailable_space_x = self.settings.screen_width - (2 * alien_width)number_aliens_x = available_space_x // (2 * alien_width)ship_height = self.ship.rect.heightavailable_space_y = (self.settings.screen_height - (3 * alien_height) - ship_height)number_rows = available_space_y // (2 * alien_height)for row_number in range(number_rows):for alien_number in range(number_aliens_x):self._create_alien(alien_number,row_number)def _create_alien(self,alien_number,row_number):alien = Alien(self)alien_width,alien_height = alien.rect.sizealien.x = alien_width + 2 * alien_width * alien_numberalien.rect.x = alien.xalien.rect.y = alien.rect.height + 2 * alien.rect.height * row_numberself.alien.add(alien)def _check_fleet_edges(self):for alien in self.alien.sprites():if alien.check_edges():self._change_fleet_direction()breakdef _change_fleet_direction(self):for alien in self.alien.sprites():alien.rect.y += self.settings.fleet_drop_speedself.settings.fleet_direction *= -1def _check_events(self):for event in pygame.event.get():  # 监视键盘和鼠标事件if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.KEYDOWN:self._check_keydown_events(event)elif event.type == pygame.KEYUP:self._check_keyup_events(event)def _check_aliens_bottom(self):screen_rect = self.screen.get_rect()for alien in self.alien.sprites():if alien.rect.bottom >= screen_rect.bottom:self._ship_hit()breakdef _check_keydown_events(self,event):if event.key == pygame.K_RIGHT:self.ship.moving_right = Trueelif event.key == pygame.K_LEFT:self.ship.moving_left = Trueelif event.key == pygame.K_q:   #游戏中按Q退出sys.exit()elif event.key == pygame.K_SPACE:self._fire_bullet()def _check_keyup_events(self,event):if event.key == pygame.K_RIGHT:self.ship.moving_right = Falseelif event.key == pygame.K_LEFT:self.ship.moving_left = Falsedef _fire_bullet(self):if len(self.bullet) < self.settings.bullet_allowed:new_bullet = Bullet(self)self.bullet.add(new_bullet)def _update_bullets(self):self.bullet.update()for bullet in self.bullet.copy():if bullet.rect.bottom <= 0:self.bullet.remove(bullet)self._check_bullet_alien_collisions()def _check_bullet_alien_collisions(self):collections = pygame.sprite.groupcollide(self.bullet,self.alien,True,True)if not self.alien:self.bullet.empty()self._create_fleet()def _update_screen(self):self.screen.fill(self.settings.bg_color)  # 每次循环时都重绘屏幕self.ship.blitme()for bullet in self.bullet.sprites():bullet.draw_bullet()self.alien.draw(self.screen)pygame.display.flip()   #更新surface对象if __name__ == '__main__':ai = AlienInvasion()ai.run_game()

game_stats:

class GameStats:def __init__(self,ai_game):self.settings = ai_game.settingsself.reset_stats()self.game_active = Truedef reset_stats(self):self.ship_left = self.settings.ship_limit

alien:

import pygame
from pygame.sprite import Spriteclass Alien(Sprite):def __init__(self,ai_game):super().__init__()self.screen = ai_game.screenself.settings = ai_game.settingsself.image = pygame.image.load('images/alien.bmp')self.rect = self.image.get_rect()self.rect.x = self.rect.widthself.rect.y = self.rect.heightself.x = float(self.rect.x)def check_edges(self):screen_rect = self.screen.get_rect()if self.rect.right >= screen_rect.right or self.rect.left <= 0:return Truedef update(self):self.x += (self.settings.alien_speed * self.settings.fleet_direction)self.rect.x = self.x

settings:

class Settings:def __init__(self):self.screen_width = 1200    #游戏屏幕的设置self.screen_height = 700self.bg_color = (230,230,230)self.ship_speed = 1.5self.ship_limit = 3self.bullet_speed = 1.5    #子弹的设置self.bullet_width = 3self.bullet_height = 15self.bullet_color = (60,60,60)self.bullet_allowed = 3self.alien_speed = 1.0  #设置外星人的移动self.fleet_drop_speed = 10self.fleet_direction = 1    #direction为1表示右移,-1表示左移

bullet:

import pygamefrom pygame.sprite import Spriteclass Bullet(Sprite):def __init__(self,ai_game):super().__init__()self.screen = ai_game.screenself.settings = ai_game.settingsself.color = self.settings.bullet_colorself.rect = pygame.Rect(0,0,self.settings.bullet_width,self.settings.bullet_height)self.rect.midtop = ai_game.ship.rect.midtopself.y = float(self.rect.y)def update(self):self.y -= self.settings.bullet_speedself.rect.y = self.ydef draw_bullet(self):pygame.draw.rect(self.screen,self.color,self.rect)

ship:

import pygameclass Ship:def __init__(self,ai_game):self.screen = ai_game.screenself.settings = ai_game.settingsself.screen_rect = ai_game.screen.get_rect()#初始化飞船,并设置其初始位置self.image = pygame.image.load('images/ship.bmp')self.rect = self.image.get_rect()#加载飞船图案,并获取其外接矩形self.rect.midbottom = self.screen_rect.midbottom#每艘新的飞船都放在屏幕底部的中间self.centerx = float(self.rect.centerx)self.moving_right = False#移动标志self.moving_left = Falsedef update(self):#根据移动标志调整飞船位置if self.moving_right and self.rect.right < self.screen_rect.right:self.centerx += self.settings.ship_speedif self.moving_left and self.rect.left > 0:self.centerx -= self.settings.ship_speedself.rect.centerx = self.centerxdef blitme(self):self.screen.blit(self.image,self.rect)#在指定位置绘制飞船def center_ship(self):self.rect.midbottom = self.screen_rect.midbottomself.centerx = float(self.rect.centerx)

外星人入侵小游戏十二章十三章实现相关推荐

  1. 程序员编程艺术第三十二~三十三章:最小操作数,木块砌墙问题

    第三十二~三十三章:最小操作数,木块砌墙问题 作者:July.caopengcs.红色标记.致谢:fuwutu.demo. 时间:二零一三年八月十二日 题记 再过一两月,便又到了每年的九月十月校招高峰 ...

  2. 数据库系统概念总结:第十二、十三章 查询处理和查询优化

    周末无事水文章,期末备考的总结资料 第十二.十三章 查询处理和查询优化

  3. 【转载】古龙·断章·小札[十二]:《多情剑客无情剑》

    古龙·断章·小札[十二]:<多情剑客无情剑> 作者:边城不浪 十年前,朝廷里的风流翰林,兵器谱上排名第三的探花郎黯然出关,展开自我放逐生涯.十年后,流放者归来. <多情剑客无情剑&g ...

  4. 帽子接球小游戏(二)--接球的实现

    帽子接球小游戏(二)--接球的实现 注:本小游戏共两章,第一章讲界面的制作,第二章讲后台代码控制接球. (工程中所使用到的所有图片都是我自己PS画的,比较粗糙,不太美观,能看就行,哈哈.) 传送门: ...

  5. 手把手教你用Python改造一款外星人入侵小游戏

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 为学应须毕生力,攀高贵在少年时. ...

  6. python外星人入侵小游戏

    python外星人入侵小游戏 python外星人入侵小游戏 项目结构如图所示: (1)alien.py中的代码: (2)alien_invasion.py中的代码: (3)bullet.py中的代码: ...

  7. C3—Qt实现五子棋小游戏(二)2021.11.08

    Qt实现五子棋小游戏(二) qt实现五子棋(一) 步骤: 第二大步是创建主界面将绘制界面和界面元素的初始化分开逻辑更为清晰.所谓界面是指frame.背景.标题.界面大小等内容:界面元素是指例如为com ...

  8. 微信小程序之2048小游戏(二)

    微信小程序之2048小游戏(二) 前言 思维图 程序界面图 页面结构 .wxml .js 游戏组件大纲 小结 前言 在本系列之前的文章中,我们已经对该小程序的主界面和全局配置方面进行了学习.因此,这篇 ...

  9. 第十一、十二、十三、十四章 网络配置管理、归档和远程复制同步文件、软件包管理、创建访问linux文件系统

    第十一章 网络配置管理 网络地址获取方式: 1)DHCP自动获取 2)手动配置 1.网卡配置文件: /etc/sysconfig/network-scripts/ [root@server0 Desk ...

最新文章

  1. 快捷技巧之一键查自己电脑所有打开的端口的具体操作
  2. windows服务器网站日志,windows服务器网站日志文件
  3. 哈夫曼树(利用python实现)
  4. cad迷你看图免费版|cad迷你看图电脑版免费版下载 v2019R8
  5. 【开源代码】-基于国民N32G45x系列MCU使用JLINK的RTT Viewer/logger/Client组件工具
  6. docker安装shipyard
  7. PDF文件如何提取页面,PDF提取页面的小技巧
  8. 几何语言点C是ab的中点,备战中考:初中数学作图基本步骤及作图语言
  9. 计算起始时间与结束时间之间有哪些月份和周数
  10. Spring AOP
  11. 推荐系统 - 基于FM算法的协同召回算法
  12. c++ crow入门填坑坑
  13. 利用最小二乘法算法预测考研人数
  14. 详解DDD“洋葱架构”
  15. BI领导驾驶舱的功能特点
  16. (JAVA)将(acc/m4a)音频转换成Mp3格式
  17. 智慧园区背景 智慧园区如何建设 智慧园区落地实例
  18. 英文简历如何美言自己的性格
  19. 常用各个手机屏幕分辨率归纳。iphone5/iphone7/iphone7 plus/iphoneX/Android 分辨率大小归纳
  20. struts2+Hibernate实现名片管理系统

热门文章

  1. 解决Ubuntu 20.04挂载NTFS分区不能写入(只读权限)的问题
  2. Excel中文本替换函数
  3. 文件分片上传阿里云OSS
  4. Linux 静态库和动态库的生成及使用
  5. 【CSS】课程网站 Banner 制作 ① ( Banner 栏测量 | Banner 盒子模型代码 | 代码示例 )
  6. android系统wifi控制风扇,无线远程遥控风扇设计实现
  7. js关闭当前的弹窗页面
  8. 【NOIP2010普及组】三国游戏题解
  9. 小米11即将发布,这是小米进军高端市场最好的机会?
  10. 域名与服务器如何绑定?