kolibrios/programs/games/FindNumbers/trunk/FindNumbers.c--

182 lines
3.8 KiB
Plaintext
Raw Permalink Normal View History

//(C) Artemonische, 2010
#pragma option meos
#include "kolibri.h--" //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> KolibriOS API
#ifndef AUTOBUILD
#include "lang.h--"
#endif
#ifdef LANG_RUS
?define TOP_TEXT_COL 4
?define TOP_TEXT "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><20><> 10 <20><> 90 <20><> <20><><EFBFBD><EFBFBD>..."
?define BOT_LEFT_TEXT_COL 4
?define BOT_LEFT_TEXT "<22><20><>᫮: "
?define BOT_RIGHT_TEXT_COL 162
?define BOT_RIGHT_TEXT "<22><><EFBFBD><E2A0AB><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>: "
?define BOT_LEFT_NUMBER_COL 70
?define BOT_RIGHT_NUMBER_COL 252
?define F2_TEXT "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (F2)"
?define WIN_TEXT "<22><> <20><><20><><EFBFBD> <20><>᫠! :)"
#else
?define TOP_TEXT_COL 2
?define TOP_TEXT "Collect all numbers from 10 to 90 in order..."
?define BOT_LEFT_TEXT_COL 2
?define BOT_LEFT_TEXT "Looking for number: "
?define BOT_RIGHT_TEXT_COL 156
?define BOT_RIGHT_TEXT "Remains to find: "
?define BOT_LEFT_NUMBER_COL 116
?define BOT_RIGHT_NUMBER_COL 252
?define F2_TEXT " Anew (F2) "
?define WIN_TEXT "You have found all numbers! :)"
#endif
int find;
struct {
int x;
int y;
int button_id;
int mark;
int text;
}box[81];
#define BUTTON_NEW_GAME 582
void main()
{
int button,tempi,tempj;
randomize();
new_game();
loop() switch(@WaitEvent())
{
case evButton:
button=@GetButtonID();
IF (button==1)
{
ExitProcess();
}
IF (button==BUTTON_NEW_GAME)
{
new_game();
}
if (button>500) && (button<BUTTON_NEW_GAME) && (box[button-500].text == find)
{
box[button-500].mark=2;
find++;
IF (find==91)
{
draw_window();
}
else
{
DeleteButton(button);
tempi=box[button-500].y*30-30;
tempj=30*box[button-500].x-16;
DrawBar(tempi,tempj,30,30,0xDCFFDC);
DrawBar(70,289,16,8,0xDCFFDC);
DrawBar(252,289,16,8,0xDCFFDC);
WriteNumber(70,289,0x80,0,find);
WriteNumber(252,289,0x80,0,90-find+1);
}
}
BREAK;
case evKey: //<2F><20><EFBFBD><E0AEA8><20><><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
IF (@GetKey()==051) new_game(); //F2
BREAK;
case evReDraw:
draw_window();
draw_buttons();
}
}
void draw_window()
{
DefineAndDrawWindow(300,176,280,343,0x34,0xDCFFDC,"FindNumbers");
DrawBar(0,13,271,1,0x0CFF0C); //<2F><><EFBFBD><EFBFBD><EFBFBD><><E1A2A5><EFBFBD>
DrawBar(0,285,271,1,0x0CFF0C);
DrawBar(0,299,271,1,0x0CFF0C); //<2F><><EFBFBD><EFBFBD><EFBFBD><><E1ADA8>
if (find<=90)
{
WriteText(TOP_TEXT_COL,4,0x80,0x000000,TOP_TEXT);
WriteText(BOT_LEFT_TEXT_COL,289,0x80,0x000000,BOT_LEFT_TEXT);
WriteText(BOT_RIGHT_TEXT_COL,289,0x80,0x000000,BOT_RIGHT_TEXT);
WriteNumber(BOT_LEFT_NUMBER_COL,289,0x80,0,find);
WriteNumber(BOT_RIGHT_NUMBER_COL,289,0x80,0,90-find+1);
DrawNewGameButton(155,300,115,14,0xAFFFAF);
WriteText(2,304,0x80,0x000000,"Made by Artemonische,2010");
}
IF (find==91)
{
WriteText(70,100,0x80,0x000000,WIN_TEXT);
DrawNewGameButton(100,110,70,20,0xE4DFE1);
}
}
void DrawNewGameButton(dword x,y,width,height,color)
{
DefineButton(x,y,width,height,BUTTON_NEW_GAME,color);
WriteText(-11*6+width/2+x+1,height/2-3+y,0x80,0,F2_TEXT,0);
}
void new_game()
{
find=10;
initialization();
draw_window();
draw_buttons();
}
void draw_buttons()
{
int i,tempi,tempj;
FOR (i=1;i<=81;i++)
{
IF (box[i].mark==1)
{
tempi=box[i].y*30-30;
tempj=30*box[i].x-16;
DefineButton(tempi,tempj,29,29,box[i].button_id,0xAFFFAF);
WriteNumber(tempi+11,tempj+11,0x80,0,box[i].text);
}
}
}
void initialization()
{
int i,j,t;
t=0;
FOR (i=1;i<=9;i++)
{
FOR (j=1;j<=9;j++)
{
t++;
box[t].x=j;
box[t].y=i;
box[t].mark=1;
box[t].button_id=500+t;
box[t].text=Generate(t);
}
}
}
int Generate(int xx)
{
int temp,k,p;
p=2;
WHILE (p==2)
{
temp=random(81)+10;
p=1;
FOR (k=1; k<xx; k++)
{
IF (box[k].text==temp)
{
p=2;
BREAK;
}
}
}
return temp;
}
stop: