kauron/DungeonManager
kauron
/
DungeonManager
Archived
1
0
Fork 0
This repository has been archived on 2022-12-21. You can view files and clone it, but cannot push or open issues or pull requests.
DungeonManager/app/src/main/java/com/kauron/dungeonmanager/Player.java

266 lines
8.8 KiB
Java

package com.kauron.dungeonmanager;
class Player {
public static final String NAME = "playerName", CLASS = "classInt", RACE = "raceInt", PX = "px";
/**
* Names for the classes
*/
public static final String[] CLASS_STRINGS = {
"Clase", "Ardiente", "Brujo", "Buscador", "Clérigo", "Explorador",
"Guerrero", "Mago", "Mente de Batalla", "Monje", "Paladín", "Pícaro", "Psiónico",
"Sacerdote Rúnico", "Señor de la guerra"
};
public static final int NULL = 0;
// /**
// * Values for classes
// */
// public static final int ARDIENTE = 1, BRUJO = 2, BUSCADOR = 3, CLÉRIGO = 4,
// EXPLORADOR = 5, GUERRERO = 6, MAGO = 7, MENTE_DE_BATALLA = 8, MONJE = 9, PALADÍN = 10,
// PÍCARO = 11, PSIÓNICO = 12, SACERDOTE_RÚNICO = 13, SEÑOR_DE_LA_GUERRA = 14;
/**
* Values for level - px computation
*/
public static final int[] LEVEL_PX = new int[]{
0, 1000, 2250, 3750, 5500, 7500, 10000, 13000, 16500, 20500, 26000,
32000, 39000, 47000, 57000, 69000, 83000, 99000, 119000, 143000, 175000,
210000, 255000, 310000, 375000, 450000, 550000, 675000, 825000, 1000000
};
/**
* Values for each class' characteristics
*/
public static final int[][] CLASS_STATS = new int[][] {
//pg on level up
{0, 5, 5, 5, 5, 5, 6, 4, 6, 5, 6, 5, 4, 5, 5},
//defenses bonus: fort, ref, vol
{0, 1, 0, 0, 0, 1, 2, 0, 0, 1, 1, 0, 0, 0, 1},
{0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 2, 0, 0, 0},
{0, 1, 1, 1, 2, 0, 0, 2, 2, 1, 1, 0, 2, 2, 1},
//initial pg bonus
{0,12,12,12,12,12,15,10,15,12,15,12,12,12,12},
//daily curative efforts
{0, 7, 6, 7, 7, 6, 9, 6, 9, 7,10, 6, 6, 7, 7}
};
/**
* Identifiers for each class characteristic
*/
public static final int PG_ON_LEVEL_UP = 0, DEF_FORT = 1, DEF_REF = 2, DEF_VOL = 3,
INITIAL_PG = 4, DAILY_CURATIVE_EFFORTS = 5;
/**
* Names for the races
*/
public static final String[] RACE_STRINGS = new String[] {
"Raza", "Dracónido", "Eladrín", "Elfo", "Enano", "Gitzherai", "Humanos", "Medianos",
"Mente del Fragmento", "Minotauro", "Salvaje", "Semielfo", "Tiflin"
};
/**
* Values for attack
*/
public static final int FUE = 0, CON = 1, DES = 2, INT = 3, SAB = 4, CAR = 5;
/**
* Values for defenses
*/
public static final int CA = 0, FORT = 1, REF = 2, VOL = 3;
//TODO: develop abilities like attacks, with a popup
//could be introduced by the player in a introduction screen, with ticks for train and bonuses
// /**
// * Values for abilities
// */
// public static final int ACROBACIAS = 1, AGUANTE = 2, ARCANOS = 3, ATLETISMO = 4, DIPLOMACIA = 5,
// DUNGEONS = 6, ENGAÑAR = 7, HISTORIA = 8, HURTO = 9, INTIMIDAR = 10, NATURALEZA = 11,
// PERCEPCIÓN = 12, PERSPICACIA = 13, RECURSOS = 14, RELIGIÓN = 15, SANAR = 16, SIGILO = 17;
/**
* Names for the abilities
*/
public static final String[] ABILITY_STRING = new String[] {
"Habilidades", "Acrobacias", "Aguante", "Arcanos", "Atletismo", "Diplomacia", "Dungeons", "Engañar",
"Historia", "Hurto", "Intimidar", "Naturaleza", "Percepción", "Perspicacia", "Recursos",
"Religión", "Sanar", "Sigilo"
};
public static final int[] ABILITY_BOOST = new int[] {
-1, DES, CON, INT, FUE, CAR, SAB, CAR, INT, CAR, DES, SAB, SAB, SAB, CAR, INT, SAB, DES
};
/**
* Values for the current living state
*/
public static final int OK = 1, MALHERIDO = 2, DEBILITADO = 3, MUERTO = 4, SAME = 5,
USE_CURATIVE_EFFORT = -1, CURED = 1, NOT_CURED = 0, MAXED = -1;
private int pg, maxPg, px;
private int state, lastState;
private int curativeEfforts, maxCurativeEfforts;
private int classInt, raceInt;
private String name;
private int level;
//TODO: use dice dialogs
private int[] atk, def, abilities;
//TODO: implement fully operational powers displayed as cards
private Power[] powers;
Player(
String name, int classInt, int raceInt,
int px, int[] atk, int[] abilities,
Power[] powers
){
this.name = name;
this.px = px;
setLevel();
this.raceInt = raceInt;
this.classInt = classInt;
this.def = new int[4];
setAtk(atk);
setState();
pg = maxPg;
curativeEfforts = maxCurativeEfforts;
this.abilities = abilities;
this.powers = powers;
}
int getPx() {return px;}
void setPx (int px) {this.px = px; setLevel();}
boolean addPx(int px) {
int lastLevel = level;
setPx(this.px + px);
return lastLevel < level;
}
int getMaxCurativeEfforts() {return maxCurativeEfforts;}
void setMaxCurativeEfforts(int maxCurativeEfforts) {this.maxCurativeEfforts = maxCurativeEfforts;}
int getCurativeEfforts() {return curativeEfforts;}
void setCurativeEffort(int curativeEfforts) {this.curativeEfforts = curativeEfforts;}
int getLevel() {return level;}
void setLevel() {
for (int i = 0; i < LEVEL_PX.length; i++){
if(px < LEVEL_PX[i]) {
level = i; return;
}
}
level = LEVEL_PX.length;
}
int getMaxPg() {return maxPg;}
void setMaxPg(int maxPg) {
if(this.maxPg == 0)
this.pg = maxPg;
this.maxPg = maxPg;
}
void setMaxPgOnLevelUp() {maxPg += CLASS_STATS[PG_ON_LEVEL_UP][classInt];}
int getPg() {return pg;}
void setPg(int pg) {this.pg = pg; setState();}
void losePg(int damage) {
pg -= damage;
setState();
}
int recoverPg(int recovered, boolean uses) {
if(recovered == USE_CURATIVE_EFFORT){
if(uses && curativeEfforts <= 0) return NOT_CURED;
else {
if(uses && pg < maxPg) curativeEfforts--;
if (pg < 0) {
pg = 0;
} else {
pg += maxPg / 4;
}
}
} else {
if (pg < 0) {
pg = 0;
} else {
pg += recovered;
}
}
setState();
if (pg > maxPg) {pg = maxPg; return MAXED;}
return CURED;
}
int getLastState() {return lastState == state ? SAME : lastState;}
int getState() {return state;}
private void setState() {
lastState = state;
if (pg <= maxPg / -2) state = MUERTO;
else if (pg <= 0) state = DEBILITADO;
else if(pg <= maxPg / 2) state = MALHERIDO;
else state = OK;
}
String getName() {return name;}
void setName(String name) {this.name = name;}
int getClassInt() {return classInt;}
void setClassInt(int classInt) {
this.classInt = classInt;
if (atk != null) setClass();
}
String getClassName() {return CLASS_STRINGS[classInt];}
String getRaceName() {return RACE_STRINGS[raceInt];}
void setRaceInt(int raceInt) {this.raceInt= raceInt;}
int getRaceInt() {return raceInt;}
//TODO: implement turns (for bonuses and continuous damage in the app
void rest(boolean isLong) {
if(isLong) {
pg = maxPg;
curativeEfforts = maxCurativeEfforts;
for (Power p : powers)
if (p != null)
p.recover(Power.DIARIO);
setState();
}
for (Power p : powers)
if (p != null)
p.recover(Power.ENCUENTRO);
}
void setAtk(int[] atk) {this.atk = atk; if(classInt != NULL) setClass();}
int getFue() {return atk[FUE];}
int getCon() {return atk[CON];}
int getSab() {return atk[SAB];}
int getCar() {return atk[CAR];}
int getDes() {return atk[DES];}
int getInt() {return atk[INT];}
int getCa() {return def[CA];}
int getFort() {return def[FORT];}
int getRef() {return def[REF];}
int getVol() {return def[VOL];}
void setClass() {
if(level == 1) maxPg = atk[CON] + CLASS_STATS[INITIAL_PG][classInt];
maxCurativeEfforts = Player.getModifier(atk[CON]) + CLASS_STATS[DAILY_CURATIVE_EFFORTS][classInt];
//TODO: implement armor!
def[CA] = 10 + level / 2 + Math.max(0, Player.getModifier(Math.max(atk[DES], atk[INT])));
def[FORT] = 10 + level / 2 + Player.getModifier(Math.max(atk[CON], atk[FUE])) +
CLASS_STATS[DEF_FORT][classInt];
def[REF] = 10 + level / 2 + Player.getModifier(Math.max(atk[DES], atk[INT])) +
CLASS_STATS[DEF_REF][classInt];
def[VOL] = 10 + level / 2 + Player.getModifier(Math.max(atk[CAR], atk[SAB])) +
CLASS_STATS[DEF_VOL][classInt];
}
static int getModifier(int i) {
return i / 2 - 5;
}
}