如何检测一次按键并使用'!='符号?

时间:2019-11-16 01:42:03

标签: python pygame

我试图找出在按住“向上”箭头键时如何增加形状移动的强度。当我按住空格键时,我希望我的形状根据强度而发出隆隆声,这已经完成了。我还想做的是能够通过按一下“向上”箭头键来增加强度(注意:一次。目前,当我按一次箭头键时,它循环的速度太快了,并且使强度乘以5000x。我只想每次都加一个数字。)这是我所不希望的代码。

import pygame
import random
import time



BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)

# Edit the intensity of the shake (Must be one number apart)
# Ex: a = -100, b = 101. A is negative, B is positive
a = -4
b = 5
up = 10
intensity = (a, b)

pygame.init()

size = (700, 500)
screen = pygame.display.set_mode(size)

pygame.display.set_caption("My Game")

done = False

clock = pygame.time.Clock()


class Rectangle():
    def __init__(self):
        self.x = random.randrange(0, 700)
        self.y = random.randrange(0, 500)
        self.height = random.randrange(20, 70)
        self.width = random.randrange(20, 70)
        self.x_change = random.randrange(-3, 3)
        self.y_change = random.randrange(-3, 3)
        self.color = random.sample(range(250), 4)

    def draw(self):
        pygame.draw.rect(screen, self.color, [self.x, self.y, self.width, self.height])

    def move(self):
        self.x += self.x_change
        self.y += self.y_change


class Ellipse(Rectangle):
    pass

    def draw(self):
        pygame.draw.ellipse(screen, self.color, [self.x, self.y, self.width, self.height])

    def move(self):
        self.x += self.x_change
        self.y += self.y_change

my_list = []
for number in range(600):
    my_object = Rectangle()
    my_list.append(my_object)
for number in range(600):
    my_object = Ellipse()
    my_list.append(my_object)

# -------- Main Program Loop -----------
while not done:
    keys = pygame.key.get_pressed()
    # --- Main event loop
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True

    screen.fill(BLACK)
    for rect in my_list:
        rect.draw()
        rect.move()
    for rectElli in my_list:
        rectElli.draw()
        if keys[pygame.K_SPACE]:
            rectElli.y_change = random.randrange(a, b)
            rectElli.x_change = random.randrange(a, b)
            rectElli.move()
            print(a)
            print(b)
        if keys[pygame.K_UP] and up / 10 == 1:
            up += 1
            a -= 1
            b -= -1
            print(a)
            print(b)
            print(up)
        if up / 10 != 1:
            up += 1

    pygame.display.flip()
    clock.tick(60)
pygame.quit()

这是在我要增加强度之前起作用的代码。

import pygame
import random
import time



BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)

# Edit the intensity of the shake (Must be one number apart)
# Ex: a = -100, b = 101. A is negative, B is positive
a = -4
b = 5
up = 10
intensity = (a, b)

pygame.init()

size = (700, 500)
screen = pygame.display.set_mode(size)

pygame.display.set_caption("My Game")

done = False

clock = pygame.time.Clock()


class Rectangle():
    def __init__(self):
        self.x = random.randrange(0, 700)
        self.y = random.randrange(0, 500)
        self.height = random.randrange(20, 70)
        self.width = random.randrange(20, 70)
        self.x_change = random.randrange(-3, 3)
        self.y_change = random.randrange(-3, 3)
        self.color = random.sample(range(250), 4)

    def draw(self):
        pygame.draw.rect(screen, self.color, [self.x, self.y, self.width, self.height])

    def move(self):
        self.x += self.x_change
        self.y += self.y_change


class Ellipse(Rectangle):
    pass

    def draw(self):
        pygame.draw.ellipse(screen, self.color, [self.x, self.y, self.width, self.height])

    def move(self):
        self.x += self.x_change
        self.y += self.y_change

my_list = []
for number in range(600):
    my_object = Rectangle()
    my_list.append(my_object)
for number in range(600):
    my_object = Ellipse()
    my_list.append(my_object)

# -------- Main Program Loop -----------
while not done:
    keys = pygame.key.get_pressed()
    # --- Main event loop
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True

    screen.fill(BLACK)
    for rect in my_list:
        rect.draw()
        rect.move()
    for rectElli in my_list:
        rectElli.draw()
        if keys[pygame.K_SPACE]:
            rectElli.y_change = random.randrange(a, b)
            rectElli.x_change = random.randrange(a, b)
            rectElli.move()

    pygame.display.flip()
    clock.tick(60)
pygame.quit()

1 个答案:

答案 0 :(得分:0)

第一个问题是,您要在穿过椭圆的for循环中增加强度。因此强度不会增加一次,而是每椭圆增加一次。

如果不想在每第10帧增加强度,则必须验证是否在每帧中增加帧计数器up,但必须验证它是否可以被整除10.验证整数除以10的余数是否为0。使用取模运算符(%)来计算余数:

if up % 10 == 0:

请参见示例,当按下 UP 时,强度会增加,释放时强度会恢复正常:

while not done:
    keys = pygame.key.get_pressed()
    # --- Main event loop
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True

    screen.fill(BLACK)
    for rect in my_list:
        rect.draw()
        rect.move()
    for rectElli in my_list:
        rectElli.draw()
        if keys[pygame.K_SPACE]:
            rectElli.y_change = random.randrange(a, b)
            rectElli.x_change = random.randrange(a, b)
            rectElli.move()

    if keys[pygame.K_UP]:
        up += 1
        if up % 10 == 0:
            a -= 1
            b -= -1
    else:
        a, b = -4, 5

    pygame.display.flip()
    clock.tick(60)