firework.pp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. program firework;
  2. uses ncurses,linux;
  3. procedure onsig(n : Longint);
  4. begin
  5. curs_set(1);
  6. endwin;
  7. halt(1);
  8. end;
  9. Procedure showit;
  10. begin
  11. refresh;
  12. napms(120);
  13. end;
  14. Function get_colour(Var bold : chtype) : longint;
  15. Var
  16. attr : longint;
  17. begin
  18. attr := random(16) + 1;
  19. bold := A_NORMAL;
  20. if (attr > 8) then
  21. begin
  22. bold:= A_BOLD;
  23. attr :=attr and 7;
  24. end;
  25. get_colour:=attr;
  26. end;
  27. CONST my_bg : LONGINT = COLOR_BLACK;
  28. Procedure explode(Row,Col : longint);
  29. var
  30. Bold : chtype;
  31. begin
  32. ncurses.erase;
  33. mvaddstr(row,col,'-');
  34. showit;
  35. init_pair(1,get_colour(bold),my_bg);
  36. attrset(COLOR_PAIR(1) or bold);
  37. mvaddstr(row-1,col-1,' - ');
  38. mvaddstr(row,col-1,'-+-');
  39. mvaddstr(row+1,col-1,' - ');
  40. showit;
  41. init_pair(1,get_colour(bold),my_bg);
  42. attrset(COLOR_PAIR(1) or bold);
  43. mvaddstr(row-2,col-2,' --- ');
  44. mvaddstr(row-1,col-2,'-+++-');
  45. mvaddstr(row, col-2,'-+#+-');
  46. mvaddstr(row+1,col-2,'-+++-');
  47. mvaddstr(row+2,col-2,' --- ');
  48. showit;
  49. init_pair(1,get_colour(bold),my_bg);
  50. attrset(COLOR_PAIR(1) or bold);
  51. mvaddstr(row-2,col-2,' +++ ');
  52. mvaddstr(row-1,col-2,'++#++');
  53. mvaddstr(row, col-2,'+# #+');
  54. mvaddstr(row+1,col-2,'++#++');
  55. mvaddstr(row+2,col-2,' +++ ');
  56. showit;
  57. init_pair(1,get_colour(bold),my_bg);
  58. attrset(COLOR_PAIR(1) or bold);
  59. mvaddstr(row-2,col-2,' # ');
  60. mvaddstr(row-1,col-2,'## ##');
  61. mvaddstr(row, col-2,'# #');
  62. mvaddstr(row+1,col-2,'## ##');
  63. mvaddstr(row+2,col-2,' # ');
  64. showit;
  65. init_pair(1,get_colour(bold),my_bg);
  66. attrset(COLOR_PAIR(1) or bold);
  67. mvaddstr(row-2,col-2,' # # ');
  68. mvaddstr(row-1,col-2,'# #');
  69. mvaddstr(row, col-2,' ');
  70. mvaddstr(row+1,col-2,'# #');
  71. mvaddstr(row+2,col-2,' # # ');
  72. showit;
  73. end;
  74. Var
  75. J : Longint;
  76. startp,endp,row,diff,flag : longint;
  77. direction : boolean;
  78. seed : cardinal;
  79. begin
  80. flag:=0;
  81. {
  82. for j:=SIGHUP to SIGTERM do
  83. if (signal(j,SIG_IGN)<>SIG_IGN) then
  84. signal(j,@onsig);
  85. }
  86. initscr;
  87. if (has_colors<>0) then
  88. start_color;
  89. curs_set(0);
  90. randomize;
  91. cbreak;
  92. While true do
  93. begin
  94. repeat
  95. startp := random (COLS -3);
  96. endp := random (COLS - 3);
  97. If startp < 2 then startp:=2;
  98. If endp <2 then endp:=2;
  99. direction := startp > endp ;
  100. diff := abs(startp-endp);
  101. until (diff>2) and (diff<(LINES-2));
  102. attrset(A_NORMAL);
  103. for row:=0 to diff do
  104. begin;
  105. If direction then
  106. mvaddstr(LINES - row,startp + row ,'/')
  107. else
  108. mvaddstr(LINES - row,startp - row ,'\');
  109. inc(flag);
  110. if flag<>0 then
  111. begin
  112. showit;
  113. erase;
  114. flag := 0;
  115. end;
  116. end;
  117. inc(flag);
  118. if (flag<>0) then
  119. begin
  120. showit;
  121. flag := 0;
  122. end;
  123. randomize;
  124. If Direction then
  125. explode(LINES-row,startp+diff)
  126. Else
  127. explode(LINES-row,startp-diff);
  128. erase;
  129. showit;
  130. end;
  131. end.