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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2010, 19:45   #1
DRAgon™
Форумчанин
 
Аватар для DRAgon™
 
Регистрация: 14.03.2010
Сообщений: 362
По умолчанию Копирование областей экрана

Может подскажите,как сделать цикл с repeat, чтобы вышло на экран 10 снеговиков с помощью Копирования,например, есть 1 снеговик и надо его скопировать чтобы получить 10 снеговиков
че-т не получается сделать цикл
вот программка моя с циклом,
Код:
(USES  	Graph;
VAR		device, mode,x,y	: Integer;
			P			: pointer;
			Size		: Word;
BEGIN
	device := 0;
  InitGraph(device, mode, 'egavga.bgi');
			{Рисуем снеговика}

  Circle(35,40,5);
  Circle(35,70,10);
  Circle(35,100,15);
  Rectangle(20,50,30,60);
  Rectangle(40,50,50,60);

 {}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}

	repeat
 size:=ImageSize(18,20,50,120);
	GetMem(P, Size);
	GetImage(18,20,50,120,P^);
	ReadLn;
	x:=85;
	PutImage(x,70, P^,2);
	x:=x+30;
	until x>400;


	ReadLn;
	CloseGraph
END.)
но когда я ее запускаю , то выходят только 2 снеговика,а когда много жму на клавиши у меня эти снеговики слепливаюся в одно целое,и получается какае-то фигня.
А вот программка без цикла ,но надо 10 раз скопировать и изменить в каждом 85 на 100 на 130 и.т.д
Код:
size:=ImageSize(18,20,50,120);
	GetMem(P, Size);
	GetImage(18,20,50,120,P^);
	ReadLn;
	PutImage(85,70, P^,2);
и тогда снеговиков 10 штук.
Подскажите please как сделать с циклом
Чем больше моя слава, тем я больше тупею; и таково, несомненно, общее правило.(А.Эйнштейн)

Последний раз редактировалось DRAgon™; 10.07.2010 в 19:47.
DRAgon™ вне форума Ответить с цитированием
Старый 10.07.2010, 20:32   #2
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

А тебе обязательно надо с помощью копирования?
Просто можно сделать одну процедуру рисования снеговика, а потом 10 раз её вызвать.
_-Re@l-_ вне форума Ответить с цитированием
Старый 10.07.2010, 20:37   #3
DRAgon™
Форумчанин
 
Аватар для DRAgon™
 
Регистрация: 14.03.2010
Сообщений: 362
По умолчанию

Цитата:
Сообщение от _-Re@l-_ Посмотреть сообщение
А тебе обязательно надо с помощью копирования?
Просто можно сделать одну процедуру рисования снеговика, а потом 10 раз её вызвать.
вот я тормоз,СпасЫбо

Цитата:
Сообщение от _-Re@l-_ Посмотреть сообщение
А тебе обязательно надо с помощью копирования?
Просто можно сделать одну процедуру рисования снеговика, а потом 10 раз её вызвать.
стоп,так там же каждый раз должны быть другие координаты на снеговика(X)
Чем больше моя слава, тем я больше тупею; и таково, несомненно, общее правило.(А.Эйнштейн)

Последний раз редактировалось Stilet; 15.07.2010 в 14:24.
DRAgon™ вне форума Ответить с цитированием
Старый 10.07.2010, 22:19   #4
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

Процедуру с аргументами пиши
В планах порабощение вселенной...
zumm вне форума Ответить с цитированием
Старый 10.07.2010, 22:28   #5
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Для этого рисование снеговика надо сделать в отдельной процедуре типа
Код:
procedure ris(x, y);
...
  Circle(x+35,y+40,5);
  Circle(x+35,y+70,10);
  Circle(x+35,y+100,15);
  Rectangle(x+20,y+50,x+30,y+60);
  Rectangle(x+40,y+50,x+50,y+60);
Теперь вызывать с разными значениями x и y. При этом уменьшается скорость работы, появляется больше мерцаний (если анимация используется).

В первоначальном варианте, хорошо что не вылетала. В цикле много раз выделять память, но не освобождалась - это плохо (особенно для Паскаля), да ещё и цикл бесконечный.
Код:
{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}
 size:=ImageSize(18,20,50,120);
	GetMem(P, Size);
	GetImage(18,20,50,120,P^);
	x:=85;
  repeat
	PutImage(x,70, P^,2);
	x:=x+35;
  until x>400;
  freemem(P, Size);
	ReadLn;
	CloseGraph
eoln вне форума Ответить с цитированием
Старый 10.07.2010, 23:07   #6
DRAgon™
Форумчанин
 
Аватар для DRAgon™
 
Регистрация: 14.03.2010
Сообщений: 362
По умолчанию

Ясно,еще раз спасибо

Щас начал делать игру (шашки) нарисовал пока доску, копирую 1 шашку просто посмотреть как прост скопируется ,и тут опс не в том месте ,все перепроверил ,всеравно не в том месте стоит,должна стоять в квадратике а она что-то выходит из-за него.Дапамагите кали ласка
вот программка ,черным цветом выделил,где копирую шашку
Код:
uses
  graph;
  Var i,j,x,y,x1,y1,device,mode:Integer;
  p:pointer;
  size:Word;
  begin
  device:=0;
  initgraph(device,mode,'egavga.bgi');
  y:=80;
  repeat
    Line(160,y,480,y);
    y:=y+40;
    until y>400;
     x:=160;
     repeat
     Line(x,80,x,400);
     x:=x+40;
     until x>480;
     rectangle(155,75,485,405);
     setfillstyle(1,yellow);
     y:=100;
     for i:=1 to 4 do begin
     x:=180;
     for j:=1 to 4 do begin
     floodfill(x,y,white);
     x:=x+80;
     end;
     y:=y+40;
     x:=220;
     for j:=1 to 4 do begin
     floodfill(x,y,white);
     x:=x+80;
     end;
     y:=y+40;
     end;

     setcolor(white);
     circle(220,300,20);
     setfillstyle(1,green);
     floodfill(220,300,white);
     setcolor(black);
     circle(220,300,16);
 size:=ImageSize(200,280,240,320);
     GetMem(P,size);
     GetImage(200,280,240,320,P^);
     x1:=300;
     repeat

     PutImage(x1,300,P^,2);
     x1:=x1+80;                                   {перескакиваем через клетку}
     until x1>480;
     freeMem(P,size);
    
     readln;
     closegraph
     end.
vse sdelal otboy
Чем больше моя слава, тем я больше тупею; и таково, несомненно, общее правило.(А.Эйнштейн)

Последний раз редактировалось Stilet; 15.07.2010 в 14:25.
DRAgon™ вне форума Ответить с цитированием
Старый 11.07.2010, 08:55   #7
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Цитата:
Щас начал делать игру (шашки)
Ууууу....С искусственным интеллектом сложновато будет...
_-Re@l-_ вне форума Ответить с цитированием
Старый 11.07.2010, 09:20   #8
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от _-Re@l-_ Посмотреть сообщение
Ууууу....С искусственным интеллектом сложновато будет...
Ну почему? Может человек создаёт просто шашечное поле, а играть будут люди, например по сети. Никакого интеллекта не надо.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 11.07.2010, 10:22   #9
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Цитата:
а играть будут люди, например по сети.
Это на паскале-то?По сети?
_-Re@l-_ вне форума Ответить с цитированием
Старый 11.07.2010, 12:13   #10
DRAgon™
Форумчанин
 
Аватар для DRAgon™
 
Регистрация: 14.03.2010
Сообщений: 362
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Ну почему? Может человек создаёт просто шашечное поле, а играть будут люди, например по сети. Никакого интеллекта не надо.
Нет,играть будет человек с компом ,и в каждом раунде комп будет себя вести по-разному,не тупо подставлять шашки а смотреть куда их поставил человек и.т.д
Чем больше моя слава, тем я больше тупею; и таково, несомненно, общее правило.(А.Эйнштейн)
DRAgon™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Assembler. Заполнение областей памяти Filutki Помощь студентам 1 01.06.2010 22:34
Скриншот экрана dradysman Общие вопросы Delphi 2 14.04.2010 15:17
Проблема с закреплением областей и автофильтрами. Евгений ГВС Microsoft Office Excel 0 13.10.2009 21:56
Проблема с отрисовкой дочрних областей. DJ_Rain Win Api 0 30.04.2009 18:31
Копирование части экрана консоли в C# Skrutik Общие вопросы .NET 3 03.03.2009 19:13