initial commit
This commit is contained in:
45
arcadegame/ball.py
Normal file
45
arcadegame/ball.py
Normal 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
38
arcadegame/bat.py
Normal 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
200
arcadegame/eventhandler.py
Normal 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
164
arcadegame/main.py
Normal 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()
|
||||
|
||||
|
Reference in New Issue
Block a user