Это сорсы для обычного телефона игра написана для управление таг ридером телефоном нокия тоесть к прикосновениям к магнитным карточкам на рисунках.
program tag_game;
uses cnv2;
Const
{trueAnswer = 'Правильный ответ !!!'; // no comment
szInaccessibleState = 'переход к состоянию ID в данный момент невозможеH';//Текст, который будет выводиться, если переход к состоянию ID в данный момент невозможен.
SZstateNotYetVisited = 'Тут пока тебе еще нельзя ити'; // еще непосещенное место
szUsedState = 'Уже были тут'; //Текст, который будет выводиться, когда данный тэг и соответствующее ему состояние уже было использовано в игре.
szSearchFor = 'Ищите персонажа '; // +зайчик
szMountainText = 'szMountainText'; // текст на горе
szMountainGo = 'Ответ неверен идем на гору там потусуемся 2 минуты'; // text before go to Mountain
szMountainHelp = 'szMountainHelp'; //
szNotAnswer = 'Не ответ на вопрос !!!!'; // Появляется, когда пользователь указал тег, который не является ответом на вопрос, заданный в данном состоянии.
szMessageNotHelpYet = 'Сава еще спит падайдите плиз папоже'; // если не прошло еще 3 минуты
szReturnFromMount = 'возвращаемся з горы '; // возвращаемся з горы когда подождали 2 минуты
imgMountain = 3; // номер Изображение горы, которое появляется, когда пользователя послали на гору, если он неправильно ответил на какой-то вопрос
imgFilin = 4 ; // картинка филина справка
Mounttag = 11; // тег горы
helpTag = 0; // тег справки
Time2M = 120000 ; // две минуты
time3S = 3000 ; // 3 секунды
time3m = 180000; // 3 minutes
NcharOnline=20; // количество символов в строке
charheigh = 7; // высота символа
charwidth=6;
lineOnScreen=9; // количество строк на экране
}
trueAnswer = 'Hienoa! Oikea vastaus.';
szInaccessibleState = 'En voi auttaa sinua vielд.';
szUsedState = 'Olen jo auttanut sinua.';
szSearchFor = 'Right, but search for a character character_name';
szMountainText = 'Olette nyt vuorella. Teidдn tдytyy odottaa tддllд hiiren hiljaa kaksi minuuttia ennekuin voitte jatkaa peliд.';
szMountainGo = 'Vastaus oli vддrд. Menkдд vuorelle mietiskelemддn.';
szMountainHelp = 'Vuori lцytyy saunasta.';
szNotAnswer = 'Tдmд ei ole vastaus kysymykseen.';
szMessageNotHelpYet = 'Pцllц on pдivдunilla. Tulkaa uudelleen hetken kuluttua.';
szReturnFromMount = ' odottaa vastaustanne. Voitte nyt mennд kokeilemaan uudestaan.';
SZstateNotYetVisited = 'En voi auttaa sinua vielд'; // еще непосещенное место
imgMountain = 4; // номер Изображение горы, которое появляется, когда пользователя послали на гору, если он неправильно ответил на какой-то вопрос
imgFilin = 10 ; // картинка филина справка
Mounttag = 11; // тег горы
helpTag = 1; // тег справки
Time2M = 84000 ; // две минуты
time3S = 3000 ; // 3 секунды
time3m = 180000; // 3 minutes
NcharOnline=20; // количество символов в строке
charheigh = 7; // высота символа
charwidth=6;
lineOnScreen=9; // количество строк на экране
Type
tfont=record
x,y:integer;
im:image;
end;
JStateInfo = record
stateTag : integer; //идентификатор тэга, при передаче которого приложению может быть вызвано соответствующее состояние.
id : integer; //порядковый номер
Name : String; //имя персонажа
typeS : string; // тип состояния стандартно question
IsDone : boolean; // выполнеятся ли уже
BackImg : integer; //Фоновый рисунок
placeName : string; // место, где живет кролик, строка.
FatherTag : string; // сообщение
AlrearyWaitOnMountain:boolean; // уже отсидели на горе две минуты и принимаем следующий тег
timer : integer; // таймер хелпа
questionHint:string; // потсказка к вопросу
moreHint : string ; // сообщение, которе, будет выводиться, когда пользователь придет в состояние MessageHelp
isQuestion: boolean; // является ли это состояние вопросом
question : string; //вопрос
answers : string; // номера тегов ответов на вопрос
cAnswer: integer; //номер тега правильного ответа
npage: integer;//количество страниц
Curpage: integer;//номер текущей страници
hint : string; // текущая надпись в поле
end;
Var
img: array[1..2] of image;//база картинок
State : array [1..11] of JStateInfo; // масив состояний
TecState : integer; //Текущее нахождение
i:integer;// для манипуляций
last_tag: integer; // последний тег
font: tfont;// картинка с символами
closeprogram,wasongora:boolean;//выход из програмы
key: integer;// нажатая клавиша
// -- -- -- -- -- -- -- -- -- -- --
// -- -- -- -- -- -- -- -- -- -- --
// -- -- -- -- -- -- -- -- -- -- --
procedure initF(fn:string;x,y:integer);
Begin
font.im:=loadimage(fn);
font.x:=x;
font.y:=y;
end;
// -- -- -- -- -- -- -- -- -- -- --
Procedure beep; // гудок
begin
if not openPlayer('/fire1.mid', 'audio/midi') then halt;
if not setPlayerCount(1) then halt;
if not startPlayer then halt;
end;
Procedure beepfile(s:string); // гудок
begin
if not openPlayer('/'+s, 'audio/midi') then halt;
if not setPlayerCount(1) then halt;
if not startPlayer then halt;
end;
procedure savestate; // сохранение позиции
var rs: recordStore;
index: integer;
name: string;
Begin
rs := openRecordStore('names');
index := GetRecordStoreNextId(rs);
if index = 1 then
index := AddRecordStoreEntry(rs,integertostring(TecState))
else ModifyRecordStoreEntry(rs,integertostring(TecState) , 1);
{ name := readRecordStoreEntry(rs, 1);
If name = '0' then index := AddRecordStoreEntry(rs, integertostring(TecState))
else ModifyRecordStoreEntry(rs, integertostring(TecState),1); }
closeRecordStore(rs);
end;
Function loadstateDisc:integer; // загрузка позиции
var rs: recordStore;
index: integer;
name: string;
Begin
rs := openRecordStore('names');
name := readRecordStoreEntry(rs, 1);
closeRecordStore(rs);
If name = '' then loadstateDisc:=1
else loadstateDisc:=stringtointeger(name);
If stringtointeger(name)>=10 then loadstateDisc:=1
end;
// -- -- -- -- -- -- -- -- -- -- --
procedure textxy(str:string;x,y:integer);
Var
i,xx,yy,x1,y1,x2,y2,a:integer;
begin
For i:= 0 to Length(str) - 1 do
begin
a:= Ord(GetChar(str, i));
if a > 255 then a:= a - 848;
for yy:= 0 to 13 do for xx:= 0 to 15 do
if (yy * 16 + xx + 32)=a then
Begin
x1:=xx*font.x;
y1:=yy*font.y;
x2:=font.x;
y2:=font.y;
end;
cnv2.draw_image((x + i *font.x ), y,font.im,x1,y1,x2,y2);
end;
cnv2.set_clip(0,0,128,128);
end;
// -- -- -- -- -- -- -- -- -- -- --
// -- -- -- -- -- -- -- -- -- -- --
//разбиваем текст по строкам и рисуем его
Procedure PaintText(text:string);
Var
s,buf:string;
strings:array[1..100] of string;
len,nstrings,pr,index:integer;
done,enter,up,down:boolean;
r:real;
Begin
len:=length(text);
pr:=0;
nstrings:=0;
Repeat
len:=len+index;
index:=0;
enter:=false;
If (length(text)>NcharOnline) then
For i:=0 to NcharOnline-1 do
Begin
If not enter then If getchar(text,i)=' ' then index:=i;
if (getchar(text,i)='|') then
begin
index:=i;
enter:=true;
end;
end;
if index=0 then index:=NcharOnline;
If (length(text)<=NcharOnline) then
begin
index:=length(text);
done:=true;
end;
buf:=copy(text,0,index);
nstrings:=nstrings+1;
strings[nstrings]:=copy(text,0,index);
if not done then
text:=copy(text,index+1,length(text));
until done;
r:=(nstrings*10)/(lineOnScreen+1);
r:=r/10;
// Количество страниц
For i:=0 to 10 do
if r>i then state[TecState].npage:=i+1;
if state[TecState].Curpage=0 then state[TecState].Curpage:=1;
//state[TecState].Curpage:=2;//временно
//Вычисляем стрелки
//находимся на первой странице всего страниц больше чем 2
If (state[TecState].npage>1) and (state[TecState].Curpage=1) then
Begin
up:=false;
down:=true;
end;
//середина
If (state[TecState].npage>state[TecState].Curpage) and (state[TecState].Curpage>1) then
Begin
up:=true;
down:=true;
end;
//Конец
If (state[TecState].npage>1) and (state[TecState].Curpage=state[TecState].npage) then
Begin
up:=true;
down:=false;
end;
//если одна страница
If state[TecState].npage=1 then
Begin
up:=false;
down:=false;
end;
if tecstate = 1 then DrawImage(loadimage('/10.jpg'),0,0);
If up then DrawImage(img[1],121,39);
If down then DrawImage(img[2],121,112);
pr:=0;
len:=lineOnScreen+1;
//Если количество страниц - одна, то выводим по центру
If (lineOnScreen >nstrings) then
Begin
r:=(((lineOnScreen*9)+35) - ((nstrings*9)+35))/2;
For i:=(lineOnScreen*state[TecState].Curpage)-lineOnScreen to (lineOnScreen*state[TecState].Curpage)
do
Begin
textxy(strings[i+1], 3, 35+(trunc(r))+(9*(pr)));
pr:=pr+1;
end;
end
{ELSE
if (state[TecState].Curpage=state[TecState].npage) then
Begin
r:=(((lineOnScreen*9)+35) - ((((lineOnScreen*state[TecState].npage-nstrings+2))*9)+35))/2;
For i:=(lineOnScreen*state[TecState].Curpage)-lineOnScreen to (lineOnScreen*state[TecState].Curpage)
do
Begin
textxy(strings[i+1], 3, 35+(trunc(r))+(9*(pr)));
pr:=pr+1;
end;
end}
else
For i:=(lineOnScreen*state[TecState].Curpage)-lineOnScreen to ((lineOnScreen)*state[TecState].Curpage)
do
Begin
if state[TecState].Curpage<>1 then textxy(strings[i+2], 3, 35+(9*(pr)));
else textxy(strings[i+1], 3, 35+(9*(pr)));
pr:=pr+1;
end;
repaint;
End;
// -- -- -- -- -- -- -- -- -- -- --
Procedure checkKey;
Begin
if keyToAction(key) =GA_DOWN then
If ((state[TecState].Curpage<>state[TecState].npage)and(state[TecState].npage>1))or (state[TecState].Curpage=0) then
Begin
//clrscr;
state[TecState].Curpage:=state[TecState].Curpage+1;
PaintText(state[TecState].hint);
delay(100);
// beep;
end;
// else beep;
if keyToAction(key) =GA_up then
If state[TecState].Curpage>1 then
Begin
//clrscr;
state[TecState].Curpage:=state[TecState].Curpage-1;
PaintText(state[TecState].hint);
delay(100);
end;
//else playAlertSound;
end;
// -- -- -- -- -- -- -- -- -- -- --
Function AnyOtherTag:boolean; // если номер тега <> текущему и ответам
Var s,s2:string;
i3,i2:integer;
b:boolean;
Begin
AnyOtherTag:=true;
if last_tag=state[TecState].stateTag then AnyOtherTag:=false;
If state[TecState].isQuestion then
begin
s2:=state[TecState].answers;
For i3:=0 to length(s2) do
Begin
if getchar(s2,i3)<>',' then s:=s+getchar(s2,i3)
else
begin
if last_tag=stringToInteger(s) then AnyOtherTag:=false;
s:='';
end;
end;
if last_tag=helpTag then AnyOtherTag:=true;
if TecState=10 then
if not wasongora then begin
//wasongora:=true;
AnyOtherTag:=false;
end;
end;
end;
// -- -- -- -- -- -- -- -- -- -- --
Function FalseAnswer:boolean; // // если неправильный ответ на вопрос true когда неправильно
Begin
if last_tag<>state[TecState].cAnswer then FalseAnswer:=true;
if TecState=10 then
if wasongora then if not AnyOtherTag then FalseAnswer:=false;
end;
Function stateAlreadyVisited:boolean; // если место (тег) уже было пройдено или его вопросы включно с текущим
Var s,s2:string;
i3,i2:integer;
Begin
For I:= 1 to TecState do
begin
if (last_tag=state[i].stateTag) and (i<>TecState) then stateAlreadyVisited:=true;
If state[i].isQuestion then
begin
s2:=state[i].answers;
For i3:=0 to length(s2) do
Begin
if getchar(s2,i3)<>',' then s:=s+getchar(s2,i3)
else
begin
if last_tag=stringToInteger(s) then stateAlreadyVisited:=true;
s:='';
end;
end;
end;
end;
if last_tag=state[1].stateTag then stateAlreadyVisited:=false;
end;
// -- -- -- -- -- -- -- -- -- -- --
Function stateNotYetVisited:boolean; // если место (тег) еще не пройдено или его вопросы на один больше чем теперь
Var s,s2:string;
i3,i2:integer;
Begin
If TecState<10 then
For i:= TecState+1 to 9 do
begin
if (last_tag=state[i].stateTag) and (i<>TecState) then stateNotYetVisited:=true;
If state[i].isQuestion then
begin
s2:=state[i].answers;
For i3:=0 to length(s2) do
Begin
if getchar(s2,i3)<>',' then s:=s+getchar(s2,i3)
else
begin
if last_tag=stringToInteger(s) then stateNotYetVisited:=true;
s:='';
end;
end;
end;
end;
end;
// -- -- -- -- -- -- -- -- -- -- --
Function notNextTag:boolean; //если номер нажатого тега не номер следующего тега следующий те
Begin
If TecState<>10 then
If last_tag<>state[TecState+1].stateTag then notNextTag:=true;
end;
Function stateIsnotCharacter:boolean; //если номер нажатого тега является одним из вариантов ответа следующего вопроса (есди оно есть вопрос)
Var s,s2:string;
i3,i2:integer;
Begin
If TecState<10 then
If state[TecState+1].isQuestion then
begin
s2:=state[TecState+1].answers;
For i3:=0 to length(s2) do
Begin
if getchar(s2,i3)<>',' then s:=s+getchar(s2,i3)
else
begin
if last_tag=stringToInteger(s) then stateIsnotCharacter:=true;
s:='';
end;
end;
end;
end;
// -- -- -- -- -- -- -- -- -- -- --
// -- -- -- -- -- -- -- -- -- -- --
Procedure FlashRed(int:integer); // горим красным цветом
Begin
beepfile('red.mid');
setColor(255, 0, 0);
fillRoundRect(120, 0, 8, 8, 4, 4);
repaint;
delay(int);
setColor(155, 0, 0);
fillRoundRect(120, 0, 8, 8, 4, 4);
repaint;
end;
// -- -- -- -- -- -- -- -- -- -- --
Procedure Flashgreen(int:integer); // горим зеденым цветом
Begin
beepfile('green.mid');
setColor(0, 255, 0);
fillRoundRect(120, 0, 8, 8, 4, 4);
repaint;
delay(int);
setColor(0, 100, 0);
fillRoundRect(120, 0, 8, 8, 4, 4);
repaint;
end;
// -- -- -- -- -- -- -- -- -- -- --
Procedure DoPrint(im:integer;ms:string); // вывод фонового рисунка и текста
Begin
setColor(255, 255, 255);
fillRect(0, 0, 128, 128);
drawimage(LoadImage('/'+integertostring(im)+'.jpg'),0,0);
state[TecState].hint:=ms;
state[TecState].Curpage:=0;
state[TecState].npage:=0;
PaintText(ms);
setColor(255, 255, 255);
fillRoundRect(100, 0, 8, 8, 4, 4);
setColor(155, 0, 0);
drawText(integertostring(TecState),1,1);repaint;
end;
// -- -- -- -- -- -- -- -- -- -- --
Procedure DoExit; // Конечные фанфары, все щасливы и довольны !!!
Var i1,i2:image;
Begin
//TecState:=10;
//DoPrint(state[TecState].BackImg,state[10].question);
TecState:=1;
savestate;
beepfile('ven.mid');
i1:=LoadImage('/princess3.jpg');
i2:=LoadImage('/princess4.jpg');
For i:=1 to 24 do begin
delay(500);
drawimage(i1,0,0);repaint;
delay(500);
drawimage(i2,0,0);repaint;
end;
halt;
end;
// сидим на горе полоса прогресбара
Procedure dodalay(time:integer);
Var r:real;
del:integer;
ini:integer;
Begin
if not openPlayer('/gora.mid', 'audio/midi') then halt;
if not setPlayerCount(1) then halt;
if not startPlayer then halt;
r:=time/129;
del:=trunc(r);
//153 173 194
for i:= 0 to 128 do
begin
ini:=0;
for ini:=1 to 15 do
begin
setColor(153+ini*3, 173+ini*3, 190+ini*3);
plot(i, 108+ini);
end;
repaint;
delay(del);
end;
stopPlayer;
end;
///////////////////////////////////////////////////////////////////////////////////////////////
Procedure DoState;
var
b:boolean; // временная
Begin
If not state[TecState].isQuestion then // если состояние не вопрос
Begin
if state[TecState].timer= 0 then state[TecState].timer:=getRelativeTimeMs; // запускаем таймер
If notNextTag then //если номер нажатого тега не номер следующего тега следующий те
begin
If stateAlreadyVisited then // если место (тег) уже было пройдено
begin
DoPrint(imgFilin,szUsedState);
FlashRed(time3S); //фоновый рисунок ?? Messagecanthelp
end
else
If stateNotYetVisited then // если место (тег) еще небыл пройден
begin
DoPrint(imgFilin,SZstateNotYetVisited) ;
FlashRed(time3S);
end
else
If stateIsnotCharacter then
doPrint(imgFilin,szSearchFor+' '+state[TecState+1].name)
Else
If last_tag=Mounttag then // красным горим если на горы снова
FlashRed(time3S)
Else
If last_tag=helpTag then
Begin
if (getRelativeTimeMs-state[TecState].timer)> time3m Then
DoPrint(imgFilin,state[TecState].moreHint)
Else
DoPrint(imgFilin,szMessageNotHelpYet)
end;
If last_tag=state[TecState].stateTag then
doPrint(state[TecState].BackImg, state[TecState].FatherTag);
end //
Else //если номер нажатого тега номер следующего состояния
Begin
If TecState = 10 then // если подошли до конца
DoExit
Else
Begin
TecState:=TecState+1;
savestate;
Flashgreen(time3S);
beepfile('level.mid');
DoState;
end;
end
end
else // если состояние вопрос
If state[TecState].types='question' then // если тип вопрос, а не горы
Begin
DoPrint(state[TecState].BackImg,state[TecState].question);
if last_tag<>state[TecState].stateTag then If AnyOtherTag then // если номер тега <> текущему и ответам
begin
If wasongora then doexit;
If last_tag = helpTag then
DoPrint(imgFilin,state[TecState].questionHint)
else begin
DoPrint(state[TecState].BackImg,szNotAnswer);
FlashRed(time3S);
DoPrint(state[TecState].BackImg,state[TecState].question);
end;
end
else // если ответ не верен
If FalseAnswer Then // если неправильный ответ на вопрос идем в горы
Begin
DoPrint(imgFilin,szMountainGo);
state[TecState].types:='mount';
state[TecState].AlrearyWaitOnMountain:=false; // устанавливаем в лож пребывание на горе 2 минуты
Flashred(3000);
//last_tag:=Mounttag;
//dostate;
end
Else // если ответ на вопрос был правилный
Begin
DoPrint(state[TecState].BackImg,trueAnswer);
Flashgreen(time3S);
DoPrint(state[TecState].BackImg,state[TecState].FatherTag);
state[TecState].isQuestion:=false; // теперь это пройденый этап потому считаем что не вопрос
state[TecState].IsDone:=true; // вопрос пройден
end;
end
Else
If state[TecState].types='mount' then
Begin
If state[TecState].AlrearyWaitOnMountain then // если мы уже отбыли свое наказание на горе, однако
If last_tag <>state[TecState].stateTag then
Begin
//DoPrint(imgFilin,'Это не '+state[TecState].name);
DoPrint(imgFilin,state[TecState].Name+szReturnFromMount);
Flashred(time3S);
end
Else
Begin
state[TecState].types:='question';
dostate;
end;
If last_tag = Mounttag then
If not state[TecState].AlrearyWaitOnMountain then //если мы еще не подождали на горе 2 минуты то
begin
DoPrint(imgMountain,szMountainText);
dodalay(Time2M);
state[TecState].AlrearyWaitOnMountain:=true;
DoPrint(imgFilin,state[TecState].Name+szReturnFromMount);
if TecState=10 then wasongora:=true;
end;
end;
end;
// -- -- -- -- -- -- -- -- -- -- --
// -- -- -- -- -- -- -- -- -- -- --
Procedure Loadstate;
Begin
state[1].isQuestion := true;
state[1].name := 'pцllц';
state[1].moreHint := 'Hдnellд on pitkд kaula.';
state[1].FatherTag := 'Ystдvдni pitдд juoda jo aamulla jos hдn arvelee ettд illalla on jano. Kuka hдn on?';
state[1].cAnswer := 555;
state[1].answers := '555,';
state[1].question := 'Nдin juuri ilmojen korkeuksista, ettд Prinsessa Lilja joutui inhan lohikддrmeen vangiksi! Hдnet pitдд vapauttaa linnasta, ennen kuin tulee yц. Linnalle on pitkд matka ja tarvitsette apua matkallanne sinne. Tapaatte pelissд erilaisia hahmoja, jotka auttavat teitд eteenpдin. Jos et millддn lцydд seuraavaa vihjettд, voit tulla tдnne kysymддn neuvoa minulta. Olen uninen enkд yleensд vastaa ihan heti, joten voit joutua odottamaan vastausta. Pelin aikana voit myцs joutua vastaamaan johonkin kysymykseen valitsemalla oikean vastauksen. Oletteko lukeneet ohjeet huolella? Hyvд, koskekaa sitten vihreдд palloa, niin peli voi alkaa. ';
state[2].isQuestion := false;
state[2].name := 'kirahvi';
state[2].moreHint := 'Miettikдд, mitд lauletaan, kun karhunpoika on sairaana. Missд nдhdддn unta?';
state[2].FatherTag := 'Voitteko auttaa minua, ystдvдni karhunpoika on sairaana. Mistд lцytyy paras lддke?';
state[3].isQuestion := false;
state[3].name := 'Nukkumatti';
state[3].moreHint := 'Minkд vдrisellд autolla Nukkumatti kulkee laulussa Sininen uni.';
state[3].FatherTag := 'Millд kuljen nukkumaan menevien lasten luo?';
state[4].isQuestion := false;
state[4].name := 'auto';
state[4].moreHint := 'Kuka sanoo pдд?';
state[4].FatherTag := 'Kenellд on aina pдд kipeдnд?';
state[5].isQuestion := true;
state[5].name := 'lammas';
state[5].moreHint := 'Ollut ei loiste huono Petterimme nenдnpддn...';
state[5].FatherTag := 'Etsi paikka, joksi punakuonoa nimiteltiin?';
state[5].cAnswer := 100;
state[5].question := 'Laumassani on 10 lammasta ja kolme emoa saa pian kartisoja. Jos jokainen emo saa kolme karitsaa, montako lammasta meitд sitten on yhteensд?';
state[5].answers := '100,101,102,';
state[5].questionHint := 'Laske mitд on 3 kertaa 3 ja lisдд tulos alkuperдiseen lampaiden mддrддn (10).';
state[6].isQuestion := false;
state[6].name := 'majakka';
state[6].moreHint := 'Hдn on metsдn kuningas.';
state[6].FatherTag := 'Ystдvдni on harmaa, valkoinen tai ruskea, pelottava tai kiltein ystдvд ja kaikkein vahvin!';
state[7].isQuestion := false;
state[7].name := 'karhu';
state[7].moreHint := 'Missing!';
state[7].FatherTag := 'Hint still missing!';
state[8].isQuestion := true;
state[8].name := 'intiaani';
state[8].moreHint := 'On laiva valmiina lдhtццn!';
state[8].FatherTag := 'Mihin nдmд liittyvдt: ankkuri, luotsi, ulappa ja paapuuri';
state[8].cAnswer := 110;
state[8].question := 'Selvitд kirjan avulla, mikд oli irokeesien asunnon nimi.';
state[8].answers := '110,111,112,';
state[8].questionHint := 'Etsi tieto intiaanikirjasta.';
state[9].isQuestion := false;
state[9].name := 'purjelaiva';
state[9].questionHint := 'Справочки пока нема...';
state[9].FatherTag := 'Nyt olet valmis kohtaamaan lohikддrmeen ja voit edetд kohti linnaa. Linna sijaitsee tyцhuoneessa.';
state[10].isQuestion := true;
state[10].name := 'Linna';
state[10].answers := '120,121,122,';
state[10].question := 'Kokeile, mikд avain sopii linnan oveen ja vapauttaa prinsessan. Jos valitsette vддrдn avaimen, joudutte jддhylle.';
state[10].FatherTag := 'Ok lets done !';
for i:=1 to 10 do
Begin
state[i].id := i;
state[i].BackImg := 9+i;
state[i].stateTag:=i;
state[i].types:='question'
end;
//state[1].stateTag:=1000;
end;
// ***************************** *************************
Procedure checktagreder; // проверка таг ридера
Var k:integer;
ss:string;
b:boolean;
Begin
if key = KE_STAR then // эмулятор
begin
ss:='';
k:=KE_NONE;
delay(50);
beep;
Repeat
//delay(50);
k:=getKeyPressed;
if b then
if k <>KE_NONE then
begin
if k=KE_KEY0 then ss:=ss+'0';
if k=KE_KEY1 then ss:=ss+'1';
if k=KE_KEY2 then ss:=ss+'2';
if k=KE_KEY3 then ss:=ss+'3';
if k=KE_KEY4 then ss:=ss+'4';
if k=KE_KEY5 then ss:=ss+'5';
if k=KE_KEY6 then ss:=ss+'6';
if k=KE_KEY7 then ss:=ss+'7';
if k=KE_KEY8 then ss:=ss+'8';
if k=KE_KEY9 then ss:=ss+'9';
end;
b:=false;
if k=KE_NONE then b:=true;
until k = KE_POUND;
setColor(155, 100, 0);
drawText('('+ss+')',100,1);repaint;
if ss<>'' then begin
last_tag:=stringtointeger(ss);
DoState;
end;
key:=KE_NONE;
end;
end;
Procedure loading;
Begin
drawimage(LoadImage('/splash.jpg'),0,0);repaint;
delay(3000);
initF('/cyr_pipa_6x7.png',6,7);// грузим фонт
img[1]:=LoadImage('/up.png');
img[2]:=LoadImage('/down.png');
//img[4]:=LoadImage('/10.jpg'); //sava
//img[3]:=LoadImage('/4.jpg'); //Gori
//for i:=10 to 20 do img[i]:=LoadImage('/'+integertostring(i)+'.jpg'); //Gori
//img[i]:=LoadImage('/10.jpg');
TecState:=loadstateDisc; // устанавливаем положение первое дальше будет проверятся с загрузкой
//TecState:=7; //!!!!!!!!!!!!!!!!!!!!
Loadstate;
last_tag:=state[TecState].stateTag;
end;
// *****************************\\\\\\\\\\\\\\ //////////////////*************************
// ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
begin
//cnv2.fullscreen_mode(1);
loading;
DoState;
//drawimage(img[4],0,0);repaint;
Repeat
// ** ** ** ** ** ** ** ** ** ** **
// Рабочий цикл программы
key:=getKeyPressed;
checkKey;
checktagreder;
//drawimage(img[4],0,0);repaint;
// ** ** ** ** ** ** ** ** ** ** **
delay(50);
until closeprogram;
// Сохранение удачного завершения програмы
end.