pygame.error: Couldn't open images\ship.bmp加了r和绝对路径还是报错,求大神指点

《python编程:从入门到实践》这本书中的《外星人入侵》的项目里有如下代码:
#coding=utf-8

import sys

import pygame

from settings import Settings
from ship import Ship

def run_game():
# 初始化pygame、设置和屏幕对象
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)

# 开始游戏的主循环
while True:

    # 监视键盘和鼠标事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

    # 每次循环时都重绘屏幕
    screen.fill(ai_settings.bg_color)
    ship.blitme()

    # 让最近绘制的屏幕可见
    pygame.display.flip()

run_game()

运行后报错:
File "C:\Users\admin\Desktop\alien_invasion\ship.py", line 8, in init
self.image = pygame.image.load(r'C:\Users\admin\Desktop\alien_invasion\images\ship.bmp')
pygame.error: Couldn't open C:\Users\admin\Desktop\alien_invasion\images\ship.bmp

我的是windows系统,也按照论坛上说的加了r、补全了路径,但仍然报错

4个回答

路径中的反斜杠\改为斜杆/。不行的话使用相对路径试试

换另外一张同样尺寸的图片上去试试,也许是图片有问题

路径中的反斜杠"\"改为双斜杠”\\”

pygame.image.load('one\two...')

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
pygame error: couldn't open the ship.bmp

在pygame里练习一个游戏程序,遇到“pygame error: couldn't open the ship.bmp”在网上查了下错误的原因,主要是说要补全路径或把bmp图片放在.py文件相同的目录下,我各种方式都试了,但还是报错... 以下是代码: import sys import pygame from settings import Settings from ship import Ship def run_game(): #initialize game and create a window obj pygame.init() ai_settings = Settings() screen = pygame.display.set_mode( (ai_settings.screen_width,ai_settings.screen_height)) pygame.display.set_caption("Alien Invasion") #creat a ship ship = Ship(screen) #begin main cycle of game while True: #monitor key and shubiao for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() #draw a new screen while a new cycle begin screen.fill(ai_settings.bg_color) ship.blitme() #show the near screen pygame.display.flip() run_game() 模块ship.py import pygame class Ship(): def __init__(self,screen): """initialize ship and set location of ship""" self.screen = screen #load image of ship and get the bounding box of the ship self.image = pygame.image.load(r'images\ship.bmp') self.rect = self.image.get_rect() self.screen_rect = screen.get_rect() #place each ship into center of bottom of screen self.rect.centerx = self.screen_rect.centerx self.rect.bottom = self.screen_rect.bottom def blitme(self): """drawing the ship in the specific place""" self.screen.blit(self.image,self.rect)

pygame.error: video system not initialized

按照视频的代码,但是报了这个错误,网上没有找到类似的答案 报错代码如下: ![图片说明](https://img-ask.csdn.net/upload/201908/17/1566022575_856149.png) 报错如下: ![图片说明](https://img-ask.csdn.net/upload/201908/17/1566022607_7422.png) 全部代码如下: import pygame from plan_sprites import * # 游戏的初始化 pygame.init() # 创建游戏的窗口 大小:480*700 screen = pygame.display.set_mode((480, 700)) # 绘制背景图像 # 1.加载图像数据 bg = pygame.image.load(r"H:\py\飞机大作战\images\background.jpg") screen.blit(bg, (0, 0)) # 3. updata更新屏幕 # 绘制英雄的飞机 hero = pygame.image.load(r"H:\py\飞机大作战\images\me1.png") screen.blit(hero, (150, 300)) # 可以在所有绘制工作完成后,统一调用updata方法 pygame.display.update() # 创建时钟对象 clock = pygame.time.Clock() # 1.定义rect记录飞机的初始位置 hero_rect = pygame.Rect(150, 300, 102, 106) # 创建敌机的精灵 enemy = GameSprite(r"H:\py\飞机大作战\images\enemy1.png") enemy1 = GameSprite(r"H:\py\飞机大作战\images\enemy1.png") # 创建敌机的精灵组 enemy_group = pygame.sprite.Group(enemy,enemy1) # 游戏循环-->意味着游戏的正式开始! while True: # 可以指定游戏循环内部的代码执行的频率 clock.tick(60) # # 捕获事件 # event_list = pygame.event.get() # if len(event_list) > 0: # print(event_list) # 监听事件 for event in pygame.event.get(): # 判断事件类型是否是退出事件 if event.type == pygame.QUIT: print("游戏结束!!") # quit 卸载所有的模块 pygame.quit() # exit()直接终止当前正在执行的程序 exit() # 2. 修改飞机的位置 hero_rect.y -= 1 # 判断飞机的位置 if hero_rect.y <= -126: hero_rect.y = 700 # 3. 调用blit方法绘制图像 screen.blit(bg, (0, 0)) screen.blit(hero, hero_rect) # 让精灵组调用两个方法 # updata 让组中的所有精灵更新位置 enemy_group.update() # drow 在screen 上绘制所有精灵 enemy_group.draw(screen) # 4. 调用updata方法更新显示 pygame.display.update() for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() pygame.quit() ``` ```

用pygame设计游戏时打不开声音文件

# Set up the music. pickUpSound = pygame.mixer.Sound('ssss.wav') pygame.mixer.music.load('hhhh.wav') pygame.mixer.music.play(-1, 0.0) 执行上面这段代码时,总是报错:‘’pygame.error: Unable to open file 'ssss.wav' ‘’ 注:相关文件已经放在代码所在的文件夹中。

pygame.display.flip()为什么无法如程序设计的更新屏幕

``` import pygame import sys def run_game: pygame.init() scareen=pygame.display.set_mode((1200,800)) pygame.dispaly.set_caption("Alien Invasion") while True: for event in pygame.event.get(): if event.type==pygame.QUIT: sys.exit() pygame.display.flip() run_game ``` 我前段时间macOS更新了Catalina后,再次使用这个程序,就出现了当程序跑到pygame.display.flip()就不再运行,卡在那儿的情况,该怎么处理

关于pygame中pygame.image.load()的问题

在vscode中,使用pygame.image.load()加载相对路径的图片,提示报错,但使用绝对路径却可以。 如何解决相对路径无法加载的问题?(在不改变原图片存放位置的情况下) ``` path = 'images/bg.jpg' bg = pygame.image.load(path) ``` 最后提示: ``` pygame.error: Couldn't open images/bg.jpg ```

使用pygame无法加载图片,求指教

# -*- coding:utf-8 -*- import pygame import time def main(): #1. 创建窗口 screen = pygame.display.set_mode((480,852),0,32) #2. 创建一个背景图片 background = pygame.image.load("D:\\plane\\plane1\\codes\\background.png") while True: screen.blit(background, (0,0)) pygame.display.update() time.sleep(0.01) if __name__ == "__main__": main() 编译报错显示: ![图片说明](https://img-ask.csdn.net/upload/201810/24/1540357022_111381.jpg)

pygame背景音乐无法读取

使用函数pygame.mixer.music.load("music")中的音乐文件无法读取,已经换了mp3模式和ogg模式均不能读取

Pygame surface.bilt方法的问题

image就是一张图片 self.rect=self.image.get_rect() self.screen.blit(self.image, self.rect) 众所周知,第二个参数用于指定绘制的位置,所以上面这种写法的第二个参数是rect,实际有4个值,于是我尝试了下面这么写也行 self.screen.blit(self.image, (self.rect.x, self.rect.y)) 而经我测试,就算指定四个值也完全没有任何影响 self.screen.blit(self.image, (self.rect.x, self.rect.y, 400, 500)) self.screen.blit(self.image, (self.rect.x, self.rect.y, 400, 600)) 绘制结果完全一样,说明后两个值根本没用 我的问题是,在我添加了一行self.rect.width = 100后,发现image在绘制时不能绘制到屏幕最右边的宽度为100的区域,这是为什么呢。。。 源码如下,一个打飞机小游戏 //ship.py import pygame class Ship(): def __init__(self, ai_settings, screen): """Initialize the ship, and set its starting position.""" self.screen = screen self.ai_settings = ai_settings # Load the ship image, and get its rect. self.image = pygame.image.load('images/ship.bmp') self.rect = self.image.get_rect() self.screen_rect = screen.get_rect() # Start each new ship at the bottom center of the screen. self.rect.centerx = self.screen_rect.centerx self.rect.bottom = self.screen_rect.bottom # Store a decimal value for the ship's center. self.center = float(self.rect.centerx) # Movement flags. self.moving_right = False self.moving_left = False def update(self): """Update the ship's position, based on movement flags.""" # Update the ship's center value, not the rect. if self.moving_right and self.rect.right < self.screen_rect.right: self.center += self.ai_settings.ship_speed_factor if self.moving_left and self.rect.left > 0: self.center -= self.ai_settings.ship_speed_factor # Update rect object from self.center. self.rect.centerx = self.center def blitme(self): """Draw the ship at its current location.""" self.rect.w = 100 self.screen.blit(self.image, self.rect) //game_function.py import sys import pygame from bullet import Bullet def check_keydown_events(event, ai_settings, screen, ship, bullets): """Respond to keypresses.""" 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: fire_bullet(ai_settings, screen, ship, bullets) def check_keyup_events(event, ship): """Respond to key releases.""" if event.key == pygame.K_RIGHT: ship.moving_right = False elif event.key == pygame.K_LEFT: ship.moving_left = False def check_events(ai_settings, screen, ship, bullets): """Respond to keypresses and mouse events.""" 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 fire_bullet(ai_settings, screen, ship, bullets): """Fire a bullet, if limit not reached yet.""" # Create a new bullet, add to bullets group. if len(bullets) < ai_settings.bullets_allowed: new_bullet = Bullet(ai_settings, screen, ship) bullets.add(new_bullet) def update_screen(ai_settings, screen, ship, bullets): """Update images on the screen, and flip to the new screen.""" # Redraw the screen, each pass through the loop. screen.fill(ai_settings.bg_color) # Redraw all bullets, behind ship and aliens. for bullet in bullets.sprites(): bullet.draw_bullet() ship.blitme() # Make the most recently drawn screen visible. pygame.display.flip() def update_bullets(bullets): """Update position of bullets, and get rid of old bullets.""" # Update bullet positions. bullets.update() # Get rid of bullets that have disappeared. for bullet in bullets.copy(): if bullet.rect.bottom <= 0: bullets.remove(bullet) //主程序 import pygame from pygame.sprite import Group from settings import Settings from ship import Ship import game_functions as gf def run_game(): # Initialize pygame, settings, and screen object. pygame.init() ai_settings = Settings() screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption("Alien Invasion") # Set the background color. bg_color = (230, 230, 230) # Make a ship. ship = Ship(ai_settings, screen) # Make a group to store bullets in. bullets = Group() # Start the main loop for the game. 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() 添加了self.rect.w = 100,飞机就不能移动到最右边了,这是为什么呢。。。

用sublime写python中pygame.image.load()图片引用后不显示。

import sys import pygame pygame.init() size = width,height = 320,240 screen = pygame.display.set_mode(size) color = (0,0,0) pic = pygame.image.load("pythonStart.png") picrect = pic.get_reect() while True : for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() screen.fill(color) screen.blit(pic,picrect) pygame.display.flip() ##游戏框出现后一闪就没了。报错如下,请大神指教!谢谢 ------------------------------- pygame 1.9.5 Hello from the pygame community. https://www.pygame.org/contribute.html Traceback (most recent call last): File "F:\SublimeText\HelloSublime.py", line 8, in <module> pic = pygame.image.load("pythonStart.png") pygame.error: Couldn't open pythonStart.png [Finished in 1.9s with exit code 1] [shell_cmd: python -u "F:\SublimeText\HelloSublime.py"] [dir: F:\SublimeText] [path: F:\Python\Python37;G:\pyStart;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\idmu\common;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\;C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\;F:\Python\Python37;F:\Python\Python37\Scripts\;F:\Python\Python37\]

pyinstaller打包后运行exe报错 -图片加载失败

python2.7 winds 64操作系统 eclipse里面可以正常运行,pyinstaller打包后运行exe报错 ---pygame.error: Couldn'topen image/background.png 这句代码报错f = pygame.image.load("image/background.png") 图片放在.py文件同目录 把路径改成绝对路径就没问题了,但是感觉这样太low。。。

mac pycharm pygame.error加载图片失败?

![图片说明](https://img-ask.csdn.net/upload/201909/07/1567866651_852379.png) 1、之前在win上正常运行的程序,迁移到mac上出现各种问题 2、现在主要是加载图片到位置错误

pyinstaller打包py成exe后音乐文件播放异常,pygame.error

已解决 虽然不知道什么原因 用pyinstaller打包以后pygame不支持播放mp3和ogg文件 我把音乐文件转换成wav格式就成功了 所以mp3和ogg在pycharm里可以正常使用,不过如果要转成exe的话还得先把音乐文件统一转化成wav才行 问题描述: ``` if self.direct == 1: pygame.init() music = r"music\ai.mp3" pygame.mixer.music.load(music) pygame.mixer.music.play() ``` 一个十分普通的语句,在pycharm里可以顺利运行,但使用pyinstaller完成打包,并把music文件夹复制到和exe文件同目录下后却不能正常播放music里面的音乐文件,出现如下报错:![图片说明](https://img-ask.csdn.net/upload/202001/11/1578673075_740305.png) 整条路径没有中文名,歌曲文件名为ai.mp3,也没有中文名; 打包语句:pyinstaller -D loadui_new.py 目前已经试过网上的冻结路径法、spec打包(使用--add-data添加文件)法,报错没有变化。 初学python,还请各位前辈能教一下,感激不尽

有关Python那点事,求解?

import sys import pygame def run_game(): pygame.init() screen = pygame.display.set_mode((1200, 800)) pygame.display.set_caption("Alien Invasion") bg_color = (230, 230, 230) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() screen.fill(bg_color) pygame.display.flip() run_game() 运行时,老是出现 pygame.error: video system not initialized 错误,怎么回事呢??

python显示 screen = pygame.display.set_mode((ai_setting.screen_width, ai_setting.screen_height)) AttributeError: 'Settings' object has no attribute 'screen_width'

#萌新向各位好心的大佬求教 import sys import pygame from settings import Settings def run_game(): #初始化pygame,设置和屏幕对象 pygame.init() ai_settings = Settings() screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height)) pygame.display.set_caption("Alien Invasion") #开始游戏的主循环 while True: #初始化pygame.设置和屏幕对象 # 监视键盘和鼠标事件 for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() #每次循环时都重绘制屏幕 scree.fill(ai_settings.bg_color) #让最近的绘制的屏幕可见 pygame.display.flip() run_game() #按教程书编写的模块 class Settings(): """储存《外星人入侵》的所有设置的类""" def _init_(self,screen_width,screen_height,bg_color): """初始化游戏的设置""" #屏幕设置 self.screen_width = 1200 self.screen_height = 800 self.bg_color = (230,230,230) #一运行就报错 screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height)) AttributeError: 'Settings' object has no attribute 'screen_width' #由衷的感谢大佬的帮助

pygame鼠标事件不执行是event问题还是刷新不成功问题?

pygame编写游戏的过程中,程序可以执行,但是对于鼠标点击的事件过程没有反应(设定为:左键点击往左移直到鼠标松开,右键同理),在鼠标点击过程中,并没有发生任何移动,不知道这是事件的问题,还是页面刷新不成功的问题? ``` for event in pygame.event.get(): if event.type== pygame.QUIT: pygame.quit() elif event.type == pygame.KEYDOWN: if event.key==pygame.K_RIGHT: ship.moving_right=True if event.key==pygame.K_LEFT: ship.moving_left=True elif event.type==pygame.KEYUP: if event.key==pygame.K_RIGHT: ship.moving_right=False if event.key==pygame.K_LEFT: ship.moving_left=False while True: gf.check_events(ship) ship.update() gf.update_screen(ai_settings,screen,ship) ``` ``` ``` ```

新人使用pycharm运行飞机大战项目报如下错误:AttributeError: module 'pygame.image' has no attribute 'get_rect'

看着网上的教学视频一步一步下来,当建立敌机的精灵后,在程序中调用这个精灵时就会报错,单独运行精灵程序时不会报错,在网上也找了相关的资料,但类似的好像也不对; 主程序代码如下: ``` import pygame from plane_sprites import * pygame.init() #创建游戏窗口 480*700 screen = pygame.display.set_mode((480,700)) #绘制背景图像 bg = pygame.image.load("./images/background.png") screen.blit(bg,(0,0)) #绘制英雄的飞机 hero = pygame.image.load("./images/me1.png") screen.blit(hero,(150,400)) #可以在所有绘制工作结束后,统一调度update方法啊 pygame.display.update() #创建时钟对象 clock = pygame.time.Clock() #1.定义rect记录飞机的初始位置 hero_rect = pygame.Rect(150,400,102,126) #创建敌机的精灵 enemy = GameSprite("./images/enemy1.png") enemy1 = GameSprite("./images/enemy1.png",2) #创建敌机的精灵组 enemy_group = pygame.sprite.Group(enemy,enemy1) #游戏循环>意味着游戏正式开始 while True: #1.可以指定循环体内部的代码执行的频率 clock.tick(60) """ #捕获事件 event_list = pygame.event.get() if len(event_list) > 0: print(event_list) """ #事件监听 for event in pygame.event.get(): #判断用户是否点击了关闭按钮 if event.type == pygame.QUIT: print('退出游戏!') pygame.quit() #直接退出系统 exit() #2.修改飞机的位置 hero_rect.y -= 1 #判读飞机的位置 if hero_rect.y <= -126: hero_rect.y = 700 #3.调用blit方法绘制图像 screen.blit(bg,(0,0)) screen.blit(hero,hero_rect) #让精灵族调用两个方法 #update - 让组中的所有精灵都更新位置 enemy_group.update() #draw - 在screen上显示所有的精灵 enemy_group.draw(screen) #4.使用update方法更新显示 pygame.display.update() pygame.quit() ``` 调用的精灵程序如下: ``` import pygame class GameSprite(pygame.sprite.Sprite): """飞机大战精灵""" def __init__(self, image_name, speed=1): #调用父类的初始化方法 super().__init__() #定义对象的属性 self.image = pygame.image.load(image_name) self.rect = pygame.image.get_rect() self.speed = speed def update(self): #在屏幕的垂直方向移动 self.rect.y += self.speed ``` 运行后报如下的错误: AttributeError: module 'pygame.image' has no attribute 'get_rect' ![图片说明](https://img-ask.csdn.net/upload/202002/08/1581141436_82065.png) 还请各位大佬有时间能帮忙看下这个问题我出错在哪里了,谢谢哈

pycharm安装pygame报错ImportError: No module named 'pygame.base'急急急!!!

![图片说明](https://img-ask.csdn.net/upload/201905/11/1557534487_303729.png)!![图片说明](https://img-ask.csdn.net/upload/201905/11/1557534514_959588.png)!![图片说明](https://img-ask.csdn.net/upload/201905/11/1557534544_540629.png) ![图片说明](https://img-ask.csdn.net/upload/201905/11/1557540767_71606.png) 都配置好了为什么导入不了???

pygame窗口为什么打不开 而且pycharm显示pygame.quit()无法搜索到 这是为什么?(新手)

![图片说明](https://img-ask.csdn.net/upload/201812/18/1545145120_864817.png)![我按网课视频上输入的代码![图片说明](https://img-ask.csdn.net/upload/201812/18/1545145199_820312.png) ](https://img-ask.csdn.net/upload/201812/18/1545145125_949915.png

新人求教:请Python大佬帮我看看为什么这段代码会提示“SyntaxError: invalid syntax”语法错误

本来之前按照书上的好好的,但是不知道怎么的,后面修改代码的时候就出现了语法错误: Traceback (most recent call last): File "alien_invasion.py", line 9, in <module> import game_functions as gf File "D:\python_work\第12章\alien_invasion\game_functions.py", line 45 def check_play_button(ai_settings,screen,stats,sb,play_button,ship, ^ SyntaxError: invalid syntax ------------------ (program exited with code: 1) 请按任意键继续. . . 这个是我的代码 ``` 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() # 隐藏光标 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() ``` ![再原文件里](https://img-ask.csdn.net/upload/202004/19/1587308473_671891.png) 后来我有重新贴到新的.PY文件中 ![粘贴在新的.PY文件后](https://img-ask.csdn.net/upload/202004/19/1587308522_263589.png) 做过的措施: 排除了中文符号的可能(用英文字符逐个修改的); 然后也取消过缩进让后面的参数在一排还是会提示错误; 重启过电脑; 将此段代码重新编写过; 为什么会出现语法错误呢?请求大佬指教! 以下是整个文件的代码 ``` # coding:utf-8 # game_functions.py import sys from time import sleep import pygame from bullet import Bullet from alien import Alien 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: fire_bullet(ai_settings,screen,ship,bullets) elif event.key == pygame.K_q: sys.exit() 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) 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 = False def 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,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 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() # 隐藏光标 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_collisions(ai_settings,screen,stats,sb,ship, aliens,bullets) def check_bullet_alien_collisions(ai_settings,screen,stats,sb,ship, aliens,bullets): ##响应子弹和外星人的碰撞## # 删除发生碰撞的子弹和外星人 collisions = pygame.sprite.groupcollide(bullets,aliens,True,True) if collisions: for aliens in collisions.values(): #1 stats.score += ai_settings.alien_points * len(aliens) sb.prep_score() check_high_score(stats,sb) if len(aliens) == 0: # 如果整群外星人都被消灭,就提高一个等级 bullets.empty() #p.s在此调用settings.py的increase_speed方法 ai_settings.increase_speed() #提高等级 stats.level += 1 sb.prep_level() create_fleet(ai_settings,screen,ship,aliens) def get_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)) return number_aliens_x def 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 / (2 * alien_height)) return number_rows def create_alien(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) def create_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 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) break def change_fleet_direction(ai_settings,aliens): # 将整群外星人下移,并改变它们的方向""" for alien in aliens.sprites(): alien.rect.y += ai_settings.fleet_drop_speed ai_settings.fleet_direction *= -1 def ship_hit(ai_settings,screen,stats,sb,ship,aliens,bullets): """响应被外星人撞到的飞船""" if stats.ships_left >0 : # 将ships_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) 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) break def update_aliens(ai_settings,screen,stats,sb,ship,aliens,bullets): ##PS:注意 screen,stats交换了位置 # 检查是否外星人位于屏幕边缘,并更新整群外星人的位置 # check_fleet_edges(ai_settings,aliens) aliens.update() # 检测外星人和飞船之间的碰撞 if pygame.sprite.spritecollideany(ship,aliens): ship_hit(ai_settings,screen,stats,sb,ship,aliens,bullets) ##PS:注意 screen,stats交换了位置 # 检查是否有外星人到达屏幕底端 check_aliens_bottom(ai_settings,screen,stats,sb,ship,aliens,bullets) def check_high_score(stats,sb): ###检查是否诞生了新的最高得分### if stats.score > stats.high_score: stats.high_score = stats.score sb.prep_high_score() ```

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

你连存活到JDK8中著名的Bug都不知道,我怎么敢给你加薪

CopyOnWriteArrayList.java和ArrayList.java,这2个类的构造函数,注释中有一句话 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public ArrayList(Collection&lt;? ...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

记录下入职中软一个月(外包华为)

我在年前从上一家公司离职,没想到过年期间疫情爆发,我也被困在家里,在家呆着的日子让人很焦躁,于是我疯狂的投简历,看面试题,希望可以进大公司去看看。 我也有幸面试了我觉得还挺大的公司的(虽然不是bat之类的大厂,但是作为一名二本计算机专业刚毕业的大学生bat那些大厂我连投简历的勇气都没有),最后选择了中软,我知道这是一家外包公司,待遇各方面甚至不如我的上一家公司,但是对我而言这可是外包华为,能...

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

培训班出来的人后来都怎么样了?(二)

接着上回说,培训班学习生涯结束了。后面每天就是无休止的背面试题,不是没有头脑的背,培训公司还是有方法的,现在回想当时背的面试题好像都用上了,也被问到了。回头找找面试题,当时都是打印下来天天看,天天背。 不理解呢也要背,面试造飞机,上班拧螺丝。班里的同学开始四处投简历面试了,很快就有面试成功的,刚开始一个,然后越来越多。不知道是什么原因,尝到胜利果实的童鞋,不满足于自己通过的公司,嫌薪水要少了,选择...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

6年开发经验女程序员,面试京东Java岗要求薪资28K

写在开头: 上周面试了一位女程序员,上午10::30来我们部门面试,2B哥接待了她.来看看她的简历: 个人简历 个人技能: ● 熟悉spring mvc 、spring、mybatis 等框架 ● 熟悉 redis 、rocketmq、dubbo、zookeeper、netty 、nginx、tomcat、mysql。 ● 阅读过juc 中的线程池、锁的源...

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

SpringBoot系列之Redis缓存使用详细教程

Spring的缓存抽象 Spring从3.1开始定义了一系列抽象接口来统一不同的缓存技术;并支持使用Java Caching(JSR-107)注解简化我们进行缓存开发。Spring Cache 只负责维护抽象层,具体的实现由你的技术选型来决定。将缓存处理和缓存技术解除耦合。 JSR107 Java Caching(JSR-107)定义了5个核心接口,分别是CachingProvider, Cach...

推荐9个能让你看一天的网站

分享的这9个保证另你意外的网站,每个都非常实用!非常干货!毫不客气的说,这些网站最少值10万块钱。 利用好这些网站,会让你各方面的技能都得到成长,不说让你走上人生巅峰,但对比现在的你,在眼界、学识、技能方面都有质的飞跃。 一、AIRPANO 传送门:https://www.airpano.com/360photo_list.php 这是一个可以躺在家里,就能环游世界的神奇网站。 世界那么大,绝大多...

大牛都会用的IDEA调试技巧!!!

导读 前天面试了一个985高校的实习生,问了他平时用什么开发工具,他想也没想的说IDEA,于是我抛砖引玉的问了一下IDEA的调试用过吧,你说说怎么设置断点...

都前后端分离了,咱就别做页面跳转了!统统 JSON 交互

文章目录1. 无状态登录1.1 什么是有状态1.2 什么是无状态1.3 如何实现无状态1.4 各自优缺点2. 登录交互2.1 前后端分离的数据交互2.2 登录成功2.3 登录失败3. 未认证处理方案4. 注销登录 这是本系列的第四篇,有小伙伴找不到之前文章,松哥给大家列一个索引出来: 挖一个大坑,Spring Security 开搞! 松哥手把手带你入门 Spring Security,别再问密...

月薪22K程序员,打卡迟到10次,收到工资短信一脸懵逼

每家公司为了保证公司员工每天的工作时间,一般都会采用上下班打卡的工作制度,这其实是一个很常见的是,本身也没有什么问题的。正所谓无规矩不成方圆,公司肯定是有公司的规矩,虽然每个员工都很不喜欢这些规矩来束缚我们,但是公司也只是为了能更好的管理员工。但是一家公司如果一成不变的使用打卡制度,而不会去变通管理,也真不一定是好事。 打卡制度特别对于销售部门来说,不但会让公司发展不起来,还很容易丢失员工。但如...

97年世界黑客编程大赛冠军作品(大小仅为16KB),惊艳世界的编程巨作

这是世界编程大赛第一名作品(97年Mekka ’97 4K Intro比赛)汇编语言所写。 整个文件只有4095个字节, 大小仅仅为16KB! 不仅实现了3D动画的效果!还有一段震撼人心的背景音乐!!! 内容无法以言语形容,实在太强大! 下面是代码,具体操作看最后! @echo off more +1 %~s0|debug e100 33 f6 bf 0 20 b5 10 f3 a5...

程序员是做全栈工程师好?还是专注一个领域好?

昨天,有位大一的同学私信我,说他要做全栈工程师。 我一听,这不害了孩子么,必须制止啊。 谁知,讲到最后,更确定了他做全栈程序员的梦想。 但凡做全栈工程师的,要么很惨,要么很牛! 但凡很牛的,绝不是一开始就是做全栈的! 全栈工程师听起来好听,但绝没有你想象的那么简单。 今天听我来给你唠,记得帮我点赞哦。 一、全栈工程师的职责 如果你学习编程的目的只是玩玩,那随意,想怎么学怎么学。...

不要再到处使用 === 了

我们知道现在的开发人员都使用 === 来代替 ==,为什么呢?我在网上看到的大多数教程都认为,要预测 JavaScript 强制转换是如何工作这太复杂了,因此建议总是使用===。这些都...

什么是a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站?00后的世界我不懂!

A站 AcFun弹幕视频网,简称“A站”,成立于2007年6月,取意于Anime Comic Fun,是中国大陆第一家弹幕视频网站。A站以视频为载体,逐步发展出基于原生内容二次创作的完整生态,拥有高质量互动弹幕,是中国弹幕文化的发源地;拥有大量超粘性的用户群体,产生输出了金坷垃、鬼畜全明星、我的滑板鞋、小苹果等大量网络流行文化,也是中国二次元文化的发源地。 B站 全称“哔哩哔哩(bilibili...

十个摸鱼,哦,不对,是炫酷(可以玩一整天)的网站!!!

文章目录前言正文**1、Kaspersky Cyberthreat real-time map****2、Finding Home****3、Silk – Interactive Generative Art****4、Liquid Particles 3D****5、WINDOWS93****6、Staggering Beauty****7、Ostagram图片生成器网址****8、全历史网址*...

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

​能让德国人放弃现金支付​,也没谁了

在新冠疫情中,德国人越来越多地选择在超市,加油站或其他商店付款时使用非接触式付款方式。德国信贷协会Deutschen Kreditwirtschaft (DK) 的一位发言人告诉德国新...

大厂的 404 页面都长啥样?最后一个笑了...

每天浏览各大网站,难免会碰到404页面啊。你注意过404页面么?猿妹搜罗来了下面这些知名网站的404页面,以供大家欣赏,看看哪个网站更有创意: 正在上传…重新上传取消 腾讯 正在上传…重新上传取消 网易 淘宝 百度 新浪微博 正在上传…重新上传取消 新浪 京东 优酷 腾讯视频 搜...

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

代码注释如此沙雕,会玩还是你们程序员!

某站后端代码被“开源”,同时刷遍全网的,还有代码里的那些神注释。 我们这才知道,原来程序员个个都是段子手;这么多年来,我们也走过了他们的无数套路… 首先,产品经理,是永远永远吐槽不完的!网友的评论也非常扎心,说看这些代码就像在阅读程序员的日记,每一页都写满了对产品经理的恨。 然后,也要发出直击灵魂的质问:你是尊贵的付费大会员吗? 这不禁让人想起之前某音乐app的穷逼Vip,果然,穷逼在哪里都是...

原来实现钉钉自动签到如此简单,每天准时上下班不是梦

本文主要介绍了如何利用现成软件快速实现钉钉自动签到功能,核心思路非常简单,甚至无任何编程基础的小白也能轻松实现定时自动打卡功能.

前端还能这么玩?(女朋友生日,用前端写了一个好玩的送给了她,高兴坏了)

前端还能这么玩?(女朋友生日,用前端写了一个好玩的送给了她,高兴坏了)

爬虫(101)爬点重口味的

小弟最近在学校无聊的很哪,浏览网页突然看到一张图片,都快流鼻血。。。然后小弟冥思苦想,得干一点有趣的事情python 爬虫库安装https://s.taobao.com/api?_ks...

讲真,这两款idea插件,能治愈你英语不好的病

时不时就有小伙伴问我,“二哥,能推荐一款 IDE 吗?”你看这话问的,现在搞 Java 的不都在用 Intellij IDEA 吗,还用得着推荐(我已经和 Eclipse 分手了)。然后小伙伴又说,“二哥,IDEA 支持中文吗?我英语不太好。”你看这话问的,搞编程的,英语不好是硬伤啊! 不过,随着 IDEA 最新版(版本号是 2020.1)的发布,英语不好的病可以彻底治愈了。为什么这么说呢?因为 ...

面试官给我挖坑:a[i][j] 和 a[j][i] 有什么区别?

点击上方“朱小厮的博客”,选择“设为星标”后台回复&#34;1024&#34;领取公众号专属资料本文以一个简单的程序开头——数组赋值:int LEN = 10000; int[][] ...

相关热词 c# 局部 截图 页面 c#实现简单的文件管理器 c# where c# 取文件夹路径 c# 对比 当天 c# fir 滤波器 c# 和站 队列 c# txt 去空格 c#移除其他类事件 c# 自动截屏
立即提问