@@ -1,76 +1,72 @@
//Leency 06.10.2011, Flood-it! v2.41, GPL
// SPDX-License-Identifier: GPL-2.0-only
// Flood-it! - Strategy game: Flood the board with one color, within a step limit.
// Copyright (C) 2011-2025 Leency <lipatov.kiril@gmail.com>
# include "lib\kolibri.h"
# include "lib\kolibri.h"
# include "lib\random.h"
# include "lib\random.h"
# ifndef AUTOBUILD
# include "lang.h--"
# endif
system_colors sc ;
system_colors sc ;
proc_info Form ;
proc_info Form ;
dword stak [ 100 ] ; //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
dword help_window_ stak[ 100 ] ;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
# define DEFAULT_BLOCK_COUNT 14
int DIFFICULTY_LEV_PARAMS [ ] = { 28 , 14 , 25 , //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD>
# define DEFAULT_MAX_CLICKS 25
17 , 28 , 50 } ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
# define MAX_BLOCK_SIZE 28
char board_size = - 1 ;
int BLOCK_SIZE ; //cell size
int BLOCKS_NUM ; //number of cells by X and Y
int MAX_CLICKS ; //max clicks for win
int CLICKS ; //how many clicks user already did
int game_end ;
//<2F> <> -<2D> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> "<22> <> <EFBFBD> <EFBFBD> <EFBFBD> "
# define USER_PANEL_WIDTH 144
int BLOCK_SIZE = 28 ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
int BLOCKS_NUM = 14 ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <20> <20> <> Y
int MAX_CLICKS = 25 ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
int CLICKS = 0 ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
//six colors are used in a game for a cells
//and seventh color is used to mark a cell during filling process
# define USER_PANEL_WIDTH 119
dword FIELD_COLORS [ ] = { 0xf18db6 , 0x605ca8 , 0xfddc80 , 0xdc4a20 , 0x46b1e2 , 0x7e9d1e , 0x232323 } ;
char BOARD_SIZES [ ] = " S \0 L " ;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ) <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ,
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
dword FIELD_COLORS [ ] = { 0xf18db6 , 0x605ca8 , 0xfddc80 , 0xdc4a20 , 0x46b1e2 , 0x7e9d1e , 0x232323 , 0 } ;
char * BOARD_SIZES [ ] = { " S " , " L " , 0 } ;
# ifdef LANG_RUS
# ifdef LANG_RUS
char * BUTTON_CAPTIONS [ ] = { " <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> [F2] " , " <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> [F1] " , " <20> <> 室 [Esc] " , 0 } ;
char * BUTTON_CAPTIONS [ ] = { " <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> [F2] " , " <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> [F1] " , " <20> <> 室 [Esc] " , 0 } ;
char CLICKS_TEXT [ ] = " <20> <> <EFBFBD> <EFBFBD> <EFBFBD> : / " ;
char CLICKS_TEXT [ ] = " <20> <> <EFBFBD> <EFBFBD> <EFBFBD> : / " ;
char LEVELS_TEXT [ ] = " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> :" ;
char LEVELS_TEXT [ ] = " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> :" ;
char HELP_WINDOW_CAPTION [ ] = " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ;
char HELP_WINDOW_CAPTION [ ] = " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ;
char * HELP_TEXT [ ] = { " <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> Flood-it?" ,
char * HELP_TEXT [ ] = { " <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> Flood-it?" ,
" " ,
" " ,
" <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 梥⮬ <20> <> <20> <> ࠭<EFBFBD> 祭<EFBFBD> <E7A5AD> <EFBFBD> <EFBFBD> <EFBFBD> 室<> <E5AEA4> ." ,
" <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 梥⮬ <20> <> <20> <> ࠭<EFBFBD> 祭<EFBFBD> <E7A5AD> <EFBFBD> <20> 室<> <E5AEA4> ." ,
" <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 稭<EFBFBD> <E7A8AD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> 孥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ⪨. <20> 롥<EFBFBD> <EBA1A5> <EFBFBD> <EFBFBD> 梥<> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> " ,
" <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 稭<EFBFBD> <E7A8AD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> 孥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ⪨. <20> 롥<EFBFBD> <EBA1A5> 梥<> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> " ,
" <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⨪<EFBFBD> <EFBFBD> <> <E1ABA5> , <20> <20> <> <EFBFBD> ⪨ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ⨬ 梥⮬ - ⠪ <20> <> <20> <> <EFBFBD> ᮥ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ,
" <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⨪<EFBFBD> <EFBFBD> <> <E1ABA5> , <20> <20> <> <EFBFBD> ⪨ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ⨬ 梥⮬ - ⠪ <20> <> <20> <> ᮥ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ,
" <EFBFBD> <EFBFBD> ᥤ<EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ⪨ ⮩ <20> <> <20> <> <EFBFBD> <EFBFBD> ᪨. <20> <> 墠<EFBFBD> <E5A2A0> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> 㦭<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 쭮<EFBFBD> " ,
" <EFBFBD> ᥤ<EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ⪨ ⮩ <20> <> <20> <> <EFBFBD> ᪨. <20> <> 墠<EFBFBD> <E5A2A0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> 㦭<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 쭮<EFBFBD> " ,
" <EFBFBD> <EFBFBD> 室<> <E5AEA4> . <20> <> 蠣<EFBFBD> <E8A0A3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ⥣<EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ਭ樯<E0A8AD> <E6A8AF> - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ," ,
" <EFBFBD> 室<> <E5AEA4> . <20> <> 蠣<EFBFBD> <E8A0A3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ⥣<EFBFBD> <E2A5A3> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ਭ樯<E0A8AD> <E6A8AF> - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ," ,
" <EFBFBD> ⮡<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> !" ,
" <EFBFBD> ⮡<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> !" ,
" " ,
" " ,
" <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⠪<> <E2A0AA> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 蠬<EFBFBD> :" ,
" <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⠪<> <E2A0AA> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 蠬<EFBFBD> :" ,
" [Q] [W] [E] " ,
" [Q] [W] [E] " ,
" [A] [S] [D] " ,
" [A] [S] [D] " ,
0 } ;
0 } ;
# elif LANG_EST
# elif LANG_EST
char * BUTTON_CAPTIONS [ ] = { " Uus m<> ng [F2] " , " Abi [F1] " , " V<EFBFBD> lju [Esc] " , 0 } ;
char * BUTTON_CAPTIONS [ ] = { " Uus m<> ng [F2] " , " Abi [F1] " , " V<EFBFBD> lju [Esc] " , 0 } ;
char CLICKS_TEXT [ ] = " Klikki: / " ;
char CLICKS_TEXT [ ] = " Klikki: / " ;
char LEVELS_TEXT [ ] = " V<EFBFBD> li: " ;
char LEVELS_TEXT [ ] = " V<EFBFBD> li: " ;
char HELP_WINDOW_CAPTION [ ] = " Help " ;
char HELP_WINDOW_CAPTION [ ] = " Help " ;
char * HELP_TEXT [ ] = { " Kuidas m<> ngida m<> ngu Flood-it? " ,
char * HELP_TEXT [ ] = { " Kuidas m<> ngida m<> ngu Flood-it? " ,
" " ,
" " ,
" Ujuta kogu m<> nguv<75> li <20> le <20> he v<> rviga lubatud k<> ikude arvuga. " ,
" Ujuta kogu m<> nguv<75> li <20> le <20> he v<> rviga lubatud k<> ikude arvuga. " ,
" M<EFBFBD> ngu alustad <20> lemisest vasakust nurgast ja edened valides <20> he v<> rvi " ,
" M<EFBFBD> ngu alustad <20> lemisest vasakust nurgast ja edened valides <20> he v<> rvi " ,
" vajutades nuppudele vasakul. Kui sa muudad v<> rvi pragusel alal, " ,
" vajutades nuppudele vasakul. Kui sa muudad v<> rvi pragusel alal, " ,
" siis iga kokkupuutuv sama v<> rv muutub samaks. Nii saad ujutada " ,
" siis iga kokkupuutuv sama v<> rv muutub samaks. Nii saad ujutada " ,
" teised alad m<> nguv<75> ljal <20> le. Valida saad 2 m<> nguv<75> lja suuruse " ,
" teised alad m<> nguv<75> ljal <20> le. Valida saad 2 m<> nguv<75> lja suuruse " ,
" vahel. Proovi v<> li <20> le ujutada etteandtud k<> ikude arvuga! " ,
" vahel. Proovi v<> li <20> le ujutada etteandtud k<> ikude arvuga! " ,
" Kaasahaarav ja l<> bus! " ,
" " ,
" " ,
" M<EFBFBD> ngida saab ka klaviatuuriga: " ,
" M<EFBFBD> ngida saab ka klaviatuuriga: " ,
" [Q] [W] [E] " ,
" [Q] [W] [E] " ,
" [A] [S] [D] " ,
" [A] [S] [D] " ,
0 } ;
0 } ;
# else
# else
char * BUTTON_CAPTIONS [ ] = { " New Game [F2]" , " Help [F1] " , " Exit [Esc] " , 0 } ;
char * BUTTON_CAPTIONS [ ] = { " Restart [F2]" , " Help [F1]" , " Exit [Esc]" , 0 } ;
char CLICKS_TEXT [ ] = " Clicks: / " ;
char CLICKS_TEXT [ ] = " Clicks: / " ;
char LEVELS_TEXT [ ] = " Board: " ;
char LEVELS_TEXT [ ] = " Board: " ;
@@ -83,7 +79,6 @@ char *BOARD_SIZES[]={ "S", "L", 0 };
" color, every adjacent square with the same color also changes, that " ,
" color, every adjacent square with the same color also changes, that " ,
" way you can flood other areas of the board. Select from 3 sizes of " ,
" way you can flood other areas of the board. Select from 3 sizes of " ,
" the board and try to flood-it in the least amount of steps! " ,
" the board and try to flood-it in the least amount of steps! " ,
" Addictive and Fun! " ,
" " ,
" " ,
" You can also play with keyboard: " ,
" You can also play with keyboard: " ,
" [Q] [W] [E] " ,
" [Q] [W] [E] " ,
@@ -92,7 +87,7 @@ char *BOARD_SIZES[]={ "S", "L", 0 };
# endif
# endif
unsigned char color_matrix [ 28 * 28 ] ; //<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
unsigned char color_matrix [ 28 * 28 ] ; //our field
unsigned char loss_matrix [ 14 * 14 ] = {
unsigned char loss_matrix [ 14 * 14 ] = {
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
@@ -132,36 +127,21 @@ void main()
{
{
int key , id ;
int key , id ;
set_board_size ( 0 ) ; //small board by default
new_game ( ) ;
new_game ( ) ;
loop ( )
loop ( ) switch ( WaitEvent ( ) )
{
switch ( WaitEvent ( ) )
{
{
case evButton :
case evButton :
id = GetButtonID ( ) ;
id = GetButtonID ( ) ;
IF ( id = = 1 ) | | ( id = = 4 ) ExitProcess ( ) ;
IF ( id = = 1 ) | | ( id = = 4 ) ExitProcess ( ) ;
IF ( id = = 2 ) goto _NEW_GAME_MARK ;
IF ( id = = 2 ) goto _NEW_GAME_MARK ;
IF ( id = = 3 ) goto _HELP_MARK ;
IF ( id = = 3 ) goto _HELP_MARK ;
IF ( id > = 100 )
IF ( id > = 100 ) {
{
make_turn ( id - 100 ) ;
make_turn ( id - 100 ) ;
break ;
}
if ( id > = 10 )
{
id = id - 10 * 3 ;
IF ( BLOCK_SIZE = = DIFFICULTY_LEV_PARAMS [ id ] ) break ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
BLOCK_SIZE = DIFFICULTY_LEV_PARAMS [ id ] ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
BLOCKS_NUM = DIFFICULTY_LEV_PARAMS [ id + 1 ] ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <20> <20> <> Y
MAX_CLICKS = DIFFICULTY_LEV_PARAMS [ id + 2 ] ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
new_game ( ) ;
MoveSize ( - 1 , - 1 , BLOCK_SIZE * BLOCKS_NUM + 14 + USER_PANEL_WIDTH , BLOCK_SIZE * BLOCKS_NUM + GetSkinHeight ( ) + 14 ) ;
}
}
if ( id = = 10 ) set_board_size ( 0 ) ;
if ( id = = 11 ) set_board_size ( 1 ) ;
break ;
break ;
case evKey :
case evKey :
key = GetKeyScancode ( ) ;
key = GetKeyScancode ( ) ;
@@ -170,7 +150,8 @@ void main()
IF ( key = = 59 ) //F1
IF ( key = = 59 ) //F1
{
{
_HELP_MARK :
_HELP_MARK :
CreateThread ( # help , # stak ) ;
CreateThread ( # help_thread , # help_window_ stak) ;
break ;
}
}
IF ( key = = 60 ) //F2
IF ( key = = 60 ) //F2
{
{
@@ -178,6 +159,7 @@ void main()
new_game ( ) ;
new_game ( ) ;
draw_clicks_num ( ) ;
draw_clicks_num ( ) ;
draw_field ( ) ;
draw_field ( ) ;
break ;
}
}
IF ( key = = 16 ) make_turn ( 0 ) ; //Q
IF ( key = = 16 ) make_turn ( 0 ) ; //Q
IF ( key = = 17 ) make_turn ( 1 ) ; //W
IF ( key = = 17 ) make_turn ( 1 ) ; //W
@@ -190,94 +172,115 @@ void main()
draw_window ( ) ;
draw_window ( ) ;
}
}
}
}
void set_board_size ( char s )
{
if ( board_size ! = s ) {
board_size = s ;
BLOCKS_NUM = board_size + 1 * DEFAULT_BLOCK_COUNT ;
MAX_CLICKS = board_size + 1 * DEFAULT_MAX_CLICKS ;
BLOCK_SIZE = GetScreenHeight ( ) - 70 / BLOCKS_NUM ;
if ( BLOCK_SIZE > MAX_BLOCK_SIZE ) BLOCK_SIZE = MAX_BLOCK_SIZE ;
new_game ( ) ;
MoveSize ( - 1 , - 1 , BLOCK_SIZE * BLOCKS_NUM + 14 + USER_PANEL_WIDTH ,
BLOCK_SIZE * BLOCKS_NUM + GetSkinHeight ( ) + 14 ) ;
}
}
}
void make_turn ( int turn_id )
void make_turn ( int turn_id )
{
{
IF ( color_matrix [ 0 ] = = turn_id ) return ; //<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD>
IF ( color_matrix [ 0 ] = = turn_id ) return ; //ignore no-sence click: first item color is equal to a new color
IF ( CLICKS > = MAX_CLICKS ) return ; //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
IF ( ! game_is_ended ( ) ) {
CLICKS + + ;
CLICKS + + ;
draw_clicks_num ( ) ;
draw_clicks_num ( ) ;
fill_field ( turn_id ) ;
fill_field ( turn_id ) ;
draw_field ( ) ;
if ( ! game_is_ended ( ) ) draw_field ( ) ;
check_for_end ( ) ; //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
}
}
}
void draw_window ( )
void draw_window ( )
{
{
int i , j ;
int i ;
# define BUTTON_SIZE 28
# define BUTTON_SIZE 28
sc . get ( ) ;
sc . get ( ) ;
DefineAndDrawWindow ( 300 , 176 , BLOCK_SIZE * BLOCKS_NUM + 14 + USER_PANEL_WIDTH , BLOCK_SIZE * BLOCKS_NUM + GetSkinHeight ( ) + 14 , 0x74 , sc . work , 0 , 0 , " Flood-it! " ) ;
DefineAndDrawWindow ( 300 , 176 , BLOCK_SIZE * BLOCKS_NUM + 14 + USER_PANEL_WIDTH ,
BLOCK_SIZE * BLOCKS_NUM + GetSkinHeight ( ) + 14 , 0x74 , 0 , " Flood-it! " ) ;
//<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// Fix rolled-up bug
GetProcessInfo ( # Form , SelfInfo ) ;
GetProcessInfo ( # Form , SelfInfo ) ;
IF ( Form . status_window = = 4 ) return ;
IF ( Form . status_window = = 4 ) return ;
//<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> -> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// Fill background to reduce window redraw
for ( i = 0 ; i < = 4 ; i + + )
for ( i = 0 ; i < = 4 ; i + + )
{
{
IF ( i < > 4 )
ESI = sc . work ;
DrawRegion ( USER_PANEL_WIDTH + i - 5 , i , BLOCK_SIZE * BLOCKS_NUM + 9 - i - i , BLOCK_SIZE * BLOCKS_NUM + 9 - i - i , sc . work) ;
IF ( i = = 4 ) ESI = sc . work_graph ;
else
DrawRegion ( USER_PANEL_WIDTH + i - 5 , i , BLOCK_SIZE * BLOCKS_NUM + 9 - i - i , ESI ) ;
DrawRegion ( USER_PANEL_WIDTH + i - 5 , i , BLOCK_SIZE * BLOCKS_NUM + 9 - i - i , BLOCK_SIZE * BLOCKS_NUM + 9 - i - i , sc . work_graph ) ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
}
}
DrawBar ( 0 , 0 , USER_PANEL_WIDTH - 5 , BLOCK_SIZE * BLOCKS_NUM + 10 , sc . work ) ;
DrawBar ( 0 , 0 , USER_PANEL_WIDTH - 5 , BLOCK_SIZE * BLOCKS_NUM + 10 , sc . work ) ;
//<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// Main buttons to fill the board
for ( i = 0 ; i < 2 ; i + + )
# define FILL_BUTTON_SIZE BUTTON_SIZE+8
for ( j = 0 ; j < 3 ; j + + )
for ( i = 0 ; i < 6 ; i + + )
DefineButton ( j * BUTTON_SIZE+ 17 , i * BUTTON_SIZE+ 15 , BUTTON_SIZE , BUTTON_SIZE , i * 3 + j +100 , FIELD_COLORS [ i * 3 + j ] ) ;
DefineButton ( i % 3 * FILL_ BUTTON_SIZE+ 17 , i / 3 * FILL_ BUTTON_SIZE+ 15 , FILL_ BUTTON_SIZE, FILL_ BUTTON_SIZE, i + 100 , FIELD_COLORS [ i ] ) ;
//<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// Menu buttons
for ( j = 0 ; j < 3 ; j + + )
for ( i = 0 ; i < 3 ; i + + )
{
{
DefineButton ( 17 , j * 25 + 12 0 , 13 * 6 + 6 , 20 , j + 2 , sc . work_button ) ;
DefineButton ( 17 , i * 31 + 14 0 , 13 * 8 + 6 , 25 , i + 2 , sc . work_button ) ;
WriteText ( 17 + 4 , j * 25 + 127 , 0x8 0 , sc . work_button_text , BUTTON_CAPTIONS [ j ] , 0 ) ;
WriteText ( 17 + 4 , i * 31 + 146 , 0x9 0 , sc . work_button_text , BUTTON_CAPTIONS [ i ] , 0 ) ;
}
}
//<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// Board size
WriteText ( 17 , BLOCKS_NUM * BLOCK_SIZE - 20 + 7 , 0x8 0 , sc . work_text , # LEVELS_TEXT , 0 ) ;
WriteText ( 17 , BLOCKS_NUM * BLOCK_SIZE - 25 + 7 , 0x9 0 , sc . work_text , # LEVELS_TEXT , 0 ) ;
for ( j = 0 ; j < 2 ; j + + )
for ( i = 0 ; i < 2 ; i + + )
{
{
DefineButton ( j * 25 + 56 , BLOCKS_NUM * BLOCK_SIZE - 20 , 20 , 20 , j + 10 , sc . work_button ) ;
IF ( board_size = = i ) {
ESI = sc . work_button ;
EDI = sc . work_button_text ;
} ELSE {
ESI = sc . work ;
EDI = sc . work_text ;
}
IF ( BLOCK_SIZE = = DIFFICULTY_LEV_PARAMS [ j * 3 ] ) ED I = 0x800080 ;
DefineButton ( i * 32 + 69 , BLOCKS_NUM * BLOCK_SIZE - 24 , 26 , 25 , i + 10 , ES I ) ;
else EDI = sc . work_button_text ;
WriteText ( i * 32 + 69 + 9 , BLOCKS_NUM * BLOCK_SIZE - 24 + 6 , 0x90 , EDI , # BOARD_SIZES + i + i , 0 ) ;
$ add ebx , 1 < < 16 //bold
WriteText ( j * 25 + 56 + 8 , BLOCKS_NUM * BLOCK_SIZE - 20 + 7 , 0x80 , EDI , BOARD_SIZES [ j ] , 0 ) ;
$ int 0x40
WriteText ( j * 25 + 56 + 9 , BLOCKS_NUM * BLOCK_SIZE - 20 + 7 , 0x80 , EDI , BOARD_SIZES [ j ] , 0 ) ;
}
}
draw_clicks_num ( ) ;
draw_clicks_num ( ) ;
draw_field ( ) ;
draw_field ( ) ;
}
}
void randomly_fill_the_board ( )
{
int i ;
for ( i = 0 ; i < BLOCKS_NUM * BLOCKS_NUM ; i + + ) {
color_matrix [ i ] = random ( 6 ) ;
}
}
void new_game ( )
void new_game ( )
{
{
int i ;
CLICKS = 0 ;
CLICKS = 0 ;
game_end = false ;
for ( i = 0 ; i < BLOCKS_NUM * BLOCKS_NUM ; i + + )
randomly_fill_the_board ( ) ;
color_matrix [ i ] = random ( 6 ) ;
}
}
void fill_field ( int new_color_id )
void fill_field ( int new_color_id )
{
{
int i , j ,
int i , j ,
old_color_id = color_matrix [ 0 ] ,
old_color_id = color_matrix [ 0 ] ,
restart ;
restart ;
int cur_cell ;
# define MARKED 6
# define MARKED 6
color_matrix [ 0 ] = MARKED ;
color_matrix [ 0 ] = MARKED ;
@@ -289,15 +292,16 @@ void fill_field(int new_color_id)
for ( i = 0 ; i < BLOCKS_NUM ; i + + )
for ( i = 0 ; i < BLOCKS_NUM ; i + + )
for ( j = 0 ; j < BLOCKS_NUM ; j + + )
for ( j = 0 ; j < BLOCKS_NUM ; j + + )
{
{
IF ( color_matrix [ i * BLOCKS_NUM + j ] < > old_color_id ) continue ; //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
cur_cell = i * BLOCKS_NUM + j ;
IF ( color_matrix [ i * BLOCKS_NUM + j ] = = MARKED ) continue ; //<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
IF ( color_matrix [ cur_cell ] < > old_color_id ) continue ; //if not a needed color then continue
IF ( color_matrix [ cur_cell ] = = MARKED ) continue ; //if already marked then continue
IF ( j > 0 ) & & ( color_matrix [ i * BLOCKS_NUM + j - 1 ] = = MARKED ) color_matrix [ i * BLOCKS_NUM + j ] = MARKED ; //<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
IF ( j > 0 ) & & ( color_matrix [ i * BLOCKS_NUM + j - 1 ] = = MARKED ) color_matrix [ cur_cell ] = MARKED ; //left
IF ( i > 0 ) & & ( color_matrix [ i - 1 * BLOCKS_NUM + j ] = = MARKED ) color_matrix [ i * BLOCKS_NUM + j ] = MARKED ; //<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
IF ( i > 0 ) & & ( color_matrix [ i - 1 * BLOCKS_NUM + j ] = = MARKED ) color_matrix [ cur_cell ] = MARKED ; //top
IF ( j < BLOCKS_NUM - 1 ) & & ( color_matrix [ i * BLOCKS_NUM + j + 1 ] = = MARKED ) color_matrix [ i * BLOCKS_NUM + j ] = MARKED ; //<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
IF ( j < BLOCKS_NUM - 1 ) & & ( color_matrix [ i * BLOCKS_NUM + j + 1 ] = = MARKED ) color_matrix [ cur_cell ] = MARKED ; //right
IF ( i < BLOCKS_NUM - 1 ) & & ( color_matrix [ i + 1 * BLOCKS_NUM + j ] = = MARKED ) color_matrix [ i * BLOCKS_NUM + j ] = MARKED ; //<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
IF ( i < BLOCKS_NUM - 1 ) & & ( color_matrix [ i + 1 * BLOCKS_NUM + j ] = = MARKED ) color_matrix [ cur_cell ] = MARKED ; //bottom
IF ( color_matrix [ i * BLOCKS_NUM + j ] = = MARKED ) restart = 1 ; //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> - <20> <> <EFBFBD> <20> <> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
IF ( color_matrix [ cur_cell ] = = MARKED ) restart = 1 ;
}
}
IF ( restart ) goto _RESTART_MARK ;
IF ( restart ) goto _RESTART_MARK ;
@@ -305,101 +309,83 @@ void fill_field(int new_color_id)
IF ( color_matrix [ i ] = = MARKED ) color_matrix [ i ] = new_color_id ;
IF ( color_matrix [ i ] = = MARKED ) color_matrix [ i ] = new_color_id ;
}
}
void draw_win_or_loose_animation ( dword matrix )
int check_for_end ( )
{
{
int i , j , ii , jj ;
int i , j , ii , jj ;
for ( i = 0 ; i < 14 ; i + + ) {
if ( CLICKS > = MAX_CLICKS ) //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
{
IF ( CLICKS = = MAX_CLICKS ) //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
{
for ( i = 0 ; i < BLOCKS_NUM * BLOCKS_NUM ; i + + ) //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
IF ( color_matrix [ i ] < > color_matrix [ 0 ] ) goto _loss_MARK ;
goto _WIN_MARK ;
}
_loss_MARK :
for ( i = 0 ; i < 14 ; i + + )
for ( j = 0 ; j < 14 ; j + + )
for ( j = 0 ; j < 14 ; j + + )
{
{
IF ( BLOCK_SIZE = = DIFFICULTY_LEV_PARAMS [ 0 ] )
ii = board_size * 2 + i ;
{
jj = board_size * 2 + j ;
ii = i ;
color_matrix [ ii * BLOCKS_NUM + jj ] =
jj = j ;
color_matrix [ ii + 1 * BLOCKS_NUM + jj ] =
}
color_matrix [ ii * BLOCKS_NUM + jj + 1 ] =
else
color_matrix [ ii + 1 * BLOCKS_NUM + jj + 1 ] = ESBYTE [ i * 14 + j + matrix ] ;
{
ii = i * 2 ;
jj = j * 2 ;
}
color_matrix [ ii * BLOCKS_NUM + jj ] = loss_matrix [ i * 14 + j ] ;
color_matrix [ ii + 1 * BLOCKS_NUM + jj ] = loss_matrix [ i * 14 + j ] ;
color_matrix [ ii * BLOCKS_NUM + jj + 1 ] = loss_matrix [ i * 14 + j ] ;
color_matrix [ ii + 1 * BLOCKS_NUM + jj + 1 ] = loss_matrix [ i * 14 + j ] ;
draw_field ( ) ;
draw_field ( ) ;
//Pause(5);
}
}
}
}
int field_is_solid ( )
{
int i ;
if ( game_end ) return 1 ;
game_end = 1 ;
for ( i = 0 ; i < BLOCKS_NUM * BLOCKS_NUM ; i + + ) {
IF ( color_matrix [ i ] < > color_matrix [ 0 ] ) game_end = 0 ;
}
return game_end ;
}
int game_is_ended ( )
{
int i ;
if ( game_end ) return 1 ;
if ( CLICKS > = MAX_CLICKS ) //check for game end via max_clicks
{
IF ( CLICKS = = MAX_CLICKS ) //probably user won on the last step
{
if ( field_is_solid ( ) ) goto _WIN_MARK ;
}
draw_win_or_loose_animation ( # loss_matrix ) ;
return 1 ;
return 1 ;
}
} else {
if ( ! field_is_solid ( ) ) return 0 ;
for ( i = 0 ; i < BLOCKS_NUM * BLOCKS_NUM ; i + + ) //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
//field is solid and CLICKS<MAX_CLICKS -> win
IF ( color_matrix [ i ] < > color_matrix [ 0 ] ) return 0 ;
//<2F> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> MAX_CLICKS -> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
_WIN_MARK :
_WIN_MARK :
for ( i = 0 ; i < 25 ; i + + )
for ( i = 0 ; i < 25 ; i + + )
{
{
new_game ( ) ;
randomly_fill_the_board ( ) ;
draw_field ( ) ;
draw_field ( ) ;
Pause ( 7 ) ;
Pause ( 7 ) ;
}
}
CLICKS = MAX_CLICKS ;
draw_win_or_loose_animation ( # win_matrix ) ;
for ( i = 0 ; i < 14 ; i + + )
for ( j = 0 ; j < 14 ; j + + )
{
IF ( BLOCK_SIZE = = DIFFICULTY_LEV_PARAMS [ 0 ] ) //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
{
ii = i ;
jj = j ;
}
else
{
ii = i * 2 ;
jj = j * 2 ;
}
color_matrix [ ii * BLOCKS_NUM + jj ] = win_matrix [ i * 14 + j ] ;
color_matrix [ ii + 1 * BLOCKS_NUM + jj ] = win_matrix [ i * 14 + j ] ;
color_matrix [ ii * BLOCKS_NUM + jj + 1 ] = win_matrix [ i * 14 + j ] ;
color_matrix [ ii + 1 * BLOCKS_NUM + jj + 1 ] = win_matrix [ i * 14 + j ] ;
draw_field ( ) ;
//Pause(5);
}
return 1 ;
return 1 ;
}
}
}
void draw_clicks_num ( )
void draw_clicks_num ( )
{
{
# define TEXT_X 2 1
# define TEXT_X 19
# define TEXT_Y 92
# define TEXT_Y 100
DrawBar ( TEXT_X , TEXT_Y , USER_PANEL_WIDTH - TEXT_X - 3 , 9 , sc . work ) ;
DrawBar ( TEXT_X , TEXT_Y , USER_PANEL_WIDTH - TEXT_X - 5 , 16 , sc . work ) ;
WriteText ( TEXT_X , TEXT_Y , 0x8 0 , sc . work_text , # CLICKS_TEXT , 0 ) ;
WriteText ( TEXT_X , TEXT_Y , 0x9 0 , sc . work_text , # CLICKS_TEXT , 0 ) ;
IF ( CLICKS < 10 ) EBX = 9 * 6 + TEXT_X ;
IF ( CLICKS < 10 ) EBX = 9 * 8 + TEXT_X ;
else EBX = 8 * 6 + TEXT_X ;
else EBX = 8 * 8 + TEXT_X ;
WriteText ( EBX , TEXT_Y , 0x8 0 , sc . work_text , IntToStr ( CLICKS ) , 0 ) ;
WriteText ( EBX , TEXT_Y , 0x9 0 , sc . work_text , itoa_nosign ( CLICKS ) , 0 ) ;
WriteText ( 11 * 6 + TEXT_X , TEXT_Y , 0x8 0 , sc . work_text , IntToStr ( MAX_CLICKS ) , 0 ) ;
WriteText ( 11 * 8 + TEXT_X , TEXT_Y , 0x9 0 , sc . work_text , itoa_nosign ( MAX_CLICKS ) , 0 ) ;
}
}
@@ -417,7 +403,7 @@ void draw_field()
}
}
void help ( )
void help_thread ( )
{
{
int i ;
int i ;
@@ -429,10 +415,10 @@ void help()
IF ( GetKeyScancode ( ) = = 001 ) ExitProcess ( ) ; //Esc
IF ( GetKeyScancode ( ) = = 001 ) ExitProcess ( ) ; //Esc
break ;
break ;
case evReDraw :
case evReDraw :
for ( i = 0 ; HELP_TEXT [ i ] < > 0 ; i + + ; ) { } ;
//for (i=0; HELP_TEXT[i]<>0; i++;) {}; //calculate line numbers, predefined i=12 used to reduce size
DefineAndDrawWindow ( 400 , 200 , 610 , i * 19 + 25 + GetSkinHeight ( ) , 0x34 , sc . work , 0 , 0 , # HELP_WINDOW_CAPTION ) ;
DefineAndDrawWindow ( 400 , 200 , 612 , 12 * 19 + 25 + GetSkinHeight ( ) , 0x34 , sc . work , # HELP_WINDOW_CAPTION ) ;
WriteText ( 6 , 12 , 0x90 , sc . work_text , HELP_TEXT [ 0 ] , 0 ) ; //<EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
WriteText ( 6 , 12 , 0x90 , sc . work_text , HELP_TEXT [ 0 ] , 0 ) ; //for a bold text
for ( i = 0 ; HELP_TEXT [ i ] < > 0 ; i + + ; ) WriteText ( 5 , i * 19 + 12 , 0x90 , sc . work_text , HELP_TEXT [ i ] , 0 ) ;
for ( i = 0 ; HELP_TEXT [ i ] < > 0 ; i + + ; ) WriteText ( 7 , i * 19 + 12 , 0x90 , sc . work_text , HELP_TEXT [ i ] , 0 ) ;
}
}
}
}