134 lines
4.1 KiB
Python
134 lines
4.1 KiB
Python
#!/usr/bin/python3
|
|
import pygame
|
|
import numpy
|
|
from OpenGL.GL import *
|
|
from OpenGL.GLU import *
|
|
from pygame.locals import *
|
|
import tools
|
|
import gitter
|
|
import maus
|
|
import hud
|
|
import eventmanager
|
|
|
|
STARTLEVEL = 1
|
|
|
|
if __name__ == "__main__":
|
|
|
|
font = tools.loadFont("GenBasR.ttf",(24,72))
|
|
|
|
pygame.init()
|
|
pygame.mixer.init(frequency=22050, size=-16, channels=2, buffer=128)
|
|
|
|
#sounds laden:
|
|
|
|
klick = pygame.mixer.Sound("klick.wav")
|
|
gong = pygame.mixer.Sound("gong.wav")
|
|
error = pygame.mixer.Sound("error.wav")
|
|
|
|
dinfo = pygame.display.Info()
|
|
video_flags = OPENGL | HWSURFACE | DOUBLEBUF | FULLSCREEN
|
|
|
|
#ein paar variablen zu den seitenverhaeltnissen:
|
|
SCREEN_RATIO = float(dinfo.current_w)/float(dinfo.current_h) #16:9
|
|
GITTER_RATIO = float(gitter.GITTER_W)/float(gitter.GITTER_H)
|
|
|
|
FIELD_W_RATIO = (GITTER_RATIO*float(dinfo.current_h))/float(dinfo.current_w)
|
|
|
|
pygame.display.set_mode((dinfo.current_w,dinfo.current_h),video_flags)
|
|
tools.resize((dinfo.current_w,dinfo.current_h))
|
|
tools.GlInit()
|
|
tools.clearScreen()
|
|
|
|
eManager = eventmanager.eventmanager()
|
|
|
|
mausimaus = maus.maus()
|
|
|
|
git = gitter.gitter((dinfo.current_w*FIELD_W_RATIO,dinfo.current_h),eManager,mausimaus,(klick,gong,error))
|
|
|
|
sidebar = hud.hud((dinfo.current_w*FIELD_W_RATIO+2,2,dinfo.current_w-dinfo.current_w*FIELD_W_RATIO-4,dinfo.current_h-4),mausimaus,font)
|
|
|
|
sidebar.setBgColor((0.0,0.0,0.5,0.1))
|
|
|
|
clock = pygame.time.Clock()
|
|
|
|
curLevel = STARTLEVEL
|
|
|
|
|
|
|
|
#Hauptschleife:
|
|
while not sidebar.isExitClicked():
|
|
tools.clearScreen()
|
|
|
|
ticktime = clock.tick(40)
|
|
|
|
if sidebar.getMode() == hud.HUD_MODE_MAINMENU:
|
|
|
|
#kleiner Effekt fuer die sidebar ;)
|
|
|
|
x=mausimaus.getPos()[0]
|
|
y=mausimaus.getPos()[1]
|
|
|
|
if x > dinfo.current_w*FIELD_W_RATIO:
|
|
x = dinfo.current_w*FIELD_W_RATIO
|
|
r = 0.5-0.5/float(dinfo.current_w*FIELD_W_RATIO)*float(x)
|
|
g = 0.5*float(y)/float(dinfo.current_h)
|
|
b = float(x)/float(dinfo.current_w*FIELD_W_RATIO)
|
|
|
|
sidebar.setBgColor((r,g,b,0.2))
|
|
|
|
if sidebar.isPlayClicked():
|
|
curLevel = STARTLEVEL
|
|
sidebar.setMode(hud.HUD_MODE_PLAY)
|
|
git.setLevel(curLevel)
|
|
git.changeMode(gitter.MODE_SHOW)
|
|
|
|
|
|
|
|
sidebar.setBgColor((0.0,0.0,0.3,0.2))
|
|
|
|
sidebar.setMessage("Level " + str(curLevel))
|
|
|
|
elif git.getMode() == gitter.MODE_SHOW:
|
|
if git.readyToPlay():
|
|
sidebar.setBgColor((0.3,0.0,0.1,0.2))
|
|
git.changeMode(gitter.MODE_PLAY)
|
|
elif git.getMode() == gitter.MODE_PLAY:
|
|
if git.readyToShow():
|
|
if git.madeMistake():
|
|
sidebar.setMode(hud.HUD_MODE_GAMEOVER)
|
|
sidebar.setBgColor((1.0,0.0,0.0,0.3))
|
|
sidebar.setMessage(str(curLevel-1) + " Level geschafft!")
|
|
git.changeMode(gitter.MODE_RANDOM)
|
|
else:
|
|
curLevel += 1
|
|
if curLevel == gitter.GITTER_W*gitter.GITTER_H:
|
|
sidebar.setMode(hud.HUD_MODE_GAMEOVER)
|
|
sidebar.setMessage("alle Level geschafft!")
|
|
sidebar.setBgColor((0.0,1.0,0.0,0.3))
|
|
git.changeMode(gitter.MODE_RANDOM)
|
|
else:
|
|
git.setLevel(curLevel)
|
|
git.changeMode(gitter.MODE_SHOW)
|
|
sidebar.setBgColor((0.0,0.3,0.0,0.2))
|
|
sidebar.setMessage("Level " + str(curLevel))
|
|
if sidebar.getMode() == hud.HUD_MODE_GAMEOVER:
|
|
if sidebar.isOkClicked():
|
|
sidebar.setMode(hud.HUD_MODE_MAINMENU)
|
|
|
|
|
|
|
|
git.update()
|
|
eventlist = eManager.getByType(KEYDOWN)
|
|
for event in eventlist:
|
|
if event.key == K_ESCAPE:
|
|
exit()
|
|
eManager.update()
|
|
mausimaus.update()
|
|
sidebar.update()
|
|
|
|
tools.drawRect((0,0,dinfo.current_w,dinfo.current_h),0,(0,0,0,1))
|
|
git.draw()
|
|
sidebar.draw()
|
|
|
|
pygame.display.flip()
|