ip4.ass4.server
Class Game

java.lang.Object
  extended by ip4.ass4.server.Game
All Implemented Interfaces:
GameVariableListener

public class Game
extends java.lang.Object
implements GameVariableListener

Game har hand om en match mellan två klienter. Klienterna skickar via servern in sina racketrörelser, Game beräknar uifrån dessa och diverse parametrar för bolens hastighet, rotation, riktning mm de båda spelarnas, samt bollens position. Klienten begär, också via servern, dessa positioner och använder dessa för att interagera med respektive användare.

Spelplanen är 600x400 enheter stor, det står klienterna fritt att tolka detta (Tennis-klienten anser sig t.ex. ha en 600x400 stor skärm oavsett fönsterstorleken)

poäng utdelas om en klient slår bollen över den andra klientens kortsida eller om bollen stannar på motståndarens planhalva.

Author:
Henrik Johansson

Field Summary
private  double ballAcceleration
          bollens ballAcceleration i enheter/sekundkvadrat
private  double ballHitWallRotationReduction
          hur stor del av bollens rotation i procent som bibehålls efter en kollision med en vägg.
private  double ballStartVelocity
          bollens starthastighet (vid serve)
private  double ballVelocity
          bollens aktuella hastighet i enheter/sekund
private static int BX
           
private static int BY
           
private  double direction
          bollens riktning
private  long framerate
          antalet positionsupdateringar/sekund
private  double[] gameData
          spelarnas och bollens aktuella positioner [s1x,s1y,s2x,s2y,bx,by]
private  int[] gameDataOut
          spelarnas och bollens aktuella positioner samt spelarnas poäng [s1x,s1y,s2x,s2y,bx,by,s1p,s2p]
private  java.lang.String left
          vänster spelares id-värde
private  int newRot
          (+-)rotation som aderas till bollen om racket träffar den med hastighet i y-led
private static int P1X
           
private static int P1Y
           
private static int P2X
           
private static int P2Y
           
private  int[] playerMovement
          spelarnas aktuella rörelseriktningar [s1dx,s1dy,s2dx,s2dy]
private  double playerVelocity
          racketens hastighet vid rörese;
private static int POINT_P1
           
private static int POINT_P2
           
private  java.lang.String right
          höger spelares id-värde
private  double rotAcceleration
          bollrotationsacceleration
private  double rotation
          bollens rotation i varv/sekund
private  boolean serve
          true om bollen är stilla pga serve
private  boolean started
          true om denna match har startat
 
Constructor Summary
Game(java.lang.String left, java.lang.String right)
          konstruktor, skapar en tråd som efter fem sekunder startar matchen och därefter uppdaterar spelarnas och bollens positioner framerate gånger per sekund.
 
Method Summary
 int[] getGameData()
           
 boolean isStarted()
           
 void playerMovement(java.lang.String id, int[] movement)
          anropas via servern av klient som vill uppdatera sin racketrörelse
 void setBallAcceleration(double ballAcceleration)
          sätter bollens acceleration, bör vara negativ;)
 void setBallStartVelocity(double ballStartVelocity)
          sätter bollstartshastigheten, denna plus rackethastigheten ger bollens fart vid serv.
 void setFramerate(long framerate)
          sätter anal speluppdateringar/sekund, om servern hinner med.
 void setNewRot(int newRot)
          sätter bollens rotationsökning vid snedslag
 void setPlayerVelocity(double playerVelocity)
          sätter rackethastigheten
 void setRotAcceleration(double rotAcceleration)
          sätter rotationsaccelerationen, bör vara negativ;)
 java.lang.String side(java.lang.String id)
          returnerar vilken sida av planen klient med idvärde id spelar på
 void stopGame()
          anropas via servern av klient som avslutar matchen
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

started

private boolean started
true om denna match har startat


serve

private boolean serve
true om bollen är stilla pga serve


left

private java.lang.String left
vänster spelares id-värde


right

private java.lang.String right
höger spelares id-värde


gameData

private double[] gameData
spelarnas och bollens aktuella positioner

[s1x,s1y,s2x,s2y,bx,by]


gameDataOut

private int[] gameDataOut
spelarnas och bollens aktuella positioner samt spelarnas poäng

[s1x,s1y,s2x,s2y,bx,by,s1p,s2p]


playerMovement

private int[] playerMovement
spelarnas aktuella rörelseriktningar

[s1dx,s1dy,s2dx,s2dy]


playerVelocity

private double playerVelocity
racketens hastighet vid rörese;


ballVelocity

private double ballVelocity
bollens aktuella hastighet i enheter/sekund


ballStartVelocity

private double ballStartVelocity
bollens starthastighet (vid serve)


ballAcceleration

private double ballAcceleration
bollens ballAcceleration i enheter/sekundkvadrat


framerate

private long framerate
antalet positionsupdateringar/sekund


direction

private double direction
bollens riktning


P1X

private static final int P1X
See Also:
Constant Field Values

P1Y

private static final int P1Y
See Also:
Constant Field Values

P2X

private static final int P2X
See Also:
Constant Field Values

P2Y

private static final int P2Y
See Also:
Constant Field Values

BX

private static final int BX
See Also:
Constant Field Values

BY

private static final int BY
See Also:
Constant Field Values

POINT_P1

private static final int POINT_P1
See Also:
Constant Field Values

POINT_P2

private static final int POINT_P2
See Also:
Constant Field Values

rotation

private double rotation
bollens rotation i varv/sekund


ballHitWallRotationReduction

private double ballHitWallRotationReduction
hur stor del av bollens rotation i procent som bibehålls efter en kollision med en vägg.


newRot

private int newRot
(+-)rotation som aderas till bollen om racket träffar den med hastighet i y-led


rotAcceleration

private double rotAcceleration
bollrotationsacceleration

Constructor Detail

Game

public Game(java.lang.String left,
            java.lang.String right)
konstruktor, skapar en tråd som efter fem sekunder startar matchen och därefter uppdaterar spelarnas och bollens positioner framerate gånger per sekund. Denna tråd kommer att loopa fram till dess att en av spelarna via servern anropar Games stopGame-metod.

Parameters:
left - vänster spelares idvärde
right - höger spelares idvärde
Method Detail

isStarted

public boolean isStarted()
Returns:
true om matchen har startat

stopGame

public void stopGame()
anropas via servern av klient som avslutar matchen


getGameData

public int[] getGameData()
                  throws TennisGameException
Returns:
gameData: spelarnas och bollens positioner, samt spelarnas poäng
Throws:
TennisGameException - om motståndaren avslutat matchen
See Also:
gameData

playerMovement

public void playerMovement(java.lang.String id,
                           int[] movement)
anropas via servern av klient som vill uppdatera sin racketrörelse

Parameters:
id - klientens idvärde
movement - racketrörelse, [dx, dy] möjliga värden för dx och dy = -1,0,1

side

public java.lang.String side(java.lang.String id)
returnerar vilken sida av planen klient med idvärde id spelar på

Parameters:
id - klientens idvärde
Returns:
"left" || "right"

setBallAcceleration

public void setBallAcceleration(double ballAcceleration)
Description copied from interface: GameVariableListener
sätter bollens acceleration, bör vara negativ;)

Specified by:
setBallAcceleration in interface GameVariableListener
Parameters:
ballAcceleration - bollens acceleration
See Also:
GameVariableListener.setBallAcceleration(double)

setBallStartVelocity

public void setBallStartVelocity(double ballStartVelocity)
Description copied from interface: GameVariableListener
sätter bollstartshastigheten, denna plus rackethastigheten ger bollens fart vid serv.

Specified by:
setBallStartVelocity in interface GameVariableListener
Parameters:
ballStartVelocity - bollstartshastigheten
See Also:
GameVariableListener.setBallStartVelocity(double)

setFramerate

public void setFramerate(long framerate)
Description copied from interface: GameVariableListener
sätter anal speluppdateringar/sekund, om servern hinner med.

Specified by:
setFramerate in interface GameVariableListener
See Also:
GameVariableListener.setFramerate(long)

setNewRot

public void setNewRot(int newRot)
Description copied from interface: GameVariableListener
sätter bollens rotationsökning vid snedslag

Specified by:
setNewRot in interface GameVariableListener
Parameters:
newRot - rotationsökning
See Also:
GameVariableListener.setNewRot(int)

setPlayerVelocity

public void setPlayerVelocity(double playerVelocity)
Description copied from interface: GameVariableListener
sätter rackethastigheten

Specified by:
setPlayerVelocity in interface GameVariableListener
Parameters:
playerVelocity - rackethastigheten
See Also:
GameVariableListener.setPlayerVelocity(double)

setRotAcceleration

public void setRotAcceleration(double rotAcceleration)
Description copied from interface: GameVariableListener
sätter rotationsaccelerationen, bör vara negativ;)

Specified by:
setRotAcceleration in interface GameVariableListener
Parameters:
rotAcceleration - rotationsaccelerationen;
See Also:
GameVariableListener.setRotAcceleration(double)