pygame 为什么飞船只能左右移动不能上下移?
import pygame
import sys

def run_game():
    pygame.init()
    screen=pygame.display.set_mode((1200,600))
    pygame.display.set_caption("game over")


    image=pygame.image.load('selfimages/airplane.bmp')
    rect=image.get_rect()
    screen_rect=screen.get_rect()

    rect.centerx=screen_rect.centerx
    rect.centery=screen_rect.centery
    xcenter=float(rect.centerx)
    ycenter=float(rect.centery)

    moving_right=False
    moving_left=False
    moving_down=False
    moving_up=False

    while True:
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                sys.exit()
            elif event.type==pygame.KEYDOWN:
                if event.key==pygame.K_RIGHT:
                    moving_right=True

                elif event.key==pygame.K_LEFT:
                    moving_left=True

                elif event.key==pygame.K_UP:
                    moving_up=True

                elif event.key==pygame.K_DOWN:
                    moving_dowm=True
            elif event.type==pygame.KEYUP:
                if event.key==pygame.K_RIGHT:
                    moving_right=False

                elif event.key==pygame.K_LEFT:
                    moving_left=False

                elif event.key==pygame.K_UP:
                    moving_up=False

                elif event.key==pygame.K_DOWN:
                    moving_dowm=False

        if moving_right and rect.right<screen_rect.right:
            xcenter+=1.5
        if moving_left and rect.left>0:
            xcenter-=1.5
        if moving_up and rect.top<screen_rect.top:
            ycenter+=1.5
        if moving_down and rect.bottom>0:
            ycenter-=1.5

        rect.centerx=xcenter
        rect.centery=ycenter

        screen.fill((255,255,255))
        screen.blit(image,rect)
        pygame.display.flip()


run_game()

麻烦帮我看看问题出在哪,谢谢大家

3个回答

moving_dowm=True 你写错字母了

你的y轴边框位置写反了,在Pygame,原点(0, 0)位于屏幕左上角,向右下方移动时,坐标值将增大

   if moving_down and rect.bottom<screen_rect.bottom:
            ycenter+=1.5
   if moving_up and rect.top>0:
            ycenter-=1.5

虽然没能帮楼主解决你的问题,但是看到你的代码我就明白为什么我的不能同时上下移动了,谢谢!

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
求大佬指点!请问python从入门到实践飞船游戏中怎么使飞船上下移动啊?运行时可以左右移动就是不能上下移动。。。

ship.py ``` import pygame class Ship(): def __init__(self,ai_settings,screen): '''初始化飞船''' self.screen=screen self.ai_settings=ai_settings #加载飞船 self.image=pygame.image.load('images/ship.png') self.rect=self.image.get_rect()#rect表示矩形对象,此处获取了飞船的外接矩形 self.screen_rect=screen.get_rect() #飞船放中央 self.rect.centerx=self.screen_rect.centerx #center,centerx,centery分别表示放在x和y,x,y中央 self.rect.centery=self.screen_rect.centery #在飞船的属性center中储存小数值 self.centerx=float(self.rect.centerx) self.centery=float(self.rect.centery) self.moving_right=False self.moving_left=False self.moving_top=False self.moving_bottom=False def update(self): """根据移动标志调整飞船位置""" #更新飞船的center值,而不是rect if self.moving_right and self.rect.right<self.screen_rect.right: self.centerx+=self.ai_settings.ship_speed_factor if self.moving_left and self.rect.left>0: self.centerx-=self.ai_settings.ship_speed_factor if self.moving_top and self.rect.top<self.screen_rect.top: self.centery-=self.ai_settings.ship_speed_factor if self.moving_bottom and self.rect.bottom>0: self.centery+=self.ai_settings.ship_speed_factor #根据self.center更新rect self.rect.centerx=self.centerx self.rect.centery=self.centery def blitme(self): """指定位置放飞船""" self.screen.blit(self.image,self.rect)#绘制这艘船 ``` alien_invasion.py ``` import pygame#开发游戏所需功能 from settings import Settings from ship import Ship import game_functions as gf def run_game(): pygame.init()#初始化背景设置 ai_settings=Settings() screen=pygame.display.set_mode(#创建显示窗口 (ai_settings.screen_width,ai_settings.screen_height)) screen=pygame.display.set_mode((1200,700))#指定游戏尺寸宽和高 pygame.display.set_caption("Alien Invasion") ship=Ship(ai_settings,screen) while True:#检测是否正常运行 gf.check_events(ship) ship.update()#飞船位置更新 gf.update_screen(ai_settings,screen,ship) run_game()#初始化游戏并开始循环 ``` game_functions.py ``` import sys import pygame def check_keydown_events(event,ship): """响应按键""" 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_DOWN: ship.moving_BOTTOM=True elif event.key==pygame.K_UP: ship.moving_TOP=True def check_keyup_events(event,ship): """响应松开""" if event.key==pygame.K_RIGHT: ship.moving_right=False if event.key==pygame.K_LEFT: ship.moving_left=False if event.key==pygame.K_DOWN: ship.moving_bottom=False if event.key==pygame.K_UP: ship.moving_top=False def check_events(ship): "相应鼠标按键和事件" for event in pygame.event.get(): if event.type==pygame.QUIT: sys.exit()#退出游戏模块 elif event.type==pygame.KEYDOWN:#检测到按了键 check_keydown_events(event,ship) elif event.type==pygame.KEYUP:#松开按键 check_keyup_events(event,ship) def update_screen(ai_settings,screen,ship): #重绘屏幕 screen.fill(ai_settings.bg_color) ship.blitme() #让屏幕可见 pygame.display.flip() ``` settings.py ``` class Settings(): "储存类" def __init__(self): """初始化游戏设置""" #屏幕设置 self.screen_width=1200 self.screen_height=700 self.bg_color=(230,230,230)#设置背景色,RGB颜色定义 self.ship_speed_factor=0.5 ```

小白求助pygame中纵向移动

将Xue类中update()方法中self.rect.y += 1 改成下方代码就只会出现一行雪花下落 ``` import pygame import sys from xue import Xue def check_events(): """检查事件""" for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() def get_num_x(screen): """计算一行放置的雪花个数""" xue = Xue(screen) space_x = screen.get_rect().width - 2 * xue.rect.width num_x = int(space_x / (2 * xue.rect.width)) return num_x def get_num_y(screen): """ 计算放置雪花的列数 大概是屏幕的一半 """ xue = Xue(screen) space_y = (screen.get_rect().height / 2) - (2 * xue.rect.height) num_y = int(space_y / (2 * xue.rect.height)) return num_y def create_xuehuas(screen, xues): """创建一大堆雪花""" for n_y in range(get_num_y(screen)): for n_x in range(get_num_x(screen)): xue = Xue(screen) xue.rect.y = xue.rect.height + 2 * xue.rect.height * n_y xue.rect.x = xue.rect.width + 2 * xue.rect.width * n_x xues.add(xue) def update_screen(screen, xues): """更新屏幕""" screen.fill((245, 245, 245)) xues.draw(screen) pygame.display.flip() ``` ``` ```import pygame from pygame.sprite import Sprite class Xue(Sprite): """关于雪的类""" def __init__(self, screen): super().__init__() self.screen = screen self.image = pygame.image.load('xuehua/xh.bmp') self.rect = self.image.get_rect() self.rect.x = self.rect.width self.rect.y = self.rect.height self.y = float(self.rect.y) def update(self): """向下移动雪花""" self.y += 1 self.rect.y = self.y ``` ```import pygame import sys from xue import Xue from pygame.sprite import Group import xia_xue as xx def run_game(): pygame.init() screen = pygame.display.set_mode((800, 600)) pygame.display.set_caption("下雪") xues = Group() xx.create_xuehuas(screen, xues) while True: xx.check_events() xues.update() xx.update_screen(screen, xues) run_game()

python飞船移动问题?

提问:python飞船移动问题 飞船根据4个方向键上下左右移动,且移动到边框时从对面出来,比如移动到最右边然后从最左边出来 但是现在问题是左右移动没问题但是上下移动就实现不了,就比如移动到最上面时飞船不会从下面出来,而是一直往上就消失了,想了半天实在没找到问题所在,求大神解答 图片 ![图片说明](https://img-ask.csdn.net/upload/201907/16/1563263510_989873.png) 代码 ```python """ 项目: 飞船外星人游戏 作者: 硕 日期: 2019/7/13 版本: v_1.0 """ import pygame from pygame.sprite import Sprite import sys class setting: """ 系统设置类: 背景长宽 背景颜色 飞船速度 """ def __init__(self): self.screen_width = 1200 self.screen_length = 800 self.ship_speed_factor = 3 self.bg_color = (230, 230, 230) self.bullet_speed_factor = 1 self.bullet_width = 3 self.bullet_height = 15 self.bullet_color = 60, 60, 60 class Ship: def __init__(self, screen, setting): self.screen = screen self.image = pygame.image.load("images/ship.bmp") self.rect = self.image.get_rect() self.screen_rect = screen.get_rect() self.setting = setting self.rect.centerx = self.screen_rect.centerx self.rect.centery = self.screen_rect.bottom - 100 self.x = float(self.rect.centerx) self.y = float(self.rect.centery) self.moving_right = False self.moving_left = False self.moving_up = False self.moving_down = False def blitme(self): self.screen.blit(self.image, self.rect) def update(self, setting): ai_setting = setting if self.moving_right: if self.rect.right == self.screen_rect.right: self.x = 0 self.x += self.setting.ship_speed_factor else: self.x += self.setting.ship_speed_factor elif self.moving_left: if self.rect.left == self.screen_rect.left: self.x = ai_setting.screen_width self.x -= self.setting.ship_speed_factor else: self.x -= self.setting.ship_speed_factor elif self.moving_up: if self.rect.top == self.screen_rect.top: self.y = ai_setting.screen_length self.y -= self.setting.ship_speed_factor else: self.y -= self.setting.ship_speed_factor elif self.moving_down: if self.rect.bottom == self.screen_rect.bottom: self.y = 0 self.y += self.setting.ship_speed_factor else: self.y += self.setting.ship_speed_factor self.rect.centerx = self.x self.rect.centery = self.y def check_keydown_events(event, ship): 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_UP: ship.moving_up = True elif event.key == pygame.K_DOWN: ship.moving_down = True 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 elif event.key == pygame.K_UP: ship.moving_up = False elif event.key == pygame.K_DOWN: ship.moving_down = False def check_events(ship): for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() elif event.type == pygame.KEYDOWN: check_keydown_events(event, ship) elif event.type == pygame.KEYUP: check_keyup_events(event, ship) def update_events(screen, ship, setting): screen.fill(setting.bg_color) ship.blitme() pygame.display.flip() def run_game(): pygame.init() screen = pygame.display.set_mode((1200, 800)) pygame.display.set_caption("Alien Invasion") ai_setting = setting() ship = Ship(screen,ai_setting) while True: check_events(ship) update_events(screen, ship, ai_setting) ship.update(ai_setting) def main(): run_game() if __name__ == '__main__': main() ```

pygame移动方块碰撞设定边界问题

``` ```import math import sys import numpy as np import pygame class Maze(object): state_dim = 4 action_dim = 1 action_bound = [0, 2 * math.pi] def __init__(self): pygame.init() self.screen = pygame.display.set_mode((600, 500)) # self.a = np.random.random_sample() * (2 * math.pi) # action 取值范围[0, 2π] self.env = pygame.draw.rect(self.screen, (0, 0, 0), (45, 30, 500, 450), 2) # 初始化agent的信息 self.agent_pos_x = 48 self.agent_pos_y = 34 self.v = 0.7 self.vel_x = 0 self.vel_y = 0 self.agent_pos = self.agent_pos_x, self.agent_pos_y, 50, 45 # start point self.start_pos_x = 48 self.start_pos_y = 34 self.start_pos = self.start_pos_x, self.start_pos_y, 50, 45 # hell位置信息 self.hell_pos_x = 300 # hell initial position self.hell_pos_y = 250 self.vel_xh = 0 # .1 * np.random.random_sample() # make hell move self.vel_yh = 0 # .1 * np.random.random_sample() # hell point self.hell_pos_x += self.vel_xh self.hell_pos_y += self.vel_yh self.hell_pos = self.hell_pos_x, self.hell_pos_y, 50, 45 if self.hell_pos_x > 490 or self.hell_pos_x < 48: self.vel_xh = -self.vel_xh if self.hell_pos_y > 430 or self.hell_pos_y < 34: self.vel_yh = -self.vel_yh # end point self.end_pos_x = 490 self.end_pos_y = 430 self.end_pos = self.end_pos_x, self.end_pos_y, 50, 45 # self.end = pygame.draw.rect(self.screen, (255, 0, 0), self.end_pos, 0) # pygame.display.set_caption("Simple Moving") ########################################################################################### def step(self, action): done = False # action = np.clip(action, a_min=0, a_max=2 * math.pi) action = np.clip(action, *self.action_bound) self.vel_x = self.v * math.cos(action) self.vel_y = self.v * math.sin(action) self.agent_pos_x = self.agent_pos_x + self.vel_x self.agent_pos_y = self.agent_pos_y + self.vel_y # def colliderect(self): # self.agent = pygame.draw.rect(self.screen, (255, 255, 0), (self.agent_pos_x, self.agent_pos_y, 50, 45), 0) # normalize features dist1 = [(self.end_pos_x - self.agent_pos_x), (self.end_pos_y - self.agent_pos_y)] if self.agent.colliderect(self.hell): # 智能体与障碍物是否相碰 reward = -1 print(reward) print("misson failed") done = True elif self.agent.colliderect(self.end): reward = 1 print("victory") done = True else: reward = 0 done = False s = np.concatenate(([self.agent_pos_x, self.agent_pos_y], dist1)) if done: pygame.quit() sys.exit() return s, reward, done def outside(self): if self.agent_pos_y > 490 or self.agent_pos_y < 48: # 碰到边界线反弹 self.vel_x = -self.vel_x if self.agent_pos_y > 430 or self.agent_pos_y < 34: self.vel_y = -self.vel_y def reset(self): self.agent_pos_x = 48 self.agent_pos_y = 34 self.vel_x = 0 self.vel_y = 0 self.agent_pos = self.agent_pos_x, self.agent_pos_y, 50, 45 self.agent = pygame.draw.rect(self.screen, (255, 255, 0), (self.agent_pos_x, self.agent_pos_y, 50, 45), 0) dist1 = [(self.end_pos_x - self.agent_pos_x), (self.end_pos_y - self.agent_pos_y)] s = np.concatenate(([self.agent_pos_x, self.agent_pos_y], dist1)) return s def render(self): self.screen = pygame.display.set_mode((600, 500)) self.screen.fill((255, 255, 255)) pygame.draw.rect(self.screen, (0, 0, 0), (45, 30, 500, 450), 2) pygame.draw.rect(self.screen, (0, 0, 0), self.start_pos, 2) self.hell = pygame.draw.rect(self.screen, (0, 0, 0), self.hell_pos, 0) self.end = pygame.draw.rect(self.screen, (255, 0, 0), self.end_pos, 0) self.agent = pygame.draw.rect(self.screen, (255, 255, 0), (self.agent_pos_x, self.agent_pos_y, 50, 45), 0) pygame.display.flip() def sample_action(self): return np.random.random_sample() * (2 * math.pi) # action 取值范围[0, 2π] # def run(self): # env = Maze() # '''''''''''''''''''''''''' # while True: # for event in pygame.event.get(): # if event.type == pygame.QUIT: # pygame.quit() # exit(0) # env.render() # env.step(env.sample_action()) # # if env.colliderect() is True: # # env.reset() if __name__ == '__main__': env = Maze() '''''''''''''''''''''''''' while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit(0) env.render() env.outside() env.step(env.sample_action()) 1. **** 网上大多碰到边缘都是按照我写的outside进行的,但是我的怎么运行还是会出边界,求解

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) ``` ``` ``` ```

《外星人入侵项目》飞船碰撞外星人后不在底部生成,而是在原位置的问题

![图片说明](https://img-ask.csdn.net/upload/202004/17/1587109701_642967.png) 我按照书上写的代码,运行游戏的时候发现飞船碰撞到外星人以后,是在原位置刷新,不会在屏幕底部刷新,不清楚为什么。 主程序: ``` import pygame from settings import Settings from game_stats import GameStats from button import Button from ship import Ship from pygame.sprite import Group import game_functions as gf from alien import Alien def run_game(): """初始化游戏,设置屏幕对象""" pygame.init() # 初始化所有导入的pygame模块 ai_settings = Settings() # 用ai_settings代替Settings() screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_height)) # 设置屏幕的长宽, pygame.display.set_mode((width, height)) pygame.display.set_caption("Alien Invasion") # 设置当前窗口的标题 # 创建Play按钮 play_button = Button(ai_settings, screen, "Play") # 创建一个用于存储游戏统计信息的实例 stats = GameStats(ai_settings) ship = Ship(ai_settings, screen) # 将设置好的屏幕参数传给Ship里面,然后用ship代替Ship类 bullets = Group() # 创建一个用于储存子弹的编组,回头会存储bullet模块新建的子弹,Group类用于保存和管理多个Sprite对象的容器类 # 创建一个用于储存外星人的编组 aliens = Group() # 创建一个外星人群 gf.create_fleet(ai_settings, screen, ship, aliens) # 开始游戏的主循环 while True: # 监视键盘和鼠标事件 gf.check_events(ai_settings, screen, stats, play_button, ship, aliens, bullets) # 返回ship是由于gf需要ship的返回值,用于调用ship中update函数 if stats.game_active: ship.update() # 移动飞船, 更新飞船的位置 gf.update_bullets(ai_settings, screen, ship, aliens, bullets) # 更新子弹位置 gf.update_aliens(ai_settings, stats, screen, ship, aliens, bullets) # 更新外星人位置 # 每次循环时都会重新绘制屏幕,让最近绘制的屏幕可见 gf.update_screen(ai_settings, screen, stats, ship, aliens, bullets, play_button) run_game() ``` 游戏功能程序: ``` 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: # 我们读取属性event.key,查看它是否是键盘右键 ship.moving_right = True # 是的话就向右移动飞船 elif event.key == pygame.K_LEFT: # 我们读取属性event.key,查看它是否是键盘左键 ship.moving_left = True # 是的话就向左移动飞船 elif event.key == pygame.K_UP: # 我们读取属性event.key,查看它是否是键盘上键 ship.moving_up = True # 是的话就向上移动飞船 elif event.key == pygame.K_DOWN: # 我们读取属性event.key,查看它是否是键盘下键 ship.moving_down = True # 是的话就向下移动飞船 elif event.key == pygame.K_SPACE: # 我们读取属性event.key,查看它是否是键盘空格键 fire_bullet(ai_settings, screen, ship, bullets) # 是的话我们将运行函数fire_bullet elif event.key == pygame.K_q: sys.exit() def check_keyup_events(event, ship): """响应松开""" if event.key == pygame.K_RIGHT: # 当event按键属性key遇到右键的KEYUP事件时就会让移动标志变成False ship.moving_right = False elif event.key == pygame.K_LEFT: # 当event按键属性key遇到左键的KEYUP事件时就会让移动标志变成False ship.moving_left = False elif event.key == pygame.K_UP: ship.moving_up = False elif event.key == pygame.K_DOWN: ship.moving_down = False def check_events(ai_settings, screen, stats, play_button, ship, aliens, bullets): """响应按键和鼠标事件""" for event in pygame.event.get(): # 获得事件储存到event里面 if event.type == pygame.QUIT: # 检查event事件的类型是不是鼠标点× sys.exit() # 是的话就退出游戏 elif event.type == pygame.KEYDOWN: # 检测event事件是不是KEYDOWN事件 check_keydown_events(event, ai_settings, screen, ship, bullets) # 如果发生按键事件,将各种参数带入到check_keydown_events() elif event.type == pygame.KEYUP: # 我们添加了一个新的elif模块,用于响应KEYUP事件,让事件type类型知道是按键key check_keyup_events(event, ship) elif event.type == pygame.MOUSEBUTTONDOWN: # 检测鼠标按下的事件 mouse_x, mouse_y, = pygame.mouse.get_pos() # 它返回一个元组,其中包含玩家单击时鼠标的x和y的坐标 check_play_button(ai_settings, screen, stats, play_button, ship, aliens, bullets, mouse_x, mouse_y) def check_play_button(ai_settings, screen, stats, play_button, ship, aliens, bullets, mouse_x, mouse_y): """在玩家单机Play按钮时开始新的游戏""" if play_button.rect.collidepoint(mouse_x, mouse_y): # 使用collidepoint()检查鼠标单击的位置是否在Play按钮的rect内 # 重置游戏统计信息 stats.reset_stats() stats.game_active = True # 清空外星人列表和子弹列表 aliens.empty() bullets.empty() # 创建一群新的外星人,并让飞船居中 create_fleet(ai_settings, screen, ship, aliens) ship.center_ship() def fire_bullet(ai_settings, screen, ship, bullets): """创建一颗子弹,并将其加入到编组bullets中""" if len(bullets) < ai_settings.bullets_allowed: # 限制子弹数量在10以内 new_bullet = Bullet(ai_settings, screen, ship) # 新建一个子弹 bullets.add(new_bullet) # 在bullets中再添加一个new_bullet def update_bullets(ai_settings, screen, ship, aliens, bullets): """更新子弹的位置,并删除已经消失的子弹""" # 更新子弹的位置 bullets.update() # 通过执行这个函数来让我们绘制的东西显示在屏幕上 # 删除已消失的子弹 for bullet in bullets.copy(): # 为了不从列表和编组中删除条目,我们遍历编组的副本 if bullet.rect.bottom <= 0: # 如果子弹飞出屏幕 bullets.remove(bullet) # 将子弹从bullets中删除 check_bullet_alien_collisions(ai_settings, screen, ship, aliens, bullets) def check_bullet_alien_collisions(ai_settings, screen, ship, aliens, bullets): # 检查是否有子弹击中了外星人 # 如果是这样就删除外星人和子弹 collisions = pygame.sprite.groupcollide(bullets, aliens, True, True) if len(aliens) == 0: # 删除现有的子弹并且新建一群外星人 bullets.empty() create_fleet(ai_settings, screen, ship, aliens) 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循环,创建相应行数的外星人 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 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 # rect.x和rect.y是分别自动等于rect.left和rect.top的 alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number # 这相当于将外星人依次下放到各行 aliens.add(alien) def check_fleet_edges(ai_settings, aliens): """有外星人到达边缘时采取相应的措施""" for alien in aliens.sprites(): # 这里的aliens.sprites()返回一个列表包含所有精灵 if alien.check_edges(): # 如果alien里面的check_edges函数返回是Ture,就执行下面的 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, stats, screen, ship, aliens, bullets): """响应被外星人撞到的飞船""" if stats.ships_left > 0: # 将ships_left减1 stats.ships_left -= 1 # 清空外星人列表和子弹列表 aliens.empty() bullets.empty() # 创建一群新的外星人,并将飞船放到屏幕底端中央 create_fleet(ai_settings, screen, ship, aliens) ship.center_ship() else: stats.game_active = False # 暂停 sleep(0.5) def check_aliens_bottom(ai_settings, stats, screen, ship, aliens, bullets): """检查是否有外星人到达了屏幕底端""" screen_rect = screen.get_rect() for alien in aliens.sprites(): if alien.rect.bottom >= screen_rect.bottom: # 像飞船被撞到一样进行处理 ship_hit(ai_settings, stats, screen, ship, aliens, bullets) break def update_aliens(ai_settings, stats, screen, ship, aliens, bullets): """检查是否有外星人位于屏幕边缘,更新外星人群中所有外星人的位置""" check_fleet_edges(ai_settings, aliens) aliens.update() # 检测外星人和飞船之间的碰撞 if pygame.sprite.spritecollideany(ship, aliens): ship_hit(ai_settings, stats, screen, ship, aliens, bullets) #检查是否有外星人到达屏幕底端 check_aliens_bottom(ai_settings, stats, screen, ship, aliens, bullets) def update_screen(ai_settings, screen, stats, ship, aliens, bullets, play_button): """更新屏幕上的图像,并切换到新屏幕上""" # 每次循环时都重绘屏幕 screen.fill(ai_settings.bg_color) # 在飞船和外星人后面重绘所有子弹 for bullet in bullets.sprites(): # 这里的bullets.sprites()返回一个列表包含所有精灵 bullet.draw_bullet() # 将遍历的精灵都调用draw_bullet函数 ship.blitme() # 绘制飞船 aliens.draw(screen) # 绘制外星人 # 如果游戏处于非活动状态,就绘制Play按钮 if not stats.game_active: play_button.draw_button() # 让最近绘制的屏幕可见 pygame.display.flip() ``` ship设置程序: ``` # Ship主要是获取飞船外形,然后 import pygame class Ship(): def __init__(self, ai_settings, screen): # 形参列表中添加screen让飞船能够获取屏幕设置,添加ai_settings获取速度设置 """初始化飞船并设置其初始位置""" self.screen = screen # 我们将形参screen存储在一个属性中,以便能够在update()中使用它 self.ai_settings = ai_settings # 我们将形参ai_settings存储在一个属性中,以便能够在update()中使用它 # 加载飞船图像并获取其外接矩形 self.image = pygame.image.load('images/ship.bmp') # 从文件中加载图片,并存储在self.image里面 self.rect = self.image.get_rect() # get_rect()是处理矩形图形的方法,返回值包含矩形的居中属性center centerx centery # 给这个属性赋值到self.rect中去 self.screen_rect = screen.get_rect() # self.screen也是获得了rect属性,返回值也是矩形的居中属性 # 将每艘船的新飞船放在屏幕底部中央 self.rect.centerx = self.screen_rect.centerx # self.rect代表的是加载图形的rect属性,将它的x坐标 self.rect.centery = self.screen_rect.centery # 和背景图的x坐标居中属性相等, 意味着加载图片在背景图的中心位置 self.rect.bottom = self.screen_rect.bottom # 加载图片底部和背景图底部相等 # 在飞船的属性center中存储小数值 self.center1 = float(self.rect.centerx) self.center2 = float(self.rect.centery) """其他关于矩形操作的位置关键词有:top, left, bottom, right topleft, bottomleft, topright, bottomright midtop, midleft, midbottom, midright center, centerx, centery size, width, height""" # 移动标志 self.moving_right = False self.moving_left = False self.moving_up = False self.moving_down = False def update(self): """根据移动标志调整飞船的位置""" # 更新飞船的center值,而不是rect if self.moving_right and self.rect.right < self.screen_rect.right: self.center1 += self.ai_settings.ship_speed_factor if self.moving_left and self.rect.left > 0: # 0代表背景的左侧 self.center1 -= self.ai_settings.ship_speed_factor if self.moving_up and self.rect.top > 0: self.center2 -= self.ai_settings.ship_speed_factor if self.moving_down and self.rect.bottom < self.screen_rect.bottom: self.center2 += self.ai_settings.ship_speed_factor # 根据self.center更新rect对象 self.rect.centerx = self.center1 self.rect.centery = self.center2 def blitme(self): """在指定位置绘制飞船""" self.screen.blit(self.image, self.rect) def center_ship(self): """让飞船在屏幕上居中""" self.center = self.screen_rect.centerx ```

在pycharm下导入pygame模块,其后面的函数智能提示不全,什么原因?

最近在win10下用pycharm来编写python代码,比如在pygame(已在pycharm下安装了)这个包下输入pygame.init(),但init()这个函数是不提示的,后来我发现在pygame包下还有很多都不提示,但是我在cmd下用ipython来导入pygame,是可以正常提示的。请问这个问题该怎么解决?谢谢。 ![图片说明](https://img-ask.csdn.net/upload/201806/06/1528254041_459012.png)

关于Pygame模块的问题 为什么会这样

![图片说明](https://img-ask.csdn.net/upload/201709/15/1505487384_708631.png) 我已经安装了pygame 却在运行代码的时候出现错误

pygame中调用pyqt5写的设置界面,只能显示一次不能多次启动,求解?

最近学习python用pygame做了一个小游戏,在拓展游戏设置和网络对战功能时,用pyqt5,Qt Designer设计了游戏设置和网络界面,发现第一次启动时能正常调用界面,但关闭之后不能再次打开,尝试过直接调用和新开线程调用,均不能解决问题,求解!? #窗口文件代码 #窗口界面代码 ``` class Ui_dialog(object): def setupUi(self, dialog): dialog.setObjectName("dialog") dialog.setWindowModality(QtCore.Qt.NonModal) dialog.resize(480, 320) self.buttonBox = QtWidgets.QDialogButtonBox(dialog) self.buttonBox.setGeometry(QtCore.QRect(240, 270, 221, 41)) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) self.buttonBox.setObjectName("buttonBox") self.verticalLayoutWidget = QtWidgets.QWidget(dialog) self.verticalLayoutWidget.setGeometry(QtCore.QRect(9, 9, 461, 251)) self.verticalLayoutWidget.setObjectName("verticalLayoutWidget") self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget) self.verticalLayout.setContentsMargins(0, 0, 0, 0) self.verticalLayout.setObjectName("verticalLayout") self.label_2 = QtWidgets.QLabel(self.verticalLayoutWidget) self.label_2.setObjectName("label_2") self.verticalLayout.addWidget(self.label_2) self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.radioButton_3 = QtWidgets.QRadioButton(self.verticalLayoutWidget) self.radioButton_3.setEnabled(True) self.radioButton_3.setTabletTracking(False) self.radioButton_3.setChecked(True) self.radioButton_3.setObjectName("radioButton_3") self.buttonGroup = QtWidgets.QButtonGroup(dialog) self.buttonGroup.setObjectName("buttonGroup") self.buttonGroup.addButton(self.radioButton_3) self.horizontalLayout.addWidget(self.radioButton_3) self.radioButton = QtWidgets.QRadioButton(self.verticalLayoutWidget) self.radioButton.setObjectName("radioButton") self.buttonGroup.addButton(self.radioButton) self.horizontalLayout.addWidget(self.radioButton) self.verticalLayout.addLayout(self.horizontalLayout) self.label = QtWidgets.QLabel(self.verticalLayoutWidget) self.label.setObjectName("label") self.verticalLayout.addWidget(self.label) self.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.radioButton_4 = QtWidgets.QRadioButton(self.verticalLayoutWidget) self.radioButton_4.setChecked(True) self.radioButton_4.setObjectName("radioButton_4") self.buttonGroup_2 = QtWidgets.QButtonGroup(dialog) self.buttonGroup_2.setObjectName("buttonGroup_2") self.buttonGroup_2.addButton(self.radioButton_4) self.horizontalLayout_2.addWidget(self.radioButton_4) self.radioButton_5 = QtWidgets.QRadioButton(self.verticalLayoutWidget) self.radioButton_5.setObjectName("radioButton_5") self.buttonGroup_2.addButton(self.radioButton_5) self.horizontalLayout_2.addWidget(self.radioButton_5) self.radioButton_10 = QtWidgets.QRadioButton(self.verticalLayoutWidget) self.radioButton_10.setObjectName("radioButton_10") self.buttonGroup_2.addButton(self.radioButton_10) self.horizontalLayout_2.addWidget(self.radioButton_10) self.radioButton_11 = QtWidgets.QRadioButton(self.verticalLayoutWidget) self.radioButton_11.setObjectName("radioButton_11") self.buttonGroup_2.addButton(self.radioButton_11) self.horizontalLayout_2.addWidget(self.radioButton_11) self.radioButton_6 = QtWidgets.QRadioButton(self.verticalLayoutWidget) self.radioButton_6.setObjectName("radioButton_6") self.buttonGroup_2.addButton(self.radioButton_6) self.horizontalLayout_2.addWidget(self.radioButton_6) self.verticalLayout.addLayout(self.horizontalLayout_2) self.label_3 = QtWidgets.QLabel(self.verticalLayoutWidget) self.label_3.setObjectName("label_3") self.verticalLayout.addWidget(self.label_3) self.horizontalSlider = QtWidgets.QSlider(self.verticalLayoutWidget) self.horizontalSlider.setMaximum(10) self.horizontalSlider.setProperty("value", 5) self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal) self.horizontalSlider.setTickInterval(0) self.horizontalSlider.setObjectName("horizontalSlider") self.verticalLayout.addWidget(self.horizontalSlider) self.label_4 = QtWidgets.QLabel(self.verticalLayoutWidget) self.label_4.setObjectName("label_4") self.verticalLayout.addWidget(self.label_4) self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.radioButton_7 = QtWidgets.QRadioButton(self.verticalLayoutWidget) self.radioButton_7.setObjectName("radioButton_7") self.buttonGroup_3 = QtWidgets.QButtonGroup(dialog) self.buttonGroup_3.setObjectName("buttonGroup_3") self.buttonGroup_3.addButton(self.radioButton_7) self.horizontalLayout_3.addWidget(self.radioButton_7) self.radioButton_8 = QtWidgets.QRadioButton(self.verticalLayoutWidget) self.radioButton_8.setChecked(True) self.radioButton_8.setObjectName("radioButton_8") self.buttonGroup_3.addButton(self.radioButton_8) self.horizontalLayout_3.addWidget(self.radioButton_8) self.verticalLayout.addLayout(self.horizontalLayout_3) self.retranslateUi(dialog) self.buttonBox.accepted.connect(dialog.accept) self.buttonBox.rejected.connect(dialog.reject) self.radioButton_5.clicked.connect(self.gamedj) QtCore.QMetaObject.connectSlotsByName(dialog) dialog.setTabOrder(self.radioButton_3, self.radioButton) dialog.setTabOrder(self.radioButton, self.radioButton_4) dialog.setTabOrder(self.radioButton_4, self.radioButton_5) dialog.setTabOrder(self.radioButton_5, self.radioButton_10) dialog.setTabOrder(self.radioButton_10, self.radioButton_11) dialog.setTabOrder(self.radioButton_11, self.radioButton_6) dialog.setTabOrder(self.radioButton_6, self.horizontalSlider) dialog.setTabOrder(self.horizontalSlider, self.radioButton_7) dialog.setTabOrder(self.radioButton_7, self.radioButton_8) def retranslateUi(self, dialog): _translate = QtCore.QCoreApplication.translate dialog.setWindowTitle(_translate("dialog", "游戏设置")) self.label_2.setText(_translate("dialog", "游戏模式选择:")) self.radioButton_3.setText(_translate("dialog", "普通阶")) self.radioButton.setText(_translate("dialog", "可变阶")) self.label.setText(_translate("dialog", "游戏阶数(最高阶):")) self.radioButton_4.setText(_translate("dialog", "4")) self.radioButton_5.setText(_translate("dialog", "5")) self.radioButton_10.setText(_translate("dialog", "6")) self.radioButton_11.setText(_translate("dialog", "7")) self.radioButton_6.setText(_translate("dialog", "8")) self.label_3.setText(_translate("dialog", "游戏速度选择:")) self.label_4.setText(_translate("dialog", "道具模式选择:")) self.radioButton_7.setText(_translate("dialog", "开启")) self.radioButton_8.setText(_translate("dialog", "关闭")) #逻辑执行类 class MyMainWindow(QDialog,Ui_dialog): def __init__(self, parent = None): super(MyMainWindow, self).__init__(parent) self.setupUi(self) # 连接槽函数 #self.radioButton_5.clicked.connect(self.gamedj) #定义新增槽函数ok def gamedj(self): print(“o'k” ) #设置内容测试 #定义调用函数 def setting_ui(): app = QApplication(sys.argv) win = MyMainWindow() win.show() app.exec() #新开线程 class setui_Thread(threading.Thread): def __init__(self): super(setui_Thread, self).__init__() def run(self): currentTreadname = threading.currentThread() #测试 print("set ui running in", currentTreadname) #测试 setting_ui() setui = setui_Thread() setui.setDaemon(daemonic=True) #调用线程或函数代码片 #检测鼠标点击是否在游戏设置 if ksyx3.textRect.collidepoint(mouse_x,mouse_y): if not ai_settings.game_set: ai_settings.game_set = True #setui.run() setui.start() ``` 请各位大神答疑,谢谢!

pygame如何实现等边三角形和圆移动的同时同心旋转?

我想要用pygame写消灭病毒这一游戏,现在写到病毒圆形后面一直旋转的三角形,使用pygame.transform.rotate却不能与圆同心旋转 ``` # 病毒类 class Viruses(pygame.sprite.Sprite): def __init__(self, image, position, x_speed, y_speed,screen): ''' 初始化 :param image: 图片名字 :param position: 位置 :param x_speed: 水平的速度 :param y_speed: 竖直的速度 ''' pygame.sprite.Sprite.__init__(self) self.image = pygame.image.load(image) self.rect = self.image.get_rect() self.rect.center = position self.X_speed = x_speed self.Y_speed = y_speed self.image2 = pygame.image.load('images/8 (13).png') self.rect2 = self.image.get_rect() self.rect2.centerx = self.rect.centerx self.rect2.centery = self.rect.centery - 40 #可见性 self.visible = True self.screen = screen self.angle = 1 ''' 移动 ''' def update(self, *args): self.rect = self.rect.move(self.X_speed, self.Y_speed) self.rect2 = self.rect2.move(self.X_speed, self.Y_speed) def check_edges(self): #如果位于屏幕边缘,就返回True screen_rect = self.screen.get_rect() if self.rect.right >= screen_rect.right: return True elif self.rect.left <= 0: return True else: return False def blitme(self): #在指定位置绘制三角 self.new_image2 = pygame.transform.rotate(self.image2, self.angle) self.angle += 1 newRect = self.new_image2.get_rect() # newRect.left, newRect.top = self.rect2.left, self.rect2.top newRect.center = self.rect2.center self.screen.blit(self.new_image2,newRect) ``` 屏幕更新函数 ``` def update_screen(ai_settings,screen,ship,virals,bullets,jishen,back,flash,bombs,bflash,sanjiaos): #更新屏幕上的图像,并切换到新屏幕 #每次循环时都重绘屏幕 back.blitme() bullets.draw(screen) for viral in virals: viral.blitme() virals.draw(screen) flash.draw(ship) ship.blitme() jishen.blitme() for bomb in bombs: if bomb.visible: bomb.draw() #让最近绘制的屏幕可见 pygame.display.flip() ``` 每次三角形都不能和圆同心旋转 ![图片说明](https://img-ask.csdn.net/upload/201908/11/1565519341_789555.png)![图片说明](https://img-ask.csdn.net/upload/201908/11/1565519353_143782.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

pygame无法加载图片,不停空转

初学python , 用 pygame 编飞机大战,在导入背景图片时遇到困难 代码如下: 运行时没显示错误,但是在一张空白 pygame window 下空转。我用的是 mac python 3.7.1, pygame 1.9.4版本。请教大神代码有什么问题啊?多谢! import pygame from pygame.locals import * import time def main(): screen = pygame.display.set_mode((480, 852),0,32) background = pygame.image.load("./feiji/background.png") plane = pygame.image.load("./feiji/hero1.png") screen.blit(background, (0, 0)) pygame.display.update() while True: pass main()

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()就不再运行,卡在那儿的情况,该怎么处理

用pycharm导入pygame ,为什么package列表中没有显示却可以用?

如图 ![图片说明](https://img-ask.csdn.net/upload/201812/09/1544357220_889352.jpg) 运行以后 ![图片说明](https://img-ask.csdn.net/upload/201812/09/1544357244_468424.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.time.get_ticks()**与**pygame.time.Clock()**这两个函数实现的,具体怎么用看了半天依然没明白,谁哪位大牛解释一下不

macos10.14 pygame 不显示颜色

无法显示背景颜色,不知为何。新人学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一按f就退回原窗口大小,请问为什么?

pygame一按f就退回原窗口大小,本人mac os,求助! ``` import pygame import sys def screen_event(): global screen,size,key_pressed #初始大小 size = pygame.display.list_modes()[8] screen = pygame.display.set_mode(size, pygame.RESIZABLE) #关闭窗口 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() #全屏操作 key_pressed = pygame.key.get_pressed() if key_pressed[pygame.K_f]: size = pygame.display.list_modes()[0] screen = pygame.display.set_mode(size, pygame.FULLSCREEN|pygame.HWSURFACE) if key_pressed[pygame.K_ESCAPE]: size = pygame.display.list_modes()[8] screen = pygame.display.set_mode(size) pygame.init() while True: screen_event() #填充背景 screen.fill((0,0,0)) #更新界面 pygame.display.flip() ```

pygame 贪吃蛇遇到的问题

做了两个黑洞,进入一个黑洞会传送到另一个黑洞,但是timer.tick(30)帧太快导致无法从传送,改成timer.tick(2)就可以,这是为什么,应该怎么做?主程序代码如下: ``` 主程序开始 pygame.init() img_size =40 img_group = list() screen_size = 0 #pygame.FULLSCREEN screen = pygame.display.set_mode((24*img_size,18*img_size),screen_size) pygame.display.set_caption("嗷大喵贪吃蛇") face = pygame.image.load("face.png") load_pic() game_init() game_over = False last_time = 0 bgm = None auto_play = False step_time = 400 waiting =True audio_init() rePlay = True play_sound(bgm) while True: timer.tick(2) ticks = pygame.time.get_ticks() current_time = time.clock() for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() elif event.type == MOUSEBUTTONUP: if waiting == True: waiting = False game_over = False last_time = 0 auto_play = False step_time = 400 game_init() keys = pygame.key.get_pressed() if keys[K_ESCAPE]: pygame.quit() sys.exit() elif keys[K_UP] or keys[K_w]: snake.velocity = Point(0,-1) elif keys[K_DOWN] or keys[K_s]: snake.velocity = Point(0,1) elif keys[K_LEFT] or keys[K_a]: snake.velocity = Point(-1,0) elif keys[K_RIGHT] or keys[K_d]: snake.velocity = Point(1,0) elif keys[K_f]: if screen_size == pygame.FULLSCREEN: screen_size =0 else: screen_size =pygame.FULLSCREEN screen = pygame.display.set_mode((24*img_size,18*img_size),screen_size) pygame.display.set_caption("嗷大喵贪吃蛇") elif keys[K_PLUS] or keys[K_KP_PLUS]: step_time -= 10 if step_time <50: step_time=50 elif keys[K_MINUS] or keys[K_KP_MINUS]: step_time += 10 if step_time >400: step_time = 400 elif keys[K_SPACE]: if auto_play: auto_play = False step_time = 400 else: auto_play = True step_time = 100 if waiting: screen.blit(face,(0,0)) else: if not game_over: hole_group.update(ticks) snake.update(ticks) food_group.update(ticks) #检测是否捡起食物,并增加身体长度 hit_list = pygame.sprite.groupcollide(snake.segments, \ food_group, False, True) if len(hit_list) > 0: food_group.add(Food()) snake.add_segment() #检测是否碰到了自己的身体 for n in range(1, len(snake.segments)): if pygame.sprite.collide_rect(snake.segments[0], snake.segments[n]): game_over = True #检查屏幕边界 head_x = snake.segments[0].X//img_size head_y = snake.segments[0].Y//img_size if head_x < 0: snake.segments[0].X = 23 * img_size elif head_x > 24: snake.segments[0].X = 0 * img_size if head_y < 0: snake.segments[0].Y = 17 * img_size elif head_y > 18: snake.segments[0].Y = 0 * img_size #检测是否进入黑洞,并从另一个黑洞出来 holex = snake.segments[0].X holey = snake.segments[0].Y if holex == hole1.X and holey == hole1.Y: snake.segments[0].X = hole2.X snake.segments[0].Y = hole2.Y elif holex == hole2.X and holey == hole2.Y: snake.segments[0].X = hole1.X snake.segments[0].Y = hole1.Y #执行自动寻路代码 if auto_play: auto_move() backbuffer.fill((20,50,20)) snake.draw(backbuffer) food_group.draw(backbuffer) hole_group.draw(backbuffer) screen.blit(backbuffer, (0,0)) if not game_over: print_text(font, 0, 0, "Length " + str(len(snake.segments))) print_text(font, 0, 20, "Position " + str(snake.segments[0].X//img_size) + \ "," + str(snake.segments[0].Y//img_size)) else: print_text(font, 0, 0, "GAME OVER") waiting = True game_over = False #显示自动字样 if auto_play: print_text(font, 600, 0, "AUTO") #循环播放背景音乐 if int(current_time)%200 ==0 and rePlay: play_sound(bgm) rePlay = False if int(current_time)%200 == 1: rePlay = True pygame.display.update() ```

定量遥感中文版 梁顺林著 范闻捷译

这是梁顺林的定量遥感的中文版,由范闻捷等翻译的,是电子版PDF,解决了大家看英文费时费事的问题,希望大家下载看看,一定会有帮助的

Java 最常见的 200+ 面试题:面试必备

这份面试清单是从我 2015 年做了 TeamLeader 之后开始收集的,一方面是给公司招聘用,另一方面是想用它来挖掘在 Java 技术栈中,还有那些知识点是我不知道的,我想找到这些技术盲点,然后修复它,以此来提高自己的技术水平。虽然我是从 2009 年就开始参加编程工作了,但我依旧觉得自己现在要学的东西很多,并且学习这些知识,让我很有成就感和满足感,那所以何乐而不为呢? 说回面试的事,这份面试...

机器学习初学者必会的案例精讲

通过六个实际的编码项目,带领同学入门人工智能。这些项目涉及机器学习(回归,分类,聚类),深度学习(神经网络),底层数学算法,Weka数据挖掘,利用Git开源项目实战等。

远程工具,免费

远程工具,免费

java jdk 8 帮助文档 中文 文档 chm 谷歌翻译

JDK1.8 API 中文谷歌翻译版 java帮助文档 JDK API java 帮助文档 谷歌翻译 JDK1.8 API 中文 谷歌翻译版 java帮助文档 Java最新帮助文档 本帮助文档是使用谷

csma/ca和csma/cd的matlab仿真源代码带有详细的注释

csma/ca和csma/cd的matlab仿真源代码带有详细的注释,载波侦听,随意设置节点数,带有炫酷的图形展示效果。

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

软件测试入门、SQL、性能测试、测试管理工具

软件测试2小时入门,让您快速了解软件测试基本知识,有系统的了解; SQL一小时,让您快速理解和掌握SQL基本语法 jmeter性能测试 ,让您快速了解主流来源性能测试工具jmeter 测试管理工具-禅道,让您快速学会禅道的使用,学会测试项目、用例、缺陷的管理、

pokemmo的资源

pokemmo必须的4个rom 分别为绿宝石 火红 心金 黑白 还有汉化补丁 资源不错哦 记得下载

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

无线通信中的智能天线:IS-95和第3代CDMA应用_.pdf

无线通信中的智能天线:IS-95和第3代CDMA应用_.pdf

设计模式(JAVA语言实现)--20种设计模式附带源码

课程亮点: 课程培训详细的笔记以及实例代码,让学员开始掌握设计模式知识点 课程内容: 工厂模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式、原型模型、代理模式、单例模式、适配器模式 策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式 课程特色: 笔记设计模式,用笔记串连所有知识点,让学员从一点一滴积累,学习过程无压力 笔记标题采用关键字标识法,帮助学员更加容易记住知识点 笔记以超链接形式让知识点关联起来,形式知识体系 采用先概念后实例再应用方式,知识点深入浅出 提供授课内容笔记作为课后复习以及工作备查工具 部分图表(电脑PC端查看):

Java8零基础入门视频教程

这门课程基于主流的java8平台,由浅入深的详细讲解了java SE的开发技术,可以使java方向的入门学员,快速扎实的掌握java开发技术!

玩转Linux:常用命令实例指南

人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。 本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 --------------------------------------------------------------- 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+700元编程礼包。 &nbsp;

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

想学好JAVA必须要报两万的培训班吗? Java大神勿入 如果你: 零基础想学JAVA却不知道从何入手 看了一堆书和视频却还是连JAVA的环境都搭建不起来 囊中羞涩面对两万起的JAVA培训班不忍直视 在职没有每天大块的时间专门学习JAVA 那么恭喜你找到组织了,在这里有: 1. 一群志同道合立志学好JAVA的同学一起学习讨论JAVA 2. 灵活机动的学习时间完成特定学习任务+每日编程实战练习 3. 热心助人的助教和讲师及时帮你解决问题,不按时完成作业小心助教老师的家访哦 上一张图看看前辈的感悟: &nbsp; &nbsp; 大家一定迫不及待想知道什么是极简JAVA学习营了吧,下面就来给大家说道说道: 什么是极简JAVA学习营? 1. 针对Java小白或者初级Java学习者; 2. 利用9天时间,每天1个小时时间; 3.通过 每日作业 / 组队PK / 助教答疑 / 实战编程 / 项目答辩 / 社群讨论 / 趣味知识抢答等方式让学员爱上学习编程 , 最终实现能独立开发一个基于控制台的‘库存管理系统’ 的学习模式 极简JAVA学习营是怎么学习的? &nbsp; 如何报名? 只要购买了极简JAVA一:JAVA入门就算报名成功! &nbsp;本期为第四期极简JAVA学习营,我们来看看往期学员的学习状态: 作业看这里~ &nbsp; 助教的作业报告是不是很专业 不交作业打屁屁 助教答疑是不是很用心 &nbsp; 有奖抢答大家玩的很嗨啊 &nbsp; &nbsp; 项目答辩终于开始啦 &nbsp; 优秀者的获奖感言 &nbsp; 这是答辩项目的效果 &nbsp; &nbsp; 这么细致的服务,这么好的氛围,这样的学习效果,需要多少钱呢? 不要1999,不要199,不要99,只要9.9 是的你没听错,只要9.9以上所有就都属于你了 如果你: 1、&nbsp;想学JAVA没有基础 2、&nbsp;想学JAVA没有整块的时间 3、&nbsp;想学JAVA没有足够的预算 还等什么?赶紧报名吧,抓紧抢位,本期只招300人,错过只有等时间待定的下一期了 &nbsp; 报名请加小助手微信:eduxy-1 &nbsp; &nbsp;

Python数据清洗实战入门

本次课程主要以真实的电商数据为基础,通过Python详细的介绍了数据分析中的数据清洗阶段各种技巧和方法。

董付国老师Python全栈学习优惠套餐

购买套餐的朋友可以关注微信公众号“Python小屋”,上传付款截图,然后领取董老师任意图书1本。

linux下利用/proc进行进程树的打印

在linux下利用c语言实现的进程树的打印,主要通过/proc下的目录中的进程文件,获取status中的进程信息内容,然后利用递归实现进程树的打印

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

HoloLens2开发入门教程

本课程为HoloLens2开发入门教程,讲解部署开发环境,安装VS2019,Unity版本,Windows SDK,创建Unity项目,讲解如何使用MRTK,编辑器模拟手势交互,打包VS工程并编译部署应用到HoloLens上等。

150讲轻松搞定Python网络爬虫

【为什么学爬虫?】 &nbsp; &nbsp; &nbsp; &nbsp;1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到! &nbsp; &nbsp; &nbsp; &nbsp;2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: 网络请求:模拟浏览器的行为从网上抓取数据。 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 &nbsp; 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! 【课程服务】 专属付费社群+每周三讨论会+1v1答疑

MySQL 8.0.19安装教程(windows 64位)

话不多说直接开干 目录 1-先去官网下载点击的MySQL的下载​ 2-配置初始化的my.ini文件的文件 3-初始化MySQL 4-安装MySQL服务 + 启动MySQL 服务 5-连接MySQL + 修改密码 先去官网下载点击的MySQL的下载 下载完成后解压 解压完是这个样子 配置初始化的my.ini文件的文件 ...

Python数据挖掘简易入门

&nbsp; &nbsp; &nbsp; &nbsp; 本课程为Python数据挖掘方向的入门课程,课程主要以真实数据为基础,详细介绍数据挖掘入门的流程和使用Python实现pandas与numpy在数据挖掘方向的运用,并深入学习如何运用scikit-learn调用常用的数据挖掘算法解决数据挖掘问题,为进一步深入学习数据挖掘打下扎实的基础。

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

本课程适合CCNA或HCNA网络小白同志,高手请绕道,可以直接学习进价课程。通过本预科课程的学习,为学习网络工程师、思科CCNA、华为HCNA这些认证打下坚实的基础! 重要!思科认证2020年2月24日起,已启用新版认证和考试,包括题库都会更新,由于疫情原因,请关注官网和本地考点信息。题库网络上很容易下载到。

Ubuntu18.04安装教程

Ubuntu18.04.1安装一、准备工作1.下载Ubuntu18.04.1 LTS2.制作U盘启动盘3.准备 Ubuntu18.04.1 的硬盘空间二、安装Ubuntu18.04.1三、安装后的一些工作1.安装输入法2.更换软件源四、双系统如何卸载Ubuntu18.04.1新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列...

sql语句 异常 Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your

在我们开发的工程中,有时候会报 [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ------ 这种异常 不用多想,肯定是我们的sql语句出现问题,下面...

西南交通大学新秀杯数学建模试题

题目比较难,如果符合大家的口味欢迎大家下载哈,提高你的思维想象能力

Windows版YOLOv4目标检测实战:训练自己的数据集

课程演示环境:Windows10; cuda 10.2; cudnn7.6.5; Python3.7; VisualStudio2019; OpenCV3.4 需要学习ubuntu系统上YOLOv4的同学请前往:《YOLOv4目标检测实战:训练自己的数据集》 课程链接:https://edu.csdn.net/course/detail/28745 YOLOv4来了!速度和精度双提升! 与 YOLOv3 相比,新版本的 AP (精度)和 FPS (每秒帧率)分别提高了 10% 和 12%。 YOLO系列是基于深度学习的端到端实时目标检测方法。本课程将手把手地教大家使用labelImg标注和使用YOLOv4训练自己的数据集。课程实战分为两个项目:单目标检测(足球目标检测)和多目标检测(足球和梅西同时检测)。 本课程的YOLOv4使用AlexyAB/darknet,在Windows系统上做项目演示。包括:安装软件环境、安装YOLOv4、标注自己的数据集、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算)和先验框聚类分析。还将介绍改善YOLOv4目标检测性能的技巧。 除本课程《Windows版YOLOv4目标检测实战:训练自己的数据集》外,本人将推出有关YOLOv4目标检测的系列课程。请持续关注该系列的其它视频课程,包括: 《Windows版YOLOv4目标检测实战:人脸口罩佩戴检测》 《Windows版YOLOv4目标检测实战:中国交通标志识别》 《Windows版YOLOv4目标检测:原理与源码解析》

Spring Boot -01- 快速入门篇(图文教程)

Spring Boot -01- 快速入门篇 今天开始不断整理 Spring Boot 2.0 版本学习笔记,大家可以在博客看到我的笔记,然后大家想看视频课程也可以到【慕课网】手机 app,去找【Spring Boot 2.0 深度实践】的课程,令人开心的是,课程完全免费! 什么是 Spring Boot? Spring Boot 是由 Pivotal 团队提供的全新框架。Spring Boot...

相关热词 c#怎么获得线程名 c# usb 采集器 c# sort() c#面对对象的三大特性 c# 打印 等比缩放 c#弹出右键菜单 c# 系统托盘图标 c# 键值对 键可以重复 c# 鼠标移上去提示 c#结构体定义
立即提问