2016-11-13 7 views
1

私はPython 2.7を使用しています。これは、pygameモジュールを使用して単純なゲームを作成しようとしました。プログラムでは四角形になりますが、私がやっていることはキーが押されると動くようにすることです。私は問題が私のコードの 'player.move'部分にあると信じていますが、pygamesのWebサイトではドキュメンテーションが貧弱です。どんな助けもありがとうございます。pygameでどのようにシェイプに動きを加えることができますか?

import pygame 
import random 
import time 

pygame.init() 

white = (255,255,255) 
black = (0,0,0) 

displayWidth = 800 
displayHeight = 800 

FPS = 30 
clock = pygame.time.Clock() 

blockWidth = 50 
blockHeight = 50 

pygame.display.set_caption('Test Game') 
screen = pygame.display.set_mode([displayWidth, displayHeight]) 
background = pygame.Surface(screen.get_size()) 
background.fill((white)) 
background = background.convert() 
screen.blit(background, (0,0)) 
global xStart, yStart 
xStart = 400 
yStart = 400 
global player 
player = pygame.draw.rect(screen, black, ([xStart,yStart,blockWidth,blockHeight])) 
pygame.display.update() 
def mainloop(): 
    global x, y 
    x = xStart 
    y = yStart 
    mainloop = True 
    pygame.display.update() 
    while mainloop == True: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       mainloop = False 
      elif event.type == pygame.KEYDOWN: 
       if event.key == pygame.K_ESCAPE: 
        mainloop = False 
       if event.key == pygame.K_UP: 
        player.move(x, y + 10) 
        pygame.display.update() 
       if event.key == pygame.K_DOWN: 
        player.move(x, y - 10) 
        pygame.display.update() 
       if event.key == pygame.K_LEFT: 
        player.move(x - 10, y) 
        pygame.display.update() 
       if event.key == pygame.K_RIGHT: 
        player.move(x + 10, y) 
        pygame.display.update() 
      clock.tick(FPS) 
      pygame.display.flip() 

mainloop() 
pygame.quit() 
+0

'pygame.draw.rectは()'ではないオブジェクトを作成するために、四角形を描画するためです。 'while True'では、画面をクリアして新しい場所に長方形を描く必要があります。今度はプレイヤーの位置を変更しますが、新しい位置に再び描画しません。 PyGameは低レベルのライブラリであり、あなた自身ですべてを行う必要があります。自動的に移動したり描画したりすることはありません。 – furas

+0

より良いチュートリアルを見つけてください。 [プログラムアーケードゲーム PythonとPygameで](http://programarcadegames.com/) – furas

+1

@Austin、[pygame。](http://stackoverflow.com/documentation/pygame)の独自のベータ版のドキュメントも読んでみてください。 /トピック) –

答えて

0

変更する必要があるため、チュートリアル(Program Arcade Games With Python And Pygame)を検索してください。

PyGameは低レベルのライブラリであり、あなた自身ですべてを行う必要があります。 whileループでは、画面をクリアしたり、バックグラウンドを描画したり、プレーヤーを描画したりする必要があります。

修正後のコードです。

あなたがpygame.Rectpygame.Surface、(pygame.Sprite)、events、学ばなければならないなど

import pygame 
import random 
import time 

# --- constants --- (UPPER_CASE names) 

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

DISPLAY_WIDTH = 800 
DISPLAY_HEIGHT = 800 

FPS = 30 

BLOCK_WIDTH = 50 
BLOCK_HEIGHT = 50 

# --- functions --- (lower_case names) 

def run(): 

    mainloop = True 

    speed_x = 0 
    speed_y = 0 

    while mainloop: 

     # --- events --- 

     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       mainloop = False 
      elif event.type == pygame.KEYDOWN: 
       if event.key == pygame.K_ESCAPE: 
        mainloop = False 
       # - start moving - 
       elif event.key == pygame.K_UP: 
        speed_y = -10 
       elif event.key == pygame.K_DOWN: 
        speed_y = 10 
       elif event.key == pygame.K_LEFT: 
        speed_x = -10 
       elif event.key == pygame.K_RIGHT: 
        speed_x = 10 
      #elif event.type == pygame.KEYUP: 
      # # - stop moving - 
      # if event.key == pygame.K_UP: 
      #  speed_y = 0 
      # elif event.key == pygame.K_DOWN: 
      #  speed_y = 0 
      # elif event.key == pygame.K_LEFT: 
      #  speed_x = 0 
      # elif event.key == pygame.K_RIGHT: 
      #  speed_x = 0    

     # --- updates --- 

     player_rect.move_ip(speed_x, speed_y) 

     # --- draws --- 

     screen.blit(background, background_rect) 
     screen.blit(player, player_rect)      
     pygame.display.flip() 

     clock.tick(FPS) 

# --- main --- 

pygame.init() 
pygame.display.set_caption('Test Game') 

screen = pygame.display.set_mode((DISPLAY_WIDTH, DISPLAY_HEIGHT)) 
screen_rect = screen.get_rect() 

background_rect = screen_rect 
background = pygame.Surface(background_rect.size) 
background.fill(WHITE) 
background = background.convert() 

player_rect = pygame.Rect(400, 400, BLOCK_WIDTH, BLOCK_HEIGHT) 
player = pygame.Surface(player_rect.size) 
player.fill(BLACK) 

clock = pygame.time.Clock() 

run() 

pygame.quit() 
関連する問題