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/PokeDexC++ GNU/main.cpp

257 lines
7.7 KiB
C++
Executable File

#include <fstream>
#include <string> // because i'm lazy and i don't know enough about char *'s
#include <cstdlib> // used for atoi, will replace later possibly with custom atoi
using namespace std;
#include "List.h"
#include "StrToke.h" // uses List
#include "Pokemon.h" // uses List
#include "Skill.h" // uses List
#include "PokeDex.h" // uses StrToke
int main ( int argc, char* argv )
{
ifstream inpkmn ( "crystal.pkmn", ios::in );
if ( inpkmn.fail() )
{
PokeDex::alert ( "Could not load the database: crystal.pkmn" );
return 1;
}
Pokemon pokemon[251];
for ( int i = 0; i < 251; i++ )
{
char tmp[256];
inpkmn.getline ( tmp, 50 );
string name = tmp;
inpkmn.getline ( tmp, 50 );
int number = atoi ( tmp );
inpkmn.getline ( tmp, 50 );
string type = tmp;
inpkmn.getline ( tmp, 50 );
int max = atoi ( tmp );
List evo(max);
for ( int j = 0; j < max; j++ )
{
inpkmn.getline ( tmp, 50 );
evo.add ( tmp );
}
inpkmn.getline ( tmp, 50 );
max = atoi ( tmp );
List attack(max);
for ( int j = 0; j < max; j++ )
{
inpkmn.getline ( tmp, 50 );
attack.add ( tmp );
}
inpkmn.getline ( tmp, 50 );
max = atoi ( tmp );
List tmhm(max);
for ( int j = 0; j < max; j++ )
{
inpkmn.getline ( tmp, 50 );
tmhm.add ( tmp );
}
inpkmn.getline ( tmp, 50 );
max = atoi ( tmp );
List breed(max);
for ( int j = 0; j < max; j++ )
{
inpkmn.getline ( tmp, 50 );
breed.add ( tmp );
}
inpkmn.getline ( tmp, 50 );
max = atoi ( tmp );
List moves(max);
for ( int j = 0; j < max; j++ )
{
inpkmn.getline ( tmp, 50 );
moves.add ( tmp );
}
inpkmn.getline ( tmp, 100 );
string location = tmp;
if ( inpkmn.fail() || inpkmn.bad() || inpkmn.eof() )
{
PokeDex::alert ( "Fatal database error at Pokemon #" + i );
return 1;
}
pokemon[i] = Pokemon ( number, name, type, location, attack, breed, moves, tmhm, evo );
}
Skill skill[251];
for ( int i = 0; i < 251; i++ )
{
char tmp[256];
inpkmn.getline ( tmp, 50 );
string name = tmp;
inpkmn.getline ( tmp, 50 );
string type = tmp;
inpkmn.getline ( tmp, 100 );
string descr = tmp;
inpkmn.getline ( tmp, 10 );
int pp = atoi ( tmp );
inpkmn.getline ( tmp, 10 );
int power = atoi ( tmp );
if ( inpkmn.fail() || inpkmn.bad() || inpkmn.eof() )
{
PokeDex::alert ( "Fatal database error at Skill #" + i );
return 1;
}
skill[i] = Skill ( name, type, descr, power, pp );
}
inpkmn.close();
string command = "";
bool longdescr = false;
while ( command != "q" )
{
command = PokeDex::ask ( "PokeDex" );
if ( command == "h" || command == "?" )
{
string tmp = "PokeDexC++ 1.0|Search [P]okemon|Search [S]kills|Toggle [L]ong Descriptions (";
tmp += (longdescr)?"On":"Off";
tmp += ")|Display [?] [H]elp|[Q]uit PokeDex";
PokeDex::alert ( tmp );
}
else if ( command == "l" )
{
longdescr = !longdescr;
}
else if ( command == "p" )
{
StrToke t ( PokeDex::askPokemon(), "|" );
string field = t.nextToken();
string query = t.nextToken();
for ( int i = 0; i < 251; i++ )
{
if ( field == "name" )
{
string search = pokemon[i].getName();
if ( search.find ( query ) != -1 )
PokeDex::addResult ( pokemon[i], longdescr );
}
else if ( field == "number" )
{
int x = atoi ( query.c_str() );
if ( x == i + 1 )
PokeDex::addResult ( pokemon[i], longdescr );
}
else if ( field == "type" )
{
string search = pokemon[i].getType();
if ( search.find ( query ) != -1 )
PokeDex::addResult ( pokemon[i], longdescr );
}
else if ( field == "location" )
{
string search = pokemon[i].getLocation();
if ( search.find ( query ) != -1 )
PokeDex::addResult ( pokemon[i], longdescr );
}
else if ( field == "attack" )
{
List attack = pokemon[i].getAttack();
for ( int j = 0; j < attack.size(); j++ )
{
string search = attack.get ( j );
if ( search.find ( query ) != -1 )
{
PokeDex::addResult ( pokemon[i], longdescr );
break;
}
}
}
else if ( field == "breed" )
{
List breed = pokemon[i].getBreed();
for ( int j = 0; j < breed.size(); j++ )
{
string search = breed.get ( j );
if ( search.find ( query ) != -1 )
{
PokeDex::addResult ( pokemon[i], longdescr );
break;
}
}
}
else if ( field == "tmhm" )
{
List tmhm = pokemon[i].getTMHM();
for ( int j = 0; j < tmhm.size(); j++ )
{
string search = tmhm.get ( j );
if ( search.find ( query ) != -1 )
{
PokeDex::addResult ( pokemon[i], longdescr );
break;
}
}
}
else if ( field == "moves" )
{
List moves = pokemon[i].getMoves();
for ( int j = 0; j < moves.size(); j++ )
{
string search = moves.get ( j );
if ( search.find ( query ) != -1 )
{
PokeDex::addResult ( pokemon[i], longdescr );
break;
}
}
}
else if ( field == "evolution" )
{
List evo = pokemon[i].getEvolution();
for ( int j = 0; j < evo.size(); j++ )
{
string search = evo.get ( j );
if ( search.find ( query ) != -1 )
{
PokeDex::addResult ( pokemon[i], longdescr );
break;
}
}
}
else if ( field == "tmhm" )
{
List tmhm = pokemon[i].getTMHM();
for ( int j = 0; j < tmhm.size(); j++ )
{
string search = tmhm.get ( j );
if ( search.find ( query ) != -1 )
{
PokeDex::addResult ( pokemon[i], longdescr );
break;
}
}
}
}
}
else if ( command == "s" )
{
StrToke t ( PokeDex::askSkill(), "|" );
string field = t.nextToken();
string query = t.nextToken();
for ( int i = 0; i < 251; i++ )
{
if ( field == "name" )
{
string search = skill[i].getName();
if ( search.find ( query ) != -1 )
PokeDex::addResult ( skill[i] );
}
else if ( field == "type" )
{
string search = skill[i].getType();
if ( search.find ( query ) != -1 )
PokeDex::addResult ( skill[i] );
}
else if ( field == "descr" )
{
string search = skill[i].getDescr();
if ( search.find ( query ) != -1 )
PokeDex::addResult ( skill[i] );
}
}
}
}
}