Помощь - Поиск - Пользователи - Календарь
Полная версия: задача на графику
Форум «Всё о Паскале» > 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;

?

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