2017-12-17 4 views
-1
import pygame 
import time 
pygame.init() 

display_width = (1000) 
display_height = (480) 


black = (255,50,0) 
white = (0,60,7) 
blue = (0,205,205) 

kled1_width = 30 
kled1_height = 45 

ground1_height = 300 

screen = pygame.display.set_mode((display_width,display_height)) 
pygame.display.set_caption(" kled ") 
clock = pygame.time.Clock() 

gameDisplay = screen 

kled1IMG = pygame.image.load("IMG.png") 

def kled1(x,y): 
    gameDisplay.blit(kled1IMG,(x,y)) 


def game_loop(): 

    x = (1) 
    y = (340) 


    x_change = 0 

    y_change = 0 


    gameExit = False 

    while not gameExit: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       gameExit = True 

      if event.type == pygame.KEYDOWN: 
       if event.key == pygame.K_LEFT: 
        x_change = -5 

       elif event.key == pygame.K_RIGHT: 
        x_change = 5 

       elif event.key == pygame.K_UP: 
        y_change = -15 

       elif event.key == pygame.K_DOWN: 
        y_change = 5 

      if event.type == pygame.KEYUP: 
       if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT and pygame.K_r or event.key == pygame.K_RIGHT and pygame.K_2: 
        x_change = 0 
      if event.type == pygame.KEYUP: 
       if event.key == pygame.K_UP or event.key == pygame.K_DOWN: 
        y_change = 0 


     x += x_change 
     y += y_change 

     gameDisplay.fill(blue) 

     pygame.draw.rect(gameDisplay, white, [1, 400, 1000,ground1_height]) 

     kled1(x,y) 

#prevents from going into ground 
     if y > ground1_height: 
      y_change = 0 

     pygame.display.update() 
     clock.tick(30) 

game_loop() 
pygame.quit() 
quit() 

アップキーを1回押すと、イメージがimgの現在の位置から15スペース分移動し、約0.5秒後に15スペースになります。秒ですか? Pythonの使用2.7。本質的には、それはプラットフォームや他のものを追加するマリオのようなジャンプゲームです。また、空中でダブルジャンプすることができないようにする方法を知りたい!申し訳ありませんが、私はnoobのプログラマーです、私はこのゲームのための助けが必要です。ゲームにジャンプするにはどうすればいいですか?

+0

[Pythonとpygameのでプログラムアーケードゲーム - ラボ16:pygameのプラット例](http://programarcadegames.com/index.php?&chapter=example_code_platformer) – furas

答えて

0

GRAVITY定数を追加すると、各フレームのy_changeに追加され、プレーヤーを下方向に加速します。プレイヤーが地面に触れるとをTrueに、そしてユーザーがジャンプしてon_groundになっていることを確認したら、ダブルジャンプを防ぐためにFalseに設定します。

import pygame 

pygame.init() 

white = (0,60,7) 
blue = (0,205,205) 

ground1_height = 400 

screen = pygame.display.set_mode((1000, 480)) 
clock = pygame.time.Clock() 

kled1IMG = pygame.Surface((30, 45)) 
kled1IMG.fill((200, 100, 0)) 

GRAVITY = 1 

def game_loop(): 
    x = 1 
    y = 340 
    x_change = 0 
    y_change = 0 
    on_ground = True 

    gameExit = False 

    while not gameExit: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       gameExit = True 
      elif event.type == pygame.KEYDOWN: 
       if event.key == pygame.K_LEFT: 
        x_change = -5 
       elif event.key == pygame.K_RIGHT: 
        x_change = 5 
       elif event.key == pygame.K_UP: 
        if on_ground: 
         y_change = -15 
         on_ground = False 
       elif event.key == pygame.K_DOWN: 
        y_change = 5 
      elif event.type == pygame.KEYUP: 
       if (event.key == pygame.K_LEFT 
         or event.key == pygame.K_RIGHT 
         or event.key == pygame.K_LEFT and pygame.K_r 
         or event.key == pygame.K_RIGHT and pygame.K_2): 
        x_change = 0 

     y_change += GRAVITY 

     x += x_change 
     y += y_change 
     # Prevents the player from going into the ground. 
     if y > ground1_height: 
      y_change = 0 
      y = ground1_height 
      on_ground = True 

     screen.fill(blue) 
     pygame.draw.rect(screen, white, [0, 445, 1000, 35]) 
     screen.blit(kled1IMG, (x, y)) 

     pygame.display.update() 
     clock.tick(30) 

game_loop() 
pygame.quit() 
関連する問題