回 帖 发 新 帖 刷新版面

主题:又是画图的

uses crt,graph;
var gd,gm,n,x2,y2,i,j:integer;
var r,x1,y1:real;
begin
writeln('qing shu ru xuan zhuang ci shu');
readln(n);
gd:=detect;
initgraph(gd,gm,'');

for j:=1 to n do
begin
for i:=1 to 360 do
  begin
  setcolor(12);
  circle(320,240,70);
  r:=200;
  x1:=r*cos(i*3.14/180);
  y1:=r*sin(i*3.14/180);
  x2:=round(320+x1);
  y2:=round(240+y1);
  circle(x2,y2,15);
  delay(20);
  setcolor(0);
  circle(x2,y2,15);
  end;
end;
readln;


end.
说明:这个是我晚上刚写的程序,模仿月亮围着太阳转,基本上功能实现了,现有两个问题请教:
1:如何设置功能键使动画停止,而不是靠循环次数来决定,比如说按F1键就可以结束正在运行的程序(我这个程序只有等程序运行完才能退出,很麻烦)

2:如何给空心的图形填充颜色,我看了TP中帮助文件,由于都是英文,再加上例子也不是很好懂所以没有学会,不知道有谁能帮帮我,只要一个简单的例子就可以了,先谢谢大家了

回复列表 (共3个回复)

沙发

1、
作图的最后记得用closegraph释放内存。
Crt单元中,Keypressed返回是否有按键按下。Readkey无回显读取一个字符。
至于功能键,象F1 - F12,Page up 、Home等等,按一次是产生两个字符:第一个字符是Chr(0),第二个字符是其代码。F1产生的两个字符是:Chr(0)、Chr(59)。
下面的语句虽然长一点,但真正检测F1
===============================
uses crt,graph;
var gd,gm,n,x2,y2,i,j:integer;
var r,x1,y1:real;
    ch:char;
    stop:boolean;
begin
readln(n);
writeln('Press F1 to exit when drawing...');
readln;
stop := false;
gd:=detect;
initgraph(gd,gm,'');
for j:=1 to n do
begin
for i:=1 to 360 do
  begin
  setcolor(12);
  circle(320,240,70);
  r:=200;
  x1:=r*cos(i*3.14/180);
  y1:=r*sin(i*3.14/180);
  x2:=round(320+x1);
  y2:=round(240+y1);
  circle(x2,y2,15);
  delay(20);
  setcolor(0);
  circle(x2,y2,15);
     if keypressed then
        begin
            ch := readkey;
            if ch = #0 then
              begin
                 ch := readkey;
                 if ch = #59 then
                     begin
                        stop := true;
                        break;
                     end;
              end;
        end;
    end;
    if stop then break;
end;
readln;
closegraph;
end.
===============================
2、

你应该找更多作图函数的资料,了解这些函数功能。这里只讲两个:
水溢式填充: FloodFill
就象倒水一样,向四周扩散填充。给出圈内的任一点,指定某种颜色是边界。可以想想如果不是某种颜色围成的封闭式图形,或者边界颜色不对,或者有缺口,填充效果会怎么样,死机都有可能。
画填充圆、椭圆有时就用Sector,前两个参数是圆心,接着两个参数是起始角、终止角,然后是X轴长、Y轴长。

uses Graph;

var Gd, Gm: Integer;
begin
Gd := Detect;
InitGraph(Gd, Gm, ' ');
if GraphResult <> grOk then
   Halt(1);
SetColor(Red);
Circle(100, 100,80 );
setfillstyle(1,Blue);
FloodFill(50, 50, RED);
setcolor(Blue);
sector(220,220,0,360,100,50);
Readln;
CloseGraph;
end.

板凳

if GraphResult <> grOk then
   Halt(1);
请问这个语句的功能是干什么用的,好象没有程序也可以执行,并没有什么影响呢

3 楼

uses crt,graph;
var gd,gm,n,x2,y2,i,j:integer;
var r,x1,y1:real;
begin
writeln('qing shu ru xuan zhuang ci shu');
readln(n);
gd:=detect;
initgraph(gd,gm,'');

for j:=1 to n do
begin
setcolor(12);
  circle(320,240,70);
  setfillstyle(1,yellow);
  floodfill(320,240,12);
for i:=1 to 360 do
  begin
  setcolor(2);
  setfillstyle(1,green);
  r:=200;
  x1:=r*cos(i*3.14/180);
  y1:=r*sin(i*3.14/180);
  x2:=round(320+x1);
  y2:=round(240+y1);
  circle(x2,y2,15);
  floodfill(x2,y2,2);
  delay(20);
  setcolor(0);
  setfillstyle(1,0);
  floodfill(x2,y2,0);
  circle(x2,y2,15);
  end;
end;
readln;
closegraph;
end.

这是我修改后的程序,功能键的使用还没有看懂,慢慢来,由于不知道上面语句的作用,也就没有加上了,不过并没有影响程序正常执行,总觉得自己写的程序很烦琐,画个这么简单的动画却用了这么多语句,不知道有什么地方可以改进的?

我来回复

您尚未登录,请登录后再回复。点此登录或注册