firework.pp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. {
  2. }
  3. //{$mode objfpc}
  4. {$INLINE OFF}
  5. {$ifdef FPC_PROFILE}
  6. {$INLINE OFF}
  7. {$endif FPC_PROFILE}
  8. program firework;
  9. uses
  10. ncurses;
  11. CONST
  12. my_bg = COLOR_BLACK;
  13. Procedure showit;
  14. begin
  15. refresh;
  16. napms(120);
  17. end;
  18. Function get_colour(Var bold : chtype) : longint;
  19. Var
  20. attr : longint;
  21. begin
  22. attr:=random(16) + 1;
  23. bold:=A_NORMAL;
  24. if (attr > 8) then
  25. begin
  26. bold:=A_BOLD;
  27. attr:=attr and 7;
  28. end;
  29. get_colour:=attr;
  30. end;
  31. Procedure explode(Row,Col : longint);
  32. var
  33. Bold : chtype;
  34. begin
  35. ncurses.erase;
  36. mvaddstr(row,col,'-');
  37. showit;
  38. init_pair(1,get_colour(bold),my_bg);
  39. attrset(COLOR_PAIR(1) or bold);
  40. mvaddstr(row-1,col-1,' - ');
  41. mvaddstr(row,col-1,'-+-');
  42. mvaddstr(row+1,col-1,' - ');
  43. showit;
  44. init_pair(1,get_colour(bold),my_bg);
  45. attrset(COLOR_PAIR(1) or bold);
  46. mvaddstr(row-2,col-2,' --- ');
  47. mvaddstr(row-1,col-2,'-+++-');
  48. mvaddstr(row, col-2,'-+#+-');
  49. mvaddstr(row+1,col-2,'-+++-');
  50. mvaddstr(row+2,col-2,' --- ');
  51. showit;
  52. init_pair(1,get_colour(bold),my_bg);
  53. attrset(COLOR_PAIR(1) or bold);
  54. mvaddstr(row-2,col-2,' +++ ');
  55. mvaddstr(row-1,col-2,'++#++');
  56. mvaddstr(row, col-2,'+# #+');
  57. mvaddstr(row+1,col-2,'++#++');
  58. mvaddstr(row+2,col-2,' +++ ');
  59. showit;
  60. init_pair(1,get_colour(bold),my_bg);
  61. attrset(COLOR_PAIR(1) or bold);
  62. mvaddstr(row-2,col-2,' # ');
  63. mvaddstr(row-1,col-2,'## ##');
  64. mvaddstr(row, col-2,'# #');
  65. mvaddstr(row+1,col-2,'## ##');
  66. mvaddstr(row+2,col-2,' # ');
  67. showit;
  68. init_pair(1,get_colour(bold),my_bg);
  69. attrset(COLOR_PAIR(1) or bold);
  70. mvaddstr(row-2,col-2,' # # ');
  71. mvaddstr(row-1,col-2,'# #');
  72. mvaddstr(row, col-2,' ');
  73. mvaddstr(row+1,col-2,'# #');
  74. mvaddstr(row+2,col-2,' # # ');
  75. showit;
  76. end;
  77. Var
  78. startp,endp,row,diff,flag : longint;
  79. direction : boolean;
  80. begin
  81. flag:=0;
  82. initscr;
  83. //if (has_colors<>0) then
  84. if has_colors then
  85. start_color;
  86. curs_set(0);
  87. randomize;
  88. cbreak;
  89. nodelay(stdscr, true);
  90. While getch=ERR do
  91. begin
  92. repeat
  93. startp:=random (COLS -3);
  94. endp:=random (COLS - 3);
  95. If startp < 2 then
  96. startp:=2;
  97. If endp <2 then
  98. 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. endwin();
  132. halt(0);
  133. end.