Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 772 → Rev 773

/programs/games/mblocks/branches/mblocks_C--/mblocks.c--
0,0 → 1,293
/*
Memory Blocks for KolibriOS v1.01
L&V Edition
 
Èäåÿ è äèçàéí: Leency
Ðåàëèçîâàíî: Veliant è Leency
Compile with C--
2008
*/
 
#pragma option J0
#pragma option LST
#pragma option OC
#pragma option 4
#pragma option A
#include "kolibri.h--"
#include "random.h--"
#include "mbgraph.h--"
 
#define strok 6 //êîëè÷åñòâî áëîêîâ ïî âåðòèêàëè
#define stolbcov 10 //êîëè÷åñòâî áëîêîâ ïî ãîðèçîíòàëè
 
#define header "Memory Blocks L&V Edition"
 
char button_r = "®¢ ï ¨£à (F2)"; //Íîâàÿ èãðà
char tcount_r = " ‘ç¥â:"; //Ñ÷¸ò
char lg_r = "RU";
 
char button_e = "New game (F2)";
char tcount_e = "Count:";
char lg_e = "EN";
 
#define button "®¢ ï ¨£à (F2)"
#define tcount " ‘ç¥â:"
 
 
int lang = 0;
 
byte bitstat[60] = 0;
byte bitpict[60] = 0;
dword butonsx[60] = 0;
dword butonsy[60] = 0;
dword i, k, x, id, count = 0;
dword firstbit, secondbit;
 
void main()
{
int z=1;
int off;
FOR (i = 0; i < 30; i++)
{
do
off = random(60);
while (bitpict[off] != 0);
bitpict[off] = z;
do
off = random(60);
while (bitpict[off] != 0);
bitpict[off] = z;
z++;
}
skin_width = GetSkinWidth();
firstbit = secondbit = 0x0BAD;
Draw_Window();
loop()
{
switch (WaitEvent())
{
CASE evButton:
id = GetButtonID();
switch (id)
{
CASE 1:
ExitProcess();
break;
CASE 5:
init();
break;
CASE 6:
SWITCH (lang)
{
CASE 0:
copystr(#button_e, button);
copystr(#tcount_e, tcount);
lang = 1;
break;
CASE 1:
copystr(#button_r, button);
copystr(#tcount_r, tcount);
lang = 0;
break;
}
Draw_Panel();
break;
default:
if (bitstat[id-100] == 0)
{
if (firstbit <> 0x0BAD)
{
if (secondbit <> 0x0BAD)
{
IF (bitpict[firstbit-100] == bitpict[secondbit-100])
{
bitstat[firstbit-100] = 2;
bitstat[secondbit-100] = 2;
}
ELSE
{
bitstat[firstbit-100] = 0;
bitstat[secondbit-100] = 0;
}
ReDraw_Game_Button(firstbit - 100);
ReDraw_Game_Button(secondbit - 100);
secondbit = 0x0BAD;
firstbit = id;
bitstat[id-100] = 1;
ReDraw_Game_Button(id - 100);
count++;
}
ELSE
{
IF (firstbit<>id)
{
secondbit = id;
bitstat[id-100] = 1;
ReDraw_Game_Button(id - 100);
count++;
}
}
}
ELSE
{
firstbit = id;
bitstat[id-100] = 1;
ReDraw_Game_Button(id - 100);
count++;
}
}
Draw_Count();
break;
}
break;
case evKey:
SWITCH (GetKey())
{
CASE 51:
init(); //Íàæàòà F2
break;
}
break;
case evReDraw:
Draw_Window();
break;
}
}
ExitProcess();
}
 
void Draw_Window()
{
begin_paint();
DefineAndDrawWindow(100, 100, 434, 290 + skin_width + 1, 0x04, 0x00C0C0C0, 0, 0, 0);
DrawTitle(header);
Draw_Panel();
Draw_Game_Pole();
 
end_paint();
}
 
void init()
{
int off, z;
z=1;
$mov edi, #bitstat
$mov ecx, 60
$xor al, al
$rep $stosb //ñòèðàåì ñòàðûå äàííûå î íàæàòûõ êíîïêàõ
 
$mov edi, #bitpict
$mov ecx, 60
$xor al, al
$rep $stosb //ñòèðàåì ñòàðûå äàííûå î êàðòèíêàõ
 
count = 0;
firstbit = secondbit = 0x0BAD;
FOR (i = 0; i < 30; i++)
{
do
off = random(60);
while (bitpict[off] != 0);
bitpict[off] = z;
do
off = random(60);
while (bitpict[off] != 0);
bitpict[off] = z;
z++;
}
Draw_Game_Pole();
Draw_Panel();
}
 
void ReDraw_Game_Button(int id)
{
int off;
DefineButton(0, 0, 0, 0, 100 + id + BT_DEL, 0); //óäàëÿåì ñòàðóþ
DefineButton(butonsx[id], butonsy[id], 38, 38, 100 + id + BT_HIDE, 0xEFEBEF); //äåëàåì íîâóþ
switch (bitstat[id])
{
CASE 0:
Draw_Block(butonsx[id], butonsy[id]);
break;
CASE 1:
Draw_Pressed_Block(butonsx[id], butonsy[id]);
PutImage(bitpict[id]-1*32*32*3+#data,32,32,butonsx[id]+3,butonsy[id]+3);
break;
case 2:
Draw_Open_Block(butonsx[id], butonsy[id]);
PutImage(bitpict[id]-1*32*32*3+#data,32,32,butonsx[id]+3,butonsy[id]+3);
break;
}
//WriteText(butonsx[id] + 10, butonsy[id] + 10, 0x80, 0x000000, IntToStr(bitpict[id]), 0);
}
 
void Draw_Game_Pole()
{
FOR (k = 0; k < stolbcov; k++)
{
FOR (i = 0; i < strok; i++)
{
butonsx[k*strok+i] = k * 42 + 4 + 5; //ñîõðàíÿåì êîîðäèíàòû ÷òîá íå ñ÷èòàòü â äàëüíåéøåì
butonsy[k*strok+i] = i * 42 + 4;
ReDraw_Game_Button(k*strok + i); //ðèñóåì ïîëå
}
}
}
 
void Draw_Block(dword x, y)
{
DrawRegion(x, y, 38, 38, 0x0094AECE);//ðàìêà
DrawLine(x + 1*65536 + x + 37, y + skin_width + 1*65536 + y + skin_width + 1, 0x00FFFFFF);//áåëûå ëèíèè
DrawLine(x + 1*65536 + x + 1, y + skin_width + 1*65536 + y + skin_width + 36, 0x00FFFFFF);
DrawLine(x + 1*65536 + x + 37, y + skin_width + 37*65536 + y + skin_width + 37, 0x00DEDEDE);//ñåðûå ëèíèè
DrawLine(x + 37*65536 + x + 37, y + skin_width + 2*65536 + y + skin_width + 36, 0x00DEDEDE);
DrawBar(x + 2, y + 2, 35, 35, 0x00BDC7D6);//ôîí
}
 
void Draw_Open_Block(dword x, y)
{
DrawRegion(x, y, 38, 38, 0x0094AECE);//ðàìêà
DrawBar(x + 1, y + 1, 37, 37, 0x00EFEBEF);//ôîí
}
 
void Draw_Pressed_Block(dword x, y)
{
DrawRegion(x, y, 38, 38, 0x0094AECE);//ðàìêà
DrawRegion(x + 1, y + 1, 36, 36, 0x0094DB00);//ðàìêà çåëåíàÿ
DrawRegion(x + 2, y + 2, 34, 34, 0x0094DB00);//ðàìêà çåëåíàÿ
DrawBar(x + 3, y + 3, 33, 33, 0x00EFEBEF);//ôîí
}
 
void Draw_Panel()
{
DrawBar(5, 255, 425, 32, 0x00EBE7DB);//ôîí ïàíåëè
DrawLine(5*65536 + 429, 255 + skin_width*65536 + 255 + skin_width, 0x0094AECE);//ëèíèè
DrawLine(5*65536 + 429, 256 + skin_width*65536 + 256 + skin_width, 0x00FFFFFF);//ëèíèè
 
//Êíîïêà
DrawFlatButton(4 + 5, 260, 107, 23, 5, 0x00EFEBEF);//íîâàÿ èãðà
DrawFlatButton(210 + 5, 260, 23, 23, 6, 0x00EFEBEF);//ÿçûê
//íàäïèñü íà êíîïêå
WriteText(22, 268, 0x80, 0x000000, button, 0);
//íàäïèñü "Ñ÷åò"
WriteText(150, 268, 0x80, 0x000000, tcount, 0);
IF (lang==0)
WriteText(221, 268, 0x80, 0x000000, #lg_e, 0);
ELSE
WriteText(221, 268, 0x80, 0x000000, #lg_r, 0);
Draw_Count();
 
//ïðÿìîóãîëüíèêè ñïðàâà
DrawBar(395 + 10, 260 + 5, 2, 2, 0x00BDCBDE);
DrawBar(393 + 10, 265 + 5, 6, 6, 0x00BDCBDE);
DrawBar(401 + 10, 270 + 5, 6, 6, 0x00BDCBDE);
DrawBar(402 + 10, 257 + 5, 9, 8, 0x00D6D7CE);
}
 
void Draw_Count()
{
EDI = 0x00EBE7DB; //öâåò ïàíåëè
WriteText(190, 268, 0xC0, 0x000000, IntToStr(count), 0);
}
 
stop: