2016-04-05 18 views
0

私はプログラミングが初めてで、2Dタイルベースのゲームを作成しようとしています。私はすでに兵士をタイルの上で自由に動かすことができましたが、今はキー・プレスでタイルごとに移動させたいと思います。画像をタイルパイゲームごとに移動

私はself.xするself.posまたはself.yを変更したときに、私はこれまで、画面上を自由に

私のコードを兵士を移動することができます知っている:

#envoirment variables 
ice = 0 
forest = 1 
desert = 2 
swamp = 3 
water = 4 
island = 5 

#envoirement tiles 
tiles = { 
     ice : icetile, 
     forest : foresttile, 
     desert : deserttile, 
     swamp : swamptile, 
     water : watertile, 
     island : islandtile   
    } 

#tilemap 
tilemap = [ 
     [ 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0], 
     [ 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0], 
     [ 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0], 
     [ 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0], 
     [ 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0], 
     [ 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0], 
     [ 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0], 
     [ 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4], 
     [ 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4], 
     [ 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4], 
     [ 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4], 
     [ 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1], 
     [ 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1], 
     [ 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1], 
     [ 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1], 
     [ 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1], 
     [ 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1], 
     [ 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1] 
     ] 
class Soldier(object): 

     def __init__(self): 
     self.image = pygame.image.load("soldier.png") 
     self.x = 0 
     self.y = 0 
     self.hp = 1 
     self.ap = 1 
     self.price = 150 
     self.pos = [0, 0] 

    def keys(self): 
     key = pygame.key.get_pressed() 
     if key[pygame.K_DOWN]: 
      self.pos[1] += 1 
     if key[pygame.K_UP]: 
      self.pos[1] -= 1 
     if key[pygame.K_RIGHT]: 
      self.pos[0] += 1 
     if key[pygame.K_LEFT]: 
      self.pos[0] -= 1 

    def draw(self, surface): 
     surface.blit(self.image, (self.x, self.y)) 

def gameloop(): 

gamescreen = pygame.display.set_mode((mapwidth*tilesize, mapheight*tilesize)) 
gameloop = True 
soldier = Soldier() 
kasteel = Base() 


while gameloop: #Main game loop 
    for row in range(mapheight): 
     for column in range(mapwidth): 
      gamescreen.blit(tiles[tilemap[row][column]], (column*tilesize, row*tilesize)) 


    for event in pygame.event.get(): 
     pos = pygame.mouse.get_pos() 
     print(pos) 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      gameloop = False 

    soldier.keys() 
    kasteel.draw(gamescreen) 
    soldier.draw(gamescreen) 
    pygame.display.update() 
    clock.tick(40) 
pygame.quit() 

はお時間をいただき、ありがとうございます私を助けてくれる

PS:本やウェブサイトのご利用をお勧めします。

答えて

0

ここでやりたいことは、キーが押されている最初のフレームを追跡し、そのときに移動機能を呼び出すことです。これは、次のように行うことができます。prev_pressedは建設時にすべてfalseに初期化され

def keys(self): 
     key = pygame.key.get_pressed() 
     if key[pygame.K_DOWN] and not self.prev_pressed[pygame.K_DOWN]: 
      self.row += 1 
     if key[pygame.K_UP] and not self.prev_pressed[pygame.K_UP]: 
      self.row -= 1 
     if key[pygame.K_LEFT] and not self.prev_pressed[pygame.K_LEFT]: 
      self.col -= 1 
     if key[pygame.K_RIGHT] and not self.prev_pressed[pygame.K_RIGHT]: 
      self.col += 1 

     self.prev_pressed[pygame.K_DOWN] = key[pygame.K_DOWN] 
     self.prev_pressed[pygame.K_UP] = key[pygame.K_UP] 
     self.prev_pressed[pygame.K_LEFT] = key[pygame.K_LEFT] 
     self.prev_pressed[pygame.K_RIGHT] = key[pygame.K_RIGHT] 

posを格納する代わりに、xyの代わりに、rowcolをタイル配列内の現在の行と列として格納します。印刷が終わったら、配列のタイルを画面のピクセルにマッピングします。たとえば、各タイルが幅50ピクセル、高さ50ピクセルの場合、一部のタイルの画面上の対応するピクセルは50*row, 50*colになります。

0

surface.blit(self.image、(self.POS [0] *タイルサイズ、self.POS [1] *タイルサイズ))首都ため

申し訳ありませんが、お粗末なタブレット上の仕事ポスティングでいます。

関連する問題