2017-11-22 27 views
1

私はフラスコファイルとpygameを含む別のファイルを持っています。両者は別々に動作します。どのようにしてフラスコを組み合わせると、私のウェブページ上のリンクを押して外部ファイルを実行し始めたら、どうすればいいですか?Pythonフラスコのゲームが初期化されていません

from flask import Flask, render_template 
import going 
app = Flask(__name__) 

@app.route('/') 
def index(): 
return render_template('index.html') 

@app.route('/my-link/') 
def my_link(): 
    return going.main() 

if __name__ == '__main__': 
    app.run(debug=True) 

現時点では、プログラムを初期化するためにmain()メソッドを実行しようとしています。

import pygame 
##1100 * 800 
size = [1100, 800] 
score1 = 0 
score2 = 0 
blue = (100, 149, 237) 
black = (0, 0, 0) 
brown = (165,42,42) 
white = (255, 255, 255) 
green =(0,100,0) 
red = (255,0,0) 
dark_red = (200,0,0) 
grey = (100,100,100) 
other_grey = (0,0,100) 
background = 'Mahogany.jpg' 
pass_count = 0 
player = 1 
clock = pygame.time.Clock() 

class Player(object): 
    def ___init__(self,id): 
     self.id = 1 
    def quitGame(self): 
     pygame.quit() 
     quit() 
    def pass_turn(self): 
     global pass_count 
     pass_count += 1 
     if pass_count == 2: 
      quitGame()  
    def score(player_text, score): 
     return player_text + str(score) 


class Stone(object): 
    def __init__(self,board,position,color): 
     self.board = board 
     self.position = position 
     self.color = color 
     self.placeStone() 
    def placeStone(self): 
     coords = (self.position[0] * 50, self.position[1] * 50) 
     pygame.draw.circle(self.board,self.color,coords,20,0) 

     pygame.display.update() 

class Board(object):  
    def draw_board(self): 
     for i in range(12): 
       for j in range(12): 
        rect = pygame.Rect(55 + (50 * i), 100 + (50 * j), 50, 50) 
        pygame.draw.rect(background, blue, rect, 1) 
     screen.blit(background, (0,0)) 
     pygame.display.update() 

    def text_objects(self,text, font): 
     textSurface = font.render(text, True, black) 

     return textSurface, textSurface.get_rect() 

    def button(self,msg,x,y,w,h,ic,ac,action = None): 
     mouse = pygame.mouse.get_pos() 
     click = pygame.mouse.get_pressed() 
     if x+w > mouse[0] > x and y+h > mouse[1] > y: 
      pygame.draw.rect(screen, ac,(x,y,w,h)) 

      if click[0] == 1 and action != None: 
       action() 
     else: 
      pygame.draw.rect(screen, ic,(x,y,w,h)) 

     smallText = pygame.font.Font("freesansbold.ttf",20) 
     textSurf, textRect = self.text_objects(msg, smallText) 
     textRect.center = ((x+(w/2)), (y+(h/2))) 
     screen.blit(textSurf, textRect) 
    def game_intro(self): 

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

      screen.blit(background, (0,0)) 
      largeText = pygame.font.SysFont("comicsansms",60) 
      TextSurf, TextRect = self.text_objects("GONLINE", largeText) 
      TextRect.center = ((1100/2),(800/2)) 
      screen.blit(TextSurf, TextRect) 

      self.button("Play!",200,500,100,100,grey,other_grey,self.play_game) 
      self.button("Quit!",700,500,100,100,red,dark_red,Player.quitGame) 

      pygame.display.update() 
      clock.tick(15) 
    def play_game(self): 
     width = 20 
     height = 20 
     space_between = 5 

     global player 
     finish = False 
     self.draw_board() 
     while not finish: 


      for event in pygame.event.get(): 
       if event.type == pygame.QUIT: 
        finish = True 
       elif event.type == pygame.MOUSEBUTTONDOWN and player == 1: 
        position = pygame.mouse.get_pos() 
        if (event.button == 1) and (position[0] > 55 and position[0] < 710) and (position[1] > 100 and position[1] < 750): 
         x = int(round(((position[0])/50.0), 0)) 
         y = int(round(((position[1])/50.0), 0)) 
         Stone(screen,(x,y),white) 

         player = 2 
       elif event.type == pygame.MOUSEBUTTONDOWN and player == 2: 
        position = pygame.mouse.get_pos() 
        if (event.button == 1) and(position[0] > 55 and position[0] < 710) and (position[1] > 100 and position[1] < 750): 
         x = int(round(((position[0])/50.0), 0)) 
         y = int(round(((position[1])/50.0), 0)) 
         Stone(screen,(x,y),black) 

         player = 1 




      clock.tick(60) 
      self.button("Pass!",750,200,100,100,grey,other_grey,Player.pass_turn) 
      self.button("Quit!",950,200,100,100,red,dark_red,Player.quitGame) 
      self.button(score("Player 1: ", score1),750,400,300,110,white,white) 
      self.button(score("Player 2: ",score2),750,600,300,110,white, white) 
      pygame.display.update() 


     pygame.quit() 

def main(): 
    player = Player() 
    board = Board() 
    board.game_intro() 

if __name__ == "__main__": 
    pygame.init() 
    screen = pygame.display.set_mode(size, 0, 32) 
    pygame.display.set_caption("Go_Online") 
    background = pygame.image.load(background).convert() 
    main() 

は、ここであなたがあなたのゲームを呼び出そう2つの方法が若干異なっていると思われ、メインゲームファイル

+0

現在何が起こっていますか? –

+0

pygame.error:ビデオシステムが初期化されていません – zarrexx

+0

ゲームを別々に実行すると完璧に動作します。 – zarrexx

答えて

1

です。

$ python going.py

実行このコード

if __name__ == "__main__": 
    pygame.init() 
    screen = pygame.display.set_mode(size, 0, 32) 
    pygame.display.set_caption("Go_Online") 
    background = pygame.image.load(background).convert() 
    main() 

フラスコルート、トリガーの実行この

return going.main() 

あなたはいくつかが欠けているようなものであるように思わ成功した方法で、セットアップ。私の推測では、going.pyの下がこのように見えるはずです。

def main(): 
    pygame.init() 
    screen = pygame.display.set_mode(size, 0, 32) 
    pygame.display.set_caption("Go_Online") 
    background = pygame.image.load(background).convert() 
    player = Player() 
    board = Board() 
    board.game_intro() 


if __name__ == '__main__': 
    main() 
+0

残念ながら私は同じエラーが発生します。 pygame.error:ビデオシステムが初期化されていません – zarrexx

+0

私は命令を乱しましたが、修正しました。また、エラーが発生するたびにスタックトレースに従います。そこには多くの有益な情報があります。 –

+0

ありがとうございました。ウィンドウが起動しました。小さな問題が1つだけ発生しました。 "割り当て前にローカル変数 'background'が参照されています。 注文を変更しようとしましたが、それは動作しません。 – zarrexx

関連する問題