From c3c10da1af1132bd60be4c0e68b1f4b41256e77e Mon Sep 17 00:00:00 2001 From: "Kirill Lipatov (Leency)" Date: Mon, 24 Nov 2008 00:28:59 +0000 Subject: [PATCH] C-- memory blocks git-svn-id: svn://kolibrios.org@933 a494cfbc-eb01-0410-851d-a64ba20cac60 --- .../mblocks/branches/mblocks_C--/mblocks.c-- | 209 ++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 programs/games/mblocks/branches/mblocks_C--/mblocks.c-- diff --git a/programs/games/mblocks/branches/mblocks_C--/mblocks.c-- b/programs/games/mblocks/branches/mblocks_C--/mblocks.c-- new file mode 100644 index 0000000000..304aaaa7e3 --- /dev/null +++ b/programs/games/mblocks/branches/mblocks_C--/mblocks.c-- @@ -0,0 +1,209 @@ +/* + Memory Blocks for KolibriOS v1.02 + L&V Edition + + Идея и дизайн: Leency + Реализовано: Veliant и Leency + Compile with C-- + 2008 +*/ +#codesize +#include "kolibri.h--" +#include "icons.txt" +#define strok 6 //количество блоков по вертикали +#define stolbcov 10 //количество блоков по горизонтали + +char button_r[20] = "Ќ®ў п ЁЈа (F2) ‘зҐв:"; //новая игра +char button_e[20] = "New game (F2)Count:"; + +byte bitstat[60], bitpict[60]; +dword butonsx[60], butonsy[60]; +dword firstbit, secondbit; +int i, count, lang; + +void main() +{ + byte id; + init(); + loop() + { + switch (WaitEvent()) + { + CASE evButton: + id = GetButtonID(); + SWITCH (id) + { + CASE 1: + ExitProcess(); + CASE 5: + init(); + break; + CASE 6: + FOR (i=0;i<20;i++) button_r[i]> 0x0BAD) + { + if (secondbit <> 0x0BAD) + { + IF (bitpict[firstbit-100] == bitpict[secondbit-100]) + bitstat[firstbit-100] = bitstat[secondbit-100] = 2; + ELSE + bitstat[firstbit-100] = 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; + case evKey: + IF (GetKey()==51) init(); + BREAK; + case evReDraw: + WindowRedrawStatus(1); + DefineAndDrawWindow(100, 100, 434, 291 + GetSkinWidth(), 0x34, 0x10C0C0C0, 0, 0, "Memory Blocks L&V Edition"); + Draw_Panel(); + Draw_Game_Pole(); + WindowRedrawStatus(2); + } + } +} + + +void init() +{ + byte off; + $mov edi, #bitstat + $mov ecx, 60 + $xor al, al + $rep $stosb //стираем старые даннvе о нажатых кнопках + + $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] = i; + do off = random(60); while (bitpict[off] != 0); + bitpict[off] = i; + } + Draw_Game_Pole(); + Draw_Panel(); +} + +void ReDraw_Game_Button(int id) +{ + 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]*32*32+#data,32,32,butonsx[id]+3,butonsy[id]+3, #palitra); + BREAK; + CASE 2: + Draw_Open_Block(butonsx[id], butonsy[id]); + PutImage(bitpict[id]*32*32+#data,32,32,butonsx[id]+3,butonsy[id]+3, #palitra); + BREAK; + } +} + +void Draw_Game_Pole() +{ + byte j; + FOR (j = 0; j < stolbcov; j++) FOR (i = 0; i < strok; i++) + { + butonsx[j*strok+i] = j * 42 + 4; //сохраняем координаты чтоб не считать в дальнейшем + butonsy[j*strok+i] = i * 42 + 4; + ReDraw_Game_Button(j*strok + i); //рисуем поле + } +} + +void Draw_Block(dword x, y) +{ + DrawRegion(x, y, 38, 38, 0x0094AECE);//рамка + DrawBar(x+1, y+1, 37, 1, 0xFFFFFF); //белые линии + DrawBar(x+1, y+2, 1, 35, 0xFFFFFF); + DrawBar(x+1, y+37, 37, 1, 0xDEDEDE); //серые линии + DrawBar(x+37, y+2, 1, 35, 0xDEDEDE); + 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(0, 255, 425, 32, 0xEBE7DB);//фон панели + DrawBar(0, 255, 425, 1, 0x94AECE); //линии + DrawBar(0, 256, 425, 1, 0xFFFFFF); //линии + //кнопки + DrawFlatButton(9, 260, 107, 23, 5, 0xEFEBEF);//новая игра + WriteText(22,268,0x00,0,#button_r,14); + WriteText(150, 268, 0x80, 0x00, #button_r+14, 0); //надпись "Счет" + DrawFlatButton(215, 260, 23, 23, 6, 0xEFEBEF); //язык + IF (!lang) + WriteText(221,268,0x80,0,"EN",0); + ELSE + WriteText(221,268,0x80,0,"RU",0); + Draw_Count(); + //прямоугольники справа + DrawBar(400 , 265, 2, 2, 0xBDCBDE); + DrawBar(398 , 270, 6, 6, 0xBDCBDE); + DrawBar(406 , 275, 6, 6, 0xBDCBDE); + DrawBar(407 , 262, 9, 8, 0xD6D7CE); +} + + +void Draw_Count() +{ + DrawBar(190,268,18,7,0xEBE7DB); //цвет панели + WriteNumber(190, 268, 0x80, 0x00, 3, count); +} + + +stop: