鱼C论坛

 找回密码
 立即注册
查看: 2647|回复: 1

[已解决]pygame如何实现游戏重新开始的功能?

[复制链接]
发表于 2021-10-22 10:48:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
# 导入
import pygame
from pygame.locals import *
from random import *
import sys

pygame.init()
screen = pygame.display.set_mode((600, 500))


# 绘制球和挡板
def ball(ax, ay):
    pygame.draw.circle(screen, (255, 255, 0), (ax, ay), 20)


def fang(ax):
    size = 300 + ax, 450, 100, 50
    pygame.draw.rect(screen, (0, 255, 255), size)


# 绘制文本的函数
def print_text(font, text, ):
    textImg = font.render(text, )
    screen.blit(textImg, )


# zhuangtai = False
score = 0
gameover = False
fx = 0
move_x = 0
bx = randint(10, 590)
by = 0
# 循环
while True:
    # 搜索事件
    for event in pygame.event.get():
        if event.type == QUIT:
            sys.exit()
        elif event.type == MOUSEMOTION:
            mouse_x, mouse_y = event.pos
            move_x, move_y = event.rel

    # 绘制画面
    screen.fill((255, 255, 255))
    # 逻辑判断
    if by > 500:
        by = 0
        gameover = True

    if 500 > by > 450 and fx + 100 > bx > fx:
        score += 10
        by = 0
        bx = randint(10, 590)
    # 绘制球
    ball(bx, by)
    if by == 500:
        by = 0
        bx = randint(10, 590)
    by = by + 0.2
    ball(bx, by)
    # 绘制方块
    fang(fx)
    if move_x < 0:
        fx -= 0.5
    else:
        fx += 0.5
    if fx > 200:
        fx = 200
    if fx < -300:
        fx = -300

    if gameover:
        while True:
            for event in pygame.event.get():
                if event.type == K_SPACE:
                    gameover = False
                    by = 0
                    break

    pygame.display.update()
如代码,使用了状态变量控制进入一个死循环进行游戏的暂停功能,但是问题来了,当我按下空格键不会跳出这个死循环,按下空格键时变量该修改的也修改了,求教大佬这里的逻辑错误~!
最佳答案
2021-10-22 18:58:51
本帖最后由 淡淡凉 于 2021-10-22 19:00 编辑

76行 if event.type == K_SPACE:有问题
# 导入
import pygame
from pygame.locals import *
from random import *
import sys
x,y=600,500
pygame.init()
screen = pygame.display.set_mode((x, y))


# 绘制球和挡板
def ball(ax, ay):
    pygame.draw.circle(screen, (255, 255, 0), (ax, ay), 20)


def fang(ax):
    size = ax, 450, 100, 50
    pygame.draw.rect(screen, (0, 255, 255), size)


# 绘制文本的函数
def print_text(font, text, ):
    textImg = font.render(text, )
    screen.blit(textImg, )


# zhuangtai = False
score = 0
gameover = False
fx = 0
move_x = 0
bx = randint(10, 590)
by = 0
# 循环
while True:
    # 搜索事件
    for event in pygame.event.get():
        if event.type == QUIT:
            sys.exit()
        elif event.type == MOUSEMOTION:
            mouse_x, mouse_y = event.pos
            move_x, move_y = event.rel

        
    # 绘制画面
    screen.fill((255, 255, 255))
    # 绘制方块
    fang(fx)
    if move_x < 0:
        fx -= 0.2
    else:
        fx += 0.2
    if fx > 500:
        fx = 500
    if fx < 0:
        fx = 0
       
    # 逻辑判断
    if by > 485:
        #print(bx, by)
        #ball(bx, by)
        by = 0
        gameover = True
        
        #print('-------')
        '''
    elif by == 540:
        by = 0
        bx = randint(10, 590)
        ball(bx, by)'''   

    elif 450 < by < 480 and fx < bx < fx + 100:
        score += 10
        by = 0
        bx = randint(10, 590)
        print(score)
    # 绘制球
        ball(bx, by)     

    else:
        by = by + 0.1
        ball(bx, by)  
    #print(fx,bx)
    if gameover:
        while gameover:
                for event in pygame.event.get():
                        if event.type == QUIT:
                                sys.exit()
                        if event.type == KEYDOWN:        #事件检测,事件类型KEYDOWN按下按键,KEYUP松开按键
                                if event.key == K_SPACE:    #判断是否按下空格键
                                        gameover = False
                                        by = 0
                                        #print(gameover)
                                        #break
               
    pygame.display.update()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-22 18:58:51 | 显示全部楼层    本楼为最佳答案   
本帖最后由 淡淡凉 于 2021-10-22 19:00 编辑

76行 if event.type == K_SPACE:有问题
# 导入
import pygame
from pygame.locals import *
from random import *
import sys
x,y=600,500
pygame.init()
screen = pygame.display.set_mode((x, y))


# 绘制球和挡板
def ball(ax, ay):
    pygame.draw.circle(screen, (255, 255, 0), (ax, ay), 20)


def fang(ax):
    size = ax, 450, 100, 50
    pygame.draw.rect(screen, (0, 255, 255), size)


# 绘制文本的函数
def print_text(font, text, ):
    textImg = font.render(text, )
    screen.blit(textImg, )


# zhuangtai = False
score = 0
gameover = False
fx = 0
move_x = 0
bx = randint(10, 590)
by = 0
# 循环
while True:
    # 搜索事件
    for event in pygame.event.get():
        if event.type == QUIT:
            sys.exit()
        elif event.type == MOUSEMOTION:
            mouse_x, mouse_y = event.pos
            move_x, move_y = event.rel

        
    # 绘制画面
    screen.fill((255, 255, 255))
    # 绘制方块
    fang(fx)
    if move_x < 0:
        fx -= 0.2
    else:
        fx += 0.2
    if fx > 500:
        fx = 500
    if fx < 0:
        fx = 0
       
    # 逻辑判断
    if by > 485:
        #print(bx, by)
        #ball(bx, by)
        by = 0
        gameover = True
        
        #print('-------')
        '''
    elif by == 540:
        by = 0
        bx = randint(10, 590)
        ball(bx, by)'''   

    elif 450 < by < 480 and fx < bx < fx + 100:
        score += 10
        by = 0
        bx = randint(10, 590)
        print(score)
    # 绘制球
        ball(bx, by)     

    else:
        by = by + 0.1
        ball(bx, by)  
    #print(fx,bx)
    if gameover:
        while gameover:
                for event in pygame.event.get():
                        if event.type == QUIT:
                                sys.exit()
                        if event.type == KEYDOWN:        #事件检测,事件类型KEYDOWN按下按键,KEYUP松开按键
                                if event.key == K_SPACE:    #判断是否按下空格键
                                        gameover = False
                                        by = 0
                                        #print(gameover)
                                        #break
               
    pygame.display.update()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 23:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表