initial commit

This commit is contained in:
Jonas Weinz
2016-09-12 15:19:48 +02:00
commit 9a497d056e
29 changed files with 2665 additions and 0 deletions

45
arcadegame/ball.py Normal file
View File

@ -0,0 +1,45 @@
import pygame
from pygame.locals import *
from sys import exit
class ball(object):
def __init__(self, x,y,dx,dy):
self.x = x
self.y = y
self.dx = dx
self.dy = dy
def setX(self,x):
self.x = x
def setY(self,y):
self.y = y
def setDx(self,dx):
self.dx = dx
def setDy(self,dy):
self.dy=dy
def getX(self):
return self.x
def getY(self):
return self.y
def getDx(self):
return self.dx
def getDy(self):
return self.dy
def update(self):
self.x +=self.dx
self.y +=self.dy
def draw(self,screen):
pygame.draw.rect(screen,(255,255,255),Rect(self.x-5,self.y-5,10,10))

38
arcadegame/bat.py Normal file
View File

@ -0,0 +1,38 @@
import pygame
from pygame.locals import *
from sys import exit
class bat(object):
def __init__(self, x,y,w,h,dy, maxY):
self.x = x
self.y = y
self.w = w
self.h = h
self.dy = dy
self.maxY = maxY
def moveUp(self):
self.y-= self.dy
if self.y<0:
self.y=0
def moveDown(self):
self.y += self.dy
if self.y+self.h > self.maxY:
self.y = self.maxY - self.h
def getY(self):
return self.y
def checkCollision(self,x,y):
if x<self.x or x>self.x+self.w:
return False
if y<self.y or y > self.y + self.h:
return False
return True
def draw(self, screen):
pygame.draw.rect(screen,(255,255,255),Rect(self.x,self.y,self.w,self.h))

200
arcadegame/eventhandler.py Normal file
View File

@ -0,0 +1,200 @@
import pygame
from pygame.locals import *
from sys import exit
if __name__ == '__main__':
pygame.init()
#modul, welches Werkzeuge enthaelt, die zur eventbearbeitung dienen.
KEY_INACTIVE = 0
KEY_PRESSED = 1
KEY_HOLD = 2
KEY_RELEASED = 3
class EventHandler(object):
def __init__(self):
self.eventlist = []
def update(self):
self.eventlist = pygame.event.get()
def getEventList(self):
return self.eventlist
class KeyHandler(object):
def __init__(self):
self.keyDict = {}
def registerKey(self,keycode):
self.keyDict[keycode] = KEY_INACTIVE
def getKeyState(self,keycode):
code = self.keyDict[keycode]
if code == KEY_PRESSED:
self.keyDict[keycode] = KEY_HOLD
elif code == KEY_RELEASED:
self.keyDict[keycode] = KEY_INACTIVE
return code
def update(self, e_handler):
eventlist = e_handler.getEventList()
#TODO: hier ist noch optimierungsbedarf, was die Geschwindigkeit angeht...
for event in eventlist:
#I love verschachtelte if's ;)
if event.type == KEYUP or event.type == KEYDOWN:
if self.keyDict.has_key(event.key):
if self.keyDict[event.key] == KEY_INACTIVE:
if event.type == KEYDOWN:
self.keyDict[event.key] = KEY_PRESSED
elif self.keyDict[event.key] == KEY_HOLD:
if event.type == KEYUP:
self.keyDict[event.key] = KEY_RELEASED
#klasse eig unnoetig, da pygame diese viel bequemer selber bereitstellt...
class MouseHandler(object):
def __init__(self):
self.mouseX = 0;
self.mouseY = 0;
self.LeftButton = KEY_INACTIVE
self.MiddleButton = KEY_INACTIVE
self.RightButton = KEY_INACTIVE
self.isMouseMoved = False
def update(self, e_handler):
elist = e_handler.getEventList()
for event in elist:
if event.type == MOUSEMOTION:
self.mouseX, self.mouseY = event.pos
self.isMouseMoved = True
elif event.type == MOUSEBUTTONDOWN:
if event.button == 1:
if self.LeftButton == KEY_INACTIVE:
self.LeftButton = KEY_PRESSED
elif event.button == 2:
if self.MiddleButton == KEY_INACTIVE:
self.MiddleButton = KEY_PRESSED
elif event.button == 3:
if self.RightButton == KEY_INACTIVE:
self.RightButton = KEY_PRESSED
elif event.type == MOUSEBUTTONUP:
if event.button == 1:
if self.LeftButton == KEY_HOLD:
self.LeftButton = KEY_RELEASED
elif event.button == 2:
if self.MiddleButton == KEY_HOLD:
self.MiddleButton = KEY_RELEASED
elif event.button == 3:
if self.RightButton == KEY_HOLD:
self.RightButton = KEY_RELEASED
def getLeftButtonState(self):
code = self.LeftButton
if code == KEY_PRESSED:
self.LeftButton = KEY_HOLD
elif code == KEY_RELEASED:
self.LeftButton = KEY_INACTIVE
return code
def getMiddleButtonState(self):
code = self.MiddleButton
if code == KEY_PRESSED:
self.MiddleButton = KEY_HOLD
elif code == KEY_RELEASED:
self.MiddleButton = KEY_INACTIVE
return code
def getRightButtonState(self):
code = self.RightButton
if code == KEY_PRESSED:
self.RightButton = KEY_HOLD
elif code == KEY_RELEASED:
self.RightButton = KEY_INACTIVE
return code
def mouseMoved(self):
if self.isMouseMoved:
self.isMouseMoved = False
return True
return False
def getMouseX(self):
return self.mouseX
def getMouseY(self):
return self.mouseY
def getMousePos(self):
return (self.mouseX, self.mouseY)
if __name__ == '__main__':
font = pygame.font.SysFont("arial", 16);
elist = EventHandler()
test = KeyHandler()
mouse = MouseHandler()
screen = pygame.display.set_mode(( 800, 600),0,32);
test.registerKey(K_UP)
test.registerKey(K_DOWN)
while True:
screen.fill((255, 255, 255))
elist.update();
test.update(elist)
mouse.update(elist)
code = test.getKeyState(K_UP)
code2 = test.getKeyState(K_DOWN)
moved = mouse.mouseMoved()
button = mouse.getLeftButtonState()
pos = mouse.getMousePos()
if code == KEY_RELEASED:
exit();
screen.blit( font.render('KeyUp: '+str(code), True, (0, 0, 0)), (0, 0) )
screen.blit( font.render('KeyDown: '+str(code2), True, (0, 0, 0)), (0, 20) )
screen.blit( font.render('Maus: '+str(moved), True, (0, 0, 0)), (0, 40) )
screen.blit( font.render('Maus: '+str(button), True, (0, 0, 0)), (0, 60) )
screen.blit( font.render('Maus: '+str(pos), True, (0, 0, 0)), (0, 80) )
pygame.display.update()

164
arcadegame/main.py Normal file
View File

@ -0,0 +1,164 @@
#!/usr/bin/python
import pygame
import math
from pygame.locals import *
from sys import exit
from ball import *
from bat import *
from eventhandler import *
import eventhandler
pygame.init();
#spielvariablen:
PLAYER_SPEED = 8
KI_SPEED = 12
GAMESPEED = 1.0
MAXSPEED = 3.0
SPEEDFAKTOR = 1.2
PADHEIGHT = 100.0
FPS = 60
#hole infos ueber die derzeitige displaykonfiguration
dinfo = pygame.display.Info();
#mache einen neuen Bildschirm in vollbild
screen = pygame.display.set_mode(( dinfo.current_w, dinfo.current_h),FULLSCREEN | HWSURFACE,dinfo.bitsize);
#screen = pygame.display.set_mode(( 800, 600),HWSURFACE,dinfo.bitsize);
font = pygame.font.SysFont("arial", 30);
myball = ball(1050,50,-5,5)
batleft = bat(20,dinfo.current_h/2-PADHEIGHT/2, 30, PADHEIGHT, PLAYER_SPEED, dinfo.current_h)
batright = bat(dinfo.current_w-50,dinfo.current_h/2-PADHEIGHT/2, 30, PADHEIGHT, KI_SPEED, dinfo.current_h)
e_handler=EventHandler()
keys = KeyHandler()
keys.registerKey(K_ESCAPE)
keys.registerKey(K_UP)
keys.registerKey(K_DOWN)
clock = pygame.time.Clock()
speed = GAMESPEED;
pointleft = 0
pointright = 0
error_counter = 0
ticktime = 0.0
realFps = 0
fpsCounter = 0
lastFps = 0
while True:
#timer:
ticktime = clock.tick(FPS)
#zeichenoperationen:
if (ticktime<1000.0/FPS+10):
screen.fill((0,0,0))
myball.draw(screen)
batleft.draw(screen)
batright.draw(screen)
screen.blit( font.render(str(""+str(pointleft)+" : "+str(pointright)), True, (255, 255, 255)), (dinfo.current_w/2-30, 20) )
screen.blit( font.render(str(lastFps), True, (255, 255, 255)), (dinfo.current_w/2-30, 60) )
pygame.display.update()
realFps +=1
#logik:
e_handler.update()
keys.update(e_handler)
fpsCounter +=1
if fpsCounter >= FPS:
lastFps = realFps
fpsCounter = 0
realFps = 0
#spieler:
if keys.getKeyState(K_UP) == KEY_HOLD:
batleft.moveUp()
if keys.getKeyState(K_DOWN) == KEY_HOLD:
batleft.moveDown()
#computer:
if myball.getY() < batright.getY()+20:
batright.moveUp()
if myball.getY() > batright.getY()+PADHEIGHT-20:
batright.moveDown()
#kollisionsabfragen:
if batleft.checkCollision(myball.getX(), myball.getY()) and myball.getDx() <0:
x = myball.getX()
y = myball.getY()
y2 = batleft.getY()
dy = (float(y-y2)/PADHEIGHT*10.0)-5.0
dx = 7.5-math.fabs(dy)
myball.setDx(dx*speed)
myball.setDy(dy*speed)
speed *= SPEEDFAKTOR
if batright.checkCollision(myball.getX(), myball.getY()) and myball.getDx()>0:
x = myball.getX()
y = myball.getY()
y2 = batright.getY()
dy = (float(y-y2)/PADHEIGHT*10.0)-5.0
dx = 7.5-math.fabs(dy)
myball.setDx(-dx*speed)
myball.setDy(dy*speed)
speed *= SPEEDFAKTOR
if speed > MAXSPEED:
speed = MAXSPEED
if myball.getY()-10<0 or myball.getY()+10>dinfo.current_h:
myball.setDy(-myball.getDy())
myball.update()
if myball.getX() < 0:
pointright +=1
speed = GAMESPEED
myball.setX(dinfo.current_w/2)
myball.setY(dinfo.current_h/2)
myball.setDx(-6)
myball.setDy(0)
if myball.getX() > dinfo.current_w:
pointleft +=1
speed = GAMESPEED
myball.setX(dinfo.current_w/2)
myball.setY(dinfo.current_h/2)
myball.setDx(6)
myball.setDy(0)
if keys.getKeyState(K_ESCAPE) != KEY_INACTIVE:
exit()