Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2011, 01:42   #1
Артем(Kravcos)
 
Регистрация: 28.11.2010
Сообщений: 8
Сообщение графика в Паскале - движущиеся объекты

Помогите....
Мне нужно с делать программку в Паскали, чтоб одним объектом двигал я, а второй сам двигался...
пример: задано два квадрата, одним двигаю я а второй сам двигается, в независимости от того что я двигаюсь...
пожалуйста помогите, а то я не могу курсовую закончить....
заранее спасибо
Артем(Kravcos) вне форума Ответить с цитированием
Старый 01.02.2011, 09:59   #2
BeerDrinker
Пользователь
 
Аватар для BeerDrinker
 
Регистрация: 30.01.2011
Сообщений: 16
По умолчанию

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

Код:
Uses Crt,Graph;
var
x,y:integer;          {координаты самодвижущегося квадрата}
myX,myY:integer;  {координаты квадрата который двигаем мы}
ch:char;              {переменная для обработки нажатия клавиш}
begin

{.....}
{инициализация графического режима и прочих параметров}
{.....}

x:=10;                 {квадрат будет располагаться на 10 точек от левого края}
y:=getmaxy div 3;       { и на треть максимальной высоты экрана}

myx:=10;                 {квадрат будет располагаться на 10 точек от левого края}
myy:=2*getmaxy div 3;      { и на 2/3 максимальной высоты экрана}

setfillstyle(SolidFill,red);          {сплошная заливка красным - уточните правильность, точно не помню}
bar(x,y,x+30,y+30)             {первый квадрат со стороной 30}
setfillstyle(SolidFill,green); {сплошная заливка зеленым - уточните правильность, точно не помню}
bar(myx,myy,myx+30,myy+30)          {второй квадрат со стороной 30}

repeat
ch:=readkey;    {Считываем нажатую клавишу}

if (ch=#77)and(myx<getmaxx) then
begin
setfillstyle(SolidFill,black); {сплошная заливка черным}
bar(myx,myy,myx+30,myy+30)          {закрашиваем квадрат}
inc(myx,30);
setfillstyle(SolidFill,green); 
bar(myx,myy,myx+30,myy+30)          {рисуем квадрат сдвинутый вправо на 30 точек}
end 
else 
begin
setfillstyle(SolidFill,black); {сплошная заливка черным}
bar(myx,myy,myx+30,myy+30)          {закрашиваем квадрат}
myx:=10;
setfillstyle(SolidFill,green); 
bar(myx,myy,myx+30,myy+30)          {рисуем в начале экрана}
end;

if (ch=#75)and(myx>10) then
begin
setfillstyle(SolidFill,black); {сплошная заливка черным}
bar(myx,myy,myx+30,myy+30)          {закрашиваем квадрат}
вус(myx,30);
setfillstyle(SolidFill,green); 
bar(myx,myy,myx+30,myy+30)          {рисуем квадрат сдвинутый вправо на 30 точек}
end 
else 
begin
setfillstyle(SolidFill,black); {сплошная заливка черным}
bar(myx,myy,myx+30,myy+30)          {закрашиваем квадрат}
myx:=getmaxx-30;
setfillstyle(SolidFill,green); 
bar(myx,myy,myx+30,myy+30)          {рисуем в конце  экрана}
end;
{то же самое можно сделать и для Y координаты, зная код нажатия соответсвующей стрелки}


{самодвижущийся квадрат}
if x<getmaxx then
begin
setfillstyle(SolidFill,black); {сплошная заливка черным}
bar(x,y,x+30,y+30)          {закрашиваем квадрат}
inc(x,30);
setfillstyle(SolidFill,red); 
bar(x,y,x+30,y+30)          {рисуем квадрат сдвинутый вправо на 30 точек}
end 
else
begin
setfillstyle(SolidFill,black); {сплошная заливка черным}
bar(x,y,x+30,y+30)          {закрашиваем квадрат}
x:=10;
setfillstyle(SolidFill,red); 
bar(x,y,x+30,y+30)          {рисуем квадрат сдвинутый вправо на 30 точек}
end ;
delay(100);

until ch=#27;   {пока не нажата клавиша ESC будет работать цикл}

closegraph;
end.
Пример конечно грубый, будут мерцания, которые можно убрать с помощью SetVisualPage и SetActivePage, но это уже другая история, но зато дает общее представление куда копать дальше.
вот еще ссылка, там есть примеры похожих программ.
Если будут вопросы - спрашивайте, постараюсь помочь.
BeerDrinker вне форума Ответить с цитированием
Старый 01.02.2011, 15:45   #3
Артем(Kravcos)
 
Регистрация: 28.11.2010
Сообщений: 8
По умолчанию

Спасибо тебе. Ну это не совсем то что мне нужно...

Код:
program srw;
uses crt,graph;
var gr,gm:integer;
    x_my,x1_my,y_my,y1_my,x_li,x1_li,y_li,y1_li,a1,b1,dx:integer;
    com:char;
begin
clrscr;
 gr:=detect;
 initgraph(gr,gm,' ');
 x_my:=295; y_my:=215; x1_my:=345; y1_my:=265;
 a1:=320; b1:=240;
 dx:=10;
setcolor(2);


 rectangle(150,50,200,100);
 circle(175,75,10);
 line(175,85,175,125);
 rectangle(150,380,200,430);
 circle(175,405,10);
 line(175,395,175,355);
 rectangle(440,50,490,100);
 circle(465,75,10);
 line(465,85,465,125);
 rectangle(440,380,490,430);
 circle(465,405,10);
 line(465,395,465,355);

repeat
rectangle(150,50,490,430);
  com:=readkey;
   case com of
   #72 :
 begin
 setcolor(0);
 line(a1-10,b1,a1-50,b1);
 line(a1+10,b1,a1+50,b1);
 line(a1,b1+10,a1,b1+50);
 rectangle(x_my,y_my,x1_my,y1_my);
 circle(a1,b1,10);
 line(a1,b1-10,a1,b1-50);
 y_my:=y_my-dx; y1_my:=y1_my-dx; b1:=b1-dx;
 setcolor(4);
 rectangle(x_my,y_my,x1_my,y1_my);
 circle(a1,b1,10);
 line(a1,b1-10,a1,b1-50);
 delay(100);
 dx:=dx;
    com:=readkey;
    case com of
     'd':
   begin
   x_li:=a1; y_li:=b1;
    repeat
    begin
    setcolor(0);
    line(x_li,y_li-50,x_li,y_li-70);
    y_li:=y_li-dx;
    setcolor(2);
    line(x_li,y_li-50,x_li,y_li-70);
    dx:=dx;
    delay(1000);
    end;
    until y_li=50;
   end;
  end;
 end;
  #75 :
  begin
 setcolor(0);
 line(a1,b1-10,a1,b1-50);
 line(a1+10,b1,a1+50,b1);
 line(a1,b1+10,a1,b1+50);
 rectangle(x_my,y_my,x1_my,y1_my);
 circle(a1,b1,10);
 line(a1-10,b1,a1-50,b1);
 x_my:=x_my-dx; x1_my:=x1_my-dx; a1:=a1-dx;
 setcolor(4);
 rectangle(x_my,y_my,x1_my,y1_my);
 circle(a1,b1,10);
 line(a1-10,b1,a1-50,b1);
 delay(100);
 dx:=dx;
  com:=readkey;
    case com of
     'd':
   begin
   x_li:=a1; y_li:=b1;
    repeat
    begin
    setcolor(0);
    line(x_li-50,y_li,x_li-70,y_li);
    x_li:=x_li-dx;
    setcolor(2);
    line(x_li-50,y_li,x_li-70,y_li);
    dx:=dx;
    delay(1000);
    end;
    until x_li=50 ;
   end;
 end;
 end;
 #77 :
  begin
   setcolor(0);
   line(a1,b1-10,a1,b1-50);
   line(a1-10,b1,a1-50,b1);
   line(a1,b1+10,a1,b1+50);
 rectangle(x_my,y_my,x1_my,y1_my);
 circle(a1,b1,10);
 line(a1+10,b1,a1+50,b1);
 x_my:=x_my+dx; x1_my:=x1_my+dx; a1:=a1+dx;
 setcolor(4);
 rectangle(x_my,y_my,x1_my,y1_my);
 circle(a1,b1,10);
 line(a1+10,b1,a1+50,b1);
 delay(100);
 dx:=dx;
  com:=readkey;
    case com of
     'd':
   begin
   x_li:=a1; y_li:=b1;
    repeat
    begin
    setcolor(0);
    line(x_li+50,y_li,x_li+70,y_li);
    x_li:=x_li+dx;
    setcolor(2);
    line(x_li+50,y_li,x_li+70,y_li);
    dx:=dx;
    delay(1000);
    end;
    until x_li=600 ;
   end;
 end;
 end;
  #80 :
   begin
    setcolor(0);
    line(a1,b1-10,a1,b1-50);
    line(a1-10,b1,a1-50,b1);
    line(a1+10,b1,a1+50,b1);
 rectangle(x_my,y_my,x1_my,y1_my);
 circle(a1,b1,10);
 line(a1,b1+10,a1,b1+50);
 y_my:=y_my+dx; y1_my:=y1_my+dx; b1:=b1+dx;
 setcolor(4);
 rectangle(x_my,y_my,x1_my,y1_my);
 circle(a1,b1,10);
 line(a1,b1+10,a1,b1+50);
 delay(100);
 dx:=dx;
  com:=readkey;
    case com of
     'd':
   begin
   x_li:=a1; y_li:=b1;
    repeat
    begin
    setcolor(0);
    line(x_li,y_li+50,x_li,y_li+70);
    y_li:=y_li+dx;
    setcolor(2);
    line(x_li,y_li+50,x_li,y_li+70);
    dx:=dx;
    delay(1000);
    end;
    until y_li=400;
   end;
 end;

 end;
 
 end;
until com='n';
 readkey;
end.



___________
1) Код ОБЯЗАТЕЛЬНО нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!

2) запрещено помещать несколько сообщений подряд.
Есть что добавить к сказанному Вами только что?! Тогда пользуйтесь кнопокой "Правка" на своём сообщении!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 01.02.2011 в 16:15.
Артем(Kravcos) вне форума Ответить с цитированием
Старый 01.02.2011, 16:16   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Ну это не совсем то что мне нужно...
1) Вам подсказали способ решения. А не дали полностью готовую программу!!

2) А почему это не то, что Вам нужно?..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.02.2011, 16:11   #5
Артем(Kravcos)
 
Регистрация: 28.11.2010
Сообщений: 8
По умолчанию

прошу извинения за то что не правильно оформил сообщения...
ну мне нужно было чтоб программа работала по такому принципу...
по экрану двигается один квадрат, а вторим двигаю я. И мне нужно чтоб первый квадрат двигался постоянно в независимости от того нажимаю я клавишу или нет.
А мне написали программу в какой первый квадрат будет двигаться после того когда я нажму клавишу.
Артем(Kravcos) вне форума Ответить с цитированием
Старый 02.02.2011, 16:22   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
А мне написали программу в какой первый квадрат будет двигаться после того когда я нажму клавишу.
достаточно заменить в данном коде ожидание ввода символа
com:=readkey;
на блок
Код:
if keypressed then begin
   com:=readkey;
   ... тут блок управления/движения вторым квадратом ... 
end;
тут блок движения первого квадрата
как первый квадрат "задвижется" независимо от того, нажимали Вы клавиши, или нет...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.02.2011, 16:25   #7
Артем(Kravcos)
 
Регистрация: 28.11.2010
Сообщений: 8
По умолчанию

Оооо!!!! то что нужно.
Спасибо тебе огромное.
Артем(Kravcos) вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
графика в паскале =-) КоТэ LOvE YoU Паскаль, Turbo Pascal, PascalABC.NET 0 10.06.2010 12:04
графика в паскале misha25525 Помощь студентам 0 12.05.2010 21:55
Графика в Паскале! sashqa_sashqa Помощь студентам 4 24.04.2010 15:44
Графика на Паскале Олька - Солнце Паскаль, Turbo Pascal, PascalABC.NET 2 18.04.2010 18:24
движущиеся графические фигуры aka_faith Общие вопросы C/C++ 0 15.06.2009 21:09