source: trunk/ncurses/test/rain.c@ 3003

Last change on this file since 3003 was 2621, checked in by bird, 19 years ago

GNU ncurses 5.5

File size: 2.4 KB
Line 
1/*
2 * $Id: rain.c,v 1.20 2002/06/29 23:32:18 tom Exp $
3 */
4#include <test.priv.h>
5
6/* rain 11/3/1980 EPS/CITHEP */
7
8static float ranf(void);
9static void onsig(int sig);
10
11static int
12next_j(int j)
13{
14 if (j == 0)
15 j = 4;
16 else
17 --j;
18 if (has_colors()) {
19 int z = (int) (3 * ranf());
20 chtype color = COLOR_PAIR(z);
21 if (z)
22 color |= A_BOLD;
23 attrset(color);
24 }
25 return j;
26}
27
28int
29main(
30 int argc GCC_UNUSED,
31 char *argv[]GCC_UNUSED)
32{
33 int x, y, j;
34 static int xpos[5], ypos[5];
35 float r;
36 float c;
37
38 setlocale(LC_ALL, "");
39
40 for (j = SIGHUP; j <= SIGTERM; j++)
41 if (signal(j, SIG_IGN) != SIG_IGN)
42 signal(j, onsig);
43
44 initscr();
45 if (has_colors()) {
46 int bg = COLOR_BLACK;
47 start_color();
48#if HAVE_USE_DEFAULT_COLORS
49 if (use_default_colors() == OK)
50 bg = -1;
51#endif
52 init_pair(1, COLOR_BLUE, bg);
53 init_pair(2, COLOR_CYAN, bg);
54 }
55 nl();
56 noecho();
57 curs_set(0);
58 timeout(0);
59
60 r = (float) (LINES - 4);
61 c = (float) (COLS - 4);
62 for (j = 5; --j >= 0;) {
63 xpos[j] = (int) (c * ranf()) + 2;
64 ypos[j] = (int) (r * ranf()) + 2;
65 }
66
67 for (j = 0;;) {
68 x = (int) (c * ranf()) + 2;
69 y = (int) (r * ranf()) + 2;
70
71 mvaddch(y, x, '.');
72
73 mvaddch(ypos[j], xpos[j], 'o');
74
75 j = next_j(j);
76 mvaddch(ypos[j], xpos[j], 'O');
77
78 j = next_j(j);
79 mvaddch(ypos[j] - 1, xpos[j], '-');
80 mvaddstr(ypos[j], xpos[j] - 1, "|.|");
81 mvaddch(ypos[j] + 1, xpos[j], '-');
82
83 j = next_j(j);
84 mvaddch(ypos[j] - 2, xpos[j], '-');
85 mvaddstr(ypos[j] - 1, xpos[j] - 1, "/ \\");
86 mvaddstr(ypos[j], xpos[j] - 2, "| O |");
87 mvaddstr(ypos[j] + 1, xpos[j] - 1, "\\ /");
88 mvaddch(ypos[j] + 2, xpos[j], '-');
89
90 j = next_j(j);
91 mvaddch(ypos[j] - 2, xpos[j], ' ');
92 mvaddstr(ypos[j] - 1, xpos[j] - 1, " ");
93 mvaddstr(ypos[j], xpos[j] - 2, " ");
94 mvaddstr(ypos[j] + 1, xpos[j] - 1, " ");
95 mvaddch(ypos[j] + 2, xpos[j], ' ');
96
97 xpos[j] = x;
98 ypos[j] = y;
99
100 switch (getch()) {
101 case ('q'):
102 case ('Q'):
103 curs_set(1);
104 endwin();
105 ExitProgram(EXIT_SUCCESS);
106 case 's':
107 nodelay(stdscr, FALSE);
108 break;
109 case ' ':
110 nodelay(stdscr, TRUE);
111 break;
112#ifdef KEY_RESIZE
113 case (KEY_RESIZE):
114 r = (float) (LINES - 4);
115 c = (float) (COLS - 4);
116 break;
117#endif
118 }
119 napms(50);
120 }
121}
122
123static void
124onsig(int n GCC_UNUSED)
125{
126 curs_set(1);
127 endwin();
128 ExitProgram(EXIT_FAILURE);
129}
130
131static float
132ranf(void)
133{
134 long r = (rand() & 077777);
135 return ((float) r / 32768.);
136}
Note: See TracBrowser for help on using the repository browser.