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

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

Восстановить пароль Регистрация
 
frank_lampard
-8 / 2 / 0
Регистрация: 23.09.2012
Сообщений: 145
17.05.2013, 18:12     Графика: ограничить область перемещений прямоугольника #1
Как сделать и что добавить в код, чтобы прямоугольник летал по экрану, но не улетал выше окна и ниже нарисованной линии? И еще как сделать чтобы в конце он садился на линию и останавливался? Прямоугольник это как бы самолет.

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);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2013, 18:12     Графика: ограничить область перемещений прямоугольника
Посмотрите здесь:

C++ подскажите как ограничить временное пространство
C++ Как ограничить рандомизацию
C++ Как ограничить цикл ?
C++ Как ограничить функцию rand()?
Ограничить тип данных C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
17.05.2013, 18:19     Графика: ограничить область перемещений прямоугольника #2
frank_lampard, "graphics" уже давно никто не пользуется. Попробуй WinAPI (если только это и нужно) или DirectX/OpenGL и далее. Но проще всё же первое.
frank_lampard
-8 / 2 / 0
Регистрация: 23.09.2012
Сообщений: 145
17.05.2013, 18:37  [ТС]     Графика: ограничить область перемещений прямоугольника #3
nexen, это для универа, нам такое объясняли. Сделал, но не все. Если можете, помогите.
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
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 минуты

Не по теме:

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

frank_lampard
-8 / 2 / 0
Регистрация: 23.09.2012
Сообщений: 145
17.05.2013, 19:52  [ТС]     Графика: ограничить область перемещений прямоугольника #5
daslex, Спасибо большое! Один вопрос еще: как сделать чтобы он лететь начинал с линии, а не сверху, а потом уже поднимался и садился?
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
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);
}
frank_lampard
-8 / 2 / 0
Регистрация: 23.09.2012
Сообщений: 145
17.05.2013, 21:06  [ТС]     Графика: ограничить область перемещений прямоугольника #7
daslex, так наоборот вниз уходит.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2013, 23:09     Графика: ограничить область перемещений прямоугольника
Еще ссылки по теме:

Требуется ограничить цикл по вермени C++
Ограничить строку C++
Исключение С++. Ограничить ввод 1888 годом C++

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

Или воспользуйтесь поиском по форуму:
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
17.05.2013, 23:09     Графика: ограничить область перемещений прямоугольника #8
я не знаю как именно надо, у меня он уходил вверх вправо, вниз вправо и посадка.

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

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

Добавлено через 20 минут
и подозрение есть, что ты там в 13 строке минус или убрал или забыл
Yandex
Объявления
17.05.2013, 23:09     Графика: ограничить область перемещений прямоугольника
Ответ Создать тему
Опции темы

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