Python 如何轻松更改代码的功能?

Python 如何轻松更改代码的功能?,python,pygame,pycharm,Python,Pygame,Pycharm,我想让我的游戏“返回”到主菜单,我想知道我是否可以使用gamewindow功能“内部”自己的,这样它会创建一个“重置”。基本上,如果我的精灵发生碰撞并显示“游戏结束”,我想按下“后退”按钮,如果我再次按下“播放”,它将显示一个“重置”游戏,其中“计时器”、“小行星”、“飞船”回到开始处,就像我再次玩新游戏一样 我还想知道给我的任何错误是否对我现在的问题有任何意义 代码/游戏基本上是有效的。它只是没有“重置”的目的 以下是错误: "C:\Users\Myke Sustento\AppData\Lo

我想让我的游戏“返回”到主菜单,我想知道我是否可以使用gamewindow功能“内部”自己的,这样它会创建一个“重置”。基本上,如果我的精灵发生碰撞并显示“游戏结束”,我想按下“后退”按钮,如果我再次按下“播放”,它将显示一个“重置”游戏,其中“计时器”、“小行星”、“飞船”回到开始处,就像我再次玩新游戏一样

我还想知道给我的任何错误是否对我现在的问题有任何意义

代码/游戏基本上是有效的。它只是没有“重置”的目的

以下是错误:

"C:\Users\Myke Sustento\AppData\Local\Programs\Python\Python38-32\python.exe" "B:/PROGRAMMING RELATED/PYTHON PROJECTS/FINAL.py"
B:/PROGRAMMING RELATED/PYTHON PROJECTS/FINAL.py:261: SyntaxWarning: "is" with a literal. Did you mean "=="?
  if bullet_state is "fire":
B:/PROGRAMMING RELATED/PYTHON PROJECTS/FINAL.py:322: SyntaxWarning: "is" with a literal. Did you mean "=="?
  if bullet_state is "ready":
pygame 1.9.6
Hello from the pygame community. https://www.pygame.org/contribute.html
B:/PROGRAMMING RELATED/PYTHON PROJECTS/FINAL.py:171: DeprecationWarning: an integer is required (got type float).  Implicit conversion to integers using __int__ is deprecated, and may be removed in a future version of Python.
  display.blit(ammoboximg,(x,y))
Traceback (most recent call last):
  File "B:/PROGRAMMING RELATED/PYTHON PROJECTS/FINAL.py", line 374, in <module>
    gamewindow()
  File "B:/PROGRAMMING RELATED/PYTHON PROJECTS/FINAL.py", line 315, in gamewindow
    gamewindow()
  File "B:/PROGRAMMING RELATED/PYTHON PROJECTS/FINAL.py", line 315, in gamewindow
    gamewindow()
  File "B:/PROGRAMMING RELATED/PYTHON PROJECTS/FINAL.py", line 315, in gamewindow
    gamewindow()
  File "B:/PROGRAMMING RELATED/PYTHON PROJECTS/FINAL.py", line 330, in gamewindow
    keys = pygame.key.get_pressed()
pygame.error: video system not initialized

Process finished with exit code 1
“C:\Users\Myke-Sustento\AppData\Local\Programs\Python\Python38-32\Python.exe”“B:/PROGRAMMING-RELATED/Python-PROJECTS/FINAL.py”
B:/PROGRAMMING RELATED/PYTHON PROJECTS/FINAL.py:261:SyntaxWarning:“is”带有一个文本。你是说“==”?
如果bullet_状态为“fire”:
B:/PROGRAMMING-RELATED/PYTHON-PROJECTS/FINAL.py:322:SyntaxWarning:带有文本的“is”。你是说“==”?
如果bullet_状态为“就绪”:
PyGame1.9.6
大家好,来自pygame社区。https://www.pygame.org/contribute.html
B:/PROGRAMMING RELATED/PYTHON PROJECTS/FINAL.py:171:DeprecationWarning:需要一个整数(get类型float)。不推荐使用_uint_uuu隐式转换为整数,并可能在Python的未来版本中删除。
显示blit(ammoboximg,(x,y))
回溯(最近一次呼叫最后一次):
文件“B:/PROGRAMMING RELATED/PYTHON PROJECTS/FINAL.py”,第374行,在
游戏窗口()
文件“B:/PROGRAMMING RELATED/PYTHON PROJECTS/FINAL.py”,第315行,在gamewindow中
游戏窗口()
文件“B:/PROGRAMMING RELATED/PYTHON PROJECTS/FINAL.py”,第315行,在gamewindow中
游戏窗口()
文件“B:/PROGRAMMING RELATED/PYTHON PROJECTS/FINAL.py”,第315行,在gamewindow中
游戏窗口()
文件“B:/PROGRAMMING RELATED/PYTHON PROJECTS/FINAL.py”,第330行,在gamewindow中
keys=pygame.key.get_pressed()
pygame.error:视频系统未初始化
进程已完成,退出代码为1
以下是全部代码:

# initialization of pygame
import pygame
import random
import math


pygame.init()
# creating the display
display = pygame.display.set_mode((500, 500))

# title & icon
spaceship = pygame.image.load("Space Blitz Sprites/spaceship.png")
pygame.display.set_icon(spaceship)
pygame.display.set_caption("SpaceBlitz")

# main menu sprites
spaceblitz = pygame.image.load("Space Blitz Sprites/spaceblitz.png")
play = pygame.image.load("Space Blitz Sprites/play.png")
howtoplay = pygame.image.load("Space Blitz Sprites/howtoplay.png")
about = pygame.image.load("Space Blitz Sprites/about.png")
quit = pygame.image.load("Space Blitz Sprites/quit.png")

# inside main menu
instruction = pygame.image.load("Space Blitz Sprites/instruction.png")
back = pygame.image.load("Space Blitz Sprites/back.png")
aboutdev = pygame.image.load("Space Blitz Sprites/aboutdev.png")

# main menu music
music = pygame.mixer.music.load("Space Blitz Sprites/mountaintrails.mp3")

# PlayerSpriteMovement
playerimg = pygame.image.load("Space Blitz Sprites/spaceship.png")
playerX = 250
playerY = 400
velocity = 3
clock = pygame.time.Clock()

# Bullet
bulletimg = pygame.image.load("Space Blitz Sprites/bullet.png")
bulletX = 0
bulletY = playerY
bulletx_change = 0
bulletY_change = 8
bullet_state = "ready"
bullet_ammo = 5
bulletfont = pygame.font.Font('freesansbold.ttf', 16)
# Ammo Box
ammoboximg = pygame.image.load('Space Blitz Sprites/ammo.png')
ammoboxX = random.randint(0,468)
ammoboxY = random.randint(-1000,-800)
ammoboxY_change = -1.5

# Asteroid
asteroidimg = []
asteroidX = []
asteroidY = []
asteroidX_change = []
asteroidY_change = []
no_of_enemies = 40

def mainmenu():
    global menuselect
    global spaceblitz
    menu = True
    pygame.mixer.music.play(50)
    pygame.mixer.music.set_volume(0.2)
    while menu:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
            if event.type == pygame.MOUSEBUTTONDOWN:
                if event.button == 1:
                    pos = pygame.mouse.get_pos()
                    if start.collidepoint(pos):
                        menu = False
                        menuselect = 1
                        pygame.mixer.music.stop()
                    if controls.collidepoint(pos):
                        menu = False
                        menuselect = 2
                        pygame.mixer.music.stop()
                    if developer.collidepoint(pos):
                        menu = False
                        menuselect = 3
                        pygame.mixer.music.stop()
                    if exit.collidepoint(pos):
                        menu = False
                        menuselect = 4

        display.fill((0, 0, 0))
        display.blit(spaceblitz, (170,150))
        start = display.blit(play, (170,250))
        controls = display.blit(howtoplay, (170,300))
        developer = display.blit(about, (170,350))
        exit = display.blit(quit, (170,400))
        pygame.display.flip()
        pygame.display.update()

def controls():
    global menuselect
    global menu
    controls = True
    while controls:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
            if event.type == pygame.MOUSEBUTTONDOWN:
                if event.button == 1:
                    pos = pygame.mouse.get_pos()
                    if balik.collidepoint(pos):
                        controls = False
                        menu = True
                        menuselect = 0
        balik = display.blit(back, (0,450))
        display.blit(instruction, (0,0))
        pygame.display.flip()
        pygame.display.update()
        display.fill((0, 0, 0))

def developers():
    global menuselect
    global menu
    dev = True
    while dev:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
            if event.type == pygame.MOUSEBUTTONDOWN:
                if event.button == 1:
                    pos = pygame.mouse.get_pos()
                    if balik.collidepoint(pos):
                        dev = False
                        menu = True
                        menuselect = 0
        balik = display.blit(back, (0, 450))
        display.blit(aboutdev, (0, 0))
        pygame.display.flip()
        pygame.display.update()
        display.fill((0, 0, 0))

# Asteroid
for r in range(no_of_enemies):
    asteroidimg.append(pygame.image.load("Space Blitz Sprites/asteroid.png"))
    asteroidX.append(random.randint(-100, 500))
    asteroidY.append(random.randint(-300, -30))
    asteroidX_change.append(0)
    asteroidY_change.append(2)




# Game Over Text
overfont = pygame.font.Font('freesansbold.ttf',32)


# Sprite image
def player(x, y):
    display.blit(playerimg, (x, y))

def fire_bullet(x, y):
    global bullet_state
    if bullet_ammo > -1:
        bullet_state = "fire"
        display.blit(bulletimg, (x + 9, y + -7))
    else:
        bullet_state = "ready"

def ammobox(x,y):
    display.blit(ammoboximg,(x,y))

def AmBoxCollision(ammoboxX,ammoboxY,playerX,playerY):
    ammoboxdistance = math.sqrt((math.pow(ammoboxX - playerX, 2)) + (math.pow(ammoboxY - playerY, 2)))
    if ammoboxdistance < 27:
        return True
    else:
        return False

def ammo():
    global bullet_ammo
    global ammo_decrease
    ammo_decrease = 1
    bullet_ammo -= ammo_decrease



def asteroid(x, y, r):
    display.blit(asteroidimg[r], (x, y))




def BulCollision(asteroidX, asteroidY, bulletX, bulletY):
    buldistance = math.sqrt((math.pow(bulletX - asteroidX, 2)) + (math.pow(bulletY - asteroidY, 2)))
    if buldistance < 27:
        return True
    else:
        return False
def PlayCollision(asteroidX, asteroidY, playerX, playerY):
    playdistance = math.sqrt((math.pow(playerX - asteroidX, 2)) + (math.pow(playerY - asteroidY, 2)))
    if playdistance < 27:
        return True
    else:
        return False
def gameover_screen():
    overtext = overfont.render("GAME OVER",True,(255,255,255))
    display.blit(overtext, (150,250))

# mainloop
def gamewindow():
    global menuselect
    global playerX
    global playerY
    global velocity
    global clock
    global bulletX
    global bulletY
    global bulletY_change
    global bullet_state
    global asteroidX
    global asteroidY
    global asteroidY_change
    global no_of_enemies
    global ammoboxX
    global ammoboxY
    global ammoboxY_change
    global dev
    global menu
    global bullet_ammo
    global ammo_decrease
    global passed_time
    font = pygame.font.Font(None, 54)
    font_color = pygame.Color('white')
    start_time = pygame.time.get_ticks()
    run_timer = True
    running = True

    while running:
        clock.tick(60)
        display.fill((0, 0, 0))
        AmmoBoxCollision = AmBoxCollision(ammoboxX,ammoboxY,playerX,playerY)
        if AmmoBoxCollision:
            ammoboxY = random.randint(-1000, -800)
            ammoboxX = random.randint(0, 468)
            if bullet_ammo <= 4 and bullet_ammo > -1:
                bullet_ammo += 1
            if bullet_ammo == -1:
                bullet_ammo +=2


        if bullet_ammo == -1 or bullet_ammo == 0:
            bullet_text = bulletfont.render("Ammo:%d" % bullet_ammo, True, (0, 0, 0))
            display.blit(bullet_text, (10, 468))
            noammo = bulletfont.render("NO AMMO",True,(255,255,255))
            display.blit(noammo,(10,468))
        else:
            bullet_text = bulletfont.render("Ammo:%d" % bullet_ammo, True, (255, 255, 255))
            display.blit(bullet_text, (10, 468))

        if bullet_state is "fire":
            fire_bullet(bulletX, bulletY)
            bulletY -= bulletY_change

        if bulletY <= 0:
            bulletY = playerY
            bullet_state = "ready"

        for r in range(no_of_enemies):
            asteroid(asteroidX[r], asteroidY[r], r)
            asteroidY[r] += asteroidY_change[r]
            if asteroidY[r] >= 500:
                asteroidY[r] = random.randint(-300, -30)
                asteroidX[r] = random.randint(-100, 500)

            Bulletcollision = BulCollision(asteroidX[r], asteroidY[r], bulletX, bulletY)
            if Bulletcollision:
                bulletY = playerY
                bullet_state = "ready"
                asteroidX[r] = random.randint(-100, 500)
                asteroidY[r] = random.randint(-300, -30)

            # Game over
            PlayerCollision = PlayCollision(asteroidX[r], asteroidY[r], playerX, playerY)

            if PlayerCollision:
                for j in range(no_of_enemies):
                    asteroidY_change[j] = 0
                    asteroidY[j] = random.randint(-300, -30)
                    asteroidX[j] = random.randint(-100, 500)
                    asteroidY_change[j] = 2

                velocity = 0
                bulletY_change = 0
                bulletY = 600
                ammoboxY_change = 0
                run_timer = False
                gameover_screen()
                playerX = 250
                playerY = 400
                velocity = 3


        # movement
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()

            if event.type == pygame.MOUSEBUTTONDOWN:
                if event.button == 1:
                    pos = pygame.mouse.get_pos()
                    if balik.collidepoint(pos):
                        running = False
                        menu = True
                        menuselect = 0


            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE:
                    if bullet_ammo <= 5 and bullet_ammo > -1:
                        if bullet_state is "ready":
                            bulletX = playerX
                            bulletY = playerY
                            fire_bullet(bulletX, bulletY)
                            ammo()


        # player movement
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            playerX -= velocity

        if keys[pygame.K_RIGHT]:
            playerX += velocity

        if keys[pygame.K_DOWN]:
            playerY += velocity

        if keys[pygame.K_UP]:
            playerY -= velocity

        # Border
        if playerX <= 0:
            playerX = 0
        elif playerX >= 468:
            playerX = 468
        if playerY <= 0:
            playerY = 0
        elif playerY >= 468:
            playerY = 468

        if ammoboxY > 500:
            ammoboxY = random.randint(-1000,-800)
            ammoboxX = random.randint(0,468)
        ammobox(ammoboxX,ammoboxY)
        ammoboxY -= ammoboxY_change

        if run_timer:
            current_time = pygame.time.get_ticks()
            passed_time = current_time - start_time

        text = font.render(str(passed_time / 1000), True, font_color)
        display.blit(text, (50, 50))
        balik = display.blit(back, (350, 450))
        player(playerX, playerY)
        pygame.display.update()

mainmenu()
while True:
        if menuselect == 0:
            mainmenu()
        elif menuselect == 1:
            gamewindow()
        elif menuselect == 2:
            controls()
        elif menuselect == 3:
            developers()
        elif menuselect == 4:
            pygame.quit()
#pygame的初始化
导入pygame
随机输入
输入数学
pygame.init()
#创建显示
display=pygame.display.set_模式((500500))
#标题和图标
spaceship=pygame.image.load(“太空闪电精灵/spaceship.png”)
pygame.display.set_图标(宇宙飞船)
pygame.display.set_标题(“太空闪电战”)
#主菜单精灵
spaceblitz=pygame.image.load(“spaceblitz Sprites/spaceblitz.png”)
play=pygame.image.load(“空间闪电精灵/play.png”)
howtoplay=pygame.image.load(“太空闪电精灵/howtoplay.png”)
about=pygame.image.load(“空间闪电精灵/about.png”)
quit=pygame.image.load(“空间闪电精灵/quit.png”)
#内主菜单
指令=pygame.image.load(“空间闪电精灵/instruction.png”)
back=pygame.image.load(“太空闪电精灵/back.png”)
aboutdev=pygame.image.load(“太空闪电精灵/aboutdev.png”)
#主菜单音乐
music=pygame.mixer.music.load(“太空闪电精灵/mountaintrails.mp3”)
#球员职业运动
playerimg=pygame.image.load(“太空闪电精灵/spaceship.png”)
playerX=250
playerY=400
速度=3
clock=pygame.time.clock()
#子弹头
bulletimg=pygame.image.load(“太空闪电精灵/bullet.png”)
bulletX=0
弹珠游戏
bulletx_变化=0
bulletY_change=8
bullet_state=“就绪”
子弹弹药=5
bulletfont=pygame.font.font('freesansbold.ttf',16)
#弹药箱
ammoboximg=pygame.image.load('Space Blitz Sprites/ammo.png')
ammoboxX=random.randint(0468)
ammoboxY=random.randint(-1000,-800)
amboxy_变化=-1.5
#小行星
img=[]
小行星X=[]
小行星=[]
X_变化=[]
小行星变化=[]
没有敌人=40
def主菜单():
全局菜单选择
全球太空闪电战
菜单=真
pygame.混音器.音乐.播放(50)
pygame.mixer.music.set_音量(0.2)
while菜单:
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
如果event.type==pygame.MOUSEBUTTONDOWN:
如果event.button==1:
pos=pygame.mouse.get_pos()
如果起始点(位置):
菜单=错误
menuselect=1
pygame.mixer.music.stop()
如果控制碰撞点(位置):
菜单=错误
menuselect=2
pygame.mixer.music.stop()
如果是开发人员冲突点(pos):
菜单=错误
菜单选择=3
pygame.mixer.music.stop()
如果退出碰撞点(位置):
菜单=错误
菜单选择=4
显示。填充((0,0,0))
显示闪电(太空闪电战(170150))
开始=显示.blit(播放,(170250))
控件=display.blit(howtoplay,(170300))
developer=display.blit(大约,(170350))
退出=显示.blit(退出,(170400))
pygame.display.flip()
pygame.display.update()
def控件():
全局菜单选择
全局菜单
控件=真
而控制:
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
退出
如果event.type==pygame.MOUSEBUTTONDOWN:
如果event.button==1:
pos=pygame.mouse.get_pos()
如果balik.Collide点(位置):
控件=False
菜单=真
menuselect=0
balik=display.blit(后,(0450))
显示blit(指令,(0,0))
pygame.display.flip()
pygame.display.update()
显示。填充((0,0,0))
def developers():
全局菜单选择
全局菜单
dev=True
而开发人员:
对于pygame.event.get()中的事件:
如果电动汽车
        if PlayerCollision:
            for j in range(no_of_enemies):
                asteroidY_change[j] = 0
                asteroidY[j] = random.randint(-300, -30)
                asteroidX[j] = random.randint(-100, 500)
                asteroidY_change[j] = 2

            velocity = 0
            bulletY_change = 0
            bulletY = 600
            ammoboxY_change = 0
            run_timer = False
            gameover_screen()
            playerX = 250
            playerY = 400
            velocity = 3


    # movement
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()

        if event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == 1:
                pos = pygame.mouse.get_pos()
                if balik.collidepoint(pos):
                    running = False
                    menu = True
                    menuselect = 0


        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                if bullet_ammo <= 5 and bullet_ammo > -1:
                    if bullet_state is "ready":
                        bulletX = playerX
                        bulletY = playerY
                        fire_bullet(bulletX, bulletY)
                        ammo()
my_project/
    main.py
    .gitignore
    core/
        game_mechanics/
            player.py
            bullet.py
            asteroid.py
        game_setup/
            main_menu.py
            run_game.py
    config/
        config.yaml
    utils/
        read_config.py
    tests/
        test1.py
        test2.py
from example_file import example_function

def main(config):
    while True:
        settings = main_menu()
        play_game(settings)

if __name__ == '__main__':
    config = load_config()
    main(config)
def square_n(n):
    return n * n 

a = 5
a_squared = square_n(a)
def print_hello_world_n_times(n):
    for i in range(n):
        print("hello world")

config = load_config()
# config = {'a': 5, 'b': 10}
a = config['a']
print_hello_world_n_times(a)