#include "SDL.h"
#include "SDL_image.h"
#include "SDL_mixer.h"
#include "SDL_ttf.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <time.h>
#include <conio.h>
#include <list>
#include <iomanip>
#include <fstream>
#include <vector>
#include <Windows.h>

int SCREEN_X = 1024;
int SCREEN_Y = 768;
//const int W = 100;
//const int H = 100;
const int maxInv = 20;

char tmpch[200];

int W = 100, H = 100;
int step = 64;
int grid_x = 64;
int grid_y = 64;
int Px = 0, Py = 0, Ex = 0, Ey = 0;
int Ecount = 0;
int shans;
int invCount = 1;
int PlCount = 200;
int nExp = 0;
int tempLVL = 2;
int boom[10];

std::string items[] = { "", "Ракета", "Аптечка" };
int item[maxInv];

SDL_Rect p_rect;
Uint8 *keystate;

typedef struct cam 
{
    int x,y;
} cam;
cam Camera;

enum { up, rt, down, lt } dir;
enum { GAME, PLANET, INV, BATTLE, GAMEOVER } states;

bool upp = false, rp = false, dp = false, lp = false, ep = false, Eturn = false,Eatack = false, esc = false;
bool fullscreen = false;
bool canPShoot = false, canEShoot = false, canPShootR = false;

#include "image.h"
#include "music.h"
#include "engine.h"

int main( int argc, char* argv[] )
{
    srand(time(NULL));

    for(int i = 1; i<argc; i++)
    {
        char* a = &argv[i][2];
        if(argv[i][0]=='-') switch(argv[i][1])
        {
            case 'c': PlCount = atoi(a); break;
            case 'w': W  = atoi(a); break;
            case 'h': H  = atoi(a); break;
            default:  printf("unknown commandline option"); getch(); return 0; break;
        }
        else { printf("unknown commandline option"); getch(); return 0; }
    };

    SDL_Init(SDL_INIT_EVERYTHING);
    TTF_Init();

    SDL_WM_SetCaption("Space Pirates", "Space Pirates");

    //screen = SDL_SetVideoMode(640, 480, 0, 0);
    screen = SDL_SetVideoMode(SCREEN_X, SCREEN_Y,32, SDL_HWSURFACE | SDL_DOUBLEBUF);

    if( Mix_OpenAudio( 22050, MIX_DEFAULT_FORMAT, 2, 4096 ) == -1 ) return false;

    Camera.x = 0; Camera.y = 0;

    game g;
    g.load_imgs();

    Player p(player_up, 7, 5);
    Menu m(menu);
    Menu inv(inv);
    Menu battle(battle);

    states = GAME;

    std::list<Ship*>  ships;
    std::list<Ship*>::iterator it;

    std::list<Planet*> planets;
    std::list<Planet*>::iterator PLit;

    char q[25] = "data/planets/";
    char buff[25];
    for(int i = 1; i <= PlCount; ++i)
    {
        q[13] = 0;
        itoa(i,buff,10);
        strcat(q,buff);
        strcat(q,".txt");
        planets.push_back(new Planet(planet_1,q));
    }

    bool np = false;

    int PBx = battle.m_rect.x+104;
    int PBy = battle.m_rect.y+150;
    int EBx = battle.m_rect.x+450-64;
    int EBy = battle.m_rect.y+150;

    SDL_Event event;
    bool gameover = false;

    /* message pump */
    while (gameover == false)
    {
        if(p.hp <= 0) states = GAMEOVER;
        if(Eturn == true)
        {
            shans = rand()%100;
            int r  = -100 + rand()%200;
            int rr = -100 + rand()%200;
            if(shans > 0 && shans < 15) ships.push_back(new Ship(ship_up, r, rr));
        }
        Eturn = false;
        
        if(p.rockets <= 0)
        {
            p.rockets = 0;
            item[1] = 0;
        }
        else if(p.rockets > 0) item[1] = 1;

        if(p.h <= 0)
        {
            p.h = 0;
            item[2] = 0;
        }
        else if(p.h > 0) item[2] = 2;

        if(states == GAME) { p.ch_m = 0; p.ch_m_x = 0; }

        nExp = 10*p.LvL*1.5;
        if(p.exp >= nExp) { p.LvL++; p.m_hp += 70; p.hp = p.m_hp; }
        p.dmg = p.laser*p.LvL;
        tempLVL = p.LvL;

        if(canPShoot) PBx += 50;
        if(canPShootR) PBx += 10;
        if(canEShoot) EBx -= 50;

        /* look for an event */
        if (SDL_PollEvent(&event)) {
            /* an event was found */
            switch (event.type) {
                /* close button clicked */
                case SDL_QUIT:
                    gameover = true;
                    break;

                /* handle the keyboard 
                case SDL_KEYDOWN:
                    switch (event.key.keysym.sym) {
                        case SDLK_ESCAPE:
                            if(states == PLANET || states == INV) states = GAME;
                            else gameover = 1;
                            break;
                    }
                    break;*/
            }
        }

        keystate = SDL_GetKeyState(NULL);

        if (keystate[SDLK_LEFT] ) {
            if(states == GAME) p.update(lt);

            if(states == BATTLE)
                {
                    p.ch_m_x--;
                    if(p.ch_m_x <= 0) p.ch_m_x = 0;
                }
        }
        if(!keystate[SDLK_LEFT]) lp = false;
        

        if (keystate[SDLK_RIGHT] ) {
            if(states == GAME) p.update(rt);

            if(states == BATTLE)
                {
                    p.ch_m_x++;
                    if(p.ch_m_x > 1) p.ch_m_x = 1;
                }
        }
        if(!keystate[SDLK_RIGHT]) rp = false;
        

        if (keystate[SDLK_UP] ) {
            if(states == GAME) p.update(up);
            if(upp == false)
            {
                upp = true;
                if(states == PLANET)
                {
                    p.ch_m--;
                    if(p.ch_m <= 0) p.ch_m = 0;
                }
                if(states == INV)
                {
                    p.ch_m--;
                    if(p.ch_m <= 0) p.ch_m = 0;
                }
                if(states == BATTLE)
                {
                    p.ch_m--;
                    if(p.ch_m <= 0) p.ch_m = 0;
                }
            }
        }
        if(!keystate[SDLK_UP]) upp = false;


        if (keystate[SDLK_DOWN] ) {
            if(states == GAME) p.update(down);
            if(dp == false)
            {
                dp = true;
                if(states == PLANET) 
                {
                    p.ch_m++;
                    if(p.ch_m >= 4) p.ch_m = 4;
                }
                if(states == INV)
                {
                    p.ch_m++;
                    if(p.ch_m >= invCount) p.ch_m = invCount;
                }
                if(states == BATTLE)
                {
                    p.ch_m++;
                    if(p.ch_m > 1) p.ch_m = 1;
                }
            }
        }
        if(!keystate[SDLK_DOWN]) dp = false;

        if(keystate[SDLK_F1])
        {
            fullscreen = !fullscreen;
            if(fullscreen == true) screen = SDL_SetVideoMode(SCREEN_X, SCREEN_Y,32, SDL_FULLSCREEN | SDL_HWSURFACE | SDL_DOUBLEBUF);
            else if(fullscreen == false) screen = SDL_SetVideoMode(SCREEN_X, SCREEN_Y,32, SDL_HWSURFACE | SDL_DOUBLEBUF);
        }

        if(keystate[SDLK_RETURN])
        {
            if(ep == false)
            {
                ep = true;
                for(PLit=planets.begin();PLit!=planets.end();PLit++)
                {
                    Planet *a = *PLit;
                    if(Px == a->getX() && Py == a->getY())
                    {
                        if(states == PLANET)
                        {
                            if(p.ch_m == 0)
                            {
                                if(p.money >= a->price1 && a->count1 > 0)
                                {
                                    if(a->tovar1 == "Ракета")
                                    {
                                        p.rockets++;
                                        a->count1--;
                                        p.money -= a->price1;
                                        item[1] = 1;
                                    }    
                                    else if(a->tovar1 == "Аптечка")
                                    {
                                        a->count1--;
                                        p.money -= a->price1;
                                        p.h++;
                                        item[2] = 2;
                                    }
                                }
                            }
                            if(p.ch_m == 1)
                            {
                                if(p.money >= a->price2 && a->count2 > 0)
                                {
                                    if(a->tovar2 == "Ракета")
                                    {
                                        p.rockets++;
                                        a->count2--;
                                        p.money -= a->price2;
                                        item[1] = 1;
                                    }
                                    else if(a->tovar2 == "Аптечка")
                                    {
                                        a->count2--;
                                        p.money -= a->price2;
                                        p.h++;
                                        item[2] = 2;
                                    }
                                }
                            }
                            if(p.ch_m == 2)
                            {
                                if(p.money >= a->price3 && a->count3 > 0)
                                {
                                    if(a->tovar3 == "Ракета")
                                    {
                                        p.rockets++;
                                        a->count3--;
                                        p.money -= a->price3;
                                        item[1] = 1;

                                    }
                                    else if(a->tovar3 == "Аптечка")
                                    {
                                        a->count3--;
                                        p.money -= a->price3;
                                        p.h++;
                                        item[2] = 2;
                                    }
                                }
                            }
                            if(p.ch_m == 3)
                            {
                                if(p.money >= a->price4 && a->count4 > 0)
                                {
                                    if(a->tovar4 == "Ракета")
                                    {
                                        p.rockets++;
                                        a->count4--;
                                        p.money -= a->price4;
                                        item[1] = 1;
                                    }
                                    else if(a->tovar4 == "Аптечка")
                                    {
                                        a->count4--;
                                        p.money -= a->price4;
                                        p.h++;
                                        item[2] = 2;
                                    }
                                }
                            }
                            if(p.ch_m == 4)
                            {
                                if(p.money >= a->price5 && a->count5 > 0)
                                {
                                    if(a->tovar5 == "Ракета")
                                    {
                                        p.rockets++;
                                        a->count5--;
                                        p.money -= a->price5;
                                        item[1] = 1;
                                    }
                                    else if(a->tovar5 == "Аптечка")
                                    {
                                        a->count5--;
                                        p.money -= a->price5;
                                        p.h++;
                                        item[2] = 2;
                                    }
                                }
                            }
                        }
                        if(states == GAME) states = PLANET;
                    }
                }
                if(states == BATTLE)
                {
                    for(it = ships.begin();it!=ships.end();it++)
                    {
                        Ship *b = *it;
                        if(Eatack == false)
                        {
                            if(p.ch_m == 0 && p.ch_m_x == 0) // Ð›Ð°Ð·ÐµÑ€
                            {                                
                                if(b->getX() == Px && b->getY() == Py)
                                {
                                    b->hp -= p.dmg;
                                    canPShoot = true;
                                    Eatack = true;
                                }
                            }
                            if(p.ch_m == 0 && p.ch_m_x == 1) // Ð Ð°ÐºÐµÑ‚Ñ‹
                            {
                                if(b->getX() == Px && b->getY() == Py)
                                {
                                    if(p.rockets > 0)
                                    {
                                        b->hp -= p.rDmg;
                                        p.rockets--;
                                        canPShootR = true;
                                        Eatack = true;
                                    }
                                }
                            }
                            if(p.ch_m == 1 && p.ch_m_x == 0) //побег
                            {
                                if(b->getX() == Px && b->getY() == Py) states = GAME;
                            }

                            if(p.ch_m == 1 && p.ch_m_x == 1) //аптечка
                            {
                                if(b->getX() == Px && b->getY() == Py)
                                {
                                    if(p.h > 0)
                                    {
                                        p.hp += 20;
                                        p.h--;
                                        //Eatack = true;
                                    }
                                }
                            }
                        }
                        if(Eatack == true)
                        {
                            if(b->getX() == Px && b->getY() == Py)
                            {
                                p.hp -= b->Edmg;
                                canEShoot = true;
                                Eatack = false;
                            }
                        }
                    }
                }
                if(states == INV)
                {
                    for(PLit=planets.begin();PLit!=planets.end();PLit++)
                    {
                        Planet *a = *PLit;
                        if(a->getX() == Px && a->getY() == Py)
                        {
                            if(p.ch_m == 0)
                            {
                                if(p.rockets > 0)
                                {
                                    p.rockets--;
                                    p.money += a->price1;
                                }
                            }
                        }
                    }
                    if(p.ch_m == 1)
                    {
                        if(p.h > 0)
                        {
                            p.h--;
                            p.hp += 20;
                        }
                    }
                }
                if(states == GAMEOVER) gameover = true;
            }
        }
        if(!keystate[SDLK_RETURN]) ep = false;

        if(keystate[SDLK_i]) if(states == GAME) states = INV;

        if(keystate[SDLK_n])
        {
            if(np == false)
            {
                np = true;
                p.h--;
                states = GAME;
            }
        }
        if(!keystate[SDLK_n]) np = false;

        if(keystate[SDLK_ESCAPE])
        {
            if(esc == false)
            {
                esc = true;
                if(states == PLANET || states == INV) states = GAME;
                else if(states == BATTLE) {}
                    else gameover = true;
            }
        }
        if(!keystate[SDLK_ESCAPE]) esc = false;

        if( Mix_PlayingMusic() == 0 )
        {
            Mix_PlayMusic( music, -1 );   
        }

        g.draw_map();

        for(PLit=planets.begin();PLit!=planets.end();PLit++)
        {
            Planet *a = *PLit;
            a->update();
        }

        for(it=ships.begin();it!=ships.end();/*it++*/)
        {
            Ship *b = *it;
            b->update();
            if (b->life==false)    
            {
                p.money += 50;
                p.rockets += rand()%5 * b->Elvl;
                p.h += rand()%5 * b->Elvl;
                p.exp += rand()%20 * b->Elvl / 2;
                it = ships.erase(it); 
                delete b;
            }
            else if(b->Elvl < tempLVL - 4) { it = ships.erase(it); delete b; }
            else it++;
        }
        
        p.draw();
        sprintf(tmpch, "X: %d", Px);
        img_text ( tmpch, 16, SCREEN_X - 150, 45, 255, 255, 255 );
        sprintf(tmpch, "Y: %d", Py);
        img_text( tmpch, 16, SCREEN_X - 150, 60, 255, 255, 255 );

        sprintf(tmpch, "HP: %i", p.hp);
        img_text( tmpch, 16, SCREEN_X - 160, 90, 255, 255, 255 );
        sprintf(tmpch, "Деньги: %i", p.money);
        img_text( tmpch, 16, SCREEN_X - 160, 105, 255, 255, 255 );
        sprintf(tmpch, "LVL: %i", p.LvL);
        img_text( tmpch, 16, SCREEN_X - 160, 120, 255, 255, 255 );
        sprintf(tmpch, "EXP: %i/%i", p.exp, nExp);
        img_text( tmpch, 16, SCREEN_X - 160, 135, 255, 255, 255 );

        if(states == PLANET)
        {
            sprintf(tmpch, "PLANET");
            img_text( tmpch, 16, SCREEN_X - 160, 135, 0, 255, 0 );
            m.draw();
            for(PLit=planets.begin();PLit!=planets.end();PLit++)
            {
                Planet *c = *PLit;
                if(Px == c->getX() && Py == c->getY())
                {
                    sprintf(tmpch, "%s", c->name.c_str());
                    img_text( tmpch, 18, SCREEN_X / 2 - 280, SCREEN_Y / 2 - 180, 0, 0, 0 );

                    sprintf(tmpch, "Название Ñ‚овара");
                    img_text( tmpch, 16, m.m_rect.x+20, m.m_rect.y+45, 0, 0, 0 );//img_text( tmpch, 16, SCREEN_X / 2 - 280, SCREEN_Y / 2 - 155, 0, 0, 0 );

                    sprintf(tmpch, "Количество");
                    img_text( tmpch, 16, SCREEN_X / 2 - 140, SCREEN_Y / 2 - 155, 0, 0, 0 );

                    sprintf(tmpch, "Цена");
                    img_text( tmpch, 16, SCREEN_X / 2, SCREEN_Y / 2 - 155, 0, 0, 0 );
                    //-----------------------------1------------------------------
                    if(p.ch_m == 0)
                    {
                        sprintf(tmpch, "%s", c->tovar1.c_str());
                        img_text( tmpch, 14, SCREEN_X / 2 - 280, SCREEN_Y / 2 - 130, 255, 0, 0 );

                        sprintf(tmpch, "%d", c->count1);
                        img_text( tmpch, 14, SCREEN_X / 2 - 140, SCREEN_Y / 2 - 130, 255, 0, 0 );

                        sprintf(tmpch, "%d", c->price1);
                        img_text( tmpch, 14, SCREEN_X / 2, SCREEN_Y / 2 - 130, 255, 0, 0 );
                    }
                    else if(c->tovar1 == "Ракета" || c->tovar1 == "Аптечка")
                    {
                        sprintf(tmpch, "%s", c->tovar1.c_str());
                        img_text( tmpch, 14, SCREEN_X / 2 - 280, SCREEN_Y / 2 - 130, 0, 150, 0 );

                        sprintf(tmpch, "%d", c->count1);
                        img_text( tmpch, 14, SCREEN_X / 2 - 140, SCREEN_Y / 2 - 130, 0, 150, 0 );

                        sprintf(tmpch, "%d", c->price1);
                        img_text( tmpch, 14, SCREEN_X / 2, SCREEN_Y / 2 - 130, 0, 150, 0 );
                    }
                    else
                    {
                        sprintf(tmpch, "%s", c->tovar1.c_str());
                        img_text( tmpch, 14, SCREEN_X / 2 - 280, SCREEN_Y / 2 - 130, 0, 0, 0 );

                        sprintf(tmpch, "%d", c->count1);
                        img_text( tmpch, 14, SCREEN_X / 2 - 140, SCREEN_Y / 2 - 130, 0, 0, 0 );

                        sprintf(tmpch, "%d", c->price1);
                        img_text( tmpch, 14, SCREEN_X / 2, SCREEN_Y / 2 - 130, 0, 0, 0 );
                    }
                    //-----------------------------2--------------------------------
                    if(p.ch_m == 1)
                    {
                        sprintf(tmpch, "%s", c->tovar2.c_str());
                        img_text( tmpch, 14, SCREEN_X / 2 - 280, SCREEN_Y / 2 - 105, 255, 0, 0 );

                        sprintf(tmpch, "%d", c->count2);
                        img_text( tmpch, 14, SCREEN_X / 2 - 140, SCREEN_Y / 2 - 105, 255, 0, 0 );

                        sprintf(tmpch, "%d", c->price2);
                        img_text( tmpch, 14, SCREEN_X / 2, SCREEN_Y / 2 - 105, 255, 0, 0 );
                    }
                    else if(c->tovar2 == "Ракета" || c->tovar2 == "Аптечка")
                    {
                        sprintf(tmpch, "%s", c->tovar2.c_str());
                        img_text( tmpch, 14, SCREEN_X / 2 - 280, SCREEN_Y / 2 - 105, 0, 150, 0 );

                        sprintf(tmpch, "%d", c->count2);
                        img_text( tmpch, 14, SCREEN_X / 2 - 140, SCREEN_Y / 2 - 105, 0, 150, 0 );

                        sprintf(tmpch, "%d", c->price2);
                        img_text( tmpch, 14, SCREEN_X / 2, SCREEN_Y / 2 - 105, 0, 150, 0 );
                    }
                    else
                    {
                        sprintf(tmpch, "%s", c->tovar2.c_str());
                        img_text( tmpch, 14, SCREEN_X / 2 - 280, SCREEN_Y / 2 - 105, 0, 0, 0 );

                        sprintf(tmpch, "%d", c->count2);
                        img_text( tmpch, 14, SCREEN_X / 2 - 140, SCREEN_Y / 2 - 105, 0, 0, 0 );

                        sprintf(tmpch, "%d", c->price2);
                        img_text( tmpch, 14, SCREEN_X / 2, SCREEN_Y / 2 - 105, 0, 0, 0 );
                    }
                    //-----------------------------3--------------------------------
                    if(p.ch_m == 2)
                    {
                        sprintf(tmpch, "%s", c->tovar3.c_str());
                        img_text( tmpch, 14, SCREEN_X / 2 - 280, SCREEN_Y / 2 - 80, 255, 0, 0 );

                        sprintf(tmpch, "%d", c->count3);
                        img_text( tmpch, 14, SCREEN_X / 2 - 140, SCREEN_Y / 2 - 80, 255, 0, 0 );

                        sprintf(tmpch, "%d", c->price3);
                        img_text( tmpch, 14, SCREEN_X / 2, SCREEN_Y / 2 - 80, 255, 0, 0 );
                    }
                    else if(c->tovar3 == "Ракета" || c->tovar3 == "Аптечка")
                    {
                        sprintf(tmpch, "%s", c->tovar3.c_str());
                        img_text( tmpch, 14, SCREEN_X / 2 - 280, SCREEN_Y / 2 - 80, 0, 150, 0 );
                            
                        sprintf(tmpch, "%d", c->count3);
                        img_text( tmpch, 14, SCREEN_X / 2 - 140, SCREEN_Y / 2 - 80, 0, 150, 0 );

                        sprintf(tmpch, "%d", c->price3);
                        img_text( tmpch, 14, SCREEN_X / 2, SCREEN_Y / 2 - 80, 0, 150, 0 );
                    }
                    else
                    {
                        sprintf(tmpch, "%s", c->tovar3.c_str());
                        img_text( tmpch, 14, SCREEN_X / 2 - 280, SCREEN_Y / 2 - 80, 0, 0, 0 );
                            
                        sprintf(tmpch, "%d", c->count3);
                        img_text( tmpch, 14, SCREEN_X / 2 - 140, SCREEN_Y / 2 - 80, 0, 0, 0 );

                        sprintf(tmpch, "%d", c->price3);
                        img_text( tmpch, 14, SCREEN_X / 2, SCREEN_Y / 2 - 80, 0, 0, 0 );
                    }
                    //-----------------------------4--------------------------------------
                    if(p.ch_m == 3)
                    {
                        sprintf(tmpch, "%s", c->tovar4.c_str());
                        img_text( tmpch, 14, SCREEN_X / 2 - 280, SCREEN_Y / 2 - 55, 255, 0, 0 );

                        sprintf(tmpch, "%d", c->count4);
                        img_text( tmpch, 14, SCREEN_X / 2 - 140, SCREEN_Y / 2 - 55, 255, 0, 0 );

                        sprintf(tmpch, "%d", c->price4);
                        img_text( tmpch, 14, SCREEN_X / 2, SCREEN_Y / 2 - 55, 255, 0, 0 );
                    }
                    else if(c->tovar4 == "Ракета" || c->tovar4 == "Аптечка")
                    {
                        sprintf(tmpch, "%s", c->tovar4.c_str());
                        img_text( tmpch, 14, SCREEN_X / 2 - 280, SCREEN_Y / 2 - 55, 0, 150, 0 );

                        sprintf(tmpch, "%d", c->count4);
                        img_text( tmpch, 14, SCREEN_X / 2 - 140, SCREEN_Y / 2 - 55, 0, 150, 0 );

                        sprintf(tmpch, "%d", c->price4);
                        img_text( tmpch, 14, SCREEN_X / 2, SCREEN_Y / 2 - 55, 0, 150, 0 );
                    }
                    else 
                    {
                        sprintf(tmpch, "%s", c->tovar4.c_str());
                        img_text( tmpch, 14, SCREEN_X / 2 - 280, SCREEN_Y / 2 - 55, 0, 0, 0 );

                        sprintf(tmpch, "%d", c->count4);
                        img_text( tmpch, 14, SCREEN_X / 2 - 140, SCREEN_Y / 2 - 55, 0, 0, 0 );

                        sprintf(tmpch, "%d", c->price4);
                        img_text( tmpch, 14, SCREEN_X / 2, SCREEN_Y / 2 - 55, 0, 0, 0 );
                    }
                    //-----------------------------5-------------------------------------
                    if(p.ch_m == 4)
                    {
                        sprintf(tmpch, "%s", c->tovar5.c_str());
                        img_text( tmpch, 14, SCREEN_X / 2 - 280, SCREEN_Y / 2 - 30, 255, 0, 0 );

                        sprintf(tmpch, "%d", c->count5);
                        img_text( tmpch, 14, SCREEN_X / 2 - 140, SCREEN_Y / 2 - 30, 255, 0, 0 );

                        sprintf(tmpch, "%d", c->price5);
                        img_text( tmpch, 14, SCREEN_X / 2, SCREEN_Y / 2 - 30, 255, 0, 0 );
                    }
                    else if(c->tovar5 == "Ракета" || c->tovar5 == "Аптечка")
                    {
                        sprintf(tmpch, "%s", c->tovar5.c_str());
                        img_text( tmpch, 14, SCREEN_X / 2 - 280, SCREEN_Y / 2 - 30, 0, 150, 0 );

                        sprintf(tmpch, "%d", c->count5);
                        img_text( tmpch, 14, SCREEN_X / 2 - 140, SCREEN_Y / 2 - 30, 0, 150, 0 );

                        sprintf(tmpch, "%d", c->price5);
                        img_text( tmpch, 14, SCREEN_X / 2, SCREEN_Y / 2 - 30, 0, 150, 0 );
                    }
                    else
                    {
                        sprintf(tmpch, "%s", c->tovar5.c_str());
                        img_text( tmpch, 14, SCREEN_X / 2 - 280, SCREEN_Y / 2 - 30, 0, 0, 0 );

                        sprintf(tmpch, "%d", c->count5);
                        img_text( tmpch, 14, SCREEN_X / 2 - 140, SCREEN_Y / 2 - 30, 0, 0, 0 );

                        sprintf(tmpch, "%d", c->price5);
                        img_text( tmpch, 14, SCREEN_X / 2, SCREEN_Y / 2 - 30, 0, 0, 0 );
                    }

                    sprintf(tmpch, "Для Ð²Ñ‹Ñ…ода Ð½Ð°Ð¶Ð¼Ð¸Ñ‚е ESC");
                    img_text( tmpch, 18, SCREEN_X / 2 - 280, SCREEN_Y / 2 + 180, 0, 0, 0 );
                }
            }
        }

        if(states == INV)
        {
            sprintf(tmpch, "INVENTORY");
            img_text( tmpch, 16, SCREEN_X - 160, 135, 0, 255, 0 );
            inv.draw(212,84);

            sprintf(tmpch, "Название");
            img_text( tmpch, 16, inv.m_rect.x+20, inv.m_rect.y+10, 0, 0, 0 );

            sprintf(tmpch, "Количество");
            img_text( tmpch, 16, inv.m_rect.x+180, inv.m_rect.y+10, 0, 0, 0 );

            for(int i = 0; i <= maxInv; i++)
            {
                if(item[i] == 1)
                {
                    if(p.ch_m == 0)
                    {
                        for(PLit=planets.begin();PLit!=planets.end();PLit++)
                        {
                            Planet *a = *PLit;
                            if(a->getX() == Px && a->getY() == Py)
                            {
                                sprintf(tmpch, "%s Ð¿Ñ€Ð¾Ð´Ð°Ð¶Ð°", items[ item[i] ].c_str());
                                img_text( tmpch, 14, inv.m_rect.x+20, inv.m_rect.y+30*i, 255, 0, 0 );

                                sprintf(tmpch, "Цена: %i", a->price1);
                                img_text( tmpch, 14, inv.m_rect.x+200, inv.m_rect.y+30*i, 255, 0, 0 );
                            }
                        }

                        sprintf(tmpch, "%s", items[ item[i] ].c_str());
                        img_text( tmpch, 14, inv.m_rect.x+20, inv.m_rect.y+30*i, 255, 0, 0 );

                        sprintf(tmpch, "%d", p.rockets);
                        img_text( tmpch, 14, inv.m_rect.x+180, inv.m_rect.y+30*i, 255, 0, 0 );
                    }
                    else
                    {
                        for(PLit=planets.begin();PLit!=planets.end();PLit++)
                        {
                            Planet *a = *PLit;
                            if(a->getX() == Px && a->getY() == Py)
                            {
                                sprintf(tmpch, "%s Ð¿Ñ€Ð¾Ð´Ð°Ð¶Ð°", items[ item[i] ].c_str());
                                img_text( tmpch, 14, inv.m_rect.x+20, inv.m_rect.y+30*i, 0, 0, 0 );

                                sprintf(tmpch, "Цена: %i", a->price1);
                                img_text( tmpch, 14, inv.m_rect.x+200, inv.m_rect.y+30*i, 0, 0, 0 );
                            }
                        }

                        sprintf(tmpch, "%s", items[ item[i] ].c_str());
                        img_text( tmpch, 14, inv.m_rect.x+20, inv.m_rect.y+30*i, 0, 0, 0 );

                        sprintf(tmpch, "%d", p.rockets);
                        img_text( tmpch, 14, inv.m_rect.x+180, inv.m_rect.y+30*i, 0, 0, 0 );
                    }
                }
                if(item[i] == 2)
                {
                    if(p.ch_m == 1)
                    {
                        sprintf(tmpch, "%s", items[ item[i] ].c_str());
                        img_text( tmpch, 14, inv.m_rect.x+20, inv.m_rect.y+30*i, 255, 0, 0 );
                        
                        sprintf(tmpch, "%d", p.h);
                        img_text( tmpch, 14, inv.m_rect.x+180, inv.m_rect.y+30*i, 255, 0, 0 );
                    }
                    else
                    {
                        sprintf(tmpch, "%s", items[ item[i] ].c_str());
                        img_text( tmpch, 14, inv.m_rect.x+20, inv.m_rect.y+30*i, 0, 0, 0 );

                        sprintf(tmpch, "%d", p.h);
                        img_text( tmpch, 14, inv.m_rect.x+180, inv.m_rect.y+30*i, 0, 0, 0 );
                    }
                }
            }
        }

        if(states == BATTLE)
        {
            sprintf(tmpch, "BATTLE");
            img_text( tmpch, 16, SCREEN_X - 160, 135, 0, 255, 0 );
            battle.draw();

            for(it=ships.begin();it!=ships.end();it++)
            {
                Ship *a = *it;
                if(a->getX() == Px && a->getY() == Py)
                {
                    img_draw(player_rt, battle.m_rect.x+50, battle.m_rect.y+150);
                    img_draw(ship_lt, battle.m_rect.x+450, battle.m_rect.y+150);

                    sprintf(tmpch, "hp: %i",p.hp);
                    img_text(tmpch, 14, battle.m_rect.x+50, battle.m_rect.y+25, 0, 255, 0 );
                    sprintf(tmpch, "Ракеты: %i",p.rockets);
                    img_text(tmpch, 14, battle.m_rect.x+50, battle.m_rect.y+45, 0, 255, 0 );
                    sprintf(tmpch, "Аптечки: %i",p.h);
                    img_text(tmpch, 14, battle.m_rect.x+50, battle.m_rect.y+65, 0, 255, 0 );

                    sprintf(tmpch, "hp: %i",a->hp);
                    img_text(tmpch, 14, battle.m_rect.x+450, battle.m_rect.y+25, 255, 0, 0 );
                    sprintf(tmpch, "LVL: %i",a->Elvl);
                    img_text(tmpch, 14, battle.m_rect.x+450, battle.m_rect.y+45, 255, 0, 0 );

                    if(canPShoot)
                    {
                        img_draw(p_beam, PBx, PBy);
                        if(PBx >= battle.m_rect.x+450-64)
                        {
                            canPShoot = false;
                            PBx = battle.m_rect.x+104;
                        }
                    }
                    else if(canPShootR)
                    {
                        img_draw(p_rocket, PBx, PBy);
                        if(PBx >= battle.m_rect.x+450)
                        {
                            canPShootR = false;
                            boom[0] = 1;
                            if(boom[0] == 1) img_draw(boom_1, PBx, PBy);
                            Sleep(100);
                            boom[0] = 0; boom[1] = 1;

                            if(boom[1] == 1) img_draw(boom_2, PBx, PBy);
                            Sleep(100);
                            boom[1] = 0; boom[2] = 1;

                            if(boom[2] == 1) img_draw(boom_3, PBx, PBy);
                            Sleep(100);
                            boom[2] = 0; boom[3] = 1;

                            if(boom[3] == 1) img_draw(boom_4, PBx, PBy);
                            Sleep(100);
                            boom[3] = 0; boom[4] = 1;

                            if(boom[4] == 1) img_draw(boom_5, PBx, PBy);
                            Sleep(100);
                            boom[4] = 0; boom[5] = 1;

                            if(boom[5] == 1) img_draw(boom_6, PBx, PBy);
                            Sleep(100);
                            boom[5] = 0; boom[6] = 1;

                            if(boom[6] == 1) img_draw(boom_7, PBx, PBy);
                            Sleep(100);
                            boom[6] = 0; boom[7] = 1;

                            if(boom[7] == 1) img_draw(boom_8, PBx, PBy);
                            Sleep(100);
                            boom[7] = 0; boom[8] = 1;

                            if(boom[8] == 1) img_draw(boom_9, PBx, PBy);
                            Sleep(100);
                            boom[8] = 0; boom[9] = 1;

                            if(boom[9] == 1) img_draw(boom_10, PBx, PBy);
                            Sleep(100);
                            boom[9] = 0;

                            PBx = battle.m_rect.x+104;
                        }
                    }

                    if(canEShoot)
                    {
                        img_draw(e_beam, EBx, EBy);
                        if(EBx <= battle.m_rect.x+50+64)
                        {
                            canEShoot = false;
                            EBx = battle.m_rect.x+450-64;
                        }
                    }

                    if(p.ch_m == 0 && p.ch_m_x == 0)
                    {
                        sprintf(tmpch, "ЛАЗЕР");
                        img_text(tmpch, 16, battle.m_rect.x+50, battle.m_rect.y+250, 255, 0, 0 );
                    }
                    else
                    {
                        sprintf(tmpch, "ЛАЗЕР");
                        img_text(tmpch, 16, battle.m_rect.x+50, battle.m_rect.y+250, 255, 255, 255 );
                    }

                    if(p.ch_m == 0 && p.ch_m_x == 1)
                    {
                        sprintf(tmpch, "РАКЕТЫ");
                        img_text(tmpch, 16, battle.m_rect.x+150, battle.m_rect.y+250, 255, 0, 0 );
                    }
                    else
                    {
                        sprintf(tmpch, "РАКЕТЫ");
                        img_text(tmpch, 16, battle.m_rect.x+150, battle.m_rect.y+250, 255, 255, 255 );
                    }

                    if(p.ch_m == 1 && p.ch_m_x == 0)
                    {
                        sprintf(tmpch, "СБЕЖАТЬ");
                        img_text(tmpch, 16, battle.m_rect.x+50, battle.m_rect.y+300, 255, 0, 0 );
                    }
                    else
                    {
                        sprintf(tmpch, "СБЕЖАТЬ");
                        img_text(tmpch, 16, battle.m_rect.x+50, battle.m_rect.y+300, 255, 255, 255 );
                    }

                    if(p.ch_m == 1 && p.ch_m_x == 1)
                    {
                        sprintf(tmpch, "АПТЕЧКА");
                        img_text(tmpch, 16, battle.m_rect.x+150, battle.m_rect.y+300, 255, 0, 0 );
                    }
                    else
                    {
                        sprintf(tmpch, "АПТЕЧКА");
                        img_text(tmpch, 16, battle.m_rect.x+150, battle.m_rect.y+300, 255, 255, 255 );
                    }
                }
            }
        }

        if(states == GAMEOVER)
        {
            sprintf(tmpch, "GAME OVER ÐÐÐ–МИТЕ ENTER");
            img_text(tmpch, 24, SCREEN_X / 2 - 200, SCREEN_Y / 2, 255, 255, 255 );
        }

        SDL_UpdateRect(screen, 0, 0, 0, 0);
    }

    g.clean();

    for(PLit=planets.begin();PLit!=planets.end();PLit++)
    {
        Planet *a = *PLit;
        //PLit = planets.erase(PLit);
        delete a;
    }

    for(it=ships.begin();it!=ships.end();it++)
    {
        Ship *b = *it;
        //it = ships.erase(it);
        delete b;
    }

    return 0;
}