This repository has been archived on 2020-05-27. You can view files and clone it, but cannot push or open issues/pull-requests.
crystal-pokedex/attic/PokeDex.java

230 lines
8.0 KiB
Java
Executable File

import java.io.*;
import java.util.*;
public class PokeDex {
private static Pokemon[] pokemon;
private static PokeSkill[] pokeskill;
private final static String version = "2.1";
private final static InputStream systemin = System.in;
private static boolean longdescr = true;
private final static String[] types = new String[] { "pokemon", "skill" };
private final static String[][] fields = new String[][] { { "name", "number", "type", "evolution", "attack", "tmhm", "location", "breedmatch", "breedmove" }, { "name", "type", "description" } };
public static void main ( String[] args ) {
pokemon = new Pokemon[251];
pokeskill = new PokeSkill[251];
try {
ObjectInputStream instream = new ObjectInputStream ( new FileInputStream ( "crystal.pkmn" ) );
ObjectInputStream inskill = new ObjectInputStream ( new FileInputStream ( "crystal-skill.pkmn" ) );
System.out.println ( " Loading Pokemon" );
System.out.println ( "0% 100%");
for ( int i = 0; i < 251; i++ ) {
pokemon[i] = (Pokemon) instream.readObject();
pokeskill[i] = (PokeSkill) inskill.readObject();
if ( (i / 12) == (i / 12.0) )
System.out.print ( "." );
}
System.out.println();
instream.close();
inskill.close();
}
catch ( FileNotFoundException exception ) {
System.out.println ( "Could not find the databases!" );
System.exit ( 0 );
}
catch ( ClassNotFoundException exception ) {
System.out.println ( "Class error: " + exception );
System.exit ( 0 );
}
catch ( IOException exception ) {
System.out.println ( "Database I/O error!" + exception );
System.exit ( 0 );
}
String currentcommand = "";
do {
System.out.print ( "PokeDex> " );
try {
BufferedReader instream = new BufferedReader ( new InputStreamReader ( systemin ) );
currentcommand = instream.readLine().toLowerCase().trim();
if ( validate ( currentcommand, types ) )
searchField ( currentcommand );
else if ( currentcommand.equals ( "help" ) || currentcommand.equals ( "?" ) || currentcommand.equals ( "info" ) )
dispHelp();
else if ( currentcommand.equals ( "long" ) ) {
longdescr = !longdescr;
if ( longdescr )
System.out.println ( "Long descriptions turned on.\n" );
else
System.out.println ( "Long descriptions turned off.\n" );
}
else if ( !currentcommand.equals ( "quit" ) )
System.out.println ( "Invalid command (type help for usage)\n" );
}
catch ( IOException exception ) {
System.out.println ( "IO Stream error! " + exception );
currentcommand = "quit";
}
} while ( !currentcommand.equals ( "quit" ) );
}
private static boolean validate ( String test, String[] fields ) {
for ( int i = 0; i < fields.length; i++ )
if ( test.equals ( fields[i] ) )
return true;
return false;
}
private static void dispHelp() {
System.out.println ( "PokeDex " + version );
System.out.println ( "Released by Coleman under the GPL" );
System.out.println();
System.out.println ( "Commands:" );
System.out.println();
System.out.println ( " help, ?, info Display Help Message" );
System.out.println ( " pokemon, p Search for a Pokemon" );
System.out.println ( " skill, s Search for a Skill" );
System.out.println ( " long Toggle long descriptions" );
System.out.println();
System.out.println ( " Valid Pokemon search fields:" );
String temp = "";
for ( int i = 0; i < fields[0].length; i++ ) {
if ( i != fields[0].length - 1 )
temp += fields[0][i] + ", ";
else
temp += fields[0][i];
}
System.out.println ( " " + temp );
//System.out.println ( " name, number, type, attack, tmhm, location," );
//System.out.println ( " breedmatch, breedmove, evolution");
System.out.println();
System.out.println ( " Valid Skill search fields:" );
//System.out.println ( " name, type, description" );
temp = "";
for ( int i = 0; i < fields[1].length; i++ ) {
if ( i != fields[1].length - 1 )
temp += fields[1][i] + ", ";
else
temp += fields[1][i];
}
System.out.println ( " " + temp );
System.out.println();
System.out.println ( " All queries are case-insensitive." );
System.out.println();
System.out.println();
}
private static void searchField ( String type ) {
String field = "";
System.out.print ( "Enter search field: " );
try {
BufferedReader instream = new BufferedReader ( new InputStreamReader ( systemin ) );
field = instream.readLine().trim().toLowerCase();
}
catch ( IOException exception ) {
System.out.println ( "IO Stream error!" + exception );
field = "";
}
int typenum = 0;
for ( int i = 0; i < types.length; i++ )
if ( type.equals ( types[i] ) ) {
typenum = i;
break;
}
if ( !field.equals ( "" ) && validate ( field, fields[typenum] ) )
searchQuery ( field, typenum );
}
private static void searchQuery ( String field, int typenum ) {
String query = "";
System.out.print ( "Enter search query: " );
try {
BufferedReader instream = new BufferedReader ( new InputStreamReader ( systemin ) );
query = instream.readLine().trim().toLowerCase();
}
catch ( IOException exception ) {
System.out.println ( "IO Stream error!" + exception );
query = "";
}
if ( !query.equals ( "" ) ) {
System.out.println ( "\n==================" );
System.out.println ( " Begin search " );
System.out.println ( "==================\n" );
for ( int current = 0; current < 251; current++ ) {
if ( containsQuery ( query, field, typenum, current ) ) {
if ( longdescr && typenum == 0 )
System.out.println ( pokemon[current].longDescription() );
else if ( longdescr && typenum == 1 )
System.out.println ( pokeskill[current].longDescription() );
else if ( !longdescr && typenum == 0 )
System.out.println ( pokemon[current] );
else if ( !longdescr && typenum == 1 )
System.out.println ( pokeskill[current] );
}
}
System.out.println ( "\n==================" );
System.out.println ( " End Search" );
System.out.println ( "==================\n" );
}
}
private static boolean containsQuery ( String query, String field, int typenum, int current ) {
boolean result = false;
String searchresult = "";
if ( typenum == 0 ) {
if ( field.equals ( "name" ) )
searchresult = pokemon[current].getName();
else if ( field.equals ( "number" ) )
searchresult = (new Integer ( pokemon[current].getNumber() )).toString();
else if ( field.equals ( "location" ) )
searchresult = pokemon[current].foundAt();
else if ( field.equals ( "type" ) )
searchresult = pokemon[current].getType();
if ( field.equals ( "attack" ) ) {
String[] temp = pokemon[current].getAttack();
for ( int i = 0; i < temp.length; i++ )
searchresult += temp[i] + " ";
}
if ( field.equals ( "tmhm" ) ) {
String[] temp = pokemon[current].getTMHM();
for ( int i = 0; i < temp.length; i++ )
searchresult += temp[i] + " ";
}
if ( field.equals ( "breedmatch" ) ) {
String[] temp = pokemon[current].getBreedingList();
for ( int i = 0; i < temp.length; i++ )
searchresult += temp[i] + " ";
}
if ( field.equals ( "breedmove" ) ) {
String[] temp = pokemon[current].getBreedingMoves();
for ( int i = 0; i < temp.length; i++ )
searchresult += temp[i] + " ";
}
if ( field.equals ( "evolution" ) ) {
String[] temp = pokemon[current].getEvolution();
for ( int i = 0; i < temp.length; i++ )
searchresult += temp[i] + " ";
}
}
else if ( typenum == 1 ) {
if ( field.equals ( "name" ) )
searchresult = pokeskill[current].getName();
else if ( field.equals ( "description" ) )
searchresult = pokeskill[current].getDescription();
else if ( field.equals ( "type" ) )
searchresult = pokeskill[current].getType();
}
if ( searchresult.toLowerCase().indexOf ( query ) > -1 )
result = true;
return result;
}
}