2012-11-18 49 views
2

我目前正在創建一個蛇遊戲的過程中,我想創建一個食物發生器,根據我的遊戲中的定時器每隔10秒產生一個蘋果。計時器從60減少到0(遊戲結束時),我希望每10秒鐘產生一個新的蘋果,即使沒有吃過,也保留舊的蘋果。我不知道如何解決這個問題,並可以使用一些幫助。這是我的完整程序。Pygame蛇食物發生器

編輯:這是一個初學計算機科學的學校項目,所以越基本越好。

import random 
import pygame 
pygame.init() 

#---------------------------------------# 
             # 
# window properties      # 
width = 640   # 
height = 480           
game_window=pygame.display.set_mode((width,height)) 
black = ( 0, 0, 0)     #     
#---------------------------------------# 

# snake's properties 

outline=0        
body_size = 9 
head_size = 10 
apple_size = 8       
speed_x = 8       
speed_y = 8       
dir_x = 0        
dir_y = -speed_y        
segx = [int(width/2.)]*3     
segy = [height, height + speed_y, height + 2*speed_y]    
segments = len(segx) 
apple_counter = 0 
grid_step = 8 

regular_font = pygame.font.SysFont("Andina",18) 
blue = [11, 90, 220] 
clock = pygame.time.Clock() 
time = 60 
fps = 25    
time = time + 1.0/fps 
text = regular_font.render("Time from start: "+str(int(time)), 1, blue) 
text2 = regular_font.render("Score: "+str(int(apple_counter)), 1, blue) 

apple_x = random.randrange(0, 640, grid_step) 
apple_y = random.randrange(0, 480, grid_step) 
apple_colour = (255,0,0) 

def redraw_game_window():    
    game_window.fill(black)    
    for i in range(segments):   
     segment_colour = (random.randint(1,50),random.randint(100,150),random.randint(1,50)) 
     head_colour = (random.randint(180,220),random.randint(180,220),random.randint(1,15)) 
     apple_colour = (255,0,0) 
     pygame.draw.circle(game_window, segment_colour, (segx[i], segy[i]), body_size, outline) 
     pygame.draw.circle(game_window, head_colour, (segx[0], segy[0]), head_size, outline) 
    game_window.blit(text, (530, 20)) 
    game_window.blit(text2, (30, 20)) 
    pygame.draw.circle(game_window, apple_colour, (apple_x, apple_y), apple_size, outline) 
    pygame.display.update() 

exit_flag = False 
print "Use the arrows and the space bar." 
print "Hit ESC to end the program." 

########################################################## TIMER/CONTROLS 

while exit_flag == False: 
    redraw_game_window() 

    clock.tick(fps)      
    time = time - 1.00/fps 
    text = regular_font.render("Time: "+str(int(time)), 1, blue) 
    text2 = regular_font.render("Score: "+str(int(apple_counter)), 1, blue) 


    if time < 0.1: 
     print "Game Over" 
     exit_flag = True 


    pygame.event.get()      
    keys = pygame.key.get_pressed() 

    if time == 


    if keys[pygame.K_ESCAPE]:    
     exit_flag = True 

    if keys[pygame.K_LEFT] and dir_x != speed_x: 
     dir_x = -speed_x 
     dir_y = 0            
    if keys[pygame.K_RIGHT] and dir_x != -speed_x:     
     dir_x = speed_x      
     dir_y = 0       
    if keys[pygame.K_UP] and dir_y != speed_x:     
     dir_x = 0       
     dir_y = -speed_y      
    if keys[pygame.K_DOWN] and dir_y != -speed_x:     
     dir_x = 0       
     dir_y = speed_y 



############################################################ SNAKE MOVEMENT 

    for i in range(segments-1,0,-1):   
     segx[i]=segx[i-1]     
     segy[i]=segy[i-1] 

    segx[0] = segx[0] + dir_x    
    segy[0] = segy[0] + dir_y 


############################################################ COLLISION 


    for i in range(segments-1, 3, -1): 
     if segments > 3: 
      if segx[0] == segx[i] and segy[0] == segy[i]: 
       print "You have collided into yourself, Game Over." 
       exit_flag = True 


############################################################# BORDERS 

    if segx[0] > 640 or segx[0] < 0: 
     print "Game Over, you left the borders." 
     break 

    if segy[0] > 480 or segy[0] < 0: 
     print "Game Over, you left the borders." 
     break 

############################################################# APPLE DETECT 

    for i in range (0 , 13): 
     if segx[0] == apple_x + i and segy[0] == apple_y + i: 
      segments = segments + 1    
      segx.append(segx[-1])    
      segy.append(segy[-1]) 
      apple_counter = apple_counter + 1 


     if segx[0] == apple_x - i and segy[0] == apple_y - i: 
      segments = segments + 1    
      segx.append(segx[-1])    
      segy.append(segy[-1]) 
      apple_counter = apple_counter + 1 

############################################################# 

pygame.quit() 
+0

您應該使用蛇類來保存它的屬性。 –

+0

這是一個學校項目,我們的班級還沒有。 – user1832834

+0

噢,好的。基本上,您可以使用'random.randint()'函數生成2個隨機數,然後在該位置放置一個蘋果。很抱歉地說,但如果你想要多個蘋果,你(幾乎)不得不使用一個類。其他方法可能會非常難看/困難。 –

回答

1

你要麼

A)使用pygame.time.set_timer調用一個函數每10秒產卵的食物,每60秒結束的一輪。

B)比較get_ticks()

DEF new_round(): last_apple = pygame.time.get_ticks()+ 10 * 1000

而真: 現在= pygame.time.get_ticks()

if now - last_apple >= 1000: 
    spawn_apple() 
    last_apple = now 


if now - round_start >= 60*1000: 
    round_end()