added menu class

added main and pause menu
fixed many errors
new-menus
Max Lange 8 years ago
parent ff9e97f2c1
commit 17825fe41f

@ -5,6 +5,24 @@
Version 0.3.x
How to Run the Game
-------------------
<br>This is just a developement version so you need
the programming language Python version 2.x:</br>
https://www.python.org/downloads/
<br>And the physics and graphics engine pygame:</br>
http://www.pygame.org/download.shtml
<br>Both have a good guide how to install them otherwise google is your friend.</br>
<h5>Windows:</h5>
In normal case double clicking Run.py should start it. If this does not work google for "How to start a .py file".
<br></br>
<h5>Debian based systems:</h5>
Double click on Run.sh. If this does not work make sure it has its executable bit set. Do this by opening a treminal in this folder or navigating there with a "normal" terminal and then copy-paste this command: chmod u+x ./Run.sh
<br></br>
<h5>Other:</h5>
Google for: "how to run python files in" and add you OS
<br></br>
How to play
-----------
To play, simply run the "Run.py" file located in the base directory
@ -24,8 +42,8 @@ Features
Custom music
------------
Simply paste your music into the music folder to be included in the game.
"_" will be replaced with spaces (" "). For best support use .ogg but .mp3 will work too.
Simply paste your music into the ./assets/music folder to be included in the game.
"_" will be replaced with spaces " ". For best support use .ogg but .mp3 will work too.
File / Code information
-----------------------
@ -47,8 +65,8 @@ File / Code information
| objects.py | 287 | 54 | 341 |
| settings.py | 381 | 78 | 459 |
| sounds.py | 7 | 4 | 11 |
| specials | 70 | 15 | 85 |
| | | |
| specials.py | 70 | 15 | 85 |
| | | |
| <strong>Total</strong> | <strong>2220</strong> | <strong>501</strong> | <strong>2721</strong> |
<strong>Top3 code only:</strong><ul>

@ -1,7 +1,7 @@
&default.vars
&./assets/templates/default.vars
@|Continue |$size|$typeface|$color|$box1|$half + 0|$qrt + 0|
@|Save Game|$size|$typeface|$color|$box1|$half + 0|$qrt + 80|
@|load Game|$size|$typeface|$color|$box1|$half + 0|$qrt + 120|
@|Load Game|$size|$typeface|$color|$box1|$half + 0|$qrt + 120|
@|Settings |$size|$typeface|$color|$box1|$half + 0|$qrt + 40|
@|Exit |$size|$typeface|$color|$box1|$half + 0|$qrt + 160|

@ -1,4 +1,4 @@
&default.vars
&./assets/templates/default.vars
<#background = (../../assets/sprites/Background1.tif)
-|Volume |$volume |$size|$typeface|$color|$box2|$half + 0|$qrt + 0|

@ -219,6 +219,18 @@ class create_menu():
pygame.image.load(self.vars["background"][0]),
ref.size))
def blit(self, screen, events):
for surf in self.elems["surfs"]:
screen.blit(surf, pygame.Rect(0, 0, 0, 0))
try:
for external in self.elems["externals"]:
external.blit(screen)
except:
pass
for elem in self.elems["buttons"] + self.elems["sliders"]:
elem.update(events)
elem.blit(screen)
def get_klicked(self):
klicked = []
for elem in self.elems["buttons"]:

@ -12,40 +12,95 @@ from pygame.locals import *
"""Responsible tor the menus"""
def main():
"""main menu"""
class fade_screen():
def __init__(self, step, max_alpha, screenx, screeny):
self.fade = pygame.Surface((screenx, screeny))
self.fade.fill((0, 0, 0))
self.fade.set_alpha(0)
self.timer = pygame.time.get_ticks()
self.alpha = 0
self.max_alpha = max_alpha
self.step = step
def blit(self, screen):
time = pygame.time.get_ticks()
if (time - self.timer) > self.step and self.alpha <= self.max_alpha:
self.timer = pygame.time.get_ticks()
self.alpha += 1
self.fade.set_alpha(self.alpha)
screen.blit(self.fade, pygame.Rect(0, 0, 0, 0))
#import variables
screenx = settings.screenx_current
screeny = settings.screeny_current
screen = settings.screen
def update(self, screenx, screeny):
self.__init__(self.step, self.max_alpha, screenx, screeny)
#set mouse visible
pygame.mouse.set_visible(True)
#create menu
menu = creator.create_menu("./assets/templates/main.menu", {},
pygame.Rect((0, 0), (screenx, screeny)))
class menu():
#create fade effect
class fade_screen():
def __init__(self, menu_name, fade_step, fade_max, variables, externals):
"""main menu"""
def __init__(self, screenx, screeny):
self.fade = pygame.Surface((screenx, screeny))
self.fade.fill((0, 0, 0))
self.fade.set_alpha(0)
self.timer = pygame.time.get_ticks()
self.alpha = 0
#import variables
self.screenx = settings.screenx_current
self.screeny = settings.screeny_current
self.screen = settings.screen
self.fade_step = fade_step
self.fade_max = fade_max
self.variables = variables
self.externals = externals
self.menu_name = menu_name
def blit(self, screen):
time = pygame.time.get_ticks()
if (time - self.timer) > 70 and self.alpha <= 100:
self.timer = pygame.time.get_ticks()
self.alpha += 1
self.fade.set_alpha(self.alpha)
screen.blit(self.fade, pygame.Rect(0, 0, 0, 0))
fade = fade_screen(screenx, screeny)
menu.elems["externals"] = [fade]
#set mouse visible
pygame.mouse.set_visible(True)
#create menu
self.menu = creator.create_menu(
"./assets/templates/" + self.menu_name + ".menu",
self.variables, pygame.Rect((0, 0), (self.screenx, self.screeny)))
#create fade effect
fade = fade_screen(self.fade_step, self.fade_max, self.screenx, self.screeny)
self.menu.elems["externals"] = [fade]
for elem in self.externals:
self.menu.elems["externals"].insert(0, elem)
def run(self):
settings.upd("get_events")
self.menu.blit(self.screen, settings.events)
sounds.music.update(False, False)
for event in settings.events:
if event.type == QUIT:
pygame.mouse.set_visible(False)
return(["event.EXIT"])
if event.type == KEYDOWN:
key = pygame.key.name(event.key)
if key == "escape":
pygame.mouse.set_visible(False)
return(["event.EXIT"])
if key == "return":
pygame.mouse.set_visible(False)
return(["event.CONTINUE"])
if event.type == USEREVENT and event.code == "MENU":
names = []
klicked = self.menu.get_klicked()
for elem in klicked:
elem.klicked = False
names.append(elem.text)
return names
return([])
def update(self):
for external in self.externals:
external.update(settings.screenx_current, settings.screeny_current)
self.__init__(self.menu_name, self.fade_step, self.fade_max,
self.variables, self.externals)
def main():
"""main menu"""
#create the planets animation
class create_planet():
@ -65,8 +120,13 @@ def main():
def blit(self, screen):
self.planet.blit(screen, self.planet_pos)
planet = create_planet(screenx, screeny)
menu.elems["externals"].insert(0, planet)
def update(self, screenx, screeny):
self.__init__(screenx, screeny)
planet = create_planet(settings.screenx_current, settings.screeny_current)
main_menu = menu("main", 70, 100, {}, [planet])
#inserts menu music
sounds.music.queue("$not$menue.ogg", 0)
@ -75,145 +135,74 @@ def main():
run = True
settings.loading_time = pygame.time.get_ticks()
if settings.loading_time == 0:
settings.loading_time = pygame.time.get_ticks()
while run:
settings.upd("get_events")
for surf in menu.elems["surfs"]:
screen.blit(surf, pygame.Rect(0, 0, 0, 0))
for external in menu.elems["externals"]:
external.blit(screen)
for elem in menu.elems["buttons"] + menu.elems["sliders"]:
elem.update(settings.events)
elem.blit(screen)
events = main_menu.run()
sounds.music.update(False, False)
for event in events:
for event in settings.events:
if event.type == QUIT:
if event == "event.QUIT":
settings.quit()
if event == "event.CONTINUE":
run = False
if event == "Start":
settings.reset()
sounds.music.play("next")
run = False
if event == "Settings":
options()
main_menu.update()
if event == "Credits":
namings.run()
if event == "Exit":
settings.quit()
if event.type == KEYDOWN:
key = pygame.key.name(event.key)
if key == "escape":
settings.quit()
if key == "return":
settings.reset()
sounds.music.play("next")
run = False
if event.type == USEREVENT and event.code == "MENU":
for elem in menu.get_klicked():
elem.klicked = False
if elem.text == "Start":
settings.reset()
sounds.music.play("next")
run = False
if elem.text == "Settings":
options()
screenx = settings.screenx_current
screeny = settings.screeny_current
planet_pos.topleft = (int(screenx * 0.65), int(screeny * 0.33))
for surface in menu.elems["surfs"]:
pos = menu.elems["surfs"].index(surface)
surface = pygame.transform.scale(surface,
(int(screenx), int(screeny)))
menu.elems["surfs"][pos] = surface
menu = creator.create_menu("./assets/templates/main.menu", {},
pygame.Rect((0, 0), (screenx, screeny)))
fade = fade_screen(screenx, screeny)
menu.elems["externals"] = [fade]
planet = create_planet(screenx, screeny)
menu.elems["externals"].insert(0, planet)
if elem.text == "Credits":
namings.run()
if elem.text == "Exit":
settings.quit()
pygame.display.flip()
pygame.mouse.set_visible(False)
def pause():
"""pausing menu"""
#should be easy to understand too
screen = settings.screen
screenx = settings.screenx_current / 2.0
screeny = settings.screeny_current / 4.0
fade = settings.fade
fade_pos = settings.fade_pos
color = settings.color
sounds.music.play("pause")
pygame.mouse.set_visible(True)
fade.set_alpha(255)
screen.blit(fade, fade_pos)
fade.set_alpha(100)
background = settings.screen.copy()
pause_menu = menu("pause", 1, 150, {}, [])
pause_menu.menu.elems["surfs"].insert(0, background)
run = True
back = objects.button(screenx, screeny, "Continue", color)
save = objects.button(screenx, screeny + 40, "Save Game", color)
load = objects.button(screenx, screeny + 80, "Load Game", color)
option = objects.button(screenx, screeny + 120, "Settings", color)
escape = objects.button(screenx, screeny + 160, "Quit", color)
while run:
screen.blit(fade, fade_pos)
back.blit()
save.blit()
load.blit()
option.blit()
escape.blit()
pygame.display.flip()
missions.handle("pause")
settings.upd("get_events")
for event in settings.events:
if event.type == QUIT:
settings.quit()
if event.type == KEYDOWN:
key = pygame.key.name(event.key)
if key == "escape":
main()
run = False
pass
if key == "return":
sounds.music.play("unpause")
run = False
pass
if event.type == USEREVENT and event.code == "MENU":
pygame.time.delay(200)
if back.klicked:
events = pause_menu.run()
print events
for event in events:
if event in ["event.CONTINUE", "Continue"]:
sounds.music.play("unpause")
run = False
if event == "Save Game":
savename = inputpopup(settings.screenx_current,
settings.screeny_current / 4,
"Save Game")
if savename != "Exit":
settings.save(savename)
if event == "Load Game":
savegame = savegames()
if savegame != "Exit":
settings.load(savegame)
sounds.music.play("unpause")
run = False
if save.klicked:
savename = inputpopup(screenx, screeny * 2, "Save Game")
if savename != "Exit":
settings.save(savename)
if load.klicked:
savegame = savegames()
if savegame != "Exit":
settings.load(savegame)
sounds.music.play("unpause")
run = False
if option.klicked:
options()
screenx = settings.screenx_current / 2.0
screeny = settings.screeny_current / 4.0
back.move(screenx, screeny)
save.move(screenx, screeny + 40)
load.move(screenx, screeny + 80)
option.move(screenx, screeny + 120)
escape.move(screenx, screeny + 160)
if escape.klicked:
main()
run = False
run = True
pygame.mouse.set_visible(False)
if event == "Settings":
options()
main_menu.update()
if event in ["Exit", "event.EXIT"]:
main()
run = False
pygame.display.flip()
def inputpopup(x, y, header):

@ -79,6 +79,7 @@ def init():
global objects_on_screen # entitys currently blitted to screen
global player # abstract player class
global localmap # A dict of the local worlds
global loading_time # time until first blit
#set up screen
pygame.event.set_grab(False)
@ -147,6 +148,7 @@ def init():
infinitevents = {"fire1": False, "roundfire": False}
musicend = USEREVENT + 100
events = []
loading_time = 0
from .player import player as player
player = player()

Loading…
Cancel
Save