kolibrios/programs/games/clicks/trunk/clicks.c--
Kirill Lipatov (Leency) 5907e5759e Clicks 0.75
git-svn-id: svn://kolibrios.org@1003 a494cfbc-eb01-0410-851d-a64ba20cac60
2009-01-28 04:28:31 +00:00

202 lines
4.8 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.

/*
Just Clicks v0.75
Copyright (C) 2008 Leency
Clickomania v0.3
Copyright (C) 2005 €«¥ªá ­¤à Œã訪®¢ aka Olaf
Compiled by C--Sphinx v0.239 b26
*/
#pragma option meos
#include "lib\kolibri.h--"
#include "lib\random.h--"
#include "files\boxes.txt"
#include "files\cups.txt"
byte i,j, XX, YY;
struct
{
byte x;
byte y;
byte button_id;
byte mark;
dword color;
}matrix[64];
void destroy_button(byte ID)
{
IF (matrix[ID-8].color == matrix[ID].color) && (matrix[ID-8].mark!=1)
{
matrix[ID-8].mark=1;
destroy_button(ID-8);
}
IF (matrix[ID+8].color == matrix[ID].color) && (matrix[ID+8].mark!=1)
{
matrix[ID+8].mark=1;
destroy_button(ID+8);
}
IF (ID!=0)&&(ID!=8)&&(ID!=16)&&(ID!=24)&&(ID!=32)&&(ID!=40)&&(ID!=48)&&(ID!=56)
&& (matrix[ID-1].color == matrix[ID].color) && (matrix[ID-1].mark!=1)
{
matrix[ID-1].mark=1;
destroy_button(ID-1);
}
IF (ID!=7)&&(ID!=15)&&(ID!=23)&&(ID!=31)&&(ID!=39)&&(ID!=47)&&(ID!=55)&&(ID!=63)
&& (matrix[ID+1].color == matrix[ID].color) && (matrix[ID+1].mark!=1)
{
matrix[ID+1].mark=1;
destroy_button(ID+1);
}
IF (matrix[ID].x<XX) {XX=matrix[ID].x; IF (matrix[ID].y>YY) YY=matrix[ID].y;}
IF (matrix[ID].y>YY) {YY=matrix[ID].y; IF (matrix[ID].x<XX) XX=matrix[ID].x;}
}
void shift_bars(byte AA, BB)
byte id_curr,id_next,bz;
{
for (j=AA;j<8;j++) for (i=BB; i>0; i--)
{
id_curr=i*8+j;
bz=i-1;
_HH:
id_next=bz*8+j;
IF (matrix[id_curr].mark == 1)
IF (bz>0)&&(matrix[id_next].mark == 1) {bz--; GOTO _HH;}
ELSE IF (matrix[id_next].mark == 0)
{
matrix[id_curr].color=matrix[id_next].color;
matrix[id_curr].mark=matrix[id_next].mark;
matrix[id_next].mark=1;
}
}
}
byte check_for_end()
{
byte id_next, id_curr;
for (j=0; j<64; j+=8) for (i=0; i<8; i++)
{
id_curr=j+i;
id_next=id_curr+1;
IF (matrix[id_curr].color==matrix[id_next].color)&&(matrix[id_curr].mark==0)&&(matrix[id_next].mark==0) return 0;
IF (matrix[id_curr].color==matrix[id_next+7].color)&&(matrix[id_curr].mark==0)&&(matrix[id_next+7].mark==0) return 0;
}
return 1;
}
void move_it()
byte but_id, count, x;
{
for (x=0;x<8;x++)
{
count = 0;
FOR (i=0;i<8;i++) IF (matrix[i*8+x].mark==1) count++;
if (count == 8) FOR (i=0;i<8;i++)
{
XX=x;
WHILE (XX<7)
{
but_id=i*8+XX;
matrix[but_id].mark=matrix[but_id+1].mark;
matrix[but_id].color=matrix[but_id+1].color;
IF (XX == 6) matrix[but_id+1].mark=1;
XX++;
}
}
}
}
void ReDraw_Blocks(byte newgame)
{
byte num=0, y=22, count_blocks=0, temp[10];
for (i=0;i<8;i++)
{
for (j=0;j<8;j++)
{
IF (newgame)
{
matrix[num].mark=0;
XX=9; YY=0;
matrix[num].color = random(5)+1;
}
DeleteButton(i*8+j);
matrix[num].x=j;
matrix[num].y=i;
IF (matrix[num].mark==0)
{
DefineButton(j*21+5,y-22, 20, 20, num+BT_HIDE, 0);
PutImage(matrix[num].color-1*1323+#img,21,21,j*21+5,y-22);
} ELSE DrawBar(j*21+5,y-22,21,21, 0xB2B4BF);
num++;
}
y=y+21;
}
DrawBar(95,178,71,8,0xE4DFE1);
IF (check_for_end()==1) WriteText(95,178,0x80,0,"<22>¥§ã«ìâ â:",10);
ELSE WriteText(101,178,0x80,0,"Žáâ «®áì:",10);
FOR (i=0;i<8;i++) FOR (j=0;j<8;j++) IF (matrix[j*8+i].mark==0) count_blocks++;
WriteText(155,178,0x80,0,IntToStr(count_blocks),0);
//
if (check_for_end()==1) && (count_blocks<8)
{
DrawFlatButton(26,42,125,62,0,0xE4DFE1,"");
IF (count_blocks==0) copystr(" ‹ãçè¥ ¢á¥å!", #temp);
IF (count_blocks==1) copystr(" <20>४à á­®", #temp);
IF (count_blocks==2) copystr("Žç¥­ì å®à®è®!", #temp);
IF (count_blocks>=3) //¡ £!!!
{
copystr(" <20>¥¯«®å®", #temp);
count_blocks=3;
}
PutImage(count_blocks*42*37*3+#cups,42,37,68,48);
WriteText(51,91,0x80,0x0,#temp,0);
}
}
void main()
{ byte id;
randomize();
ReDraw_Blocks(1);
loop()
{
switch(WaitEvent())
{
CASE evKey: IF (GetKey()==051) ReDraw_Blocks(1); break; //New game
CASE evButton:
id=GetButtonID();
IF (id==255) ExitProcess();
IF (id==254) {ReDraw_Blocks(1); break;} //New game
IF (id<65) IF (check_for_end()<>1)
{ //if Button
destroy_button(id);
IF (XX!=9)
{
shift_bars(XX,YY);
IF (YY == 7) {move_it();move_it();}
XX=9;
YY=0;
ReDraw_Blocks(0);
}
break;
}
case evReDraw:
WindowRedrawStatus(1);
skin_width = GetSkinWidth();
DefineAndDrawWindow(400,276,177,201+skin_width,0x44,0x10B2B4BF,0,0,"Just Clicks v0.75");
//DefineButton(155,2-skin_width,18,18,255+BT_HIDE+BT_NOFRAME,0x0866CC00);
DrawBar(5,168,168,29,0xE4DFE1);
//DrawFlatButton(9,172,84,19,254,0xE4DFE1,"New game (F2)");
DrawFlatButton(9,172,80,19,254,0xE4DFE1,"‡ ­®¢® (F2)");
ReDraw_Blocks(0);
WindowRedrawStatus(2);
}
}
}
stop: