diff --git a/concept/character-design01.png b/concept/character-design01.png new file mode 100644 index 0000000..ee15614 Binary files /dev/null and b/concept/character-design01.png differ diff --git a/resources/graphics/main_menu.png b/resources/graphics/main_menu.png new file mode 100644 index 0000000..3329d0a Binary files /dev/null and b/resources/graphics/main_menu.png differ diff --git a/robotgame.py b/robotgame.py index 254e72b..ed59326 100755 --- a/robotgame.py +++ b/robotgame.py @@ -40,6 +40,9 @@ for module_name in module_names: if not module.get_init(): print("Failed to initialise %s module." % module_name) sys.exit() +if not pygame.image.get_extended(): + print("Pygame does not support extended image support.") + sys.exit() import argparse diff --git a/robotgame/game.py b/robotgame/game.py index 20d5179..fab23f1 100644 --- a/robotgame/game.py +++ b/robotgame/game.py @@ -28,6 +28,8 @@ import os import pygame import jukebox +import level +import main_menu class Game(object): """Create an object to handle the game.""" @@ -38,9 +40,15 @@ class Game(object): self.clock = pygame.time.Clock() - self.jukebox = jukebox.Jukebox(os.path.abspath(os.path.join("resources", - "music")), - ["basshit.ogg"]) + self.jukebox = jukebox.Jukebox( + os.path.abspath(os.path.join("resources", "music")), + ["basshit.ogg"]) + + # Add main menu object to list of objects. + self.objs.append(main_menu.MainMenu(self, os.path.abspath(os.path.join( + "resources", "graphics", "main_menu.png")))) + + self.level = None self.ticks = self.prev_ticks = pygame.time.get_ticks() @@ -61,14 +69,19 @@ class Game(object): self.draw() self.clock.tick(self.speed) + + def goto_level(self, level): + self.level = level + + def update(self, t, dt): """ Update all game objects. """ # Retrieve and flush all events since last update call (this prevents # event "bottlenecking"/lock-ups) - events = pygame.event.get() - for event in events: + e = pygame.event.get() + for event in e: # Stop the game when closing the window if event.type == pygame.QUIT: self.stop() @@ -80,12 +93,11 @@ class Game(object): # Update all objects for obj in self.objs: if hasattr(obj, 'update'): - obj.update(t, dt) - self.prev_ticks = pygame.time.get_ticks() + obj.update(e, t, dt) def draw(self): """ - Update all game objects. + Draw all game objects. """ self.window.fill((0, 0, 0)) for obj in self.objs: diff --git a/robotgame/jukebox.py b/robotgame/jukebox.py index b64f37a..e5d77a9 100644 --- a/robotgame/jukebox.py +++ b/robotgame/jukebox.py @@ -26,7 +26,6 @@ The jukebox. Handles playback of background music. import os import pygame -import random class Jukebox(object): """Create an object to handle music playback.""" @@ -37,11 +36,9 @@ class Jukebox(object): def play(self): pygame.mixer.music.load( - os.path.join(self.music_dir, - self.music_files[self.iterator - % len(self.music_files)])) + os.path.join(self.music_dir, self.music_files[self.iterator])) pygame.mixer.music.play() - self.iterator += 1 + self.iterator = (self.iterator + 1) % len(self.music_files) def stop(self): pygame.mixer.music.stop() diff --git a/robotgame/level.py b/robotgame/level.py new file mode 100644 index 0000000..363a209 --- /dev/null +++ b/robotgame/level.py @@ -0,0 +1,29 @@ +# This file is part of ROBOTGAME +# +# ROBOTGAME is free software: you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation, either version 3 of the License, or (at your option) any later +# version. +# +# ROBOTGAME is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# ROBOTGAME. If not, see . +# +# ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' +# +# level.py +# -------------------- +# date created : Tue Aug 7 2012 +# copyright : (C) 2012 Sakse Dalum +# maintained by : Sakse Dalum + +""" +A generic level. +""" + +class Level(object): + def __init__(self, level_name): + pass diff --git a/robotgame/main_menu.py b/robotgame/main_menu.py new file mode 100644 index 0000000..7f27be4 --- /dev/null +++ b/robotgame/main_menu.py @@ -0,0 +1,48 @@ +# This file is part of ROBOTGAME +# +# ROBOTGAME is free software: you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation, either version 3 of the License, or (at your option) any later +# version. +# +# ROBOTGAME is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# ROBOTGAME. If not, see . +# +# ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' +# +# main_menu.py +# -------------------- +# date created : Tue Aug 7 2012 +# copyright : (C) 2012 Sakse Dalum +# maintained by : Sakse Dalum + +""" +The main menu. +""" + +import pygame +import level + +class MainMenu(object): + def __init__(self, game, background_img_path): + self.__dict__.update(locals()) + + self.load() + + def load(self): + self.background_img = pygame.image.load(self.background_img_path) + self.background_img = pygame.transform.smoothscale( + self.background_img, self.game.window.get_size()) + + def update(self, e, t, dt): + for event in e: + if event.type == pygame.KEYDOWN: + if event.key == pygame.K_SPACE: + self.game.goto_level(level.Level("landing")) + + def draw(self, window): + window.blit(self.background_img, (0, 0))