Rev 964 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 964 | Rev 2060 | ||
---|---|---|---|
1 | /******************************************************************************* |
1 | /******************************************************************************* |
2 | 2 | ||
3 | MenuetOS MineSweeper |
3 | MenuetOS MineSweeper |
4 | Copyright (C) 2003, 2004 Ivan Poddubny |
4 | Copyright (C) 2003, 2004 Ivan Poddubny |
5 | 5 | ||
6 | This program is free software; you can redistribute it and/or modify |
6 | This program is free software; you can redistribute it and/or modify |
7 | it under the terms of the GNU General Public License as published by |
7 | it under the terms of the GNU General Public License as published by |
8 | the Free Software Foundation; either version 2 of the License, or |
8 | the Free Software Foundation; either version 2 of the License, or |
9 | (at your option) any later version. |
9 | (at your option) any later version. |
10 | 10 | ||
11 | This program is distributed in the hope that it will be useful, |
11 | This program is distributed in the hope that it will be useful, |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
14 | GNU General Public License for more details. |
14 | GNU General Public License for more details. |
15 | 15 | ||
16 | You should have received a copy of the GNU General Public License |
16 | You should have received a copy of the GNU General Public License |
17 | along with this program; if not, write to the Free Software |
17 | along with this program; if not, write to the Free Software |
18 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
18 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
19 | 19 | ||
20 | *******************************************************************************/ |
20 | *******************************************************************************/ |
21 | 21 | ||
22 | void draw_window() // Ïðîöåäóðà îòðèñîâêè îêíà |
22 | void draw_window() // Ïðîöåäóðà îòðèñîâêè îêíà |
23 | { |
23 | { |
24 | sys_window_redraw(1); |
- | |
25 | sys_get_colors(#colors, 40); |
24 | sys_get_colors(#colors, 40); |
26 | 25 | ||
27 | // WINDOW |
26 | // WINDOW |
- | 27 | sys_window_redraw(1); |
|
28 | EBX = xpos << 16 + xsize; |
28 | EBX = xpos << 16 + xsize; |
29 | ECX = ypos << 16 + ysize; |
29 | ECX = ypos << 16 + ysize; |
30 | sys_draw_window(EBX, ECX, 0x14CCCCCC, colors.w_grab | 0x80000000, "MineSweeper"); |
30 | sys_draw_window(EBX, ECX, 0x14CCCCCC, colors.w_grab | 0x80000000, "MineSweeper"); |
- | 31 | sys_window_redraw(2); |
|
- | 32 | ||
- | 33 | // Leency ROLLED UP FIX |
|
- | 34 | sys_process_info(#procinfo, -1); |
|
- | 35 | IF (procinfo.ysize<70) return; |
|
31 | 36 | ||
32 | // |
37 | // |
33 | EBX = xsize / 2 - 10; |
38 | EBX = xsize / 2 - 10; |
34 | EBX = EBX << 16 + 20; |
39 | EBX = EBX << 16 + 20; |
35 | sys_draw_button(EBX, 25<<16+20, 911, clLightGray); |
40 | sys_draw_button(EBX, 25<<16+20, 911, clLightGray); |
36 | 41 | ||
37 | // |
42 | // |
38 | sys_draw_button(10<<16+7, 23<<16+7, 1001, 0x118811); |
43 | sys_draw_button(10<<16+7, 23<<16+7, 1001, 0x118811); |
39 | 44 | ||
40 | // |
45 | // |
41 | //sys_draw_button(20<<16+7, ECX, EDX+1, 0xddbb44); |
46 | //sys_draw_button(20<<16+7, ECX, EDX+1, 0xddbb44); |
42 | 47 | ||
43 | draw_time(); // draw timer |
48 | draw_time(); // draw timer |
44 | draw_minesi(); // draw mines |
49 | draw_minesi(); // draw mines |
45 | draw_squares(); // draw field |
50 | draw_squares(); // draw field |
46 | - | ||
47 | sys_window_redraw(2); |
- | |
48 | } |
51 | } |
49 | 52 | ||
50 | dword num_colors[8]= |
53 | dword num_colors[8]= |
51 | { |
54 | { |
52 | 0x4444d0, // 1 |
55 | 0x4444d0, // 1 |
53 | 0x118811, // 2 |
56 | 0x118811, // 2 |
54 | 0xd04444, // 3 |
57 | 0xd04444, // 3 |
55 | 0x111199, // 4 |
58 | 0x111199, // 4 |
56 | 0x991111, // 5 |
59 | 0x991111, // 5 |
57 | 0x117089, // 6 |
60 | 0x117089, // 6 |
58 | 0x000000, // 7 |
61 | 0x000000, // 7 |
59 | 0x808080 // 8 |
62 | 0x808080 // 8 |
60 | }; |
63 | }; |
61 | 64 | ||
62 | 65 | ||
63 | // Îòðèñîâêà îäíîé êëåòêè |
66 | // Îòðèñîâêà îäíîé êëåòêè |
64 | void draw_square(int x, y) |
67 | void draw_square(int x, y) |
65 | { |
68 | { |
66 | int xl, xr, yt, yb; // ñëåâà, ñïðàâà, ñâåðõó, ñíèçó |
69 | int xl, xr, yt, yb; // ñëåâà, ñïðàâà, ñâåðõó, ñíèçó |
67 | dword tcolor = clBlack; // öâåò çíà÷åíèÿ êëåòêè ïî óìîë÷àíèþ ÷åðíûé |
70 | dword tcolor = clBlack; // öâåò çíà÷åíèÿ êëåòêè ïî óìîë÷àíèþ ÷åðíûé |
68 | byte tchar, tval; |
71 | byte tchar, tval; |
69 | 72 | ||
70 | xl = XPX * x + XST; |
73 | xl = XPX * x + XST; |
71 | xr = xl + XPX - 1; |
74 | xr = xl + XPX - 1; |
72 | yt = YPX * y + YST; |
75 | yt = YPX * y + YST; |
73 | yb = yt + YPX - 1; |
76 | yb = yt + YPX - 1; |
74 | 77 | ||
75 | EBX = xl+1 << 16 + xr - xl-1; |
78 | EBX = xl+1 << 16 + xr - xl-1; |
76 | ECX = yt+1 << 16 + yb - yt-1; |
79 | ECX = yt+1 << 16 + yb - yt-1; |
77 | $inc ebx |
80 | $inc ebx |
78 | $inc ecx |
81 | $inc ecx |
79 | sys_draw_bar(EBX, ECX, clLightGray); // ðèñóåò çàêðàøåííûé ïðÿìîóãîëüíèê |
82 | sys_draw_bar(EBX, ECX, clLightGray); // ðèñóåò çàêðàøåííûé ïðÿìîóãîëüíèê |
80 | 83 | ||
81 | if (!get_open(x, y)) |
84 | if (!get_open(x, y)) |
82 | { |
85 | { |
83 | // ðèñóåì ðàìêó |
86 | // ðèñóåì ðàìêó |
84 | ECX = yt << 16 + yb - 1; |
87 | ECX = yt << 16 + yb - 1; |
85 | sys_draw_line(xl<<16+xl, ECX, clWhite); |
88 | sys_draw_line(xl<<16+xl, ECX, clWhite); |
86 | EBX = xl << 16 + xr - 1; |
89 | EBX = xl << 16 + xr - 1; |
87 | sys_draw_line(EBX, yt << 16 + yt, EDX); |
90 | sys_draw_line(EBX, yt << 16 + yt, EDX); |
88 | sys_draw_line(xr << 16 + xl, yb << 16 + yb, clDarkGray); |
91 | sys_draw_line(xr << 16 + xl, yb << 16 + yb, clDarkGray); |
89 | sys_draw_line(xr << 16 + xr, yb << 16 + yt, EDX); |
92 | sys_draw_line(xr << 16 + xr, yb << 16 + yt, EDX); |
90 | 93 | ||
91 | SWITCH (get_mark(x, y)) |
94 | SWITCH (get_mark(x, y)) |
92 | { |
95 | { |
93 | CASE 2: tcolor = 0x121288; tchar = '?'; BREAK; |
96 | CASE 2: tcolor = 0x121288; tchar = '?'; BREAK; |
94 | CASE 1: tcolor = 0xd04444; tchar = 'P'; |
97 | CASE 1: tcolor = 0xd04444; tchar = 'P'; |
95 | } |
98 | } |
96 | 99 | ||
97 | IF (get_mark(x,y)) |
100 | IF (get_mark(x,y)) |
98 | { |
101 | { |
99 | EBX = xl + 5 << 16 + yt + 4; |
102 | EBX = xl + 5 << 16 + yt + 4; |
100 | sys_write_text(EBX, tcolor, #tchar, 1); |
103 | sys_write_text(EBX, tcolor, #tchar, 1); |
101 | EBX += 0x00010000; |
104 | EBX += 0x00010000; |
102 | /* Âòîðîé ðàç - ðåãèñòðû ñîõðàíÿþòñÿ */ |
105 | /* Âòîðîé ðàç - ðåãèñòðû ñîõðàíÿþòñÿ */ |
103 | sys_write_text(EBX, ECX, EDX, ESI); |
106 | sys_write_text(EBX, ECX, EDX, ESI); |
104 | } |
107 | } |
105 | } |
108 | } |
106 | else // get_open(x,y)==TRUE |
109 | else // get_open(x,y)==TRUE |
107 | { |
110 | { |
108 | tval = get_value(x, y); |
111 | tval = get_value(x, y); |
109 | IF (tval != 0) |
112 | IF (tval != 0) |
110 | { |
113 | { |
111 | IF (tval == MINE) |
114 | IF (tval == MINE) |
112 | { |
115 | { |
113 | tcolor = 0xee1111; |
116 | tcolor = 0xee1111; |
114 | tchar = '*'; |
117 | tchar = '*'; |
115 | } |
118 | } |
116 | ELSE |
119 | ELSE |
117 | { |
120 | { |
118 | tchar = tval + '0'; |
121 | tchar = tval + '0'; |
119 | tcolor = num_colors[tval-1]; |
122 | tcolor = num_colors[tval-1]; |
120 | } |
123 | } |
121 | EBX = xl + 5 << 16 + yt + 5; |
124 | EBX = xl + 5 << 16 + yt + 5; |
122 | sys_write_text(EBX, tcolor, #tchar, 1); |
125 | sys_write_text(EBX, tcolor, #tchar, 1); |
123 | EBX += 0x00010000; |
126 | EBX += 0x00010000; |
124 | sys_write_text(EBX, ECX, EDX, ESI); |
127 | sys_write_text(EBX, ECX, EDX, ESI); |
125 | } |
128 | } |
126 | sys_draw_line(xl << 16 + xl, yt << 16 + yb, clDarkGray); |
129 | sys_draw_line(xl << 16 + xl, yt << 16 + yb, clDarkGray); |
127 | sys_draw_line(xl << 16 + xr, yt << 16 + yt, EDX); |
130 | sys_draw_line(xl << 16 + xr, yt << 16 + yt, EDX); |
128 | } |
131 | } |
129 | } |
132 | } |
130 | 133 | ||
131 | 134 | ||
132 | // Òàéìåð |
135 | // Òàéìåð |
133 | void draw_time() |
136 | void draw_time() |
134 | { |
137 | { |
135 | sys_draw_bar(XST<<16+25, 31<<16+10, 0xCCCCCC); |
138 | sys_draw_bar(XST<<16+25, 31<<16+10, 0xCCCCCC); |
136 | sys_write_number(0x00030000, time, XST<<16+32, 0x10ff0000); |
139 | sys_write_number(0x00030000, time, XST<<16+32, 0x10ff0000); |
137 | } |
140 | } |
138 | 141 | ||
139 | 142 | ||
140 | // Èíäèêàòîð êîëè÷åñòâà íåðàññòàâëåííûõ ìèí |
143 | // Èíäèêàòîð êîëè÷åñòâà íåðàññòàâëåííûõ ìèí |
141 | void draw_minesi() |
144 | void draw_minesi() |
142 | { |
145 | { |
143 | EBX = xsize - XST - 25; |
146 | EBX = xsize - XST - 25; |
144 | $PUSH EBX |
147 | $PUSH EBX |
145 | EBX = EBX << 16 + 25; |
148 | EBX = EBX << 16 + 25; |
146 | sys_draw_bar(EBX, 31<<16+10, 0xCCCCCC); |
149 | sys_draw_bar(EBX, 31<<16+10, 0xCCCCCC); |
147 | $POP EDX |
150 | $POP EDX |
148 | EDX <<= 16; EDX += 32; |
151 | EDX <<= 16; EDX += 32; |
149 | sys_write_number(0x00030000, cmines, EDX, 0x10ff0000); |
152 | sys_write_number(0x00030000, cmines, EDX, 0x10ff0000); |
150 | } |
153 | } |
151 | 154 | ||
152 | 155 | ||
153 | // Îòðèñîâêà ìèííîãî ïîëÿ |
156 | // Îòðèñîâêà ìèííîãî ïîëÿ |
154 | void draw_squares() |
157 | void draw_squares() |
155 | { |
158 | { |
156 | int x,y; |
159 | int x,y; |
157 | 160 | ||
158 | FOR (y=0; y < ncy; y++) |
161 | FOR (y=0; y < ncy; y++) |
159 | FOR (x=0; x < ncx; x++) |
162 | FOR (x=0; x < ncx; x++) |
160 | draw_square(x, y); |
163 | draw_square(x, y); |
161 | }>>=><=>16+10,><16+10,>><>16+32,><16+32,>16+10,><16+10,>16+25,><16+25,>><>><>><>><>><>><>><>><>><>><>><>><>16+xl,><16+xl,>><>><>><>16+7,><16+7,>16+7,><16+7,>16+7,><16+7,>16+20,><16+20,>><>><>><> |
164 | }>>=><=>16+10,><16+10,>><>16+32,><16+32,>16+10,><16+10,>16+25,><16+25,>><>><>><>><>><>><>><>><>><>><>><>><>16+xl,><16+xl,>><>><>><>16+7,><16+7,>16+7,><16+7,>16+7,><16+7,>16+20,><16+20,>><>70)>><>><> |