Subversion Repositories Kolibri OS

Rev

Rev 2060 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2060 Rev 6166
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_get_colors(#colors, 40);
24
  sys_get_colors(#colors, 40);
25
 
25
 
26
  // WINDOW
26
  // WINDOW
27
  sys_window_redraw(1);
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_work | 0x80000000, "MineSweeper");
31
  sys_window_redraw(2);
31
  sys_window_redraw(2);
32
  
32
  
33
  // Leency ROLLED UP FIX
33
  // Leency ROLLED UP FIX
34
  sys_process_info(#procinfo, -1);
34
  sys_process_info(#procinfo, -1);
35
  IF (procinfo.ysize<70) return;  
35
  IF (procinfo.ysize<70) return;  
36
 
36
 
37
   //  BUTTON (911)
37
   //  BUTTON (911)
38
  EBX = xsize / 2 - 10;
38
  EBX = xsize / 2 - 10;
39
  EBX = EBX << 16 + 20;
39
  EBX = EBX << 16 + 20;
40
  sys_draw_button(EBX, 25<<16+20, 911, clLightGray);
40
  sys_draw_button(EBX, 25<<16+20, 911, clLightGray);
41
 
41
 
42
  //  BUTTON (1001)
42
  //  BUTTON (1001)
43
  sys_draw_button(10<<16+7, 23<<16+7, 1001, 0x118811);
43
  sys_draw_button(10<<16+7, 23<<16+7, 1001, 0x118811);
44
 
44
 
45
  //  BUTTON (1002)
45
  //  BUTTON (1002)
46
  //sys_draw_button(20<<16+7, ECX, EDX+1, 0xddbb44);
46
  //sys_draw_button(20<<16+7, ECX, EDX+1, 0xddbb44);
47
 
47
 
48
  draw_time();     // draw timer
48
  draw_time();     // draw timer
49
  draw_minesi();   // draw mines
49
  draw_minesi();   // draw mines
50
  draw_squares();  // draw field
50
  draw_squares();  // draw field
51
}
51
}
52
 
52
 
53
dword num_colors[8]=
53
dword num_colors[8]=
54
{
54
{
55
  0x4444d0,  // 1
55
  0x4444d0,  // 1
56
  0x118811,  // 2
56
  0x118811,  // 2
57
  0xd04444,  // 3
57
  0xd04444,  // 3
58
  0x111199,  // 4
58
  0x111199,  // 4
59
  0x991111,  // 5
59
  0x991111,  // 5
60
  0x117089,  // 6
60
  0x117089,  // 6
61
  0x000000,  // 7
61
  0x000000,  // 7
62
  0x808080   // 8
62
  0x808080   // 8
63
};
63
};
64
 
64
 
65
 
65
 
66
// Îòðèñîâêà îäíîé êëåòêè
66
// Îòðèñîâêà îäíîé êëåòêè
67
void draw_square(int x, y)
67
void draw_square(int x, y)
68
{
68
{
69
   int xl, xr, yt, yb;       // ñëåâà, ñïðàâà, ñâåðõó, ñíèçó
69
   int xl, xr, yt, yb;       // ñëåâà, ñïðàâà, ñâåðõó, ñíèçó
70
   dword tcolor = clBlack;   // öâåò çíà÷åíèÿ êëåòêè ïî óìîë÷àíèþ ÷åðíûé
70
   dword tcolor = clBlack;   // öâåò çíà÷åíèÿ êëåòêè ïî óìîë÷àíèþ ÷åðíûé
71
   byte tchar, tval;
71
   byte tchar, tval;
72
 
72
 
73
   xl = XPX * x + XST;
73
   xl = XPX * x + XST;
74
   xr = xl + XPX - 1;
74
   xr = xl + XPX - 1;
75
   yt = YPX * y + YST;
75
   yt = YPX * y + YST;
76
   yb = yt + YPX - 1;
76
   yb = yt + YPX - 1;
77
 
77
 
78
   EBX = xl+1 << 16 + xr - xl-1;
78
   EBX = xl+1 << 16 + xr - xl-1;
79
   ECX = yt+1 << 16 + yb - yt-1;
79
   ECX = yt+1 << 16 + yb - yt-1;
80
   $inc ebx
80
   $inc ebx
81
   $inc ecx
81
   $inc ecx
82
   sys_draw_bar(EBX, ECX, clLightGray);  // ðèñóåò çàêðàøåííûé ïðÿìîóãîëüíèê
82
   sys_draw_bar(EBX, ECX, clLightGray);  // ðèñóåò çàêðàøåííûé ïðÿìîóãîëüíèê
83
 
83
 
84
   if (!get_open(x, y))
84
   if (!get_open(x, y))
85
   {
85
   {
86
      // ðèñóåì ðàìêó
86
      // ðèñóåì ðàìêó
87
      ECX = yt << 16 + yb - 1;
87
      ECX = yt << 16 + yb - 1;
88
      sys_draw_line(xl<<16+xl, ECX, clWhite);
88
      sys_draw_line(xl<<16+xl, ECX, clWhite);
89
      EBX = xl << 16 + xr - 1;
89
      EBX = xl << 16 + xr - 1;
90
      sys_draw_line(EBX, yt << 16 + yt, EDX);
90
      sys_draw_line(EBX, yt << 16 + yt, EDX);
91
      sys_draw_line(xr << 16 + xl, yb << 16 + yb, clDarkGray);
91
      sys_draw_line(xr << 16 + xl, yb << 16 + yb, clDarkGray);
92
      sys_draw_line(xr << 16 + xr, yb << 16 + yt, EDX);
92
      sys_draw_line(xr << 16 + xr, yb << 16 + yt, EDX);
93
 
93
 
94
      SWITCH (get_mark(x, y))
94
      SWITCH (get_mark(x, y))
95
      {
95
      {
96
        CASE 2: tcolor = 0x121288; tchar = '?'; BREAK;
96
        CASE 2: tcolor = 0x121288; tchar = '?'; BREAK;
97
        CASE 1: tcolor = 0xd04444; tchar = 'P';
97
        CASE 1: tcolor = 0xd04444; tchar = 'P';
98
      }
98
      }
99
 
99
 
100
      IF (get_mark(x,y))
100
      IF (get_mark(x,y))
101
      {
101
      {
102
        EBX = xl + 5 << 16 + yt + 4;
102
        EBX = xl + 5 << 16 + yt + 4;
103
        sys_write_text(EBX, tcolor, #tchar, 1);
103
        sys_write_text(EBX, tcolor, #tchar, 1);
104
        EBX += 0x00010000;
104
        EBX += 0x00010000;
105
        /*  Âòîðîé ðàç - ðåãèñòðû ñîõðàíÿþòñÿ  */
105
        /*  Âòîðîé ðàç - ðåãèñòðû ñîõðàíÿþòñÿ  */
106
        sys_write_text(EBX, ECX, EDX, ESI);
106
        sys_write_text(EBX, ECX, EDX, ESI);
107
      }
107
      }
108
   }
108
   }
109
   else          // get_open(x,y)==TRUE
109
   else          // get_open(x,y)==TRUE
110
   {
110
   {
111
      tval = get_value(x, y);
111
      tval = get_value(x, y);
112
      IF (tval != 0)
112
      IF (tval != 0)
113
      {
113
      {
114
        IF (tval == MINE)
114
        IF (tval == MINE)
115
        {
115
        {
116
          tcolor = 0xee1111;
116
          tcolor = 0xee1111;
117
          tchar = '*';
117
          tchar = '*';
118
        }
118
        }
119
        ELSE
119
        ELSE
120
        {
120
        {
121
          tchar = tval + '0';
121
          tchar = tval + '0';
122
          tcolor = num_colors[tval-1];
122
          tcolor = num_colors[tval-1];
123
        }
123
        }
124
        EBX = xl + 5 << 16 + yt + 5;
124
        EBX = xl + 5 << 16 + yt + 5;
125
        sys_write_text(EBX, tcolor, #tchar, 1);
125
        sys_write_text(EBX, tcolor, #tchar, 1);
126
        EBX += 0x00010000;
126
        EBX += 0x00010000;
127
        sys_write_text(EBX, ECX, EDX, ESI);
127
        sys_write_text(EBX, ECX, EDX, ESI);
128
      }
128
      }
129
      sys_draw_line(xl << 16 + xl, yt << 16 + yb, clDarkGray);
129
      sys_draw_line(xl << 16 + xl, yt << 16 + yb, clDarkGray);
130
      sys_draw_line(xl << 16 + xr, yt << 16 + yt, EDX);
130
      sys_draw_line(xl << 16 + xr, yt << 16 + yt, EDX);
131
   }
131
   }
132
}
132
}
133
 
133
 
134
 
134
 
135
// Òàéìåð
135
// Òàéìåð
136
void draw_time()
136
void draw_time()
137
{
137
{
138
  sys_draw_bar(XST<<16+25, 31<<16+10, 0xCCCCCC);
138
  sys_draw_bar(XST<<16+25, 31<<16+14, 0xCCCCCC);
139
  sys_write_number(0x00030000, time, XST<<16+32, 0x10ff0000);
139
  sys_write_number(0x00030000, time, XST<<16+32, 0x10ff0000);
140
}
140
}
141
 
141
 
142
 
142
 
143
// Èíäèêàòîð êîëè÷åñòâà íåðàññòàâëåííûõ ìèí
143
// Èíäèêàòîð êîëè÷åñòâà íåðàññòàâëåííûõ ìèí
144
void draw_minesi()
144
void draw_minesi()
145
{
145
{
146
  EBX = xsize - XST - 25;
146
  EBX = xsize - XST - 25;
147
  $PUSH EBX
147
  $PUSH EBX
148
  EBX = EBX << 16 + 25;
148
  EBX = EBX << 16 + 25;
149
  sys_draw_bar(EBX, 31<<16+10, 0xCCCCCC);
149
  sys_draw_bar(EBX, 31<<16+14, 0xCCCCCC);
150
  $POP EDX
150
  $POP EDX
151
  EDX <<= 16; EDX += 32;
151
  EDX <<= 16; EDX += 32;
152
  sys_write_number(0x00030000, cmines, EDX, 0x10ff0000);
152
  sys_write_number(0x00030000, cmines, EDX, 0x10ff0000);
153
}
153
}
154
 
154
 
155
 
155
 
156
// Îòðèñîâêà ìèííîãî ïîëÿ
156
// Îòðèñîâêà ìèííîãî ïîëÿ
157
void draw_squares()
157
void draw_squares()
158
{
158
{
159
  int x,y;
159
  int x,y;
160
 
160
 
161
  FOR (y=0; y < ncy; y++)
161
  FOR (y=0; y < ncy; y++)
162
    FOR (x=0; x < ncx; x++)
162
    FOR (x=0; x < ncx; x++)
163
      draw_square(x, y);
163
      draw_square(x, y);
164
}
164
}