请你编程

Author: 刘克文 Date: 1997-01-01

#3  本期(9612)请你编程的题目是将屏幕分成四个窗口,并模拟一个物体在这四个窗口之间顺时针移动的过程,最好伴有音乐。
  参加评选的程序采用的语言主要有C、Pascal、Basic。这次编程的重点之一是在于模拟物体在跨越两个窗口时的动作。遗憾的是很多程序都没有这个过程,所模拟的物体每次出现的间隙很大,有一种“跳动”的效果,有些甚至从一个窗口一下跳入下一个窗口,因此,效果不是很好。在这方面,宁夏的张永强所编制的程序作的较好,限于版面,本期不能登出。
  下面向大家推荐陕西刘克文所编制的9612程序,这个程序简单易懂,结构清晰,基本上达到了设计要求。
#3  编写说明:
  本程序先在左上角画一窗口,一小球在伴音下从窗口底部沿窗口中心线顺时针走一直角,至窗口右边停止前进,伴音随之消失,背景变换三次;再在右上角画一窗口,从上一窗口停止处继续往下运行,重复上述过程,直至遍历四个窗口。然后小球再顺时针在四个窗口中运行一次,程序结束。该程序在Turbo C 2.0版本下运行通过。
  #include "conioh"
  #include "dosh"
  main()
  {  int x,y,s;
  void cs();
  int pic();
  textcolor(11);
  textbackground(0);
  clrscr();  /*清屏*/
  for(i=0;i<2;i++)          /*画面重复二次*/
  {  window(1,1,40,12);     /*左上角*/
  x=20,y=13;
  while(x<40)
  {  if(i==0) s=200;
  y==6?x++:y--;
  s=pic(x,y,s,i);}
  cs(x,y,2);  /*将背景变换三次*/
  windows(41,1,80,12);      /*右上角*/
  x=0,y=6;
  while(y<12)
  {  if(i==0) s=350;
  x==20?y++:x++;
  s=pic(x,y,s,i);}
  cs(x,y,4);
  window(41,13,80,25);      /*右下角*/
  x=20,y=0;
  while(x>1)
  {  if(i==0) s=150;
  y==6?x--:y++;
  s=pic(x,y,s,i);}
  cs(x,y,1)
  window(1,13,40,25);       /*左下角*/
  x=41,y=6;
  while(y>1)
  {  if(i==0) s=100;
  x==20?y--:x--;
  s=pic(x,y,s,i);}
  cs(x,y,0);}}
  /*小球在伴音下运行函数*/
  int pic(int a,int b,int c,int j)
  {  int h,k,l;
  if(j==0)
  {  textbackground(1);
  clsscr();}
  gotoxy(a,b);
  putch("o");
  for(h=1;h<3;h++)  /*伴音*/
  {  sound(u);
  u=j=0?u+50:(u>900?50:u+20);
  for(l=1;l<3;l++)
  {for(k=1;k<25000;k++);}   /*延迟*/
  }
  gotoxy(a,b);
  putch(" ");
  return(u);}
  /*背景变换函数*/
  void cs(int a,int b,int j)
  {  int i,j,l;
  nosound();
  for(i=0;i<4;j++,i++)
  {  textbackground(j);
  clrscr();
  gotoxy(a,b);
  putch("o");
  for(l=1;l<222;l++)
  {for(k=1;k<30000;k++);}   /*延迟*/
  }}