Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
dark2494
1 / 1 / 0
Регистрация: 16.09.2011
Сообщений: 29
#1

Танчики в graphics.h - C++

18.04.2012, 21:41. Просмотров 1659. Ответов 4
Метки нет (Все метки)

Здравствуйте! Задали задания в устаревшей и совершенно мне неизвестной библиотеке graphics.h создать игру танки. Я уже прописал движение своего танка и выстрел, но при выстреле танк стоит на месте пока снаряд не долетит до конца карты, знаю, что программа написанная мною правильна, но не знаю как это исправить.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
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);
    }
    }           
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2012, 21:41     Танчики в graphics.h
Посмотрите здесь:

танчики C++
<graphics.h> C++
Игрушка Танчики C++
C++ Graphics
C++ Graphics
graphics.h C++
C++ BGI graphics.h
C++ Танчики C++
C++ Графическое задание на С++: танчики
C++ Танчики
C++ Не подключается graphics.h

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
m9yt
17 / 1 / 1
Регистрация: 17.11.2009
Сообщений: 108
18.04.2012, 22:54     Танчики в graphics.h #2
Не по теме, но на другом компе игрушка не пойдет, ибо пути везде абсолютные.
dark2494
1 / 1 / 0
Регистрация: 16.09.2011
Сообщений: 29
18.04.2012, 23:00  [ТС]     Танчики в graphics.h #3
это я знаю, чуть позже исправлю, но все равно спасибо
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,917
Записей в блоге: 1
19.04.2012, 01:19     Танчики в graphics.h #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Круто. Вспоминаю, как тоже когда-то начинал с танчиков в досе.
Ты б хоть комментарии какие написал: где у тебя координаты танка, где координаты снаряда...
Я помню, что заводил массив структур "пули", каждая структура хранила координаты и направление полёта каждой пули.
соответственно при выстреле пуля добавлялась в массив и всё. А в главном цикле я обновлял координаты пуль каждый кадр, совершенно отдельно от танков и нажатий клавиш.
а с graphics.h работать очень даже просто. У тебя ж Borland C++ 3.1 for DOS среда, верно?

Добавлено через 11 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void GraphInit()
 {
 int gdriver = VGA, gmode=VGAHI, errorcode;//640x480
 initgraph(&gdriver, &gmode, "");
 errorcode = graphresult();
 if (errorcode != grOk)
  {
  printf("Graphics error: %s\n", grapherrormsg(errorcode));
  printf("Press any key to halt:");
  getch();
  exit(1);
  }
 }
И всё. Если проверку ошибок пропустить - вообще две строчки будет.

Добавлено через 9 минут
Сама библиотека graphics.h позволяет рисовать точки, линии, прямоугольники, эллипсы.
поэтому танк рисуешь либо каждый раз функцией:
C
1
2
3
4
5
void draw_tank(int x0, int y0){
setcolor(5);
bar(x0+12, y0+12, x0-12, y0-12);//прямоугольник - корпус
/////.........и.т.д. круги, линии, точки
}
Либо функцией putimage()
которой надо передать указатель на массив пикселей, либо найди способ прочитать bmp файл под DOSом и соотв. заполнить массив пикселями и передать в putimage,
либо рисуй в начале программы танк с помощью void draw_tank и сохрани его пиксели в массиве с помощью getimage

Добавлено через 16 минут
По теме: выстрелы реализуй так(могут быть ошибки, давно под досом не работал)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
struct shell{
int x, int y;//координаты пули
int dx, dy;//скорость пули(приращение координат)
int side;//своя или чужая(на всякий случай)
int active;//0 чтобы удалить пулю
}shells[MAXSHELLS];
int last;//индекс последней
void update_game(){
for (int i=0; i<MAXSHELLS; i++)
if (shells[i].active){
  shells[i].x+=shells[i].dx;
  shells[i].y+=shells[i].dy;
 }
 
for (int i=0; i<MAXSHELLS; i++)
{/*проверка попаданий*/}
}
int main(){
int gamover=0;
int delay_t;
last=0;
init_stuff();
///???
while(!gamover){
delay_t=DELAY_GAME;
while(delay_t--)
if (kbhit)ch=getche();
}
switch(ch){
///.......
0: break;
///////
32: last=(last+1)%MAXSHELLS; shells[last].active=1; shells[last].x=x; ...y...dx=tank.dx...dy break;
 
}
ch=0;
update_game();
}
dark2494
1 / 1 / 0
Регистрация: 16.09.2011
Сообщений: 29
19.04.2012, 23:42  [ТС]     Танчики в graphics.h #5
Kuzia_domovenok спасибо большое за идею, но вот теперь вопрос, как же сделать чтоб работали сразу несколько функций обрабатывающих движение моего танков и движение вражеских танков
Yandex
Объявления
19.04.2012, 23:42     Танчики в graphics.h
Ответ Создать тему
Опции темы

Текущее время: 10:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru