firework.pp 2.7 KB

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