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

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

Войти
Регистрация
Восстановить пароль
 
frank_lampard
-8 / 2 / 0
Регистрация: 23.09.2012
Сообщений: 145
#1

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

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

Найти количество перемещений первого элемента заданного массива - C++
Помогите пожалуйста найти количество перемещений первого элемента Я не понимаю , как написать это в программе #include &quot;iostream&quot; ...

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

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

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

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

Как ограничить область построения фигуры - Matlab
Добрый вечер друзья,хочу сказать спасибо за Ваши ответы,но мне опять нужна ваша помощь по изучению MATLAB =) Имеется поверхность a=-2; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,666
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
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,666
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, так наоборот вниз уходит.
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,666
17.05.2013, 23:09 #8
я не знаю как именно надо, у меня он уходил вверх вправо, вниз вправо и посадка.

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

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

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

Ограничить область видимости переменной static - C (СИ)
Все говорят что ключевое слово статик, относяшиеся к глобальной переменной, перекрывает область видимости до единицы трансляции. Однако...

Ограничить область перемещения объекта по форме - C#
public partial class Form1 : Form { public Form1() { InitializeComponent(); } ...

Ограничить область перемещения рисунка границами формы - Lazarus
Вот который день мучаюсь над игрушкой а все некак невыходит:( текушая проблема как ограничить форму? ну т.е. я двигаю рисунок курсором и...

Как ограничить область всплывания/невсплывания div-а? - HTML, CSS
Добрый день уважаемые знатоки! Проблема у меня не совсем обычная. Шаблон сайта сверстан в 3 колонки с помощью div-ов. При открытии одного...


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

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

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