Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> графика в турбо си 
:(
    Опции темы
Truegirl
Дата 14.2.2009, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 20.11.2008

Репутация: нет
Всего: нет



Помогите пожалуйста!
Надо в турбо си нарисовать  картинку. Вобщем я нарисовала самолетик, а залить его не могу,заливается весь экран, продскажите, что  делать?   
Код

#include<dos.h>
#include<graphics.h>
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
int main()
{
 int gd,gm,err;
 gd=DETECT;
 initgraph(&gd,&gm,"");
 err=graphresult();
 if(err!=grOk)
  {
   printf("Error");
   getch();
   return 0;
  }
 setbkcolor(3);
 setcolor(8);
 floodfill(30,31,5);
 setfillstyle(3,13);

 line (250,470,250,450);
 line (250,450,280,420);
 line (280,420,280,360);
 line (280,360,270,350);
 line (270,350,220,380);
 line (220,380,220,350);
 line (220,350,270,320);
 line (270,320,270,310);
 line (270,310,280,300);
 line (280,300,280,270);
 line (280,270,290,255);
 line (290,255,300,270);
 line (300,270,300,300);
 line (300,300,310,310);
 line (310,310,310,320);
 line (310,320,360,350);
 line (360,350,360,380);
 line (360,380,310,350);
 line (310,350,300,360);
 line (300,360,300,420);
 line (300,420,330,450);
 line (330,450,330,470);
 line (330,470,310,470);
 line (310,470,300,460);
 line (300,460,280,460);
 line (280,460,270,470);
 line (270,470,250,470);
getch();
closegraph();
return 0;
}


Это сообщение отредактировал(а) Truegirl - 14.2.2009, 19:09
PM MAIL   Вверх
Gluttton
Дата 14.2.2009, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: нет
Всего: 54



Цитата

Вобщем я нарисовала самолетик, а залить его не могу


Не правда, ты сначала заливаешь, а потом рисуешь самолетик. А нужно именно так какт ты сказала  smile .

Это сообщение отредактировал(а) Gluttton - 14.2.2009, 22:21


--------------------
Слава Україні!
PM MAIL   Вверх
Truegirl
Дата 15.2.2009, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 20.11.2008

Репутация: нет
Всего: нет



не получается!!!
всеравно заливается весь экран

Это сообщение отредактировал(а) Truegirl - 15.2.2009, 00:01
PM MAIL   Вверх
Gluttton
Дата 15.2.2009, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: нет
Всего: 54



0. Попробуй третим параметром в функцию floodfill передать цвет, которым ты рисуешь границы самолета  smile .
1. Возможно у тебя самолет не является ограниченой областью (т.е. имею место "дыры"). Смотри внимательнее.
2. Заливать нужно область внутри самолета, а не снаружи. У тебя самолет расположен по Х примерно 220 на 360, по Y 255 на 470, а область для заливки ты указываешь 30, 31? Хотя если бы проблема была в этом, то у тебя бы заливался весь экран кроме самолета.





--------------------
Слава Україні!
PM MAIL   Вверх
Truegirl
Дата 15.2.2009, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 20.11.2008

Репутация: нет
Всего: нет



Спасибо за советы, все учла, вот только когда floodfill  третьим параметром передала цвет самолета, то самолет закрашивается белым, и setfillstyle не меняет цвет и стиль, а почему?
PM MAIL   Вверх
Gluttton
Дата 16.2.2009, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: нет
Всего: 54



Цитата

когда floodfill  третьим параметром передала цвет самолета, то самолет закрашивается белым, и setfillstyle не меняет цвет и стиль, а почему?


Если приведенный выше код актуален, то проблема в том, что ты сначала заливаешь, а лишь потом меняешь цвет заливки.


--------------------
Слава Україні!
PM MAIL   Вверх
Soah
Дата 18.2.2009, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 18.2.2009

Репутация: 6
Всего: 54



ИМХО, лучше так
Код

...
int poly[54] = {250, 470, 250, 450, 280, 420, 280, 360,
                        270, 350, 220, 380, 220, 350, 270, 320,
                        270, 310, 280, 300, 280, 270, 290, 255,
                        300, 270, 300, 300, 310, 310, 310, 320,
                        360, 350, 360, 380, 310, 350, 300, 360,
                        300, 420, 330, 450, 330, 470, 310, 470,
                        300, 460, 280, 460, 270, 470};

setcolor(8);
setfillstyle(3, 13);
fillpoly(27, poly);
...

PM MAIL   Вверх
bsa
Дата 18.2.2009, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196




M
bsa
Truegirl, если ответ на вопрос получен, то пометь тему решенной

PM   Вверх
Truegirl
Дата 22.2.2009, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 20.11.2008

Репутация: нет
Всего: нет



Спасибо всем за помощь, но у меня есть еще неколько вопросов. Я дописала код, чтоб самолетик двигался и взрывался, а взрыв не получается, раскажите как его реализовать
Код
 #include<graphics.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<dos.h>
#include<graphics.h>
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
char *fname[] = { "DEFAULT font",
  "TRIPLEX font",
  "SMALL font",
  "SANS SERIF font",
  "GOTHIC font"
};
char *lname[] = {
"SOLID_LINE",
"DOTTED_LINE",
"CENTER_LINE",
"DASHED_LINE",
"USERBIT_LINE"
};
int main()
{
 int gd,gm,err;
 gd=DETECT;
 int i;
 char msg[80];
 initgraph(&gd,&gm,"");
 err=graphresult();
 if(err!=grOk)
  {
   printf("Error");
   getch();
   return 0;
  }

 setcolor(13);
 setfillstyle(2,13);
 fillellipse(310,230,220,160);
 setcolor(15);
 settextstyle(0,0,6);
 outtextxy(110,210,"RooD INC.");

 settextstyle(0,0,3);
 outtextxy(220,290,"presents");


 getch();
 cleardevice();
 //samoletik
 setcolor(8);
 setbkcolor(11);
 line (250,220,250,200);
 line (250,200,280,170);
 line (280,170,280,110);
 line (280,110,270,100);
 line (270,100,220,130);
 line (220,130,220,100);
 line (220,100,270,70);
 line (270,70,270,60);
 line (270,60,280,50);
 line (280,50,280,20);
 line (280,20,290,5);
 line (290,5,300,20);
 line (300,20,300,50);
 line (300,50,310,60);
 line (310,60,310,70);
 line (310,70,360,100);
 line (360,100,360,130);
 line (360,130,310,100);
 line (310,100,300,110);
 line (300,110,300,170);
 line (300,170,330,200);
 line (330,200,330,220);
 line (330,220,310,220);
 line (310,220,300,210);
 line (300,210,280,210);
 line (280,210,270,220);
 line (270,220,250,220);
 setfillstyle(1,8);
 floodfill(269,219,8);

  //oblachko
 setfillstyle(1,3);
 setcolor(3);
 fillellipse(100,100,23,15);
 fillellipse(130,100,15,15);
 fillellipse(160,100,23,15);
 fillellipse(120,80,18,15);
 fillellipse(140,80,18,15);

  //animaciya
 int size1,size2,size3;
 size1=imagesize(200,2,380,325);
 void *arrow;
 arrow=malloc(size1);
 getimage(200,2,380,325,arrow);

 size2=imagesize(75,50,200,15);
 void *oblachko;
 oblachko=malloc(size2);
 getimage(75,50,200,130,oblachko);

 cleardevice();

 for (int y=0; y<400; y=y+150)
 {
  for(int x=100;x<600;x=x+300)
  {
   putimage(x,y,oblachko,COPY_PUT);
   delay(50);
  }
 }
 free(oblachko);
 //lychi
 setcolor(14);
 setfillstyle(1,14);
 fillellipse(0,0,100,100);
 setlinestyle(2,4,3);
 line(50,50,150,150);
 line(10,50,45,200);
 line(15,50,100,180);
 line(55,150,75,200);
 line(140,70,190,100);
 line(150,110,190,149);
 setcolor(14);
 setfillstyle(1,14);
 fillellipse(0,0,100,130);
 for ( y=480; y>0; y--)
 {
   putimage(220,y,arrow,COPY_PUT);
   delay(10);
 }
 free(arrow);

 setlinestyle(0,0,0);
 setfillstyle(1,3); fill_patterns(11);
// floodfill(290,7,11);

  //bigest_boom
   setcolor(4);
 line(300,40,280,90);
 line(280,90,230,80);
 line(230,80,260,150);
 line(260,150,240,180);
 line(240,180,280,190);
 line(280,190,290,210);
 line(290,210,320,170);
 line(320,170,340,190);
 line(340,190,350,130);
 line(350,130,390,100);
 line(390,100,340,90);
 line(340,90,300,40);
 setfillstyle(1,4);
 floodfill(300,50,4);

  //big_boom
 setcolor(14);
 line(350,100,330,100);
 line(330,100,310,60);
 line(310,60,290,100);
 line(290,100,260,110);
 line(260,110,280,130);
 line(280,130,260,175);
 line(260,175,310,140);
 line(310,140,340,160);
 line(340,160,330,130);
 line(330,130,350,100);
 setfillstyle(1,14);
 floodfill(310,61,14);
 delay(50);

  //smaller_boom
 setcolor(6);
 line(330,110,320,110);
 line(320,110,310,80);
 line(310,80,300,110);
 line(300,110,280,120);
 line(280,120,290,130);
 line(290,130,280,150);
 line(280,150,310,130);
 line(310,130,330,150);
 line(330,150,320,130);
 line(320,130,330,110);
 setfillstyle(1,6);
 floodfill(285,120,6);

 setcolor(4);
 settextstyle(0,0, 4);
 outtextxy(150,400,"PlaneKi11er");
 setcolor(1);
 settextstyle(0,0,0);
 outtextxy(420,470,"Press Enter to continue");
 getch();
 closegraph();
 return 0;
}

расскажите пожалуйста как сделать так что бы кусочки самолета разлетались, и еще как написать код для управления клавиатурой?
зараннее огромное спасибо!
PM MAIL   Вверх
Gluttton
  Дата 22.2.2009, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: нет
Всего: 54



Цитата

Я дописала код, чтоб самолетик двигался


Тот же принцип и в реализации взрыва: сначала стираешь существующее изображение, а потом рисуешь новое.
Прининципиальное отличие взрыва от движения заключается в том, что при нормальном движении у тебя все "части" самолета двигаються с одинаковой скоростью и в одном направлении. В случае же взрыва различные "части" самолета (сама определяй какие) двигаються в различных направлениях (не всегда по линейной траектории - самое время разобраться с синусами и косинусами   smile), кроме того появляються и новые обьекты такие как дым и огонь.

Логичнее всего взрыв реализовать при помощи циклов, изменяя различные параметры (скорость, размер, направление, цвет, и т.д.)

Управление с клавиатуры поищи на форуме около двух недель назад кто-то уже интересовался.
(1 вопрос - 1 тема).


--------------------
Слава Україні!
PM MAIL   Вверх
Truegirl
Дата 22.2.2009, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 20.11.2008

Репутация: нет
Всего: нет



спасибо за совет! учту
вот только когда я пыталась закрасить(убрать) самолет floodfill();закрашивался весь экран,кроме того цвета который указан в качестве 3 го параметпра floodfill();, может сущетвует оператор закрашивающий только нужную часть, а вот насчет огня и дыма проблематично, на 16 цвеиах имеющихся в наличии особо не разгонишься, и еще как можно сделать, чттобы кусочки самолета разлеталить не закрашивая при это тучи и солнце? 

Это сообщение отредактировал(а) Truegirl - 22.2.2009, 00:49
PM MAIL   Вверх
Gluttton
Дата 22.2.2009, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: нет
Всего: 54



Мухи отдельно, котлеты отдельно.
Не нужно мешать две проблемы.
1. Концепция реализации:
Цитата

а вот насчет огня и дыма проблематично, на 16 цвеиах имеющихся в наличии особо не разгонишься

Не согласен. И на двух цветах разгонялся. Например белым по черному от точки исходящие от центра к перифирии острые углы (равнобердренные треугольники без основания направленые вершиной от центра взрыва) могут символизировать огонь, а окружность постепенно увеличивающаяся в диаметре - дым). Ну это так, на вскидку, если хорошенько покурить можно и не такое придумать  smile.

Цитата

как можно сделать, чттобы кусочки самолета разлеталить не закрашивая при это тучи и солнце
  

Во время взрыва переризовывать тучи и солнце сразу после отображения очередной итерации "летящей запчасти самолета". Т.е. взрыв, и полетело крыло в сторону - рисуем в цикле:
1. Закрашиваем текущее изображение крыла.
2. Рисуем новое изображение крыла.
3. Рисуем фон.

2. Проблемы в реализации:
Цитата

вот только когда я пыталась закрасить(убрать) самолет floodfill();закрашивался весь экран,кроме того цвета который указан в качестве 3 го параметпра floodfill();, 


С учетом предистории данного топика, рекомендую "порисовать" пошагово. Возможно я ошибаюсь, но у меня предчуствие, что ты этого не делала. Ряд вопросов отпадет сам собой.

Цитата

может сущетвует оператор закрашивающий только нужную часть


Весьма возможно, лично мне с графикой сталкиваться не приходилось, но, по опыту работы с другими библиотеками, рекомендую просто ознакомиться со всеми существующими функциями. Тогда ты будешь наверняка знать существуют ли или нет, и кроме того ты сможешь (зная возможности инструментария) грамотно производить декомпозицию решаемой задачи.

Попробуй "стерать" путем рисования прямоугольника цвета фона.

У меня однажды была проблема: заливка "просачивалась" через границу, когда линия была под углом (т.е. не вертикальная и не горизонтальная). Решил проблему путем увеличения толщины линии на пиксел.


--------------------
Слава Україні!
PM MAIL   Вверх
andrew_121
Дата 22.2.2009, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Gluttton, Ну ты МОНСТР smile  Это сколько же примитивного кода нашлепать нужно smile 
Респект smile 


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Truegirl
Дата 22.2.2009, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 20.11.2008

Репутация: нет
Всего: нет



andrew_121 , может хочешь предложить другие варианты?
PM MAIL   Вверх
Gluttton
Дата 22.2.2009, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: нет
Всего: 54



To andrew_121
Цитата

Это сколько же примитивного кода нашлепать нужно 


+1. Рассмотреные в топике метод реализации поставленой задачи, мягко говоря, не рациональный.
В намерениях автора просматривается амбициозное желание творить, в свое время не чуждое и мне.
К сожаления автор топика (как и я в свое время, а может быть и ещё много-много людей) не обладает необходимым уровнем знаний проблемной области и это не позволяет ей реализовать задачу проще и быстрее. Кроме того, на лицо факт не только проблем с реализацией, но и с построением алгоритма. Я думаю, что Truegirl так и не сможет сделать то чего хочет, но решение данной задачи должно будет научить ее не только рисовать самолетики  smile , но и писать программы в принципе. 

Если в ее созние закрадется мысль о том, что люди пишущие игры "рисуют самолетики" иначе, то тогда она будет морально готова узнать и применить на практике, а главное оценить приемущество, этих методов и тогда, как говориться, Level Up, а иначе Game Over  smile .

To Truegirl Извини за назедательный тон, но в самом деле bigest_boom, big_boom, smaller_boom так и просяться замениться на boom в цикле с изменяемым размером  smile . Это так на вскидку  smile .


--------------------
Слава Україні!
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0559 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.