Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Танчики в graphics.h

78K
18 апреля 2012 года
dark2494
5 / / 18.04.2012
Здравствуйте! Задали задания в устаревшей и совершенно мне неизвестной библиотеке graphics.h создать игру танки. Я уже прописал движение своего танка и выстрел, но при выстреле танк стоит на месте пока снаряд не долетит до конца карты, знаю, что программа написанная мною правильна, но не знаю как это исправить.

Код:
struct menu_scene
{
    int bgcolor;  
    int width;
    int height;
};

struct Tanks
{
    int x;  
    int y;  
    int sx;
    int sy;
    int vT;
    int vS;

};


void MoveTank(Tanks *t, menu_scene *msc)
{
    int live=3,left=10,score;
    LoadTanksPosition(t,"Tank.txt");
    unsigned char key;
    unsigned char way=1;
    while(key!=27)
    {
        Stats(msc,live,left,score);
        key=getch();
        if(key==32)
        {
            t->sx=t->x;
            t->sy=t->y;
            if(way==1)
            {
                while(t->sy!=30)
                {
                    readimagefile("picture/background.bmp", t->sx+10, t->sy-10, t->sx+20,t->sy);
                    t->sy-=t->vT;
                    readimagefile("C://programme/tanks/picture/shot.bmp", t->sx+10, t->sy-10, t->sx+20, t->sy);
                    delay(20);    
                }    
                readimagefile("picture/background.bmp", t->sx+10, t->sy-8, t->sx+20, t->sy+5);
            }
            if(way==2)
            {
                while(t->sx!=10)
                {
                    readimagefile("picture/background.bmp", t->sx-10, t->sy+10, t->sx,t->sy+20);
                    t->sx-=t->vT;
                    readimagefile("C://programme/tanks/picture/shot.bmp", t->sx-10, t->sy+10, t->sx, t->sy+20);
                    delay(20);    
                }    
                readimagefile("picture/background.bmp", 0, t->sy+10, 10, t->sy+20);
            }
            if(way==3)
            {
                while(t->sx<=msc->width-10)
                {
                    readimagefile("picture/background.bmp", t->sx+30, t->sy+10, t->sx+40,t->sy+20);
                    t->sx+=t->vT;
                    readimagefile("C://programme/tanks/picture/shot.bmp", t->sx+30, t->sy+10, t->sx+40, t->sy+20);
                    delay(20);    
                }    
                readimagefile("picture/background.bmp", msc->width-10, t->sy+10, msc->width, t->sy+20);
            }
            if(way==4)
            {
                while(t->sy<=msc->height-10)
                {
                    readimagefile("picture/background.bmp", t->sx+10, t->sy+30, t->sx+20,t->sy+40);
                    t->sy+=t->vT;
                    readimagefile("C://programme/tanks/picture/shot.bmp", t->sx+10, t->sy+30, t->sx+20, t->sy+40);
                    delay(20);    
                }    
                readimagefile("picture/background.bmp", t->sx+10, msc->height-10, t->sx+20, msc->height);
            }
        }
        if(key==72)
        {
            way=1;
            if(t->y!=20)
            {        
                cleardevice();
                t->y-=t->vT;
                readimagefile("C://programme/tanks/picture/tank1.bmp", t->x, t->y, t->x+30, t->y+30);
            }
            else readimagefile("C://programme/tanks/picture/tank1.bmp", t->x, 20, t->x+30, 50);
        }
        if(key==75)
        {
            if(t->x!=0)
            {
                way=2;
                cleardevice();
                t->x-=t->vT;
                readimagefile("C://programme/tanks/picture/tank3.bmp", t->x, t->y, t->x+30, t->y+30);
            }
            else readimagefile("C://programme/tanks/picture/tank3.bmp", 0, t->y, 30, t->y+30);
        }
    if(key==77)
    {
        if(t->x<msc->width-30)
        {
            way=3;
            cleardevice();
            t->x+=t->vT;
            readimagefile("C://programme/tanks/picture/tank4.bmp", t->x, t->y, t->x+30, t->y+30);
        } else readimagefile("C://programme/tanks/picture/tank4.bmp", msc->width-30, t->y, msc->width, t->y+30);
    }
    if(key==80)
    {
        way=4;
        if(t->y!=msc->height-30)
        {
            cleardevice();
            t->y+=t->vT;
            readimagefile("C://programme/tanks/picture/tank2.bmp", t->x, t->y, t->x+30, t->y+30);
        }else readimagefile("C://programme/tanks/picture/tank2.bmp", t->x, msc->height-30, t->x+30, msc->height);
    }
    }          
}
82K
19 апреля 2012 года
BoxAtBox
1 / / 19.04.2012
Цитата:
знаю, что программа написанная мною правильна


Ну а если правильная программа, то зачем исправлять? :)
Выходит все таки неправильная.

И устаревшая библиотека тут не причем. Глядя на код и вопрос, я вижу полное непонимание работы программы, и сомневаюсь что программа ваша.

По сути вопроса, оно и будет стоять пока снаряд не долетит, т.к. летит он в while цикле с delay-eм внутри обработки нажатий клавиш. Тут нужно заводить отдельный таймер, для обработки движения снаряда. Кроме того нужен массив данных о позиции снаряда, ибо пока снаряд летит игрок может еще раз выстрелить. А для того чтобы понять как это исправить - вам нужно сначала понять как оно сейчас работает. Пишите, а не списывайте чужой код.

78K
19 апреля 2012 года
dark2494
5 / / 18.04.2012
Это полностью мною написанная программа, ни у кого ничего не копировал. И отлично понимаю как она работает, но просто не знаю как исправить эту недоработку, но спасибо на счет идеи с отдельным массивом

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог