kolibrios/programs/games/mblocks/branches/mblocks_C--/mblocks.c--
2008-03-18 15:04:20 +00:00

294 lines
6.6 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
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 = "<22>®¢ ï ¨£à (F2)"; //Íîâàÿ èãðà
char tcount_r = " ‘ç¥â:"; //Ñ÷¸ò
char lg_r = "RU";
char button_e = "New game (F2)";
char tcount_e = "Count:";
char lg_e = "EN";
#define button "<22>®¢ ï ¨£à (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: