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

非全屏时,外星人大战无法用键盘箭头移动飞船

Pycharm游戏界面设置: self.screen_width = 1200 self.screen_hight = 800 1、光标在Pycharm里,无法移到游戏界面里,不能控制飞船; 2、游戏界面全屏后,可以控制飞船,但是无法退出游戏; 请高手指教!!!

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中纵向移动

将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()

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

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模块,其后面的函数智能提示不全,什么原因?

最近在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 却在运行代码的时候出现错误

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无法加载图片,不停空转

初学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无法加载图片,求指教

# -*- 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窗口为什么打不开 而且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的pygame按键处理问题

刚刚学python的pygame,想自己做一下类似打乒乓球一类的游戏,写完后发现对于挡板的控制好像很不顺畅,代码如下: ``` if event.type==KEYDOWN: if event.key==K_w: player_left_up=True if event.key==K_s: player_left_down=True if event.type==KEYUP: if event.key == K_w: player_left_up = False if event.key == K_s: player_left_down = False #挡板移动 if player_left_up: left_player_pos_y -= 3 if player_left_down: left_player_pos_y += 3 ``` 挡板按W往上走,S往下走,这个代码在连续快速W S W S的按的时候,会出现比如W本该是False但它依旧被判定为True的情况,也就是按快了之后即使没有按下W,它也自己往上走了,然后我去网上看类似的代码,写法明明和我一样但是别人的就一点问题也没有,按键按起来很顺畅。这是为什么呀?我应该怎么做?求解

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) 希望大佬们给我一些帮助,非常感谢

python从入门到实践中的《外星人入侵》游戏,外星人移动出问题

我按照书上的代码编写,已经生成多行多列的外星人飞船,静止没问题,但是让飞船动起来的时候,却变成了只有一列飞船在移动,其他的都消失了,这是为什么呢?求指点。。。 图片如下: ![图片说明](https://img-ask.csdn.net/upload/201811/01/1541061266_597866.png) ![图片说明](https://img-ask.csdn.net/upload/201811/01/1541061280_149064.png) 代码如下: 主循环: while True: # 监视键盘和鼠标事件 gf.check_events(ai_settings, screen, ship, bullets) ship.update() gf.update_bullets(bullets) gf.update_aliens(ai_settings, aliens) # 每次循环都重绘屏幕,最近绘制的屏幕展示 gf.update_screen(ai_settings, screen, ship, bullets, aliens) 更新函数 def update_aliens(ai_settings, aliens): '''更新所有外星人''' check_fleet_edges(ai_settings, aliens) aliens.update() def check_fleet_edges(ai_settings, aliens): for alien in aliens.sprites(): if alien.check_edge(): 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 update_screen(ai_settings, screen, ship, bullets, aliens): # 更新屏幕上的图像,并切换到新屏幕 screen.fill(ai_settings.bg_color) ship.blitme() testnum = 0 # 在飞船和外星人后面重绘所有子弹 for bullet in bullets.sprites(): bullet.draw_bullet() # 让最新绘制的屏幕可见 print ("外星人数量= " + str(len(aliens))) for alien in aliens.sprites(): alien.blitme() testnum += 1 print("绘制外星人" + str(testnum)) pygame.display.flip() 外星人类 class Alien(Sprite): def __init__(self, ai_settings, screen): super().__init__() self.screen = screen self.ai_settings = ai_settings self.screen_rect = self.screen.get_rect() self.image = pygame.image.load('image/alien.png') self.image = pygame.transform.scale(self.image, (40,40)) self.rect = self.image.get_rect() self.rect.x = self.rect.width self.rect.y = self.rect.height self.x = float(self.rect.x) self.edge_station = 1 print("alien init 完成") def blitme(self): self.screen.blit(self.image, self.rect) print('alien draw 完成') def check_edge(self): screen_rect = self.screen.get_rect() if self.rect.right >= screen_rect.right: return True elif self.rect.left <= 0: return True def update(self): ''' if self.rect.right >= self.screen_rect.right: self.edge_station = -1 self.rect.y += self.rect.height elif self.rect.left < self.screen_rect.left: self.edge_station = 1 self.rect.y += self.rect.height ''' self.x += (self.ai_settings.alien_speed_factor * self.ai_settings.fleet_direction) self.rect.x = self.x

用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 贪吃蛇遇到的问题

做了两个黑洞,进入一个黑洞会传送到另一个黑洞,但是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() ```

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() ``` 请各位大神答疑,谢谢!

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

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

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

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

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

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

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

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

Linux 会成为主流桌面操作系统吗?

整理 |屠敏出品 | CSDN(ID:CSDNnews)2020 年 1 月 14 日,微软正式停止了 Windows 7 系统的扩展支持,这意味着服役十年的 Windows 7,属于...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

学习总结之HTML5剑指前端(建议收藏,图文并茂)

前言学习《HTML5与CSS3权威指南》这本书很不错,学完之后我颇有感触,觉得web的世界开明了许多。这本书是需要有一定基础的web前端开发工程师。这本书主要学习HTML5和css3,看...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

搜狗输入法也在挑战国人的智商!

故事总是一个接着一个到来...上周写完《鲁大师已经彻底沦为一款垃圾流氓软件!》这篇文章之后,鲁大师的市场工作人员就找到了我,希望把这篇文章删除掉。经过一番沟通我先把这篇文章从公号中删除了...

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

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

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

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

新一代神器STM32CubeMonitor介绍、下载、安装和使用教程

关注、星标公众号,不错过精彩内容作者:黄工公众号:strongerHuang最近ST官网悄悄新上线了一款比较强大的工具:STM32CubeMonitor V1.0.0。经过我研究和使用之...

记一次腾讯面试,我挂在了最熟悉不过的队列上……

腾讯后台面试,面试官问:如何自己实现队列?

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

冒泡排序动画(基于python pygame实现)

本项目效果初始截图如下 动画见本人b站投稿:https://www.bilibili.com/video/av95491382 本项目对应github地址:https://github.com/BigShuang python版本:3.6,pygame版本:1.9.3。(python版本一致应该就没什么问题) 样例gif如下 ======================= 大爽歌作,mad

Redis核心原理与应用实践

Redis核心原理与应用实践 在很多场景下都会使用Redis,但是到了深层次的时候就了解的不是那么深刻,以至于在面试的时候经常会遇到卡壳的现象,学习知识要做到系统和深入,不要把Redis想象的过于复杂,和Mysql一样,是个读取数据的软件。 有一个理解是Redis是key value缓存服务器,更多的优点在于对value的操作更加丰富。 安装 yum install redis #yum安装 b...

现代的 “Hello, World”,可不仅仅是几行代码而已

作者 |Charles R. Martin译者 | 弯月,责编 | 夕颜头图 |付费下载自视觉中国出品 | CSDN(ID:CSDNnews)新手...

带了6个月的徒弟当了面试官,而身为高级工程师的我天天修Bug......

即将毕业的应届毕业生一枚,现在只拿到了两家offer,但最近听到一些消息,其中一个offer,我这个组据说客户很少,很有可能整组被裁掉。 想问大家: 如果我刚入职这个组就被裁了怎么办呢? 大家都是什么时候知道自己要被裁了的? 面试软技能指导: BQ/Project/Resume 试听内容: 除了刷题,还有哪些技能是拿到offer不可或缺的要素 如何提升面试软实力:简历, 行为面试,沟通能...

!大部分程序员只会写3年代码

如果世界上都是这种不思进取的软件公司,那别说大部分程序员只会写 3 年代码,恐怕就没有程序员这种职业。

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

HTTP与HTTPS的区别

面试官问HTTP与HTTPS的区别,我这样回答让他竖起大拇指!

程序员毕业去大公司好还是小公司好?

虽然大公司并不是人人都能进,但我仍建议还未毕业的同学,尽力地通过校招向大公司挤,但凡挤进去,你这一生会容易很多。 大公司哪里好?没能进大公司怎么办?答案都在这里了,记得帮我点赞哦。 目录: 技术氛围 内部晋升与跳槽 啥也没学会,公司倒闭了? 不同的人脉圈,注定会有不同的结果 没能去大厂怎么办? 一、技术氛围 纵观整个程序员技术领域,哪个在行业有所名气的大牛,不是在大厂? 而且众所...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

立即提问
相关内容推荐