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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Внимание! Есть замечания модератора по теме: Название темы должно адекватно отражать суть решаемой задачи/проблемы.
Старый 07.07.2013, 18:40   #1
Мики6277
Пользователь
 
Регистрация: 07.07.2013
Сообщений: 32
По умолчанию Передвижение красного кружочка стрелками в графике. В чем ошибка?

Вот код моей программы. ДЛя передвижения красного кружочка с помощью стрелочек.
В чем ошибка?
Код:
uses graph,crt;
var u,ou: pointer; ch: char; curx, cury, curx0, cury0, lx, ly, hx, hy: integer;
    size: word;
procedure graphinterface;
var gd, gm, error: integer;
begin
gd:=detect;
initgraph( gd, gm, '');
error:=graphresult;
if error<>grok then
    begin
   writeln(grapherrormsg(error));
   halt(error)
    end
    end;

begin
graphinterface;
hx:=5;
hy:=5;
lx:=100;
ly:=100;
size:=imagesize(0,0,lx,ly);
getmem(u, size);  getmem(ou,size);

setcolor(4);
setfillstyle(1,4);
circle(lx+20,ly+20);
floodfill( lx+20,ly+20, 4);
getimage(100,100,lx+20,ly+20,ou^);
curx:=0;
cury:=0;
getimage(0,0,lx,ly,u^);
repeat
ch:=readkey;
if ord(ch)=0 then
     begin
     ch:= readkey;
     curx0:=curx; cury0:=cury;
     case ord(ch) of
     77: if curx<getmaxx-hx
     then curx:=curx+hx;

    75: if curx>hx
     then curx:=curx-hx;

     72:if cury>hy
     then cury:=cury-hy;

     80: if cury<getmaxy-hy
     then cury:=cury+hy;

     end;
  if (curx<>curx0) or (cury<>cury0)
  then begin
      putimage( curx0, cury0, ou^, 0);
      getimage( curx, cury, curx+lx, cury+ly, ou^);
      putimage (curx,cury, u^,0);
      end
      end;
  until ord(ch)=27;

readln;
closegraph;
end.


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

Модератор.

Последний раз редактировалось Serge_Bliznykov; 08.07.2013 в 08:23.
Мики6277 вне форума Ответить с цитированием
Старый 07.07.2013, 21:09   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
circle(lx+20,ly+20);
Вот тут Вы указали только координаты X и Y, забыв о радиусе

А впредь, выделяйте, пожалуйста, свой код специальным тегом (кнопочка с #)
Poma][a вне форума Ответить с цитированием
Старый 08.07.2013, 20:16   #3
Мики6277
Пользователь
 
Регистрация: 07.07.2013
Сообщений: 32
По умолчанию

Пожалуйста помогите. Где ошибка? Кружочек рисуется, а при нажатии кнопки не передвигается.
Код:
uses graph,crt;
var u,ou:pointer; ch: char; curx, cury, curx0, cury0, dx, dy, lx, ly, hx, hy: integer;
    size: word;
procedure dv(dx, dy: integer);
  begin
  setcolor(4);
  setfillstyle(1,4);
  circle(lx,ly,20);
  floodfill( lx,ly, 4);
  lx:=lx+dx;
  ly:=ly+dy;

  setcolor(4);
  setfillstyle(1,4);
  circle(lx,ly,20);
  floodfill( lx,ly, 4);
  end;
procedure graphinterface;
var gd, gm, error: integer;
begin
gd:=detect;
initgraph( gd, gm, '');
error:=graphresult;
if error<>grok then
    begin
   writeln(grapherrormsg(error));
   halt(error)
    end
    end;

begin
graphinterface;

lx:=100;
ly:=100;


setcolor(4);
setfillstyle(1,4);
circle(lx,ly,20);
floodfill( lx,ly, 4);

repeat
 ch:=readkey;
 if ch=#0 then
     begin
     ch:=readkey;

     case ch of
    #77:dv(0, 5);


     #75:dv( 0, -5);

     #72:dv( 5, 0);

     #80:dv(-5, 0);

     end;

     end;

    until ch=#27;


readln;
closegraph;
end.
Мики6277 вне форума Ответить с цитированием
Старый 08.07.2013, 20:31   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А может просто шаг слишком мал чтоб заметить движение?
Цитата:
setcolor(4);
setfillstyle(1,4);
circle(lx,ly,20);
floodfill( lx,ly, 4);
Это стирание предидущего? Тогда наверное цвет должен быть не 4 а другой. black видимо.

P.S. Проверил у себя. Если оставить так:
Код:
repeat
 ch:=readkey;    ch:=readkey;
     case ch of
     #77:dv(0, 5);
     #75:dv( 0, -5);
     #72:dv( 5, 0);
     #80:dv(-5, 0);
     end;
    until ch=#27;
И не учитывать ошибки в направлении движения и стирания предидущего то программа работает.
I'm learning to live...

Последний раз редактировалось Stilet; 08.07.2013 в 20:39.
Stilet вне форума Ответить с цитированием
Старый 08.07.2013, 21:43   #5
Мики6277
Пользователь
 
Регистрация: 07.07.2013
Сообщений: 32
По умолчанию

Так-то работает, но кружочек не идет. Я сделала шаг больше, не помогло.
Стирания предыдущего там нет, а вот это
Код:
setcolor(4);
 setfillstyle(1,4);
 circle(lx,ly,20);
 floodfill( lx,ly, 4);
рисование того самого кружочка.
Не понимаю, что не так??
Мики6277 вне форума Ответить с цитированием
Старый 08.07.2013, 22:11   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но кружочек не идет.
На турбопаскале идет.
Паскаль то у тя какой?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.07.2013, 23:25   #7
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Кстати, турбоПаскаль можно скачать отсюда: http://www.programmersforum.ru/showp...1&postcount=86
Простите за спам.

UPD. круг двигается, но:
1. Двигается только сама окружность, то есть, контур круга.
2. При движении круг оставляет за собой след.
3. Движение происходит совсем не по стрелкам, то есть, нажал ВВЕРХ, а круг поехал ВПРАВО. Проверьте
_____________________
Чтобы исправить, поступите так. перед тем, как нарисовать круг в новом месте, сотрите старый круг, для чего нарисуйте на том же месте круг того же размера, но только с цветом фона (цвет должен быть как у границы, так и заливки), после чего рисуйте круг на новом месте нужного вам цвета, у вас это красный.
Со стрелками разберитесь сами.

Последний раз редактировалось Вадим Мошев; 08.07.2013 в 23:34.
Вадим Мошев вне форума Ответить с цитированием
Старый 08.07.2013, 23:36   #8
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Кстати, Вадим, твой TP упорно отказывается работать, ссылаясь на совместимость с используемой версией Windows.
Poma][a вне форума Ответить с цитированием
Старый 08.07.2013, 23:41   #9
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
Кстати, Вадим, твой TP упорно отказывается работать, ссылаясь на совместимость с используемой версией Windows.
Возможно, ибо сижу я щас за Win XP x32. В институте так же ОС была.
Вадим Мошев вне форума Ответить с цитированием
Старый 09.07.2013, 10:34   #10
Мики6277
Пользователь
 
Регистрация: 07.07.2013
Сообщений: 32
По умолчанию

У меня Free Pascal . Подскажите как мне сделать лучше зарисовать кружочек цветом фона и нарисовать новый или есть лучший способ?
Мики6277 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекурсия: Дается длина полоски из клеточек и 3 длины: полосок красного,синего и желтого цвета.Требуется набрать заданную длину MagAragorn Паскаль, Turbo Pascal, PascalABC.NET 14 26.04.2013 15:02
В чем ошибка Evgen87 Помощь студентам 2 06.03.2012 18:14
В чем ошибка Игрушка96 Помощь студентам 4 05.03.2012 21:07
В чем ошибка? KISSkaэсМЕральда Помощь студентам 0 07.11.2010 12:40
ошибка в графике V@mpire Общие вопросы C/C++ 1 06.06.2010 14:36