2017-08-05 7 views
0

私はmygameをインポートしてゲームファイルを開こうとしていますが、コードは動作していません(コードの後に​​もっと説明します)メインのpygameファイルを別のファイル(mygame)から開く

import mygame 
'''THI IS THE MAIN FILE''' 
print("hello") 
while True: 

    ui = input(">>") 
    if 'hello' in ui: 
     print("hi!") 
    if 'how are you' in ui: 
     print("im fine") 
    if 'game' in ui: 
     mygame() 
     '''open the game''' 

(私はこれが実際に行うことができるかどうか理解したい原因だけでランダムに小さなpygameのコードをコピーし、)これはmygameファイルである

import pygame as p,random 
q=p.display 
T=16 
b=q.set_mode([256]*2).fill 
l=[] 
d=a=x=1 
c=p.event.get 
def mygame(): 
    while not(x&528or x in l): 
    l=l[a!=x:]+[x] 
    while a&528or a in l:a=random.randrange(512) 
    b(0);[b(99,(o%T*T,o/32*T,T,T))for o in l+[a]];q.flip();p.time.wait(99);D=d 
    for e in c(2): 
     v=e.key-272;n=((v&2)-1)*[1,32][v<3] 
     if-n-D and 0<v<5:d=n 
    c();x+=d 

結論:私は場合にのみ、ゲームを開始したいですトリガー( 'ゲーム')はメインの入力にありますが、この場合、メインを実行するとトリガーなしでゲームが最初に開きます。 これはあなたが両方のpythonコードでいくつかの問題を持っているように見える(最後のものよりも理解することも非常に簡単)pygame.initを含んでpygameの他のタイプの()

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

def gameg(): 
    pygame.init() 
    font1 = pygame.font.Font(None, 24) 
    screen = pygame.display.set_mode((600, 500)) 
    pygame.display.set_caption("Bomb Catching Game") 
    pygame.mouse.set_visible(False) 
    game_over = True 
    lives = 3 
    score = 0 
    game_over = True 
    mouse_x = mouse_y = 0 
    lead_x = 0 
    pos_x = 300 
    pos_y = 460 
    bomb_x = random.randint(0, 500) 
    bomb_y = -50 
    vel_y = 0.3 
    white = 255, 255, 255 
    red = 220, 50, 50 
    yellow = 230, 230, 50 
    black = 0, 0, 0 
    def print_text(font, x, y, text, color=(255, 255, 255)): 
      screen = pygame.display.set_mode((600, 500)) 
      imgText = font.render(text, True, color) 
      screen.blit(imgText, (x, y)) 
    while True: 
      for event in pygame.event.get(): 
       if event.type == QUIT: 
        sys.exit() 
       elif event.type == MOUSEMOTION: 
        mouse_x, mouse_y = event.pos 
        move_x, move_y = event.rel 
       elif event.type == MOUSEBUTTONUP: 
        if game_over: 
         game_over = False 
         lives = 3 
         score = 0 


      keys = pygame.key.get_pressed() 
      if keys[K_ESCAPE]: 
       sys.exit() 
      if keys[pygame.K_LEFT]: 
       lead_x -= 1 
      if keys[pygame.K_RIGHT]: 
       lead_x += 1 


      screen.fill((0, 0, 100)) 

      if game_over: 
       print_text(font1, 100, 200, "<CLICK TO PLAY>") 
      else: 
       #move the bomb 
       bomb_y += vel_y 

       #has the player missed the bomb? 
       if bomb_y > 500: 
        bomb_x = random.randint(0, 500) 
        bomb_y = -50 
        lives -= 1 
        if lives == 0: 
         game_over = True 
       #see if player has caught the bomb 
       elif bomb_y > pos_y: 
        if bomb_x > pos_x and bomb_x < pos_x + 120: 
         score += 10 
         bomb_x = random.randint(0, 500) 
         bomb_y = -50 

       #draw the bomb 
       pygame.draw.circle(screen, black, (bomb_x-4, int(bomb_y)-4), 30, 0) 
       pygame.draw.circle(screen, yellow, (bomb_x, int(bomb_y)), 30, 0) 

       #set basket position 
       pos_x = lead_x 
       if pos_x < 0: 
        pos_x = 0 
       elif pos_x > 500: 
        pos_x = 500 
       #draw the basket 
       pygame.draw.rect(screen, black, (pos_x-4, pos_y-4, 120, 40), 0) 
       pygame.draw.rect(screen, red, (pos_x, pos_y, 120, 40), 0) 

      #print # of lives 
      print_text(font1, 0, 0, "LIVES: " + str(lives)) 

      #print scores 
      print_text(font1, 500, 0, "SCORE: " + str(score)) 

      pygame.display.update() 

答えて

0

です。

mygame.pyには、q.set_mode([256]*2).fillが呼び出され、新しいウィンドウが開きます。これはモジュールレベルにあります。したがって、モジュールを呼び出すかPythonファイルを実行すると直接実行されます。

あなたの他のファイルで

(あなたがゲームを実行したいから)、以下のコード -

if 'game' in ui: 
    mygame() 
    '''open the game''' 

は、実際に直接モジュールmygameを呼び出そうとし、そしてない関数「mygameは()inside the module mygame , for that you need to do - mygame.mygame() `


あなたのコードにいくつかの簡単な変更、それを動作させることであろう -

mygame.py

import pygame as p,random 
def mygame(): 
    q=p.display 
    T=16 
    b=q.set_mode([256]*2).fill 
    l=[] 
    d=a=x=1 
    c=p.event.get 
    while not(x&528 or x in l): 
     l=l[a!=x:]+[x] 
     while a&528 or a in l: 
      a=random.randrange(512) 
     b(0) 
     [b(99,(o%T*T,o/32*T,T,T)) for o in l+[a]] 
     q.flip() 
     p.time.wait(99) 
     D=d 
     for e in c(2): 
      v=e.key-272 
      n=((v&2)-1)*[1,32][v<3] 
      if-n-D and 0<v<5: 
       d=n 
     c() 
     x+=d 
    q.quit() #Quit the display at the end of the game. 

私がコードに行われたいくつかの変更 -

  1. 関数の外にあるすべての行をmygame()関数内に追加しました。
  2. ゲームを終了した後に、ディスプレイを閉じるためのコード(q.quit())を追加しました。
  3. コードをリファクタリングして、少し良く見えるようにします。

メインPythonコードからmygame.mygame() - - としての機能呼び出し

  1. -

    import mygame 
    '''THI IS THE MAIN FILE''' 
    print("hello") 
    while True: 
    
        ui = input(">>") 
        if 'hello' in ui: 
         print("hi!") 
        elif 'how are you' in ui: 
         print("im fine") 
        elif 'game' in ui: 
         '''open the game''' 
         mygame.mygame() 
        elif 'exit' in ui: 
         break 
    

    いくつかの変更ここで代わりのmygame()

  2. ブロックをelifに追加し、正常にゲームを終了しました。さもなければブロックから出る唯一の方法はCtrl+Cだったでしょう。

EDIT

OPで追加された最新のコード例では、問題は画面が原因行にリセット取得し続けるprint_text()方法、である - screen = pygame.display.set_mode((600, 500))

私たちはその行を削除するだけで問題を解決できます。

+0

ありがとう@Anand S Kumar私はそれをすべて理解していますが、私のオリジナルの質問を編集して投稿したばかりの他のコードにこの概念をどのように実際に適用しますか?私は実際にdef **()を使用しました:すべての関数で、しかし私が関数を呼び出すと、ゲームは黒い画面になりますか?どうしてそんな風に、どうやって修正するのですか?再度、感謝します! –

+1

これを呼び出すために使用しているコードを追加することはできますか? –

+0

コードは実際にあなたの答えのメインと全く同じです –