2017-02-04 10 views
1

Я пытаюсь сделать игру, и в этой игре я хочу сделать 100 объектов в случайном Y-положении между 0 и -100.Как использовать отрицательное число в random.randrange

Но когда я попытался random.randrange(0, -100), он возвращается сообщение об ошибке, говорящее:

Traceback (most recent call last): 
    File "main.py", line 144, in <module> 
    main(); 
    File "main.py", line 30, in main 
    setGlobalValues(); 
    File "main.py", line 23, in setGlobalValues 
    food = Food(); 
    File "main.py", line 92, in __init__ 
    self.y = random.randrange(0, -100); 
    File "C:\Users\sidna\AppData\Local\Programs\Python\Python36-32\lib\random.py", line 198, in randrange 
    raise ValueError("empty range for randrange() (%d,%d, %d)" % (istart, istop, width)) 
ValueError: empty range for randrange() (0,-100, -100) 

Вот полный код:

ПИТОН

# IMPORTS 
import pygame, random; 

# GLOBALS 
global screen, displayW, displayH; 
global clock, FPS; 
global end, food, player; 

# SETGLOBALVALUES 
def setGlobalValues(): 
    global screen, displayW, displayH; 
    global clock, FPS; 
    global end, food, player; 

    displayW = 800; 
    displayH = 600; 
    screen = pygame.display.set_mode((displayW, displayH)); 

    clock = pygame.time.Clock(); 
    FPS = 60; 

    end = False; 
    food = Food(); 
    player = Player(); 

# MAIN 
def main(): 
    pygame.init(); 

    setGlobalValues(); 
    setup(); 
    gameLoop(); 
    quitGame(); 

# GAMELOOP 
def gameLoop(): 
    global end, player; 

    while(not end): 
     for event in pygame.event.get(): 
      # ONCLICK QUIT 
      if(event.type == pygame.QUIT): 
       end = True; 

      # KEYDOWN 
      if(event.type == pygame.KEYDOWN): 
       if(event.key == pygame.K_LEFT): 
        player.velX -= 1; 
       if(event.key == pygame.K_RIGHT): 
        player.velX += 1; 

      # KEYUP 
      if(event.type == pygame.KEYUP): 
       if(event.key == pygame.K_LEFT): 
        player.velX = 0; 
       if(event.key == pygame.K_RIGHT): 
        player.velX = 0; 

     draw(); 
     animate(); 


# DRAW 
def draw(): 
    global screen, food, player; 

    # fill background 
    screen.fill((255, 255, 255)); 

    food.draw(); 

    # update 
    pygame.display.update(); 

# ANIMATE 
def animate(): 
    global food, player; 

    food.animate(); 
    player.animate(); 

# COLLISION 
def collision(): 
    pass; 

# CLASSES 
class Food(): 
    def __init__(self, x=0, y=0, w=0, h=0, velY=0, color=()): 
     global displayW; 

     self.x = random.randrange(0, displayW); 
     self.y = random.randrange(0, -100); 
     self.w = 20; 
     self.h = 20; 
     self.velY = 0.7; 
     self.color = (255, 0, 0); 

    def draw(self): 
     global screen; 

     for amount in range(100): 
      pygame.draw.rect(screen, self.color, (self.x, self.y, self.w, self.h)); 

    def animate(self): 
     self.y += self.velY; 

    def collision(self): 
     global displayW, displayH; 

     pass; 

class Player(): 
    def __init__(self, x=0, y=0, velX=0, velY=0, w=0, h=0, color=()): 
     global displayW, displayH; 

     self.w = 20; 
     self.h = 20; 
     self.x = displayW/2 - self.w/2; 
     self.y = displayH - 100; 
     self.velX = 0; 
     self.velY = 0; 
     self.color = (0, 0, 0); 

    def draw(self): 
     global screen; 

     pygame.draw.ellipse(screen, self.color, (self.x, self.y, self.w, self.h)); 

    def animate(self): 
     self.x += self.velX; 
     self.y += self.velY; 

# SETUP 
def setup(): 
    pygame.display.set_caption("Food Catcher"); 

# QUIT GAME 
def quitGame(): 
    pygame.quit(); 
    quit(); 

# CALL MAIN 
if(__name__ == "__main__"): 
    main(); 
+2

Попробуйте '-random.randrange (100)': P –

ответ

4

smaller number should be the first argument (если вы используете более один аргумент):

import random 
random.randrange(-100, 1) 

Второй аргумент не включен, поэтому, если вы хотите 0 в качестве возможного результата, вам необходимо установить его на 1.


Однако, если вы на самом деле не использовать step -argument, то есть также random.randint:

random.randint(-100, 0) # randint includes the "stop"! 
0

случайное число в диапазоне от -100 до 0 такое же, как случайное число между 0 и 100 умножается на -1

-1*random.randrange(100) 

или

-random.randrange(100)