当前位置: 首页 > news >正文

许昌小学网站建设网站建设国家和行业标准

许昌小学网站建设,网站建设国家和行业标准,做标志的网站,网站如何做前后端分离学习于Python编程从入门到实践#xff08;Eric Matthes 著#xff09; 整体目录#xff1a;外星人入侵文件夹是打包后的不必在意 图片和音效都是网上下载的 音效下载网站#xff1a;Free 游戏爆击中 Sound Effects Download - Pixabay 运行效果#xff1a;可以上下左右移…学习于Python编程从入门到实践Eric Matthes 著 整体目录外星人入侵文件夹是打包后的不必在意 图片和音效都是网上下载的 音效下载网站Free 游戏爆击中 Sound Effects Download - Pixabay 运行效果可以上下左右移动空格开火空格或点击Play开始游戏飞船碰到外星人或者外星人到达屏幕底部则失去一条命 下面是各个文件的内容 alien.py import pygame from pygame.sprite import Spriteclass Alien(Sprite):表示单个外星人的类def __init__(self, ai_settings, screen):初始化外星人并设置其起始位置super(Alien, self).__init__()self.screen screenself.ai_settings ai_settings# 加载外星人图像并设置其rect属性# self.image pygame.image.load(E:\\Project\\alien_invasion\\images\\alien.png)self.image pygame.image.load(images/alien.png)self.image pygame.transform.scale(self.image, (45, 45))self.rect self.image.get_rect()# 每个外星人最初都在屏幕左上角附近self.rect.x self.rect.widthself.rect.y self.rect.height# 存储外星人的准确位置self.x float(self.rect.x)def blitme(self):在指定位置绘制外星人self.screen.blit(self.image, self.rect)def check_edges(self):如果外星人位于屏幕边缘就返回Truescreen_rect self.screen.get_rect()if self.rect.right screen_rect.right:return Trueelif self.rect.left 0:return Truedef update(self):向左或向右移动外星人self.x (self.ai_settings.alien_speed_factor *self.ai_settings.fleet_direction)self.rect.x self.x alien_invasion.py import pygame from pygame.sprite import Group from settings import Settings from game_stats import GameStats from ship import Ship import game_functions as gf from button import Button from scoreboard import Scoreboarddef run_game():# 初始化游戏并创建一个屏幕对象# 初始化pygame、设置和屏幕对象pygame.init()ai_settings Settings()screen pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))# screen pygame.display.set_mode((1200, 800))pygame.display.set_caption(Alien Invasion)# 创建一个用于存储游戏统计信息的实例,并创建记分牌stats GameStats(ai_settings)sb Scoreboard(ai_settings, screen, stats)# 创建一个飞船ship Ship(ai_settings, screen)# 创建一个用于存储子弹的编组bullets Group()# 创建一个外星人编组aliens Group()# 创建外星人群gf.create_fleet(ai_settings, screen, ship, aliens)# 创建Play按钮play_button Button(ai_settings, screen, Play)# 开始游戏的主循环while True:gf.check_events(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets)if stats.game_active:ship.update()# 对每个bullet调用bullet.update()gf.update_bullets(ai_settings, screen, stats, sb, ship, aliens, bullets)gf.update_aliens(ai_settings, screen, stats, sb, ship, aliens, bullets)# 这个print用来检查是否真的删除子弹保留此条代码会严重拖慢运行速度# print(len(bullets))gf.update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_button)run_game() bullet.py import pygame from pygame.sprite import Spriteclass Bullet(Sprite):一个对飞船发射的子弹进行管理的类def __init__(self, ai_settings, screen, ship):在飞船所处的位置创建一个子弹的对象super(Bullet, self).__init__() # Python2.7写法也可写为下面这种# super().__init__()self.screen screen# 在(0, 0)处创建一个表示子弹的矩形再设置正确的位置self.rect pygame.Rect(0, 0, ai_settings.bullet_width, ai_settings.bullet_height)self.rect.centerx ship.rect.centerxself.rect.top ship.rect.top# 存储用小数表示的子弹位置self.y float(ship.rect.y)self.color ai_settings.bullet_colorself.speed_factor ai_settings.bullet_speed_factordef update(self):向上移动子弹# 更新表示子弹位置的小数值self.y - self.speed_factor# 更新表示子弹的rect的位置self.rect.y self.ydef draw_bullet(self):在屏幕上绘制子弹pygame.draw.rect(self.screen, self.color, self.rect) button.py import pygame.fontclass Button():def __init__(self, ai_settings, screen, msg):初始化按钮属性self.screen screenself.screen_rect screen.get_rect()# 设置按钮的尺寸和其他属性self.width, self.height 200, 50self.button_color (0, 255, 0)self.text_color (255, 255, 255)self.font pygame.font.SysFont(None, 48)# 创建按钮的rect属性并使其居中self.rect pygame.Rect(0, 0, self.width, self.height)self.rect.center self.screen_rect.center# 按钮的标签只需要创建一次self.prep_msg(msg)def prep_msg(self, msg):将msg渲染为图像并使其在按钮上居中self.msg_image self.font.render(msg, True, self.text_color,self.button_color)self.msg_image_rect self.msg_image.get_rect()self.msg_image_rect.center self.rect.centerdef draw_button(self):# 绘制一个用颜色填充的按钮再绘制文本self.screen.fill(self.button_color, self.rect)self.screen.blit(self.msg_image, self.msg_image_rect) game_function.py import sys import pygame # 设置 mixer 支持 MP3 格式 pygame.mixer.pre_init(44100, -16, 2, 2048) # 44100是采样率-16是采样位数2是声道数2048是缓冲区大小 pygame.init() pygame.mixer.init()from bullet import Bullet from alien import Alien from time import sleep# 加载音效 # fire_sound pygame.mixer.Sound(E:\Project\\alien_invasion\\sounds\\fire.mp3) fire_sound pygame.mixer.Sound(sounds/fire.mp3) # hit_sound pygame.mixer.Sound(E:\Project\\alien_invasion\\sounds\\hit.mp3) hit_sound pygame.mixer.Sound(sounds/hit.mp3) hit_sound.set_volume(0.2)def check_keydown_events(event, ai_settings, screen, stats, sb, ship, aliens, bullets):响应按键if event.key pygame.K_RIGHT:# 向右移动飞船ship.moving_right Trueelif event.key pygame.K_LEFT:# 向左移动飞船ship.moving_left Trueelif event.key pygame.K_UP:# 向上移动飞船ship.moving_up Trueelif event.key pygame.K_DOWN:# 向下移动飞船ship.moving_down Trueelif event.key pygame.K_SPACE:# 创建一颗子弹并将其加入到编组bullets中if stats.game_active:fire_bullet(ai_settings, screen, ship, bullets)else:start_game(ai_settings, screen, stats, sb, ship, aliens, bullets)elif event.key pygame.K_ESCAPE:sys.exit()def fire_bullet(ai_settings, screen, ship, bullets):如果还没有到达限制就发射一颗子弹if len(bullets) ai_settings.bullets_allowed:new_bullet Bullet(ai_settings, screen, ship)fire_sound.play()bullets.add(new_bullet)def check_keyup_events(event, ship):松开按键if event.key pygame.K_RIGHT:ship.moving_right Falseelif event.key pygame.K_LEFT:ship.moving_left Falseelif event.key pygame.K_UP:ship.moving_up Falseelif event.key pygame.K_DOWN:ship.moving_down Falsedef check_events(ai_settings, screen, stats, sb, play_button, ship, aliens, 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, stats, sb, ship, aliens, 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)def check_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 not stats.game_active:# 重制游戏设置ai_settings.initialize_dynamic_settings()start_game(ai_settings, screen, stats, sb, ship, aliens, bullets)def start_game(ai_settings, screen, stats, sb, ship, aliens, bullets):# 隐藏光标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()def update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_button):更新屏幕上的图像并切换到新屏幕# 每次循环时都重绘屏幕screen.fill(ai_settings.bg_color)# 在飞船和外星人后面重绘所有子弹for bullet in bullets.sprites():bullet.draw_bullet()ship.blitme()aliens.draw(screen)# 显示得分sb.show_score()# 如果游戏处于非活跃状态就绘制Play按钮if not stats.game_active:play_button.draw_button()# 让最近绘制的屏幕可见pygame.display.flip()def update_bullets(ai_settings, screen, stats, sb, ship, aliens, bullets):更新子弹的位置并删除已消失的子弹# 更新子弹位置bullets.update()# 删除已经消失的子弹for bullet in bullets.copy():if bullet.rect.bottom 0:bullets.remove(bullet)check_bullet_alien_collision(ai_settings, screen, stats, sb, ship, aliens, bullets)def check_bullet_alien_collision(ai_settings, screen, stats, sb, ship, aliens, bullets):响应子弹和外星人的碰撞# 删除发生碰撞子弹和外星人# 若第一个True变为False可以让子弹直到顶部才消失并删除所有击中的外星人反之只击中一个子弹也消失collisions pygame.sprite.groupcollide(bullets, aliens, True, True)if collisions:for aliens in collisions.values():stats.score ai_settings.alien_points * len(aliens)sb.prep_score()# 播放音效hit_sound.play()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)def get_number_alien_x(ai_settings, alien_width):计算一行可以有多少个外星人available_space_x ai_settings.screen_width - 2 * alien_widthnumber_aliens_x int(available_space_x / (2 * alien_width))return number_aliens_xdef get_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 / (3 * alien_height))return number_rowsdef create_alien(ai_settings, screen, aliens, alien_number, row_number):创建一个外星人并将其放在当前行alien Alien(ai_settings, screen)alien_width alien.rect.widthalien.x alien_width 2 * alien_width * alien_numberalien.rect.x alien.xalien.rect.y alien.rect.height 2 * alien.rect.height * row_numberaliens.add(alien)def create_fleet(ai_settings, screen, ship, aliens):创建外星人群# 创建一个外星人并计算一行可以容纳多少个外星人# 外星人之间的间距为外星人宽度alien Alien(ai_settings, screen)number_aliens_x get_number_alien_x(ai_settings, alien.rect.width)number_rows get_number_rows(ai_settings, ship.rect.height, alien.rect.height)# 创建外星人群for row_number in range(number_rows):for alien_number in range(number_aliens_x):create_alien(ai_settings, screen, aliens, alien_number, row_number)def check_fleet_edges(ai_settings, aliens):有外星人到达边缘时采取相应的措施for alien in aliens.sprites():if alien.check_edges():change_fleet_direction(ai_settings, aliens)breakdef change_fleet_direction(ai_settings, aliens):将整个外星人下移 并改变它们的方向for alien in aliens.sprites():alien.rect.y ai_settings.fleet_drop_speedai_settings.fleet_direction * -1def ship_hit(ai_settings, screen, stats, sb, ship, aliens, bullets):响应被外星人撞到的飞船if stats.ships_left 0:# 将ships_left减 1stats.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 Falsepygame.mouse.set_visible(True)def check_aliens_bottom(ai_settings, screen, stats, sb, ship, aliens, bullets):检查是否有外星人到达屏幕底端screen_rect screen.get_rect()for alien in aliens.sprites():if alien.rect.bottom screen_rect.bottom:# 像飞船被撞一样处理ship_hit(ai_settings, screen, stats, sb, ship, aliens, bullets)breakdef update_aliens(ai_settings, screen, stats, sb, ship, aliens, bullets):检查是否有外星人位于屏幕边缘并更新整群外星人的位置check_fleet_edges(ai_settings, aliens)aliens.update()# 检查是否有外星人到达底部check_aliens_bottom(ai_settings, screen, stats, sb, ship, aliens, bullets)# 检查外星人和飞船之间的碰撞if pygame.sprite.spritecollideany(ship, aliens):ship_hit(ai_settings, screen, stats, sb, ship, aliens, bullets)def check_high_score(stats, sb):检查是否诞生了新的最高分数if stats.score stats.high_score:stats.high_score stats.scoresb.prep_high_score()game_stats.py class GameStats():跟踪游戏的统计信息def __init__(self, ai_settings):初始化统计信息self.ai_settings ai_settingsself.reset_stats()# 游戏刚启动时处于非活动状态self.game_active False# 在任何情况下都不应重置最高分self.high_score 0def reset_stats(self):初始化在游戏运行期间可能变化的统计信息self.ships_left self.ai_settings.ship_limitself.score 0self.level 1 scoreboard.py import pygame.font from pygame.sprite import Groupfrom ship import Shipclass Scoreboard():显示得分信息类def __init__(self, ai_settings, screen, stats):初始化显示得分涉及的属性self.screen screenself.screen_rect screen.get_rect()self.ai_settings ai_settingsself.stats stats# 显示得分信息时使用的字体设置self.text_color (30, 30, 30)self.font pygame.font.SysFont(None, 48)# 准备包含最高分图像和当前得分图像self.prep_score()self.prep_high_score()self.prep_level()self.prep_ships()def prep_score(self):将得分转换为一幅渲染的图像rounded_score int(round(self.stats.score, -1))score_str {:,}.format(rounded_score)self.score_image self.font.render(score_str, True, self.text_color,self.ai_settings.bg_color)# 将得分放在屏幕的右上角self.score_rect self.score_image.get_rect()self.score_rect.right self.screen_rect.right - 20self.score_rect.top 5def show_score(self):在屏幕中显示飞船和得分self.screen.blit(self.score_image, self.score_rect)self.screen.blit(self.high_score_image, self.high_score_rect)self.screen.blit(self.level_image, self.level_rect)# 绘制飞船self.ships.draw(self.screen)def prep_high_score(self):将最高得分转换为渲染的图像high_score int(round(self.stats.high_score, -1))high_score_str {:,}.format(high_score)self.high_score_image self.font.render(high_score_str, True,self.text_color, self.ai_settings.bg_color)# 将最高得分放在屏幕顶部中央self.high_score_rect self.high_score_image.get_rect()self.high_score_rect.centerx self.screen_rect.centerxself.high_score_rect.top self.score_rect.topdef prep_level(self):将等级转换为渲染的图像self.level_image self.font.render(str(self.stats.level), True,self.text_color, self.ai_settings.bg_color)# 将等级放在得下面self.level_rect self.level_image.get_rect()self.level_rect.right self.score_rect.rightself.level_rect.top self.score_rect.bottom 10def prep_ships(self):显示还剩余多少搜飞船self.ships Group()for ship_number in range(self.stats.ships_left):ship Ship(self.ai_settings, self.screen)ship.rect.x 10 ship_number * ship.rect.widthship.rect.y 10self.ships.add(ship) settings.py class Settings():存储《外星人入侵》的所有设置类def __init__(self):初始化游戏静态设置# 屏幕设置self.screen_width 1200self.screen_height 800self.bg_color (230, 230, 230)# 飞船的设置self.ship_speed_factor 1.5self.ship_limit 3# 子弹设置# self.bullet_speed_factor 3self.bullet_width 30self.bullet_height 15self.bullet_color 60, 60, 60self.bullets_allowed 3# 外星人设置self.alien_speed_factor 1# fleet_drop_speed表示触碰到屏幕边缘时下移的速度self.fleet_drop_speed 5# fleet_direction为 1 表示向右移动为 -1 表示向左移动self.fleet_direction 1# 以什么样的速度加快游戏节奏self.speedup_scale 1.1# 外星人点数提高速度self.score_scale 1.5self.initialize_dynamic_settings()def initialize_dynamic_settings(self):初始化随游戏进行而变化的设置self.ship_speed_factor 1.5self.bullet_speed_factor 3self.alien_speed_factor 1# fleet_direction为 1 表示向右移动为 -1 表示向左移动self.fleet_direction 1# 记分self.alien_points 50def increase_speed(self):提高速度设置和外星人点数设置self.ship_speed_factor * self.speedup_scaleself.bullet_speed_factor * self.speedup_scaleself.alien_speed_factor * self.speedup_scaleself.alien_points int(self.alien_points * self.score_scale) ship.py import pygame from pygame.sprite import Spriteclass Ship(Sprite):def __init__(self, ai_settings, screen):初始化飞船并设置其初始位置super(Ship, self).__init__()self.screen screenself.ai_settings ai_settings# 加载飞船图像并获取其外接矩形# self.image pygame.image.load(E:\\Project\\alien_invasion\\images\\ship.bmp)self.image pygame.image.load(images/ship.bmp)# 调整图片大小self.image pygame.transform.scale(self.image, (35, 35))self.rect self.image.get_rect()self.screen_rect screen.get_rect()# 将每艘新飞船放在屏幕的底部中央self.rect.centerx self.screen_rect.centerxself.rect.bottom self.screen_rect.bottom# 在飞船的属性center中存储小数值self.centerx float(self.rect.centerx)self.centery float(self.rect.centery)# 移动标志self.moving_right Falseself.moving_left Falseself.moving_up Falseself.moving_down Falsedef update(self):根据移动标志的调整飞船的位置# 更新飞船的center值而不是rectif self.moving_right and self.rect.right self.screen_rect.right:# self.rect.centerx 1self.centerx self.ai_settings.ship_speed_factorif self.moving_left and self.rect.left 0:# self.rect.centerx - 1self.centerx - self.ai_settings.ship_speed_factorif self.moving_up and self.rect.top 0:self.centery - self.ai_settings.ship_speed_factorif self.moving_down and self.rect.bottom self.screen_rect.bottom:self.centery self.ai_settings.ship_speed_factor# 根据self.center更新rect对象self.rect.centerx self.centerxself.rect.centery self.centerydef blitme(self):在指定位置绘制飞船self.screen.blit(self.image, self.rect)def center_ship(self):让飞船在屏幕上居中# self.centerx self.screen_rect.centerxself.centerx self.screen_rect.centerxself.centery self.screen_rect.bottom - 15
http://www.w-s-a.com/news/910896/

相关文章:

  • 做暧网站网站备案ps
  • 知名网站建设公司电话长子网站建设
  • 网站建设的意义与目的建立什么船籍港
  • 广州注册公司营业执照网站建设代码优化
  • 百度网站官网马克互联网主题 wordpress
  • 网站制作 客户刁难深圳自助建站
  • 怎么去推广一个网站广东餐饮品牌设计
  • 网站代码加密了怎么做兰州最新大事
  • 现在ui做的比较好的网站去年做啥网站致富
  • 广东网站建设咨询电话好牌子网
  • 公司怎样制作网站南阳网站关键词
  • 营销型网站建设与网盟完整php网站开发
  • 网站做微信链接怎么做的石桥铺网站建设公司
  • 济南mip网站建设公司做图书馆网站模板
  • app 门户网站网站项目框架
  • 做网站视频网站备案 新闻审批号
  • 织梦网站怎么居中视频网站开发与制作
  • 网站上海备案佛山网站seo哪家好
  • 品牌形象网站有哪些珠海市区工商年报在哪个网站做
  • 注册域名不建设网站seo外包服务方案
  • 如何进行外贸网站建设wordpress文章输入密码可见
  • 政务网站建设索引常州做网站信息
  • 南宁做网站找哪家好wordpress 更改首页
  • 一个人在家做网站建设品牌策划流程
  • 小网站广告投放wordpress页面添加js
  • 仿制别人的竞价网站做竞价犯法吗wordpress添加版块
  • wordpress主题 站长互联网站备案表
  • 广州品牌策划公司排行南宁seo网络推广公司
  • 营销型网站图片肯德基网站开发
  • 网站的外链是什么wordpress开启菜单