Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 讨论检测逻辑错误_Python 3.x_Pygame - Fatal编程技术网

Python 3.x 讨论检测逻辑错误

Python 3.x 讨论检测逻辑错误,python-3.x,pygame,Python 3.x,Pygame,我正在研究一个克隆的乒乓球和检测碰撞顺便说一句,球和踏板,我用了这句话 if ball_pos[1] in range(paddle_1[1],paddle_1[1]+30) and ball_pos[0] in range(0,gutter+10) : ball_vel[0] *= -1 然而,如果我尝试为正确的桨实现相同的事情,它就不起作用。 这是完整的代码 import time import pygame done = False pygame.init() s

我正在研究一个克隆的乒乓球和检测碰撞顺便说一句,球和踏板,我用了这句话

if ball_pos[1] in  range(paddle_1[1],paddle_1[1]+30) and ball_pos[0] in  range(0,gutter+10) :
        ball_vel[0] *= -1
然而,如果我尝试为正确的桨实现相同的事情,它就不起作用。 这是完整的代码

import time
import pygame

done = False
pygame.init()

screen_size = [320,240]

white = [255,255,255]
black = [0,0,0]

gutter = 10

ball_pos = [160,120]
ball_vel = [1,0]
paddle_1 = [0,0]
paddle_2 = [screen_size[0]-5,0]
vel_1 = [0,0]
vel_2 = [0,0]
P1 = False
P2 = False

screen = pygame.display.set_mode(screen_size)
pygame.display.set_caption("mygame")



while not done:
    time.sleep(0.02)
    screen.fill(black)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True

        if event.type == pygame.KEYDOWN:
            if pygame.key.get_pressed()[pygame.K_DOWN]:
                vel_1[1] += 2
                P1 = True
            if pygame.key.get_pressed()[pygame.K_UP]:    
                P1 = True
                vel_1[1] -= 2
            if pygame.key.get_pressed()[pygame.K_s]:
                P2 = True
                vel_2[1] += 2
            if pygame.key.get_pressed()[pygame.K_w]:
                P2 = True
                vel_2[1] -= 2

        if event.type == pygame.KEYUP:
            if(P1):
                vel_1 = [0,0]
                P1 = False
            if (P2):
                vel_2 = [0,0]
                P2 = False

    if ball_pos[1] in  range(paddle_1[1],paddle_1[1]+30) and ball_pos[0] in  range(0,gutter+10) :
        ball_vel[0] *= -1

    #This Is Where I am getting a Funny Behaviour
    if ball_pos[1] in  range(paddle_2[1],paddle_2[1]+30) and ball_pos[0] in  range(230,240):
        ball_vel[0] *= -1

    if ball_pos[1] > 230 or ball_pos[1] < 5:
        ball_vel[1] *= -1

    paddle_1[0] += vel_1[0]
    paddle_1[1] += vel_1[1]
    paddle_2[0] += vel_2[0]
    paddle_2[1] += vel_2[1]

    ball_pos[0] += ball_vel[0]
    ball_pos[1] += ball_vel[1]


    pygame.draw.line(screen,white,(gutter,0),(gutter,screen_size[1]))
    pygame.draw.line(screen,white,(screen_size[0]-gutter,0),(screen_size[0]-gutter,screen_size[1]))
    pygame.draw.circle(screen,white,ball_pos,10,0)
    pygame.draw.line(screen,white,[paddle_1[0]+5,paddle_1[1]],[paddle_1[0]+5,paddle_1[1]+30],gutter)
    pygame.draw.line(screen,white,paddle_2,[paddle_2[0],paddle_2[1]+30],10)
    pygame.display.flip()




pygame.quit()
导入时间
导入pygame
完成=错误
pygame.init()
屏幕大小=[320240]
白色=[255255]
黑色=[0,0,0]
排水沟=10
球头位置=[160120]
球水平=[1,0]
桨_1=[0,0]
挡板2=[屏幕大小[0]-5,0]
级别1=[0,0]
级别2=[0,0]
P1=错误
P2=错误
screen=pygame.display.set_模式(屏幕大小)
pygame.display.set_标题(“mygame”)
虽然没有这样做:
睡眠时间(0.02)
屏幕填充(黑色)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
完成=正确
如果event.type==pygame.KEYDOWN:
如果pygame.key.get_按下()[pygame.K_向下]:
级别1[1]+=2
P1=真
如果pygame.key.get_按下()[pygame.K_UP]:
P1=真
标高1[1]=2
如果pygame.key.get_按下()[pygame.K_s]:
P2=真
标高2[1]+=2
如果pygame.key.get_按下()[pygame.K_w]:
P2=真
标高2[1]=2
如果event.type==pygame.KEYUP:
如果(P1):
级别1=[0,0]
P1=错误
如果(P2):
级别2=[0,0]
P2=错误
如果球位[1]在范围内(桨位[1],桨位[1]+30),球位[0]在范围内(0,槽位+10):
球级别[0]*=-1
#这就是我得到一个有趣的行为
如果球位置[1]在范围内(拨杆位置[1],拨杆位置[1]+30),球位置[0]在范围内(230240):
球级别[0]*=-1
如果球头位置[1]>230或球头位置[1]<5:
球级别[1]*=-1
桨1[0]+=1[0]
桨1[1]+=水平1[1]
桨叶2[0]+=水平2[0]
船桨2[1]+=船桨2[1]
球位[0]+=球位[0]
球位[1]+=球位[1]
pygame.draw.line(屏幕,白色,(排水沟,0),(排水沟,屏幕大小[1]))
pygame.draw.line(屏幕,白色,(屏幕大小[0]-排水沟,0),(屏幕大小[0]-排水沟,屏幕大小[1]))
pygame.draw.circle(屏幕,白色,球位置,10,0)
pygame.draw.line(屏幕,白色,[Paile_1[0]+5,Paile_1[1]],[Paile_1[0]+5,Paile_1[1]+30],排水沟)
pygame.draw.line(屏幕,白色,桨2,[桨2[0],桨2[1]+30],10)
pygame.display.flip()
pygame.quit()
线路

if ball_pos[1] in  range(paddle_2[1],paddle_2[1]+30) and ball_pos[0] in  range(230,240):
应该是

if ball_pos[1] in range(paddle_2[1],paddle_2[1]+30) and ball_pos[0] in  range(310,320):
240
是屏幕的高度,但您需要检查屏幕的宽度,即
320


您的代码还有一些问题,但这超出了本答案的范围

“它不起作用”-请更具体一点。错误(提供完整的回溯)?意外输出(提供输入以及预期和实际输出)?“滑稽行为”不是一个非常有用的描述!也许你拿着桨是错的?只是开玩笑,我们需要更多的描述性信息。谢谢!我的代码太乱了,我忘了哪个是宽度。