165 lines
3.6 KiB
Python
165 lines
3.6 KiB
Python
|
#!/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()
|
||
|
|
||
|
|