Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 17.05.2011, 12:00   #1 (permalink)
schartem
Новичок
 
Регистрация: 17.05.2011
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Question Графика C++

Написал простую программу по графике, в которой кружок перемещается по диагонали при нажатии клавиши "вправо", а при нажатии клавиши "esc" выходит из программы. Пришел в универ и оказалось, что не полностью понял задание.
Вот код моей программы
Цитата:
#include <stdio.h>
#include <graph.h>
#include <malloc.h>
#include <conio.h>

short c[4] = {10, 405, 75, 470};

int main()
{
short pm, sx=0, sy=0;
int cc, ab, count=0;
long l;
char *o, *z;
struct videoconfig gs;
_setvideomode (_VRES16COLOR);
_getvideoconfig (&gs);
l=_imagesize (10, 405, 75, 470);
o=calloc ((size_t)l, sizeof (char));
_getimage (10, 405, 75, 470, o);
_setcolor (4);
_ellipse (_GFILLINTERIOR, 10, 405, 75, 470);
_setcolor (1);
_ellipse (_GFILLINTERIOR, 15, 415, 50, 460);
_setcolor (3);
_ellipse (_GFILLINTERIOR, 17, 420, 37, 440);
z=calloc ((size_t)l, sizeof(char));
_getimage (10, 405, 75, 470, z);
while (1) {
if (kbhit()) {
ab = getch();
if (ab == 77)
break;
else if (ab == 27)
goto exit;

}
}

while (1)
{
if (kbhit())
{
cc = getch();
if (cc==27) break;
else continue;
}
else
{
if (count==0)
{
if ((c[2]<gs.numxpixels-5)||(c[1]>5))
{
_putimage (c[0], c[1], o, _GPSET);
c[0]+=6; c[1]-=4; c[2]+=6; c[3]-=4;
_getimage (c[0], c[1], c[2], c[3], o);
_putimage (c[0], c[1], z, _GPSET);
}
else count=1;
}
if (count==1)
{
if ((c[0]>5)||(c[3]<gs.numypixels-5))
{
_putimage (c[0], c[1], o, _GPSET);
c[0]-=6; c[1]+=4; c[2]-=6; c[3]+=4;
_getimage (c[0], c[1], c[2], c[3], o);
_putimage (c[0], c[1], z, _GPSET);
}
else count=0;
}

}

}

exit:
free (o);
free (z);

_setvideomode (_DEFAULTMODE);

return 0;}
Так вот , надо переделать программу, чтобы в ней было некое меню с клавишами "вправо" "вверх" "влево" "вправо" , которые бы выбирались с помощью клавиш-стрелок на клавиатуре, и при нажатии которых бы выполнялось действие, соответствующее названию клавиши.
Я вообще не понимаю как это сделать. помогите кто может
schartem вне форума   Ответить с цитированием

Старый 17.05.2011, 12:00
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Внимательно прочитайте содержимое этих тем

Графика в QBasic
Графика - растущий цветок
Графика
Paskal графика

Старый 17.05.2011, 12:34   #2 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 14,964
Записей в дневнике: 57
Сказал(а) спасибо: 135
Поблагодарили 164 раз(а) в 69 сообщениях
Репутация: 67284
По умолчанию

По-идее, упомянутое вами меню можно выполнить в виде залитого прямоугольника, на который поместить еще 4 малых прямоугольника. Вам нужно перехватывать события нажатия управляющей кнопки, сдвигать объект по экрану и перекрашивать временно соответствующую кнопку.
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 17.05.2011, 12:45   #3 (permalink)
schartem
Новичок
 
Регистрация: 17.05.2011
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

о, Зея, много времени в детстве там провел)

как графически сделать это меню, я понимаю. но не понимаю как функционально оно должно работать. т.е каким образом программа понимает нажатие именно той области(той кнопки)
schartem вне форума   Ответить с цитированием
Старый 17.05.2011, 13:13   #4 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 14,964
Записей в дневнике: 57
Сказал(а) спасибо: 135
Поблагодарили 164 раз(а) в 69 сообщениях
Репутация: 67284
По умолчанию

А вы перехватывайте событие нажатия кнопки, а на консоль выводите просто измененную картинку. Фактически вы это уже реализовали, вам осталось только добавить коды других клавиш и вывести панель с кнопками. Насколько я понял техзадание, управление происходит при помощи клавиатуры, следовательно, абсолютно наплевать, какая именно область нажата, программа управляется только кодами клавиш
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 17.05.2011, 13:22   #5 (permalink)
schartem
Новичок
 
Регистрация: 17.05.2011
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Нет, нет, в том то и проблема, что мы должны с помощью клавиатуры выбрать нужную кнопку на экране, зажать клавишу Enter и двигать в нужное направление...
schartem вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 17.05.2011, 13:39   #6 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 14,964
Записей в дневнике: 57
Сказал(а) спасибо: 135
Поблагодарили 164 раз(а) в 69 сообщениях
Репутация: 67284
По умолчанию

Тогда вам нужно будет реализовать фокус выделения (обычный незакрашенный прямоугольник), который можно перемещать в определенном направлении. Для перемещения введите дополнительную конструкцию, в которой отслеживайте нажатия управляющих клавиш. Получить информацию о том, какая именно кнопка в фокусе проще простого - анализируйте координату прямоугольника . Выход из конструкции реализуйте по нажатии клавиши Esc, а смещение объекта со сменой координат - по нажатии Enter (код 13), отслеживая текущее положение фокуса выделения
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 17.05.2011, 14:17   #7 (permalink)
schartem
Новичок
 
Регистрация: 17.05.2011
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

а ведь пустой треугольник внутри закрашен черным? и при перемещении он будет закрашивать клавиши?
schartem вне форума   Ответить с цитированием
Старый 17.05.2011, 14:35   #8 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 14,964
Записей в дневнике: 57
Сказал(а) спасибо: 135
Поблагодарили 164 раз(а) в 69 сообщениях
Репутация: 67284
По умолчанию

С чего бы это прямоугольник стал треугольником? Вообще-то можно устанавливать стили заливки области

Какой средой пользуетесь?
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 17.05.2011, 22:14   #9 (permalink)
schartem
Новичок
 
Регистрация: 17.05.2011
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

я имел ввиду прямоугольник)

quick c
schartem вне форума   Ответить с цитированием
Старый 17.05.2011, 22:16   #10 (permalink)
schartem
Новичок
 
Регистрация: 17.05.2011
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

и есть ли какой-нибудь хороший справочник по графике в сети?
schartem вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 13:18.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.