С помощью функции getimage и putimage изобразить фигуру, движущуюся случайным образом по экрану на фоне звездного неба. Программирование на Си/С.


Добавил:DMT
Дата создания:28 июня 2008, 21:58
Дата обновления:28 июня 2008, 22:50
Просмотров:13140 последний сегодня, 9:32
Комментариев: 0
С помощью функции getimage и putimage изобразить фигуру, движущуюся случайным образом по экрану на фоне звездного неба.
Примечание: Звездным небом называется множество точек на экране, цвет и координаты которых вычисляются с помощью генератора случайных чисел

Программирование кода на Си/Си
Код на C++
  1. #include <graphics.h>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4. #include <dos.h>
  5.  
  6. int change(int current)
  7. {
  8.  
  9. if (random(32767) > 30000)
  10. {
  11. switch (random(5))
  12. {
  13. case 0: return -2;
  14. case 1: return -1;
  15. case 2: return 0;
  16. case 3: return 1;
  17. case 4: return 2;
  18. }
  19. }
  20. return current;
  21. }
  22.  
  23. void main(void)
  24. {
  25. int gd = VGA, gm = VGAHI, i;
  26. int StartX = 100, StartY = 50, r = 20;
  27. int ulx, uly, lrx, lry, width, height, size;
  28. int dx = 0, dy = 0;
  29. int do_job = 1;
  30. void * img;
  31.  
  32. initgraph(&gd, &gm, "c:\\temp\\bc31\\bgi");
  33.  
  34. setfillstyle(SOLID_FILL, getmaxcolor());
  35. fillellipse(StartX, StartY, r, (r / 3) + 2);
  36. ellipse(StartX, StartY - 4, 190, 357, r, r / 3);
  37.  
  38. line(StartX + 7, StartY - 6, StartX + 10, StartY - 12);
  39. circle(StartX - 10, StartY - 12, 2);
  40. line(StartX - 7, StartY - 6, StartX - 10, StartY - 12);
  41. circle(StartX + 10, StartY - 12, 2);
  42.  
  43. ulx = StartX - (r + 1);
  44. uly = StartY - 14;
  45. lrx = StartX + (r + 1);
  46. lry = StartY + (r / 3) + 3;
  47. width = lrx - ulx + 1;
  48. height = lry - uly + 1;
  49. size = imagesize(ulx, uly, lrx, lry);
  50.  
  51. img = malloc(size);
  52. getimage(ulx, uly, lrx, lry, img);
  53.  
  54. cleardevice();
  55. for (i = 1; i < 1000; i++)
  56. putpixel(random(640), random(480), random(16));
  57.  
  58. while (do_job)
  59. {
  60. putimage(StartX, StartY, img, XOR_PUT);
  61. delay(50);
  62. putimage(StartX, StartY, img, XOR_PUT);
  63.  
  64. dx = change(dx);
  65. dy = change(dy);
  66.  
  67. StartX += dx;
  68. StartY += dy;
  69.  
  70. if (StartX > 639 - width) StartX = 639 - width;
  71. if (StartY > 479 - height) StartY = 479 - height;
  72. if (StartX < 0) StartX = 0;
  73. if (StartY < 0) StartY = 0;
  74.  
  75. if (kbhit()) do_job = (getch() != ' ');
  76. }
  77.  
  78. closegraph();
  79. }
При использовании обязательна ссылка на http://DMTSoft.ru
Теги:графика,Программирование на Си/С, исходник на Си/C++,алгоритм,фигура, getimage,putimage
up