Subversion Repositories Kolibri OS

Rev

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
   //  BUTTON (911)
37
   //  BUTTON (911)
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
  //  BUTTON (1001)
42
  //  BUTTON (1001)
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
  //  BUTTON (1002)
45
  //  BUTTON (1002)
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
}
164
}