Created the main game loop and started writing the game's states.
This commit is contained in:
84
game.py
Normal file
84
game.py
Normal file
@@ -0,0 +1,84 @@
|
||||
# Miguel Angel Astor Romero. Created on 7-1-2012. #
|
||||
###################################################
|
||||
import pygame
|
||||
|
||||
try:
|
||||
import android
|
||||
except ImportError:
|
||||
android = None
|
||||
|
||||
from state import VALID_STATES
|
||||
from intro import IntroState
|
||||
from menu import MenuState
|
||||
from ingame import InGameState
|
||||
from score import ScoreState
|
||||
from notvalidstate import NotValidState
|
||||
|
||||
# Debug constant. Comment to turn off debugging messages.
|
||||
DEBUG = True
|
||||
|
||||
# The Game class implements the state machine of the game and
|
||||
# runs the main game loop.
|
||||
class Game:
|
||||
def __init__(self, screen):
|
||||
""" Sets the rendering canvas and the intial state. """
|
||||
self.canvas = screen
|
||||
self.current_state = VALID_STATES['INTRO']
|
||||
self.done = False
|
||||
self.clock = pygame.time.Clock()
|
||||
|
||||
# Initialize the different game states.
|
||||
intro = IntroState()
|
||||
menu = MenuState()
|
||||
in_game = InGameState()
|
||||
score = ScoreState()
|
||||
not_valid = NotValidState()
|
||||
|
||||
# Create a states list.
|
||||
self.state_vector = [intro, menu, in_game, score, not_valid]
|
||||
|
||||
def get_state(self):
|
||||
""" Returns the current state of the game. """
|
||||
if self.current_state == VALID_STATES['INTRO']:
|
||||
return "INTRO"
|
||||
elif self.current_state == VALID_STATES['MENU']:
|
||||
return "MENU"
|
||||
elif self.current_state == VALID_STATES['IN_GAME']:
|
||||
return "IN_GAME"
|
||||
elif self.current_state == VALID_STATES['SCORE']:
|
||||
return "SCORE"
|
||||
elif self.current_state == VALID_STATES['QUIT']:
|
||||
return "QUIT"
|
||||
else:
|
||||
return "NOT_VALID"
|
||||
|
||||
def game_loop(self):
|
||||
""" The main game loop. """
|
||||
while not self.done:
|
||||
# Get user input first.
|
||||
self.state_vector[self.current_state].input()
|
||||
# Then update the game state.
|
||||
transition = self.state_vector[self.current_state].update()
|
||||
# Check if a state transition is required.
|
||||
if transition != VALID_STATES['STAY']:
|
||||
if transition == VALID_STATES['INTRO']:
|
||||
self.current_state = VALID_STATES['INTRO']
|
||||
elif transition == VALID_STATES['MENU']:
|
||||
self.current_state = VALID_STATES['MENU']
|
||||
elif transition == VALID_STATES['IN_GAME']:
|
||||
self.current_state = VALID_STATES['IN_GAME']
|
||||
elif transition == VALID_STATES['SCORE']:
|
||||
self.current_state = VALID_STATES['SCORE']
|
||||
elif transition == VALID_STATES['QUIT']:
|
||||
self.done = True
|
||||
self.current_state = VALID_STATES['QUIT']
|
||||
else:
|
||||
self.current_state = VALID_STATES['NOT_VALID']
|
||||
if DEBUG:
|
||||
print self.get_state()
|
||||
# If the game is not over, render the current state.
|
||||
if not self.done:
|
||||
self.state_vector[self.current_state].render(self.canvas)
|
||||
pygame.display.update()
|
||||
self.clock.tick(60)
|
||||
|
||||
Reference in New Issue
Block a user