Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
frank_lampard
-8 / 2 / 0
Регистрация: 23.09.2012
Сообщений: 145
1

Графика: ограничить область перемещений прямоугольника

17.05.2013, 18:12. Просмотров 378. Ответов 7
Метки нет (Все метки)

Как сделать и что добавить в код, чтобы прямоугольник летал по экрану, но не улетал выше окна и ниже нарисованной линии? И еще как сделать чтобы в конце он садился на линию и останавливался? Прямоугольник это как бы самолет.

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
#include <stdio.h>
#include <conio.h>
#include "graphics.h"
void draw(int x,int y,int c);
int main (void)
{
    int gd=DETECT,gm;
    int x=0,y=400,speed=30;
    char ch;
    initgraph(&gd,&gm,"C:\\Dev-Cpp\\lib\\libbgi");
    initwindow(640,480);
    outtextxy(200,20,"press ESC to finish");
    do
    {
                            draw (x,y,ch);
                            delay (500);
                            draw (x,y,0);
                            if(rand()%2)
                            {
                            x+=speed;
                            }
                               else
                                   {
                                   y+=speed;
                                   }
                            
                            if (kbhit())
                            ch=getch();
    }
    while (ch!=27);
    closegraph();
    return 0;
}
void draw (int xx,int yy,int c)
{
     setcolor (c);
     setfillstyle (1,c);
     bar (xx-30,yy-5,xx+30,yy+5);
     line (0,405,640,405);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2013, 18:12
Ответы с готовыми решениями:

Найти количество перемещений первого элемента заданного массива
Помогите пожалуйста найти количество перемещений первого элемента Я не понимаю...

Определить, попадает ли заданная точка в заштрихованную область (границы не входят в область)
Условие: Напишите программу, которая определяет, попадает ли заданная точка в...

Напишите программу, которая определяет, попадает ли заданная точка в заштрихованную область. Границы не входят в область
Всем доброго времени суток. Не могу решить задачу Напишите программу,...

Ограничить область графика
Добрый день. Есть код в MATLAB который строит график нескольких функций....

Ограничить область рисования
помогите как сделать так чтобы линия не выходила за приделы облости рисования

7
nexen
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
17.05.2013, 18:19 2
frank_lampard, "graphics" уже давно никто не пользуется. Попробуй WinAPI (если только это и нужно) или DirectX/OpenGL и далее. Но проще всё же первое.
0
frank_lampard
-8 / 2 / 0
Регистрация: 23.09.2012
Сообщений: 145
17.05.2013, 18:37  [ТС] 3
nexen, это для универа, нам такое объясняли. Сделал, но не все. Если можете, помогите.
0
daslex
1291 / 535 / 177
Регистрация: 02.08.2011
Сообщений: 2,756
17.05.2013, 19:47 4
Цитата Сообщение от frank_lampard Посмотреть сообщение
И еще как сделать чтобы в конце он садился на линию и останавливался
Подсказка getmaxx(),getmaxy()
пример по цитате.

только допиши, что я убрал. (initwindow и может еще что-то)
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
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
#include <stdlib.h>
#include <dos.h>
#include <iostream.h>
 
void draw(int x,int y,int c);
int main (void)
{
    int gd=DETECT,gm;
    int x=0,y=20,speed=30;
    char ch;
    initgraph(&gd,&gm,"");
 
    outtextxy(200,20,"press ESC to finish");
    do
    {
                draw (x,y,ch);
                delay (500);
                draw (x,y,0);
                if(rand()%2)
                {
                x+=speed;
                }
                   else
                   {
 
                   if (y+75>getmaxy()) //то что я добавил, проверка выхода на ниже линии
                   {
                    speed=0;//если ниже линии, тормозим скорость падения.
                    y=getmaxy()-70; 
                                   }
                   y+=speed;
                   }
 
                if (kbhit())
                ch=getch();
    }
    while (ch!=27);
    closegraph();
    return 0;
}
void draw (int xx,int yy,int c)
{
     setcolor (c);
     setfillstyle (1,c);
 
      bar (xx-30,yy-5,xx+30,yy+5);
 
     line (0,405,640,405);
}
Чтоб он не улетал за окна, так же getmaxx,getmaxy для правой границы getmaxx, для левой сравнивать как с нулем+часть твоего самолета.

Не по теме:

Вообще если самолет в стену врезается, обычно он больше уже не летает.



Добавлено через 4 минуты

Не по теме:

код после спасибо переделан немного. цифры там сам подбирай

2
frank_lampard
-8 / 2 / 0
Регистрация: 23.09.2012
Сообщений: 145
17.05.2013, 19:52  [ТС] 5
daslex, Спасибо большое! Один вопрос еще: как сделать чтобы он лететь начинал с линии, а не сверху, а потом уже поднимался и садился?
0
daslex
1291 / 535 / 177
Регистрация: 02.08.2011
Сообщений: 2,756
17.05.2013, 20:14 6
как-то так
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
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
#include <stdlib.h>
#include <dos.h>
#include <iostream.h>
 
void draw(int x,int y,int c);
int main (void)
{
    int gd=DETECT,gm;
    int x=0,y=404,speed=-20;
    char ch;
    initgraph(&gd,&gm,"");
 
    outtextxy(200,20,"press ESC to finish");
    do
    {
                draw (x,y,ch);
                delay (500);
                draw (x,y,0);
                if(rand()%2)
                {
                   x+=-speed;
                }
                   else
                   {
 
                   if (y+85>getmaxy()&&(x>10))
                   {
                    speed=0;
                    y=405;
                   }
                   if (x<140)  y+=speed;
                   else y-=speed;
                   }
 
                if (kbhit())
                ch=getch();
    }
    while (ch!=27);
    closegraph();
    return 0;
}
void draw (int xx,int yy,int c)
{
     setcolor (c);
     setfillstyle (1,c);
 
      bar (xx-30,yy-5,xx+30,yy+5);
 
     line (0,405,640,405);
}
0
frank_lampard
-8 / 2 / 0
Регистрация: 23.09.2012
Сообщений: 145
17.05.2013, 21:06  [ТС] 7
daslex, так наоборот вниз уходит.
0
daslex
1291 / 535 / 177
Регистрация: 02.08.2011
Сообщений: 2,756
17.05.2013, 23:09 8
я не знаю как именно надо, у меня он уходил вверх вправо, вниз вправо и посадка.

можно попробовать в 13 строке
speed=20

не думаю, что смогу помочь больше чем пытался

Добавлено через 20 минут
и подозрение есть, что ты там в 13 строке минус или убрал или забыл
0
17.05.2013, 23:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2013, 23:09

Ограничить область значений переменной
Int32 T = 4;// у нас есть какое то значение public void c() { if (Tune &lt;...

Ограничить область передвижения окна.
Доброе время суток уважаемые форумчане! Мне очень нужно сделать чтоб окно...

Как ограничить область построения фигуры
Добрый вечер друзья,хочу сказать спасибо за Ваши ответы,но мне опять нужна ваша...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru