CellBasedGame
Class DynamicObject

java.lang.Object
  |
  +--CellBasedGame.DynamicObject
Direct Known Subclasses:
JBombDynamic

public abstract class DynamicObject
extends java.lang.Object

Classe generica di gestione degli oggetti mobili (giocatori, mostri, etc.) di un gioco basato su celle. Fornisce anche alcuni strumenti per l'implementazione dell'intelligenza artificiale degli oggetti mobili gestiti automaticamente

Author:
Marco Mastropaolo (marco.mastropaolo@libero.it / st971422@educ.di.unito.it)

Field Summary
protected static int DIJKSTRAARRAY
          Il lato del quadrato su cui verrà applicato l'algoritmo di Dijkstra
protected static int DIJKSTRABORDER
          Il bordo oltre gli oggetti a cui viene applicato Dijkstra
protected static int DIJKSTRALIMIT
          Indica il limite sotto il quale applicare l'algoritmo di Dijkstra per la ricerca del target
static int DIRECTION_DOWN
          (costante) Costante che rappresenta una delle possibili direzioni dell'oggetto
static int DIRECTION_LEFT
          (costante) Costante che rappresenta una delle possibili direzioni dell'oggetto
static int DIRECTION_NONE
          (costante) Costante che rappresenta la direzione nulla (nessun movimento)
static int DIRECTION_RIGHT
          (costante) Costante che rappresenta una delle possibili direzioni dell'oggetto
static int DIRECTION_UP
          (costante) Costante che rappresenta una delle possibili direzioni dell'oggetto
protected static int INFINITE
          Un numero sufficientemente alto per rappresentare l'infinito in un algoritmo
protected  boolean m_bAlive
          (costante) Costante che rappresenta una delle possibili direzioni dell'oggetto
protected  boolean m_bMustChangeDirection
          Segnala se occorre cambiare o meno direzione
protected  CellBasedGame m_cbGame
          Il CellBasedGame in cui è inserito l'oggetto
protected  int m_nDeltaX
          Valore X dell'ultimo scostamento nelle celle
protected  int m_nDeltaY
          Valore Y dell'ultimo scostamento nelle celle
protected  int m_nLastCellX
          Coordinata X dell'ultima cella in cui l'oggetto si è presentato.
protected  int m_nLastCellY
          Coordinata Y dell'ultima cella in cui l'oggetto si è presentato.
protected  int m_nLastDirection
          L'ultima direzione utilizzata dall'oggetto
protected  int m_nSpeed
          Velocità dell'essere vivente
protected  int m_nX
          Coordinata X del DynamicObject
protected  int m_nY
          Coordinata Y del DynamicObject
 
Constructor Summary
DynamicObject(CellBasedGame Game, int nX, int nY)
          (costruttore) Crea un nuovo DynamicObject
 
Method Summary
private  int applyDijkstra(int nSX, int nSY, int nTX, int nTY)
          Funzione di supporto che implementa l'algoritmo di Dijkstra del cammino minimo.
protected  int chase(DynamicObject objTarget)
          Funzione di supporto per l'intelligenza artificiale.
protected abstract  int chooseDirection()
          Funzione che viene richiamata quando è necessario scegliere una direzione da prendere.
 boolean collide(DynamicObject obj)
          Restituisce true se l'oggetto corrente collide con un oggetto parametro
protected  int deltasToDirection(int nDx, int nDy)
          Funzione di supporto che converte una coppia di scostamenti sull'asse x e y in una direzione
 void die()
          "Uccide" un dato DynamicObject (usato per implementazioni di mostri e simili)
 int getX()
          Restituisce la coordinata X dell'oggetto
 int getY()
          Restituisce la coordinata X dell'oggetto
protected  boolean isDirectionValid(int dir)
          Funzione che restituisce se la direzione passata come parametro è valida, cioè non porta a collisioni con muri
 void move()
          Funzione richiamata ogni volta che l'oggetto deve essere mosso in automatico Gestisce tutti i problemi legati allo spostamento
 void move(int dir)
          Funzione richiamabile per far muovere l'oggetto solo in una data direzione
protected  int oppositeDirection(int dir)
          Funzione di supporto che restituisce la direzione opposta di una data.
abstract  void paint(java.awt.Graphics gfx)
          Funzione che viene richiamata quando è necessario disegnare a schermo lo sprite corrispondente a questo oggetto.
protected  int random(int psame, int popposite)
          Funzione di supporto per l'intelligenza artificiale.
private  boolean rangeX(int a, int l)
          Restituisce true se a e l sono all'interno di un range pari alla larghezza di una Cell
private  boolean rangeY(int a, int l)
          Restituisce true se a e l sono all'interno di un range pari all'altezza di una Cell
 void setSpeed(int speed)
          Imposta la velocità dell'oggetto
protected  int stupid()
          Funzione di supporto per l'intelligenza artificiale.
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
 

Field Detail

m_nX

protected int m_nX
Coordinata X del DynamicObject

m_nY

protected int m_nY
Coordinata Y del DynamicObject

m_nSpeed

protected int m_nSpeed
Velocità dell'essere vivente

m_bMustChangeDirection

protected boolean m_bMustChangeDirection
Segnala se occorre cambiare o meno direzione

m_nLastCellX

protected int m_nLastCellX
Coordinata X dell'ultima cella in cui l'oggetto si è presentato.

m_nLastCellY

protected int m_nLastCellY
Coordinata Y dell'ultima cella in cui l'oggetto si è presentato.

m_nLastDirection

protected int m_nLastDirection
L'ultima direzione utilizzata dall'oggetto

m_cbGame

protected CellBasedGame m_cbGame
Il CellBasedGame in cui è inserito l'oggetto

DIJKSTRALIMIT

protected static final int DIJKSTRALIMIT
Indica il limite sotto il quale applicare l'algoritmo di Dijkstra per la ricerca del target

INFINITE

protected static final int INFINITE
Un numero sufficientemente alto per rappresentare l'infinito in un algoritmo

DIJKSTRABORDER

protected static final int DIJKSTRABORDER
Il bordo oltre gli oggetti a cui viene applicato Dijkstra

DIJKSTRAARRAY

protected static final int DIJKSTRAARRAY
Il lato del quadrato su cui verrà applicato l'algoritmo di Dijkstra

m_nDeltaX

protected int m_nDeltaX
Valore X dell'ultimo scostamento nelle celle

m_nDeltaY

protected int m_nDeltaY
Valore Y dell'ultimo scostamento nelle celle

DIRECTION_NONE

public static final int DIRECTION_NONE
(costante) Costante che rappresenta la direzione nulla (nessun movimento)

DIRECTION_DOWN

public static final int DIRECTION_DOWN
(costante) Costante che rappresenta una delle possibili direzioni dell'oggetto

DIRECTION_RIGHT

public static final int DIRECTION_RIGHT
(costante) Costante che rappresenta una delle possibili direzioni dell'oggetto

DIRECTION_LEFT

public static final int DIRECTION_LEFT
(costante) Costante che rappresenta una delle possibili direzioni dell'oggetto

DIRECTION_UP

public static final int DIRECTION_UP
(costante) Costante che rappresenta una delle possibili direzioni dell'oggetto

m_bAlive

protected boolean m_bAlive
(costante) Costante che rappresenta una delle possibili direzioni dell'oggetto
Constructor Detail

DynamicObject

public DynamicObject(CellBasedGame Game,
                     int nX,
                     int nY)
(costruttore) Crea un nuovo DynamicObject
Parameters:
Game - Il gioco CellBasedGame in cui l'oggetto è inserito
nX - La coordinata X di partenza [in pixel]
nY - La coordinata Y di partenza [in pixel]
Method Detail

getX

public int getX()
Restituisce la coordinata X dell'oggetto
Returns:
coordinata X dell'oggetto

getY

public int getY()
Restituisce la coordinata X dell'oggetto
Returns:
coordinata Y dell'oggetto

setSpeed

public void setSpeed(int speed)
Imposta la velocità dell'oggetto
Parameters:
speed - La nuova velocità a cui deve andare l'oggetto

move

public void move()
Funzione richiamata ogni volta che l'oggetto deve essere mosso in automatico Gestisce tutti i problemi legati allo spostamento

move

public void move(int dir)
Funzione richiamabile per far muovere l'oggetto solo in una data direzione
Parameters:
dir - La direzione verso cui muovere l'oggetto

stupid

protected int stupid()
Funzione di supporto per l'intelligenza artificiale. Implementa un movimento costante che varia di direzione se e solo se trova ostacoli.
Returns:
La direzione scelta

random

protected int random(int psame,
                     int popposite)
Funzione di supporto per l'intelligenza artificiale. Implementa un movimento casuale.
Parameters:
psame - Un numero intero compreso tra 0 e 100 che indica la probabilità che venga mantenuta la stessa direzione
popposite - Un numero intero compreso tra 0 e 100 che indica la probabilità che venga presa la direzione esattamente opposta alla corrente (le altre due direzioni sono equiprobabili)
Returns:
La direzione scelta

oppositeDirection

protected int oppositeDirection(int dir)
Funzione di supporto che restituisce la direzione opposta di una data.
Parameters:
dir - La direzione di cui vogliamo conoscere l'opposta.
Returns:
La direzione opposta a quella passata come parametro

chase

protected int chase(DynamicObject objTarget)
Funzione di supporto per l'intelligenza artificiale. Implementa un inseguimento di un altro oggetto DynamicObject utilizzando un semplice metodo di calcolo della direzione se siamo sopra a una certa distanza definita, altrimenti usando l'algoritmo del cammino minimo di Djikstra.
Parameters:
objTarget - L'oggetto da inseguire
Returns:
La direzione scelta

isDirectionValid

protected boolean isDirectionValid(int dir)
Funzione che restituisce se la direzione passata come parametro è valida, cioè non porta a collisioni con muri
Parameters:
dir - La direzione di cui si vuole controllare la validità.
Returns:
true se la direzione è valida

deltasToDirection

protected int deltasToDirection(int nDx,
                                int nDy)
Funzione di supporto che converte una coppia di scostamenti sull'asse x e y in una direzione
Parameters:
nDx - Scostamento sull'asse X
nDy - Scostamento sull'asse Y
Returns:
La direzione corrispondente

applyDijkstra

private int applyDijkstra(int nSX,
                          int nSY,
                          int nTX,
                          int nTY)
Funzione di supporto che implementa l'algoritmo di Dijkstra del cammino minimo. Usata internamente da chase.

rangeX

private boolean rangeX(int a,
                       int l)
Restituisce true se a e l sono all'interno di un range pari alla larghezza di una Cell
Parameters:
a - Numero da verificare essere all'interno di un range (l, l+CellWidth)
l - Numero che delimita l'intervallo
Returns:
true se a e l sono all'interno di un range pari all'altezza di una Cell

rangeY

private boolean rangeY(int a,
                       int l)
Restituisce true se a e l sono all'interno di un range pari all'altezza di una Cell
Parameters:
a - Numero da verificare essere all'interno di un range (l, l+CellHeight)
l - Numero che delimita l'intervallo
Returns:
true se a e l sono all'interno di un range pari all'altezza di una Cell

collide

public boolean collide(DynamicObject obj)
Restituisce true se l'oggetto corrente collide con un oggetto parametro
Parameters:
obj - l'oggetto di cui verificare la collisione
Returns:
true se l'oggetto corrente collide con un oggetto parametro

die

public void die()
"Uccide" un dato DynamicObject (usato per implementazioni di mostri e simili)

chooseDirection

protected abstract int chooseDirection()
Funzione che viene richiamata quando è necessario scegliere una direzione da prendere.

paint

public abstract void paint(java.awt.Graphics gfx)
Funzione che viene richiamata quando è necessario disegnare a schermo lo sprite corrispondente a questo oggetto.