Помощь - Поиск - Пользователи - Календарь
Полная версия: задача на графику
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Инкогнито
Добрый вечер всем, у меня тут проблемы с графикой
Задача: Двухцветный круг вращается вокруг вертикальной оси. При нажатии пробел останавливается
uses crt,Graph;
var
	GraphDriver,GraphMode,i:integer;
	col,x,y,r:word;
	s:string;
begin
	GraphDriver:=detect;
	GraphMode:=1;
	InitGraph(graphDriver,GraphMode,'');
	repeat
	r:=100;
	x:=100;
	y:=100;
	col:=white;
	if col=8 then col:=2;
	SetColor(col);
	circle(r,x,y);
	SetFillStyle(red,white);
	floodFill(x,y,col);

	until KeyPressed;
	readln;
	CloseGraph;


У меня вроде круг есть, но незнаю как его заставить вращаться, ну и с пробелом тоже не ясно, подскажите пожалста
Ozzя
Движение объектов
Инкогнито
Вобщем так, я переделал всю программу, теперь круг действительно вращается, но теперь он лишь одного цвета, Пожалуйста подскажите как сделать его двухцветным!

uses crt, Graph;
const t=2000;
      x1=30;
      y1=30;
var
   gd, Gm:integer;
   a,b,c:integer;
   ind:integer;
   x,y,i,d:integer;

begin
Gd:=vga;
gm:=vgamed;
initgraph(gd,gm,'');
a:=0;
b:=1;
x:=GetmaxX div 2;
y:=GetMaxY div 2;
  while true do
   begin

 d:=1;
  while i<>31 do
   begin
     if  keypressed then
  if readkey=' ' then
    begin
      while not keypressed do
      if readkey =' ' then break
       else if readkey='x' then begin halt;end;
    end;
   setactivepage(a);
    setvisualpage(b);
    clearviewport;
    setfillstyle(1,red);
    setcolor(red);
   fillellipse (x,y,i,y1);
 
    delay(t);
    c:=a;
    a:=b;
    b:=c;
    i:=i+d;
   if i=x1 then
begin
setfillstyle(1,green);
setcolor(green);
   d:=d*-1;
end;
   if i<0 then
   d:=d*-1;
    end;
 end;
end.

Client
while true do
меня это очень удивило, а тебя??
Инкогнито
Цитата(Client @ 9.01.2008 17:47) *

while true do
меня это очень удивило, а тебя??

Пока правда то...что тут?
Программа работает сама! Но цвет один, у мменя в этом запара...
volvo
Цитата
меня это очень удивило, а тебя??
А меня - нет... Что удивительного? Ну, не хочет человек заранее проверять условие при котором цикл прервется, а предпочитает выйти по Halt()-у... Ничего противозаконного (за исключением, разве что, отсутствия CloseGraph) в этом нет...
Инкогнито
Товарищи...у меня завтра экзамен, у меня на шее висит 4 долга, этот в их числе...с остальными кое как понятно, но тут, ...помогите с цветом...очень прошу
volvo
Ты объясни, что значит
Цитата
делать его двухцветным
? То есть, ты хочешь, чтобы у тебя как бы крутился диск, с одной стороны красный, а с другой - зеленый? Или что?
Инкогнито
Цитата(volvo @ 9.01.2008 18:10) *

Ты объясни, что значит ? То есть, ты хочешь, чтобы у тебя как бы крутился диск, с одной стороны красный, а с другой - зеленый? Или что?

Да, с одной красной, с другой зелёной, именно это и надо)
volvo
  setfillstyle(1,red);
  setcolor(red);
  while true do begin
    d := 1;
    while i<>31 do begin
      if keypressed then
        if readkey=' ' then begin
          while not keypressed do
            if readkey =' ' then break
            else
              if readkey='x' then begin
                halt;
              end;
        end;


    setactivepage(a);
    setvisualpage(b);
    clearviewport;
    fillellipse (x,y,abs(i),y1); { <--- Внимательнее, здесь Abs, иначе вылетает }

    delay(t);
    c:=a;
    a:=b;
    b:=c;
    i:=i+d;

    if i=x1 then d := -d;

    if i < 0 then begin
      d := -d;
      if getcolor = red then begin
        setfillstyle(1,green);
        setcolor(green);
      end
      else begin
        setfillstyle(1,red);
        setcolor(red);
      end;
    end;
  end;

?
Инкогнито
Цитата(volvo @ 9.01.2008 18:20) *

  setfillstyle(1,red);
  setcolor(red);
  while true do begin
    d := 1;
    while i<>31 do begin
      if keypressed then
        if readkey=' ' then begin
          while not keypressed do
            if readkey =' ' then break
            else
              if readkey='x' then begin
                halt;
              end;
        end;
    setactivepage(a);
    setvisualpage(b);
    clearviewport;
    fillellipse (x,y,abs(i),y1); { <--- Внимательнее, здесь Abs, иначе вылетает }

    delay(t);
    c:=a;
    a:=b;
    b:=c;
    i:=i+d;

    if i=x1 then d := -d;

    if i < 0 then begin
      d := -d;
      if getcolor = red then begin
        setfillstyle(1,green);
        setcolor(green);
      end
      else begin
        setfillstyle(1,red);
        setcolor(red);
      end;
    end;
  end;

?

Да! Большое пребольшое спасибо тебе))) Ты меня спас)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.