2011-01-06 4 views
6

나는 파이썬/파이 게임으로 게임을 만드는 법을 배우기 시작했으며, 파이 게임으로 빠르게 게임을 만드는 것은 쉬운 일이지만, 합리적인 방법으로 코드를 구성하는 방법에 대한 실제 튜토리얼은 없다.파이 게임 코드 조직

파이 게임 튜토리얼 페이지에서 3 가지 방법을 찾았습니다. 작은 프로젝트

에 대한

1 클래스 없음 사용, 는

2 MVC 루비 온 레일 종류의 구조 만도 OO 프로그래밍에 지나치게 복잡하고 모호한 무언가 (결과 레일 프레임 워크없이 지식 레일 ?)

3 C++ - 다음과 같은 구조 : (매우 깨끗하고 직관적하지만 아마 파이썬 같은) 나 C++에서 SDL 게임을 만드는 데 사용 해요

import pygame 
from pygame.locals import * 

class MyGame: 
    def __init__(self): 
     self._running = True 
     self._surf_display = None 
     self.size = self.width, self.height = 150, 150 
    def on_init(self): 
     pygame.init() 
     self._display_surf = pygame.display.set_mode(self.size) 
     pygame.display.set_caption('MyGame') 
     #some more actions 
     pygame.display.flip() 
     self._running = True 
    def on_event(self, event): 
     if event.type == pygame.QUIT: 
      self._running = False 
     elif event.type == KEYDOWN: 
      if event.key == K_ESCAPE: 
       self._running = False 
     elif event.type == MOUSEBUTTONDOWN: 
      if event.button == 1: 
       print event.pos 
    def on_loop(self): 
     pass 
    def on_render(self): 
     pass 
    def on_cleanup(self): 
     pygame.quit() 
    def on_execute(self): 
     if self.on_init() == False: 
      self._running = False 
     while(self._running): 
      for event in pygame.event.get(): 
       self.on_event(event) 
      self.on_loop() 
      self.on_render() 
     self.on_cleanup() 

if __name__ == "__main__" : 
    mygame = MyGame() 
    mygame.on_execute() 

나는 정확한 이것을 사용 구조하지만 그것은 둘 다 사용할 수 있는지 궁금하네요 sma Logged 대용량 프로젝트 또는 파이 게임에서 더 깨끗한 방법이 있다면. 그것은 또한 매우 잘 조직하고 쉽게 따라 보이는

imports 

def functionx 
def functiony 

class MyGameObject: 
class AnotherObject: 
class Game: #pygame init, event handler, win, lose...etc 
while True: #event loop 
display update 

:

예를 들어 I는 다음과 같이 구성 게임을 발견했다.

작고 큰 게임에서 깨끗한 코드를 사용할 수 있도록 모든 프로젝트에서 일관되게 사용해야하는 구조는 무엇입니까?

+2

MVC는 GUI가있는 한 어떤 형태로 존재합니다. 'C++ 구조체'는 실제로 MVC의 컨트롤러 부분입니다. 언제든지 on_foo 메소드를 사용하여 이벤트를 기다리는 중입니다. 아마 MVC를 사용하고있을 것입니다. http://martinfowler.com/eaaDev/uiArchs.html –

+0

파이 게임을 사용하여 간단한 게임을 쓰려고하는데, 당신의 접근법이 매우 흥미 롭다. 그러나 우리가'on_loop()'에서 무엇을해야하는지 설명 할 수 있고, 'on_render()'메쏘드? 'on_render'에서 이해할 수 있도록 몇 가지 그림을 그렸습니다. 맞습니까? 그리고'on_loop()'에서 우리는 약간의 논리를 수행합니다. 맞습니까? – DaZzz

답변

2

수행 할 수있는 작업을 수행하십시오. 게시 한 코드를 이해할 수 있다면 그 코드를 사용해야합니다. 다른 구조가 더 자연 스럽다고 느끼면 대신 사용하십시오.

+0

그렇습니다. 클래스 생성과 폴링 이벤트 이외의 프로젝트를 읽을 수있는 방법으로 구성하는 것 이외에는 파이 게임/파이썬 표준 프로젝트가 없다는 것을 확인할 수 있습니다. 위의 두 예제가 파이썬 프로그래머에게 소름 끼치지 않는 한, 괜찮습니다. –

4

나는 또한 작업을 나눌 때 의견 (dreary가 처음 인 것처럼 보임)을 사용하는 것이 좋습니다. 예를 들면 다음과 같습니다.

import pygame, random, math 

## CLASSES ---------------------------------------------- 

class Ball(): 
    def __init__(self, (x,y), size): 
     """Setting up the new instance""" 
     self.x = x 
     self.y = y 
     self.size = size 

## FUNCTIONS -------------------------------------------- 
def addVectors((angle1, length1), (angle2, length2)): 
    """Take two vectors and find the resultant""" 
    x = math.sin(angle1) * length1 + math.sin(angle2) * length2 
    y = math.cos(angle1) * length1 + math.cos(angle2) * length2 

## INIT ------------------------------------------------- 

width = 600 
height = 400 
screen = pygame.display.set_mode((width, height)) 
pygame.display.set_caption("S-kuru") 

등등.

또 다른 옵션으로 하위 모듈 사용에 대해 생각해 보셨습니까? 그것들은 일반적으로 사용되는 다른 파이썬 파일 (.py) 일뿐입니다.

def showText(passedVariable): 
    print passedVariable 
    return 

이 새로운 파일은 단지 수학이나 될 임의과 같은 사용되는 함수로, 가져 :

import mySubModule 

mySubModule.showText("Hello!") 

하지만 내가 일을 얼마나입니다. 당신이 이해할 수있는 것, 지금뿐만 아니라 다음 주 또는 1 년도 절대적으로 따라야합니다.

+3

INIT 섹션을'if __name__ == "__main __":'블록에 넣습니다. –

+0

예, 하위 모듈은 평균적으로 큰 프로젝트에 유용합니다 –