организация кода Pygame - PullRequest
6 голосов
/ 06 января 2011

Я начал изучать создание игр с python / pygame, и, как будто бы легко сделать рабочую игру быстро в pygame, нет реального руководства о том, как разумно организовать код.

На странице учебных пособий по Pygame я нашел 3 способа сделать это.

1- Не использовать классы, для небольших проектов

2- MVC-структура типа ruby-on-railsно без структуры rails, которая приводит к чему-то слишком сложному и непонятному (даже с программированием на языке OO и знанием rails)

3-C ++ - подобной структуре, следующей:)

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()

Я привык делать SDL-игры на C ++, и я использую эту точную структуру, но мне интересно, подходит ли она для малых и больших проектов или есть ли более чистый путь в пигмеях.

Например, я обнаружил, что игра организована следующим образом:

imports

def functionx
def functiony

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

Она также выглядит очень хорошо организованной и простой в использовании.

Какую структуру я должен использовать последовательно во всех му проектов, чтобы иметь чистый код, пригодный для использования в маленьких и больших играх?

Ответы [ 2 ]

4 голосов
/ 06 января 2011

Я бы также предложил, возможно, использовать комментарии (такие унылые, как кажется на первый взгляд) для разделения вашей работы. Как пример:

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")

и т. Д.

Как еще один вариант, подумал ли ты об использовании подмодулей? Это просто другие файлы Python (.py), в которые вы помещаете часто используемые функции.

def showText(passedVariable):
    print passedVariable
    return

Этот новый файл является импортированным, как математическая или случайная функция, и функция, используемая как таковая:

import mySubModule

mySubModule.showText("Hello!")

Но так я работаю. Совершенно следуйте тому, что вы можете понять, не только сейчас, но и на следующей неделе или в году.

2 голосов
/ 06 января 2011

Делай то, что можешь. Если вы можете понять код, который вы разместили, то это то, что вы должны использовать. Если другая структура кажется более естественной, используйте ее вместо этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...