importsysimportpygamefrom bullet importBulletfrom alien importAlienfrom time importsleepdefcheck_events(ai_settings,screen,stats,sb,play_button,ship,aliens,bullets):#监视键盘和鼠标事件

for event inpygame.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)elif event.type ==pygame.MOUSEBUTTONDOWN:

mouse_x, mouse_y=pygame.mouse.get_pos()

check_play_button(ai_settings,screen,stats,sb,play_button,ship,aliens,bullets,mouse_x, mouse_y)defcheck_play_button(ai_settings,screen,stats,sb,play_button,ship,aliens,bullets,mouse_x, mouse_y):"""在玩家单击Play按钮时开始游戏"""button_clicked=play_button.rect.collidepoint(mouse_x,mouse_y)if button_clicked and notstats.game_active:#重置游戏设置

ai_settings.initialize_dynamic_settings()#隐藏光标

pygame.mouse.set_visible(False)#重置游戏统计信息

stats.reset_stats()

stats.game_active=True#重置计分牌图像

sb.prep_score()

sb.prep_high_score()

sb.prep_level()

sb.prep_ships()#清空外星人列表和子弹列表

aliens.empty()

bullets.empty()#创建一群新的外星人,并让飞船居中

create_fleet(ai_settings,screen,ship,aliens)

ship.center_ship()defupdate_screen(ai_settings,screen,stats,sb,ship,aliens,bullets,play_button):'''更新屏幕上的图片,并切换到新屏幕'''screen.fill(ai_settings.bg_color)#设置背景颜色

ship.blitme() #绘制飞船

aliens.draw(screen)#循环子弹组里面的元素,进行绘制 为空时不执行

for bullet inbullets.sprites():

bullet.draw_bullet()#绘制子弹

#显示得分

sb.show_score()#如果游戏处于非活跃状态,就显示Play按钮

if notstats.game_active:

play_button.draw_button()#显示最新屏幕,擦拭旧屏幕

pygame.display.flip()#print('1')

defcheck_keydown_events(event,ai_settings,screen,ship,bullets):if event.key ==pygame.K_RIGHT:

ship.moving_right=Trueelif event.key ==pygame.K_LEFT:

ship.moving_left=Trueelif event.key ==pygame.K_SPACE:

fire_bullet(ai_settings,screen,ship,bullets)elif event.key ==pygame.K_q:

sys.exit()defcheck_keyup_events(event,ship):if event.key ==pygame.K_RIGHT:

ship.moving_right=Falseelif event.key ==pygame.K_LEFT:

ship.moving_left=Falsedefupdate_bullets(ai_settings,screen,stats,sb,ship,aliens,bullets):'''更新子弹位置,删除子弹'''bullets.update()#子弹组每个成员执行self.update()操作

for bullet inbullets.sprites():if bullet.rect.bottom <= 0: #子弹出界 删除

bullets.remove(bullet)

check_bullet_alien_collisions(ai_settings,screen,stats,sb,ship,aliens,bullets)defcheck_bullet_alien_collisions(ai_settings,screen,stats,sb,ship,aliens,bullets):"""响应外星人和子弹的碰撞"""

#删除发生碰撞的子弹和外星人

collisions =pygame.sprite.groupcollide(bullets,aliens,True,True)ifcollisions:for aliens incollisions.values():

stats.score+= ai_settings.alien_points *len(aliens)

sb.prep_score()

check_high_score(stats,sb)if len(aliens)==0:#删除现有的子弹并新建一群外星人,加快游戏进度节奏

bullets.empty()

ai_settings.increase_speed()#提高等级

stats.level += 1sb.prep_level()

create_fleet(ai_settings,screen,ship,aliens)defupdate_ship(ship):

ship.update()deffire_bullet(ai_settings,screen,ship,bullets):#创建一个子弹对象 加入到子弹组

if len(bullets) < ai_settings.bullets_allowed: #子弹少于允许值时再生成

new_bullet =Bullet(ai_settings, screen, ship)

bullets.add(new_bullet)defget_number_aliens_x(ai_settings,alien_width):"""计算每行可容纳多少个外星人"""available_space_x= ai_settings.screen_width - 2 *alien_width

number_aliens_x= int(available_space_x / (2 *alien_width))returnnumber_aliens_xdefget_number_rows(ai_settings,ship_height,alien_height):"""计算屏幕可容纳多少行外星人"""available_space_y= (ai_settings.screen_height - (3 * alien_height) -ship_height)

number_rows= int(available_space_y / (2 *alien_height))returnnumber_rowsdefcreate_aliens(ai_settings,screen,aliens,alien_number,row_number):"""创建一个外星人并将其放在当期行"""alien=Alien(ai_settings,screen)

alien_width=alien.rect.width

alien.x= alien_width + 2 * alien_width *alien_number

alien.rect.x=alien.x

alien.rect.y= alien.rect.height + 2 * alien.rect.height *row_number

aliens.add(alien)defcreate_fleet(ai_settings,screen,ship,aliens):"""创建外星人群"""

#创建一个外星人,并计算一行可以容纳多少个外星人

#外星人间距为外星人宽度

alien =Alien(ai_settings,screen)

number_aliens_x=get_number_aliens_x(ai_settings,alien.rect.width)

number_rows=get_number_rows(ai_settings,ship.rect.height,alien.rect.height)#创建第一行外星人

for row_number inrange(number_rows):for alien_number inrange(number_aliens_x):#创建一个外星人并将其加入当前行

create_aliens(ai_settings,screen,aliens,alien_number,row_number)defcheck_fleet_edges(ai_settings,aliens):"""有外星人到达边缘时采取相应措施"""

for alien inaliens.sprites():ifalien.check_edges():

change_fleet_direction(ai_settings,aliens)break

defchange_fleet_direction(ai_settings,aliens):"""将整群外星人下移,并改变他们的运动方向"""

for alien inaliens.sprites():

alien.rect.y+=ai_settings.fleet_drop_speed

ai_settings.fleet_direction*= -1

defship_hit(ai_settings,stats,screen,sb,ship,aliens,bullets):"""响应被外星人撞到的飞船"""

if stats.ships_left >0:#将ship_left减1

stats.ships_left -= 1

#更新记分牌

sb.prep_ships()#清空外星人列表和子弹列表

aliens.empty()

bullets.empty()#创建一群新的外星人,并将飞船放到屏幕低端中央

create_fleet(ai_settings,screen,ship,aliens)

ship.center_ship()#暂停

sleep(0.5)else:

stats.game_active=False

pygame.mouse.set_visible(True)defcheck_aliens_bottom(ai_settings,stats,screen,sb,ship,aliens,bullets):"""检查是否有外星人到达屏幕低端"""screen_rect=screen.get_rect()for alien inaliens.sprites():if alien.rect.bottom >=screen_rect.bottom:#像飞船被撞到一样进行处理

ship_hit(ai_settings,stats,screen,sb,ship,aliens,bullets)break

defupdate_aliens(ai_settings,stats,screen,sb,ship,aliens,bullets):"""更新外星人群中所有外星人的位置"""check_fleet_edges(ai_settings,aliens)

aliens.update()#检测外星人和飞船之间的碰撞

ifpygame.sprite.spritecollideany(ship,aliens):

ship_hit(ai_settings,stats,screen,sb,ship,aliens,bullets)#检查是否有外星人到达屏幕低端

check_aliens_bottom(ai_settings,stats,screen,sb,ship,aliens,bullets)defcheck_high_score(stats,sb):"""检查是否诞生了新的最高纪录"""

if stats.score >stats.high_score:

stats.high_score=stats.score

sb.prep_high_score()

python外星人入侵游戏代码大全-Python游戏:外星人入侵游戏编程完整版!内附代码...相关推荐

  1. Python实现逻辑回归实战(完整版)--内附详细代码

    Hello大家!上一篇小A已经详细的为大家讲解了逻辑回归的原理和数学推导,但是对于学习人工智能来说仅仅学会原理是远远不够的,还必须要动手实践,必须要学会使用编程语言将算法实现.所以,今天我就来为大家展 ...

  2. python基础代码大全-python基础代码大全

    [实例简介] python代码大全,适用于基础python学习者,里面的代码基本上是基础学习者必经过程. Python学习入门很快,但学习之路任重道远 [实例截图] [核心代码] python代码大全 ...

  3. 我用Python爬取了难下载的电子教材(内附代码)

    我用Python爬取了难下载的电子教材(内附代码) 第一次在CSDN上面分享经历,有点激动.本大二狗最近这段时间去不了学校又想看教材,不巧学习通上面的部分内容老师设置了不可下载啊.好在最近学习了一点P ...

  4. python外星人入侵游戏图片_Python外星人入侵游戏编程完整版

    PYTHON游戏编程外星人入侵的完整实现思路,具体内容如下 准备工作:下载python,比如Anaconda3(64 bit),导入pygame游戏包 1.外星人设置,alien.py,代码: imp ...

  5. python手机版做小游戏代码大全-Python大牛手把手教你做一个小游戏,萌新福利!...

    原标题:Python大牛手把手教你做一个小游戏,萌新福利! 引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规 ...

  6. python常用代码大全-Python常用库大全及简要说明

    环境管理 管理 Python 版本和环境的工具 p:非常简单的交互式 python 版本管理工具.官网 pyenv:简单的 Python 版本管理工具.官网 Vex:可以在虚拟环境中执行命令.官网 v ...

  7. python常用代码大全-Python常用库大全

    Python常用库大全,看看有没有你需要的. 环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具 ...

  8. python程序编程代码大全,python编程代码详解

    大家好,本文将围绕python程序编程代码大全展开说明,python编程游戏代码是一个很多人都想弄明白的事情,想搞清楚python代码大全简单需要先了解以下几个事情. 1.python编程例子有哪些? ...

  9. python常用代码大全-Python常用库大全,看看有没有你需要的

    环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. v ...

  10. python基础代码大全-python基础语法,python 代码命令大全

    python: 1.语法强制缩进 2.区分大小写:iLoop与iloop是两个变量 3.变量无需申明,但是变量赋值前无法使用:a=3合法,b=a+3合法,b=a+c不合法,因为c未赋值前不能使用 4. ...

最新文章

  1. WebGoat教程学习(三)--Ajax安全
  2. 从面试官的角度谈谈大数据面试
  3. php导入excel表格数据,php页面导入excel表格数据-php导入excel 怎么获取excel表格数据...
  4. mysql job 运行时间设置_mysql 的job 设置
  5. python介绍和用途-python数据类型介绍与使用
  6. session登录练习使用解决null显示问题
  7. Java7之线程池ForkJoinPool
  8. DCMTK:将PDF文件封装为DICOM文件
  9. 我如何预测10场英超联赛的确切结果
  10. 【kafka】kafka 新增节点 报错 InconsistentBrokerIdException Configured broker.id doesn‘t match
  11. 6个强大的AngularJS扩展应用
  12. 苹果Mac智能照片编辑软件:​​​​Movavi Picverse
  13. freeswitch被叫忙处理
  14. Matlab Copula函数实现
  15. 台达ms300变频器使用手册中文_台达ms300变频器说明书.doc
  16. Firefox Monitor - 在线免费检测邮箱数据是否泄露
  17. Android性能测试小工具Emmagee
  18. 推荐 5 个优秀的 Javascript 图标库
  19. 基于Tiny6410的LCD与一线触屏移植
  20. 色彩缤纷的python(改变字体颜色及样式)不是我写的

热门文章

  1. long转string类型_从php内核角度分析php弱类型
  2. 服务器磁盘空间已满但并没有什么文件,win10 D盘没多少文件,但磁盘却满了
  3. 陕西宝鸡2021年高考成绩查询,2021年宝鸡网上查询中考成绩
  4. 怎么理解python的__init___理解Python中super()和__init__()方法
  5. 别做喷子,多去钻研!
  6. leetcode 342. Power of Four
  7. 暑假N天乐【比赛篇】 —— 2019杭电暑期多校训练营(第四场)
  8. Spring Boot 2 (四):使用 Docker 部署 Spring Boot
  9. 利用目录服务器实现单点登录
  10. CF#212 Two Semiknights Meet