2012-11-28 4 views
1

여기 내가 지금하고있는 일이 있으며, 더 좋은 방법이 있어야하며, 일을 찾고 있다는 것을 알고 있습니다. 내가 한 것은 기본적으로 새로운 행이 시작된/elif 인 경우에 강제 검사입니다. 'imgblock'은 16x16 픽셀 스프라이트이며 화면에는 16x10 격자가 있습니다. 아래 lolgrid() 부분에 나는 이미지 이름에 대한 def를 가지고 있고 그리드에있는 각 블록을 보여주기를 원한다. 아무도 내가 좀 더 우아하게 만들 수있는 방법에 대한 정보를 좀 주시겠습니까? 나는 일주일 동안이 일을 해왔고, 여기서 나의 나쁜 시도에 대한 통찰력을 경험 한 것을 정말 고맙게 생각합니다.블리트 스프라이트를 그리드로 만드는 방법은 무엇입니까?

감사 톤

import pygame, sys, os, random 
from pygame.locals import * 

pygame.init() 

#print help(pygame.transform) 

resmulti=3 
spritesize=16*resmulti 
resolution=(256*resmulti,224*resmulti) 
framerate=60 

## OBJECTS ## 
clock=pygame.time.Clock() 
screen=pygame.display.set_mode(resolution) 

## TEST STUFF ## 
test = [random.randint(1,10) for i in range(20)] 
print test 


## MAIN ##  
def pngLoad(imgloc, size, flipx, flipy): 
    img = pygame.image.load(imgloc).convert_alpha() 
    if size > 1: 
     #pygame.transform.scale(Surface, (width, height), DestSurface = None): return Surface 
     img = pygame.transform.scale(img, (img.get_width()*size, img.get_height()*size)) 
    if flipx == 1: 
     #pygame.transform.flip(Surface, xbool, ybool) 
     img = pygame.transform.flip(img, True, False) 
    if flipy == 1: 
     img = pygame.transform.flip(img, False, True) 

    return img 

################################################ 
# GRID = 16x16 pixel blocks. 16x10.5 block grid 
################################################ 

def lolGrid(imgBlock,*gridz): 
    #print list(gridz) 
    Grid = range(177) 

    for i in gridz: 
     if i < 16: 
      Grid[i] = screen.blit(imgBlock, (i*spritesize,resmulti*56)) 
     elif i > 15 and i < 32: 
      Grid[i] = screen.blit(imgBlock, ((i-16)*spritesize,spritesize+resmulti*56)) 
     elif i > 31 and i < 48: 
      Grid[i] = screen.blit(imgBlock, ((i-32)*spritesize,spritesize*2+resmulti*56)) 
     elif i > 47 and i < 64: 
      Grid[i] = screen.blit(imgBlock, ((i-48)*spritesize,spritesize*3+resmulti*56)) 
     elif i > 63 and i < 80: 
      Grid[i] = screen.blit(imgBlock, ((i-64)*spritesize,spritesize*4+resmulti*56)) 
     elif i > 79 and i < 96: 
      Grid[i] = screen.blit(imgBlock, ((i-80)*spritesize,spritesize*5+resmulti*56)) 
     elif i > 95 and i < 112: 
      Grid[i] = screen.blit(imgBlock, ((i-96)*spritesize,spritesize*6+resmulti*56))    
     elif i > 111 and i < 128: 
      Grid[i] = screen.blit(imgBlock, ((i-112)*spritesize,spritesize*7+resmulti*56))    
     elif i > 127 and i < 144: 
      Grid[i] = screen.blit(imgBlock, ((i-128)*spritesize,spritesize*8+resmulti*56))    
     elif i > 143 and i < 160: 
      Grid[i] = screen.blit(imgBlock, ((i-144)*spritesize,spritesize*9+resmulti*56)) 
     elif i > 159 and i < 176: 
      Grid[i] = screen.blit(imgBlock, ((i-160)*spritesize,spritesize*10+resmulti*56)) 

############ 
#LOL IMAGES 
############   
tanback = pngLoad("tanback.png", resmulti,0,0) 
longblackback = pngLoad("blackbacklong.png", resmulti,0,0) 
link1 = pngLoad("link1.png", resmulti,1,0) 
shrub1 = pngLoad("shrub_01.png", resmulti,0,0) 
grnwall1 = pngLoad("greenwall_01.png", resmulti,0,0) 
grnwall2 = pngLoad("greenwall_02.png", resmulti,0,0) 
grnwall3 = pngLoad("greenwall_03.png", resmulti,0,0) 

#background = pngLoad("back.png") 
#mous = pngLoad("link001.png") 


#bif="back.png" 
#mif="link001.png" 
#background=pygame.image.load(bif).convert_alpha() 
#mous=pygame.image.load(mif).convert_alpha() 

while True: 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
      sys.exit() 

    screen.blit(tanback,(0,0)) 
    screen.blit(longblackback,(0,resmulti*3*-56)) 
    #screen.fill((255,218,144), rect=None, special_flags=0) 

    lolGrid(grnwall1,0,1,16,17,32,33,48,112,128,129,144,145,160,161) 
    lolGrid(grnwall2,49,64) 
    lolGrid(grnwall3,96,113) 
    lolGrid(shrub1,2, 4, 6, 9, 11, 13, 15,18,20,22,25,27,29,31,54,57,59,61, 66, 68,86,89,91,98,100,118,121,123,125,146,147,148,149,150,151,152,153,154,155,156,157,158,159,162,163,164,165,166,167,168,169,170,171,172,173,174,175) 

    print clock.get_fps() 
    clock.tick(framerate) 

    pygame.display.update() 
+0

수 없습니다 방금 가장 가까운 격자 경계 좌표 라운드? – martineau

+0

내가하는 일을 잘 모르겠다. 이 같은? http://i.stack.imgur.com/utDaA.png – ninMonkey

+0

나는 용어를 잘못 이해하고 있다고 생각합니다. 타일 ​​구성을 나타내는지도를 가져 와서 그리드에 배치하려고합니다. 예, 원숭이, 그것은 조금 닮았습니다. 각 rect는 그 '레벨'또는 어떤 것이 호출 될 지에 대한 일종의 맵 파일에 의해 배치 된 자체 타일입니다. martineau 100 % 확실하지 않음 –

답변

0

어 D'? 나누기, 곱셈 및 모듈 사용은 어떻습니까? 대신

:

for i in gridz: 
    if i < 16: 
     Grid[i] = screen.blit(imgBlock, (i*spritesize,resmulti*56)) 
    elif i > 15 and i < 32: 
     Grid[i] = screen.blit(imgBlock, ((i-16)*spritesize,spritesize+resmulti*56)) 
    ... 

그냥 수행

for i in gridz: 
    Grid[1] = screen.blitimgBlock(imgBlock, (i % 16) * spritesize, spritesize+resmulti*56))