只需要修改一下招聘的名字和音乐的名字那么这个程序就可以使用了

import sys
import pygame
from pygame.sprite import Group
from pygame.sprite import Sprite
from pygame.locals import *
import time
from pygame import mixerimport pygame.font#初始化设置
class Settings():#定义全局变量def __init__ (self):self.screen_width = 1200self.screen_height = 800self.bg_color = (230,230,230)#后面的就是开始设置子弹了self.bullet_speed_factor = 1self.bullet_width = 3self.bullet_height = 15self.bullet_color = 60, 60, 60#这里是计数器的参数self.alien_points = 50#飞船的所有条件
class Ship():def __init__(self,screen):#初始化飞船并设置器初始位置self.screen = screenimage = pygame.image.load('头像.png')self.image = pygame.transform.scale(image, (100, 100))#捕捉照片的坐标self.rect = self.image.get_rect()#这个是捕捉屏幕的位置self.screen_rect = screen.get_rect()#将每艘新飞船放在屏幕底部中央#就是让照片的X和Y和屏幕的X,Y一样self.rect.centerx = self.screen_rect.centerxself.rect.bottom = self.screen_rect.bottom# j就把填充好的最终结果给最后那个blitmedef blitme(self):# 指定位置绘制飞船# blit方法先填充照片,后面填充已经和screen保持一致的位置self.screen.blit(self.image, self.rect)class Buttle1(pygame.sprite.Sprite):# 构造函数def __init__(self, init_position):pygame.sprite.Sprite.__init__(self)  # 父类构造函数'''精灵图片:加载图片(1)或者绘制(2)'''# 方法(1)# self.image = pygame.image.load('resources/images/enemy.png')# 方法(2)self.image = pygame.Surface([100, 100])  # 绘制大小self.image.fill((255, 255, 255))  # 填充颜色self.rect = self.image.get_rect()#这里的这个toplft是关键字self.rect.x = init_position[0]-50self.rect.y = init_position[1]self.speed = 5# 每个精灵组执行update,组内所有精灵都会updatedef update(self):self.rect.top = self.rect.top - self.speedif self.rect.top > 800:self.kill()#创建自动化的外星人
#他所接受的是经过修改的ai_settings
class Alien(Sprite):#传入屏幕参数就是为了后面的blitem画画,在screen上面"""表示单个外星人的类"""def __init__(self, ai_settings, screen):"""初始化外星人并设置其起始位置"""#自己继承自己的种类和上面的那个一样,其实就是为了Sprite的继承#pygame.sprite.Sprite.__init__(self)  # 父类构造函数super(Alien, self).__init__()#这个里面是为了给外星人用的self.screen = screen#这个是为了干什么self.ai_settings = ai_settings# 加载外星人图像,并设置其rect属性self.image = pygame.transform.scale(pygame.image.load('头像.png'), (100, 100))# 这里就有点难看懂了self.rect = self.image.get_rect()# 每个外星人最初都在屏幕左上角附近---这个就有点恼火了为什么这样x = float(self.rect.width)self.rect.x = xy = float(self.rect.height)self.rect.y = y# 存储外星人的准确位置#self.x = float(self.rect.x)#self.rect.topleft = init_positiondef update(self):"""在指定位置绘制外星人"""#top是关键字self.rect.top = self.rect.top + 1if self.rect.top > 800:self.kill()#self.screen.blit(self.image, self.rect)class Button():def __init__(self, screen):"""初始化按钮的属性"""self.screen = screenself.screen_rect = screen.get_rect()# 设置按钮的尺寸和其他属性self.width, self.height = 200, 50#颜色self.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()def prep_msg(self):"""将msg渲染为图像,并使其在按钮上居中"""self.msg_image = self.font.render("Play", 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):# 绘制一个用颜色填充的按钮,再绘制文本#fill是颜色填充self.screen.fill(self.button_color, self.rect)#blit是绘画self.screen.blit(self.msg_image, self.msg_image_rect)class Scoreboard():"""显示得分信息的类"""def __init__(self, ai_settings, screen, score):"""初始化显示得分涉及的属性"""self.screen = screenself.screen_rect = screen.get_rect()self.ai_settings = ai_settingsself.score = score# 显示得分信息时使用的字体设置self.text_color = (30, 30, 30)self.font = pygame.font.SysFont(None, 48)# 准备初始得分图像---其实就是全局变量的函数self.prep_score()def prep_score(self):"""将得分转换为一幅渲染的图像"""score_str = str(self.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 = 20def show_score(self):"""在屏幕上显示得分"""self.screen.blit(self.score_image, self.score_rect)#这个是用来定义事件的----这个里面是事件更新,更新飞船的各类参数
def check_events(ship,screen,bullets,ai_settings):# 监听键盘事件for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.KEYDOWN:if event.key == pygame.K_RIGHT and ship.rect.right < ship.screen_rect.right:ship.rect.centerx += 60elif event.key == pygame.K_LEFT and ship.rect.left > 0:ship.rect.centerx -= 60elif event.key == pygame.K_DOWN and ship.rect.bottom < ship.screen_rect.bottom:ship.rect.bottom += 60elif event.key == pygame.K_UP and ship.rect.top > 0:#ship.rect.bottom > ship.screen_rect.bottom:ship.rect.bottom -= 60elif event.key == pygame.K_SPACE:# 创建一颗子弹,并将其加入到编组bullets中---最关键的就是这里了,只能操作一次从此就自动化了init_position = ship.rect#加入了飞船和屏幕参数new_bullet = Buttle1(init_position)bullets.add(new_bullet)def check_play_button(game_active, play_button, mouse_x, mouse_y):"""在玩家单击Play按钮时开始新游戏"""if play_button.rect.collidepoint(mouse_x, mouse_y):game_active = Truedef update_bullets(aliens, bullets):"""更新子弹的位置,并删除已消失的子弹"""# 检查是否有子弹击中了外星人# 如果是这样,就删除相应的子弹和外星人collisions = pygame.sprite.groupcollide(bullets, aliens, True, True)#外星人组参数修改
#创建外星人事件
#外星人的参数给够然后再加入小组
def create_fleet(ai_settings, screen, aliens):"""创建外星人群"""# 创建一个外星人,并计算一行可容纳多少个外星人# 外星人间距为外星人宽度---这个是为了调用里面的长度和宽度alien = Alien(ai_settings, screen)#这里是刚刚获取的外星人imagealien_width = alien.rect.width#屏幕的宽度减去两倍的外星人宽度---剩余的可以用来装外星人的空间available_space_x = ai_settings.screen_width - 2 * alien_width#装外星人的数量---为了确保不是塞满的,一个空间里面要留两个外星人的宽度,所以除以2number_aliens_x = int(available_space_x / (2 * alien_width))# 创建第一行外星人for alien_number in range(number_aliens_x):# 将参数传给外星人alien = Alien(ai_settings, screen)#开始制造外星人横轴坐标alien.x = alien_width + 2 * alien_width * alien_numberalien.rect.x = alien.xaliens.add(alien)def run_game():pygame.init()#导入全局设置ai_settings = Settings()#屏幕大小screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))pygame.display.set_caption("Alien Invasion")ship = Ship(screen)#bullet = Buttle1()button = Button(screen)pygame.key.set_repeat(pygame.KEYDOWN, 1)  # 实现重复按下的功能,间隔10毫秒group = pygame.sprite.Group()bullets = groupaliens = Group()create_fleet(ai_settings, screen, aliens)#按钮的制作准备#play_button = Button(ai_settings, screen)stats = True#计数器的准备score = 0file = r"C:\Users\hh\PycharmProjects\pythonProject\哈哈.mp3"pygame.mixer.init()  # mixer的初始化print("林志炫 - 没离开过")  # 输出提示要播放的歌曲music = pygame.mixer.music.load(file)  # 载入一个音乐文件用于播放while True:#事件更新---接受飞船位置加鼠标事件#这个只是用来改参数的,实际上那个飞船还是在屏幕的前面,而不是像这里所看到的那样飞船在屏幕的前面#check_events(ship,screen,ai_settings)screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))# 监听键盘事件#check_events(ship,screen,bullets,ai_settings)for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.MOUSEBUTTONDOWN:mouse_x, mouse_y = pygame.mouse.get_pos()if button.rect.collidepoint(mouse_x, mouse_y):aliens.empty()bullets.empty()#光标的可见与不可见pygame.mouse.set_visible(False)stats = Falseelif event.type == pygame.KEYDOWN:if event.key == pygame.K_RIGHT and ship.rect.right < ship.screen_rect.right:ship.rect.centerx += 1elif event.key == pygame.K_LEFT and ship.rect.left > 0:ship.rect.centerx -= 1elif event.key == pygame.K_DOWN and ship.rect.bottom < ship.screen_rect.bottom:ship.rect.bottom += 1elif event.key == pygame.K_UP and ship.rect.top > 0:# ship.rect.bottom > ship.screen_rect.bottom:ship.rect.bottom -= 1elif event.key == pygame.K_SPACE:# 创建一颗子弹,并将其加入到编组bullets中---最关键的就是这里了,只能操作一次从此就自动化了# 加入了飞船和屏幕参数init_position = ship.rect.centerx, ship.rect.bottomnew_bullet = Buttle1(init_position)bullets.add(new_bullet)# 全自动进行---无休止#只要没有开始按钮那么游戏开始if stats != True:aliens.update()# 精灵组里面自带的draw可以直接按照rect参数顺序画画aliens.draw(screen)bullets.update()  # 子弹是无限自己更新bullets.draw(screen)ship.blitme()#只要有游戏开始按钮那么光标就可以见if stats:pygame.mouse.set_visible(True)#反正是刚刚开始的,没有任何动作那么游戏开始按钮就一直在if stats:button.draw_button()#这个是子弹和外星人同归于尽collisions = pygame.sprite.groupcollide(bullets, aliens, True, True)# 这里是计分器if collisions:score += ai_settings.alien_pointssb = Scoreboard(ai_settings, screen, score)sb.show_score()#这个是飞船和外星人同归于尽的if pygame.sprite.spritecollideany(ship, aliens):stats = True#print("Ship hit!!!")while len(aliens) == 0:bullets.empty()create_fleet(ai_settings, screen, aliens)# 音乐文件路径(下面这行的路径为mac的路径, win可以自行拷贝)# 检查音乐流播放,有返回True,没有返回False# 如果没有音乐流则选择播放if pygame.mixer.music.get_busy() == False:  # 检查是否正在播放音乐pygame.mixer.music.play()  # 开始播放音乐流# 屏幕可见---官方解释是为了更新画面pygame.display.flip()'''elif event.type == pygame.MOUSEBUTTONDOWN:mouse_x, mouse_y = pygame.mouse.get_pos()if button.rect.collidepoint(mouse_x, mouse_y):# 精灵组里面自带的draw可以直接按照rect参数顺序画画aliens.draw(screen)''''''image = pygame.image.load('头像.png')image = pygame.transform.scale(image, (100, 100))rect = image.get_rect()screen_rect = screen.get_rect()rect.centerx = screen_rect.centerxrect.bottom = screen_rect.bottomscreen.blit(image, rect)pygame.display.flip()#ship.blitme()'''run_game()

pygame制作游戏全套的相关推荐

  1. pygame小游戏(接球小游戏)

    本游戏要使用的是由Pycharm中的pygame模块来实现的,也可以在python中运行. 目录 介绍模块 最小开发框架 Pygame和sys模块 random模块 相关功能 窗口尺寸改变 键盘控制挡 ...

  2. 使用Python 3和Pygame构建游戏:第4部分

    总览 这是有关使用Python 3和Pygame制作游戏的五部分系列教程的第四部分. 在第三部分中,我们深入探讨Breakout的核心,学习了如何处理事件,遇到了Breakout主班,并了解了如何移动 ...

  3. Pygame制作答题类游戏的实现

    代码地址如下: http://www.demodashi.com/demo/13495.html 概述 个人比较喜欢玩这些答题类的游戏,在这类的游戏中其实存在着一些冷知识在里面.练习pygame的过程 ...

  4. 【有趣的Python小程序】Pygame制作键盘彩色闪烁打字游戏KeyBoardFlash

    刚刚的疫情发布会刚刚宣布,这一周我所在的区还是要停课.停课来说对于我们大多数人来说都是痛并快乐着的,快乐的是不用受到学校老师督促,但是痛苦的则是不断下滑的成绩.在这期间甚至还会有很多同学用手机刷机来玩 ...

  5. 手把手教你使用Pygame制作飞机大战小游戏,4万字超详细讲解!

    点击上方"早起Python",关注并"星标" 每日接收原创Python干货! 大家好,偷学Python系列是由小甜同学从初学者的角度学习Python的笔记,其特 ...

  6. 又是一年中秋至|Python Pygame制作中秋兔子接月饼游戏【源码+解析】

    一年中秋又快到了,今年加入了Python的学习行列,得益于Python的开发效率和易读性,网上写文章的次数多了起来,既然是中秋节那肯定要搞个应景的游戏才行. 左思右想没有头绪时,刚好看到一篇介绍Pyg ...

  7. python +pygame 制作五子连珠小游戏

    python +pygame 制作五子连珠小游戏 学习python半年了,今天分享一个利用pygame制作的五子连珠游戏. 一.代码: 1.球类,ball.py """ ...

  8. python下载字体管家_使用pygame制作打地鼠游戏

    使用pygame制作打地鼠游戏 1.运行结果预览 开始界面 第一关 第二关 第三关 第四关 第五关 游戏结束 2.游戏功能介绍 2.1开发环境: python版本:python3.7 2.2相关模块: ...

  9. python经典教程游戏_使用pygame制作经典小游戏:五子棋

    准备 python基础相关准备: pygame的基础知识,参考目光博客的"用Python和Pygame写游戏-从入门到精通" 安装python 3.8.0 在python官网下载, ...

最新文章

  1. 大厂技术文档:Redis+Nginx+Spring全家桶+Dubbo精选
  2. TypeError: 'stepUp' called on an object that does not implement interface HTMLInputElement.
  3. servlet实现用户登录
  4. 《走遍中国》珍藏版(六)
  5. Fluent Ribbon项目出现“命名空间“clr-namespace:Fluent;assembly=Fluent”中不存在“RibbonWindow”名称”的解决方法...
  6. linux之man命令
  7. java基础47 装饰着模式设计
  8. 插件Sytrus合成器功能介绍
  9. 15 个提高 Google 搜索效率的小技巧
  10. ACCESS数据库联结表实现
  11. 把统计代码改成“量子统计”了
  12. 三星mega2 android os,三星G7508Q (Galaxy Mega 2 双4G)一键救砖教程,轻松刷回官方系统...
  13. WinRAR 5.40无弹窗广告注册版下载
  14. opencv手动实现运动目标检测
  15. 愤怒的牛(重回基础二分)
  16. 怎么用计算机平方,手机计算器平方怎么按
  17. 清理win7系统盘空间
  18. 什么是SDK什么是CDN
  19. Nvidia显卡驱动下载
  20. Linux系统编程笔记(李慧琴) 2

热门文章

  1. 【HTML第二个综合案例】----相亲App注册页面
  2. 【ACPC2013】马里奥赛车(01背包)
  3. 有关javabean的说法不正确的是_关于JavaBean,下列的叙述哪一项是不正确的?( )...
  4. STM32F103ZET6的芯片工程改为STM32F103C8T6的工程
  5. 新一代极米Z6X和极米Z6X哪个好
  6. 自力更生给笔记本电脑换固态并重装系统
  7. Unity加载进度条
  8. 【巴比特前端校招+笔试/一面/二面】
  9. ssh时提示“WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED”
  10. android 自定义控件gif压缩包,android显示gif图片(自定义控件以及属性)