forked from KolibriOS/kolibrios
87f20fb78f
git-svn-id: svn://kolibrios.org@2830 a494cfbc-eb01-0410-851d-a64ba20cac60
1273 lines
28 KiB
C++
1273 lines
28 KiB
C++
// Èñõîäíèê èãðû "Êòî õî÷åò áûòü ìèëëèîíåðîì?" äëÿ Êîëèáðè ÎÑ
|
||
// by Àíäðåé Ìèõàéëîâè÷ (Dron2004)
|
||
|
||
#include <kosSyst.h>
|
||
#include <kosFile.h>
|
||
#include <func.h>
|
||
|
||
char sVersion[] = "‚¥àá¨ï 0.2";
|
||
|
||
int status=0;
|
||
|
||
bool needcleanup = false; //Ñèìâîë òîãî, ÷òî èãðà áûëà íà÷àòà... Íåîáõîäèìî äëÿ âûñâîáîæäåíèÿ ïàìÿòè
|
||
int questioncount = 0; //×èñëî âîïðîñîâ
|
||
int currentquestion = 0; //Íîìåð òåêóùåãî âîïðîñà (1, 2, ..., 15)
|
||
|
||
int askedquestions[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
|
||
|
||
char friendsAdvice[1]={' '};
|
||
|
||
char summs[][16]={"0","100","200","300","500","1000","2000","4000","8000","16000","32000","64000","125000","250000","500000","1000000"};
|
||
char * question;
|
||
char * answerA;
|
||
char * answerB;
|
||
char * answerC;
|
||
char * answerD;
|
||
Byte correctanswer=0x00;
|
||
|
||
int questionlength=0;
|
||
int answerAlength=0;
|
||
int answerBlength=0;
|
||
int answerClength=0;
|
||
int answerDlength=0;
|
||
|
||
bool na50available = true;
|
||
bool callfriendavailable = true;
|
||
bool zalavailable = true;
|
||
|
||
int zalA=0;
|
||
int zalB=0;
|
||
int zalC=0;
|
||
int zalD=0;
|
||
|
||
|
||
|
||
bool drawA = true;
|
||
bool drawB = true;
|
||
bool drawC = true;
|
||
bool drawD = true;
|
||
|
||
|
||
char * tempquestion;
|
||
char * tempanswerA;
|
||
char * tempanswerB;
|
||
char * tempanswerC;
|
||
char * tempanswerD;
|
||
Byte tempcorrectanswer=0x00;
|
||
int tempquestionlength=0;
|
||
int tempanswerAlength=0;
|
||
int tempanswerBlength=0;
|
||
int tempanswerClength=0;
|
||
int tempanswerDlength=0;
|
||
|
||
|
||
const char header[]="Šâ® å®ç¥â ¡ëâì ¬¨««¨®¥à®¬";
|
||
void app_halt();
|
||
|
||
|
||
|
||
char * filepathname; //Îïðåäåëÿåì ïóòü è èìÿ ôàéëà ñ áàçîé âîïðîñîâ
|
||
void getFilePathName(){
|
||
int lastslashindex=0;
|
||
char ourfilename[]="appdata.dat";
|
||
int tmpcnt=0;
|
||
|
||
for (tmpcnt=0;tmpcnt<strlen(kosExePath);tmpcnt++){
|
||
if (kosExePath[tmpcnt]=='/'){lastslashindex=tmpcnt;}
|
||
}
|
||
filepathname = new char [lastslashindex+strlen(ourfilename)+1];
|
||
|
||
for (tmpcnt=0; tmpcnt<=lastslashindex; tmpcnt++){
|
||
filepathname[tmpcnt]=kosExePath[tmpcnt];
|
||
}
|
||
for (tmpcnt=0; tmpcnt<strlen(ourfilename); tmpcnt++){
|
||
filepathname[tmpcnt+lastslashindex+1]=ourfilename[tmpcnt];
|
||
}
|
||
|
||
}
|
||
|
||
void prepareFileData() { //Ïðåäâàðèòåëüíûå ïîäñ÷¸òû
|
||
Byte tmpbyte[1]={0x00};
|
||
CKosFile basefile(filepathname);
|
||
|
||
while (tmpbyte[0]!=0x14){
|
||
basefile.Read (tmpbyte,1);
|
||
if (tmpbyte[0]==0x10) {questioncount++;};
|
||
}
|
||
// basefile
|
||
}
|
||
|
||
void loadquestion(){
|
||
|
||
//Ñòðàøíî êîðÿâàÿ ïðîöåäóðà ãåíåðàöèè ñëó÷àéíîãî íîìåðà âîïðîñà
|
||
// rtlSrand(kos_GetSystemClock() / 100000);
|
||
|
||
int qcodee;
|
||
|
||
int skipsleft;
|
||
|
||
regenerate:
|
||
qcodee=(rtlRand()%questioncount)+1;
|
||
|
||
Byte inputbyte[1]={0x00};
|
||
|
||
//Ïåðâûé ïðîõîä - ïðîâåðÿåì ñëîæíîñòü è ñ÷èòàåì äëèíû ñòðîê
|
||
tempquestionlength = 0;
|
||
tempanswerAlength = 0;
|
||
tempanswerBlength = 0;
|
||
tempanswerClength = 0;
|
||
tempanswerDlength = 0;
|
||
|
||
|
||
skipsleft=qcodee;
|
||
CKosFile basefile(filepathname);
|
||
//Íàéä¸ì òî ìåñòî, îòêóäà íà÷èíàåòñÿ íàø âîïðîñ
|
||
while (skipsleft>0){
|
||
basefile.Read (inputbyte,1);
|
||
if (inputbyte[0]==0x10){
|
||
skipsleft--;
|
||
}
|
||
inputbyte[0]=0x00;
|
||
}
|
||
|
||
//Ïðîâåðèì ñëîæíîñòü
|
||
basefile.Read (inputbyte,1);
|
||
|
||
// Íàì íóæíî, ÷òîáû ñëîæíîñòü çàäàâàåìîãî âîïðîñà ñîîòâåòñòâîâàëà íîìåðó çàäàâàåìîãî
|
||
// â èãðå âîïðîñà (íà êàêóþ ñóììó ìû èãðàåì; âîïðîñ íà 1000000 äîëæåí áûòü ïîñëîæíåå,
|
||
// ÷åì âîïðîñ íà 100 ðóáëåé :-)))
|
||
|
||
if (inputbyte[0]==0x05) //˸êãèé âîïðîñ
|
||
{
|
||
if (currentquestion > 5){ //˸ãêèå âîïðîñû - âîïðîñû îò 1 äî 5
|
||
goto regenerate; //Åñëè ýòî óæå 6 âîïðîñ è áîëåå - èùåì äðóãîé âîïðîñ
|
||
}
|
||
}
|
||
if (inputbyte[0]==0x06) //Ñðåäíèé âîïðîñ
|
||
{
|
||
if ((currentquestion < 6)||(currentquestion > 10)){ //Ñðåäíèå âîïðîñû - âîïðîñû îò 6 äî 10
|
||
goto regenerate;
|
||
}
|
||
}
|
||
if (inputbyte[0]==0x07) //Ñëîæíûé âîïðîñ
|
||
{
|
||
if (currentquestion < 11){ //Ñðåäíèå âîïðîñû - âîïðîñû îò 11 äî 15
|
||
goto regenerate;
|
||
}
|
||
}
|
||
|
||
|
||
for (int counter=0; counter <currentquestion; counter++){
|
||
if (askedquestions[counter]==qcodee){goto regenerate;}
|
||
}
|
||
|
||
|
||
askedquestions[currentquestion-1]=qcodee;
|
||
|
||
|
||
inputbyte[0]=0x00;
|
||
//Ñ÷èòàåì, ñêîëüêî ñèìâîëîâ â âîïðîñå
|
||
tempquestionlength = 0;
|
||
tempanswerAlength = 0;
|
||
tempanswerBlength = 0;
|
||
tempanswerClength = 0;
|
||
tempanswerDlength = 0;
|
||
while (inputbyte[0]!=0x01){
|
||
basefile.Read (inputbyte,1);
|
||
tempquestionlength++;
|
||
}
|
||
while (inputbyte[0]!=0x02){
|
||
basefile.Read (inputbyte,1);
|
||
tempanswerAlength++;
|
||
}
|
||
while (inputbyte[0]!=0x03){
|
||
basefile.Read (inputbyte,1);
|
||
tempanswerBlength++;
|
||
}
|
||
while (inputbyte[0]!=0x04){
|
||
basefile.Read (inputbyte,1);
|
||
tempanswerClength++;
|
||
}
|
||
while (inputbyte[0]!=0x08){
|
||
basefile.Read (inputbyte,1);
|
||
tempanswerDlength++;
|
||
}
|
||
//Ïåðâûé ïðîõîä çàâåðø¸í!!!!
|
||
|
||
if (needcleanup==true){
|
||
delete question;
|
||
delete answerA;
|
||
delete answerB;
|
||
delete answerC;
|
||
delete answerD;
|
||
}
|
||
needcleanup=true;
|
||
|
||
tempquestion = new char[tempquestionlength+1];
|
||
tempanswerA = new char[tempanswerAlength+1];
|
||
tempanswerB = new char[tempanswerBlength+1];
|
||
tempanswerC = new char[tempanswerClength+1];
|
||
tempanswerD = new char[tempanswerDlength+1];
|
||
|
||
|
||
|
||
// ÂÒÎÐÎÉ ÏÐÎÕÎÄ: ÔÎÐÌÈÐÓÅÌ Â ÏÀÌßÒÈ ÂÎÏÐÎÑ È ÂÀÐÈÀÍÒÛ ÎÒÂÅÒÀ
|
||
CKosFile basefile2(filepathname);
|
||
inputbyte[0]=0x00;
|
||
skipsleft=qcodee;
|
||
|
||
//Íàéä¸ì òî ìåñòî, îòêóäà íà÷èíàåòñÿ íàø âîïðîñ
|
||
while (skipsleft>0){
|
||
basefile2.Read (inputbyte,1);
|
||
if (inputbyte[0]==0x10){
|
||
skipsleft--;
|
||
}
|
||
inputbyte[0]=0x00;
|
||
}
|
||
|
||
basefile2.Read (inputbyte,1); // Ýòî - ñëîæíîñòü âîïðîñà. Ìû å¸ óæå ïðîâåðèëè.
|
||
|
||
//×èòàåì âîïðîñ
|
||
int currentbyte=0;
|
||
while (inputbyte[0]!=0x01){
|
||
basefile2.Read (inputbyte,1);
|
||
if (inputbyte[0]!=0x01){tempquestion[currentbyte]=inputbyte[0];}
|
||
currentbyte++;
|
||
}
|
||
tempquestion[currentbyte]='\n';
|
||
|
||
//×èòàåì îòâåò A
|
||
currentbyte=0;
|
||
while (inputbyte[0]!=0x02){
|
||
basefile2.Read (inputbyte,1);
|
||
if (inputbyte[0]!=0x02){tempanswerA[currentbyte]=inputbyte[0];}
|
||
currentbyte++;
|
||
}
|
||
tempanswerA[currentbyte]='\n';
|
||
|
||
//×èòàåì îòâåò B
|
||
currentbyte=0;
|
||
while (inputbyte[0]!=0x03){
|
||
basefile2.Read (inputbyte,1);
|
||
if (inputbyte[0]!=0x03){tempanswerB[currentbyte]=inputbyte[0];}
|
||
currentbyte++;
|
||
}
|
||
tempanswerB[currentbyte]='\n';
|
||
|
||
//×èòàåì îòâåò C
|
||
currentbyte=0;
|
||
while (inputbyte[0]!=0x04){
|
||
basefile2.Read (inputbyte,1);
|
||
if (inputbyte[0]!=0x04){tempanswerC[currentbyte]=inputbyte[0];}
|
||
currentbyte++;
|
||
}
|
||
tempanswerC[currentbyte]='\n';
|
||
|
||
//×èòàåì îòâåò D
|
||
currentbyte=0;
|
||
while (inputbyte[0]!=0x08){
|
||
basefile2.Read (inputbyte,1);
|
||
if (inputbyte[0]!=0x08){tempanswerD[currentbyte]=inputbyte[0];}
|
||
currentbyte++;
|
||
}
|
||
tempanswerD[currentbyte]='\n';
|
||
|
||
basefile2.Read (inputbyte,1); // Ýòî-ïðàâèëüíûé îòâåò
|
||
tempcorrectanswer=inputbyte[0];
|
||
// ÂѨ!!!!!! ÃÎÒÎÂÎ!!!! ÓÐÀ!
|
||
|
||
//Ñ÷èòàëè. Òåïåðü íàäî ïåðåòàñîâàòü âîïðîñû.
|
||
questionlength = 0;
|
||
answerAlength = 0;
|
||
answerBlength = 0;
|
||
answerClength = 0;
|
||
answerDlength = 0;
|
||
//Ñàì âîïðîñ îñòà¸òñÿ áåç èçìåíåíèÿ
|
||
questionlength=tempquestionlength;
|
||
question = new char[questionlength];
|
||
for (int cd=0; cd<questionlength; cd++){
|
||
question[cd]=tempquestion[cd];
|
||
}
|
||
|
||
|
||
//Òàñóåì îòâåòû
|
||
bool answerAfree = true;
|
||
bool answerBfree = true;
|
||
bool answerCfree = true;
|
||
bool answerDfree = true;
|
||
|
||
int tmpvalue=0;
|
||
|
||
//Ïåðâûé âîïðîñ
|
||
regenA:
|
||
tmpvalue = (rtlRand() % 4) +1;
|
||
if (tmpvalue==1){
|
||
if (answerAfree==true){
|
||
answerAfree=false;
|
||
answerAlength=tempanswerAlength;
|
||
answerA= new char [answerAlength];
|
||
|
||
for (int c=0; c<answerAlength; c++){
|
||
answerA[c]=tempanswerA[c];
|
||
}
|
||
if (tempcorrectanswer==0x01){correctanswer=0x01;}
|
||
}
|
||
else
|
||
{
|
||
goto regenA;
|
||
}
|
||
}
|
||
if (tmpvalue==2){
|
||
if (answerBfree==true){
|
||
answerBfree=false;
|
||
answerBlength=tempanswerAlength;
|
||
answerB= new char [answerBlength];
|
||
|
||
for (int c=0; c<answerBlength; c++){
|
||
answerB[c]=tempanswerA[c];
|
||
}
|
||
if (tempcorrectanswer==0x01){correctanswer=0x02;}
|
||
}
|
||
else
|
||
{
|
||
goto regenA;
|
||
}
|
||
}
|
||
if (tmpvalue==3){
|
||
if (answerCfree==true){
|
||
answerCfree=false;
|
||
answerClength=tempanswerAlength;
|
||
answerC= new char [answerClength];
|
||
|
||
for (int c=0; c<answerClength; c++){
|
||
answerC[c]=tempanswerA[c];
|
||
}
|
||
if (tempcorrectanswer==0x01){correctanswer=0x03;}
|
||
}
|
||
else
|
||
{
|
||
goto regenA;
|
||
}
|
||
}
|
||
if (tmpvalue==4){
|
||
if (answerDfree==true){
|
||
answerDfree=false;
|
||
answerDlength=tempanswerAlength;
|
||
answerD= new char [answerDlength];
|
||
|
||
for (int c=0; c<answerDlength; c++){
|
||
answerD[c]=tempanswerA[c];
|
||
}
|
||
if (tempcorrectanswer==0x01){correctanswer=0x04;}
|
||
}
|
||
else
|
||
{
|
||
goto regenA;
|
||
}
|
||
}
|
||
|
||
//Âòîðîé âîïðîñ
|
||
regenB:
|
||
tmpvalue = (rtlRand() % 4) +1;
|
||
if (tmpvalue==1){
|
||
if (answerAfree==true){
|
||
answerAfree=false;
|
||
answerAlength=tempanswerBlength;
|
||
answerA= new char [answerAlength];
|
||
|
||
for (int c=0; c<answerAlength; c++){
|
||
answerA[c]=tempanswerB[c];
|
||
}
|
||
if (tempcorrectanswer==0x02){correctanswer=0x01;}
|
||
}
|
||
else
|
||
{
|
||
goto regenB;
|
||
}
|
||
}
|
||
if (tmpvalue==2){
|
||
if (answerBfree==true){
|
||
answerBfree=false;
|
||
answerBlength=tempanswerBlength;
|
||
answerB= new char [answerBlength];
|
||
|
||
for (int c=0; c<answerBlength; c++){
|
||
answerB[c]=tempanswerB[c];
|
||
}
|
||
if (tempcorrectanswer==0x02){correctanswer=0x02;}
|
||
}
|
||
else
|
||
{
|
||
goto regenB;
|
||
}
|
||
}
|
||
if (tmpvalue==3){
|
||
if (answerCfree==true){
|
||
answerCfree=false;
|
||
answerClength=tempanswerBlength;
|
||
answerC= new char [answerClength];
|
||
|
||
for (int c=0; c<answerClength; c++){
|
||
answerC[c]=tempanswerB[c];
|
||
}
|
||
if (tempcorrectanswer==0x02){correctanswer=0x03;}
|
||
}
|
||
else
|
||
{
|
||
goto regenB;
|
||
}
|
||
}
|
||
if (tmpvalue==4){
|
||
if (answerDfree==true){
|
||
answerDfree=false;
|
||
answerDlength=tempanswerBlength;
|
||
answerD= new char [answerDlength];
|
||
|
||
for (int c=0; c<answerDlength; c++){
|
||
answerD[c]=tempanswerB[c];
|
||
}
|
||
if (tempcorrectanswer==0x02){correctanswer=0x04;}
|
||
}
|
||
else
|
||
{
|
||
goto regenB;
|
||
}
|
||
}
|
||
|
||
//Òðåòèé âîïðîñ
|
||
regenC:
|
||
tmpvalue = (rtlRand() % 4) +1;
|
||
if (tmpvalue==1){
|
||
if (answerAfree==true){
|
||
answerAfree=false;
|
||
answerAlength=tempanswerClength;
|
||
answerA= new char [answerAlength];
|
||
|
||
for (int c=0; c<answerAlength; c++){
|
||
answerA[c]=tempanswerC[c];
|
||
}
|
||
if (tempcorrectanswer==0x03){correctanswer=0x01;}
|
||
}
|
||
else
|
||
{
|
||
goto regenC;
|
||
}
|
||
}
|
||
if (tmpvalue==2){
|
||
if (answerBfree==true){
|
||
answerBfree=false;
|
||
answerBlength=tempanswerClength;
|
||
answerB= new char [answerBlength];
|
||
|
||
for (int c=0; c<answerBlength; c++){
|
||
answerB[c]=tempanswerC[c];
|
||
}
|
||
if (tempcorrectanswer==0x03){correctanswer=0x02;}
|
||
}
|
||
else
|
||
{
|
||
goto regenC;
|
||
}
|
||
}
|
||
if (tmpvalue==3){
|
||
if (answerCfree==true){
|
||
answerCfree=false;
|
||
answerClength=tempanswerClength;
|
||
answerC= new char [answerClength];
|
||
|
||
for (int c=0; c<answerClength; c++){
|
||
answerC[c]=tempanswerC[c];
|
||
}
|
||
if (tempcorrectanswer==0x03){correctanswer=0x03;}
|
||
}
|
||
else
|
||
{
|
||
goto regenC;
|
||
}
|
||
}
|
||
if (tmpvalue==4){
|
||
if (answerDfree==true){
|
||
answerDfree=false;
|
||
answerDlength=tempanswerClength;
|
||
answerD= new char [answerDlength];
|
||
|
||
for (int c=0; c<answerDlength; c++){
|
||
answerD[c]=tempanswerC[c];
|
||
}
|
||
if (tempcorrectanswer==0x03){correctanswer=0x04;}
|
||
}
|
||
else
|
||
{
|
||
goto regenC;
|
||
}
|
||
}
|
||
|
||
//×åòâ¸ðòûé âîïðîñ
|
||
regenD:
|
||
tmpvalue = (rtlRand() % 4) +1;
|
||
if (tmpvalue==1){
|
||
if (answerAfree==true){
|
||
answerAfree=false;
|
||
answerAlength=tempanswerDlength;
|
||
answerA= new char [answerAlength];
|
||
|
||
for (int c=0; c<answerAlength; c++){
|
||
answerA[c]=tempanswerD[c];
|
||
}
|
||
if (tempcorrectanswer==0x04){correctanswer=0x01;}
|
||
}
|
||
else
|
||
{
|
||
goto regenD;
|
||
}
|
||
}
|
||
if (tmpvalue==2){
|
||
if (answerBfree==true){
|
||
answerBfree=false;
|
||
answerBlength=tempanswerDlength;
|
||
answerB= new char [answerBlength];
|
||
|
||
for (int c=0; c<answerBlength; c++){
|
||
answerB[c]=tempanswerD[c];
|
||
}
|
||
if (tempcorrectanswer==0x04){correctanswer=0x02;}
|
||
}
|
||
else
|
||
{
|
||
goto regenD;
|
||
}
|
||
}
|
||
if (tmpvalue==3){
|
||
if (answerCfree==true){
|
||
answerCfree=false;
|
||
answerClength=tempanswerDlength;
|
||
answerC= new char [answerClength];
|
||
|
||
for (int c=0; c<answerClength; c++){
|
||
answerC[c]=tempanswerD[c];
|
||
}
|
||
if (tempcorrectanswer==0x04){correctanswer=0x03;}
|
||
}
|
||
else
|
||
{
|
||
goto regenD;
|
||
}
|
||
}
|
||
if (tmpvalue==4){
|
||
if (answerDfree==true){
|
||
answerDfree=false;
|
||
answerDlength=tempanswerDlength;
|
||
answerD= new char [answerDlength];
|
||
|
||
for (int c=0; c<answerDlength; c++){
|
||
answerD[c]=tempanswerD[c];
|
||
}
|
||
if (tempcorrectanswer==0x04){correctanswer=0x04;}
|
||
}
|
||
else
|
||
{
|
||
goto regenD;
|
||
}
|
||
}
|
||
|
||
delete tempquestion;
|
||
delete tempanswerA;
|
||
delete tempanswerB;
|
||
delete tempanswerC;
|
||
delete tempanswerD;
|
||
}
|
||
|
||
|
||
|
||
void draw_window(void){ //Ðèñóåì îêíî
|
||
sProcessInfo sPI;
|
||
|
||
kos_WindowRedrawStatus(1);
|
||
kos_DefineAndDrawWindow(10,10,619,179+kos_GetSkinHeight(),0x74, 0xDDDDFF, 0,0, (Dword)header);
|
||
kos_WindowRedrawStatus(2);
|
||
|
||
kos_ProcessInfo( &sPI );
|
||
if (sPI.rawData[70]&0x04) return; //íè÷åãî íå äåëàòü åñëè îêíî ñõëîïíóòî â çàãîëîâîê
|
||
|
||
|
||
if (status==0){ //Ìåíþ
|
||
kos_DrawBar(0,0,610,175,0xFFFFBB);
|
||
kos_WriteTextToWindow (10,10,0x80,0x000000, "Šâ® å®ç¥â ¡ëâì ¬¨««¨®¥à®¬?", 3);
|
||
|
||
kos_WriteTextToWindow (10,25,0x80,0x000000, sVersion, 3);
|
||
|
||
kos_WriteTextToWindow (10,70,0x80,0x770000, "<ENTER> - ç âì ¨£àã", 0);
|
||
kos_WriteTextToWindow (10,85,0x80,0x770000, "<ESC> - ¢ë室", 0);
|
||
|
||
kos_WriteTextToWindow (10,150,0x80,0x000000, "(C) 2008 €¤à¥© Œ¨å ©«®¢¨ç aka Dron2004", 0);
|
||
//kos_DisplayNumberToWindow (questioncount,3,40,60,0x000000, nbDecimal, false);
|
||
}
|
||
if (status==1){ //Èãðà
|
||
|
||
kos_DrawBar(0,0,610,175,0xEEEEFF);
|
||
|
||
kos_WriteTextToWindow (10,10,0x0,0x000000, question, questionlength-1);
|
||
|
||
if (drawA==true){
|
||
kos_WriteTextToWindow (10,40,0x80,0x000000, "A. ", 0);
|
||
kos_WriteTextToWindow (30,40,0x0,0x000000, answerA, answerAlength-1);
|
||
}
|
||
if (drawB==true){
|
||
kos_WriteTextToWindow (10,60,0x80,0x000000, "B. ", 0);
|
||
kos_WriteTextToWindow (30,60,0x0,0x000000, answerB, answerBlength-1);
|
||
}
|
||
if (drawC==true){
|
||
kos_WriteTextToWindow (10,80,0x80,0x000000, "C. ", 0);
|
||
kos_WriteTextToWindow (30,80,0x0,0x000000, answerC, answerClength-1);
|
||
}
|
||
if (drawD==true){
|
||
kos_WriteTextToWindow (10,100,0x80,0x000000, "D. ", 0);
|
||
kos_WriteTextToWindow (30,100,0x0,0x000000, answerD, answerDlength-1);
|
||
}
|
||
if (na50available==true){kos_WriteTextToWindow (30,150,0x80,0x000000, "<7> 50 50", 0);}
|
||
if (callfriendavailable==true){kos_WriteTextToWindow (150,150,0x80,0x000000, "<8> ‡¢®®ª ¤àã£ã", 0);}
|
||
if (zalavailable==true){kos_WriteTextToWindow (280,150,0x80,0x000000, "<9> <20>®¤áª §ª § « ", 0);}
|
||
|
||
if((na50available==false)&&(callfriendavailable==false)&&(zalavailable==false)) {kos_WriteTextToWindow (30,150,0x80,0x000000, "<BACKSPACE> - § ¡à âì ¤¥ì£¨ ¨ ã©â¨", 0);}
|
||
|
||
kos_WriteTextToWindow (430,130,0x80,0x000000, "‚®¯à®á ", 0);
|
||
kos_WriteTextToWindow (500,130,0x80,0x000000, summs[currentquestion], 0);
|
||
|
||
kos_WriteTextToWindow (430,150,0x80,0x000000, "“ ¢ á", 0);
|
||
kos_WriteTextToWindow (500,150,0x80,0x000000, summs[currentquestion-1], 0);
|
||
|
||
|
||
|
||
}
|
||
if (status==2){ //Îêíî "Ýòî - ïðàâèëüíûé îòâåò"
|
||
kos_DrawBar(0,0,610,175,0xDDFFDD);
|
||
kos_WriteTextToWindow (10,10,0x80,0x000000, "„ , íâ® ¯à ¢¨«ìë© ®â¢¥â!", 0);
|
||
|
||
kos_WriteTextToWindow (10,150,0x80,0x000000, "<ENTER> - ¯à®¤®«¦¨âì", 0);
|
||
}
|
||
if (status==3){ //Âû âûèãðàëè ìèëëèîí, îäíàêî æ!!!
|
||
kos_DrawBar(0,0,610,175,0x00FF00);
|
||
kos_WriteTextToWindow (10,10,0x80,0x000000, "‚ë ¢ë¨£à «¨ ¬¨««¨®!!!", 0);
|
||
kos_WriteTextToWindow (10,150,0x80,0x000000, "<ESC> - ¢ë室", 0);
|
||
}
|
||
if (status==4){ //Çâîíîê äðóãó
|
||
kos_DrawBar(0,0,610,175,0xAAFFFF);
|
||
kos_WriteTextToWindow (10,10,0x80,0x000000, "„à㣠ᮢ¥âã¥â ¢ ¬ ®â¢¥â", 0);
|
||
kos_WriteTextToWindow (165,10,0x80,0x000000, friendsAdvice, 0);
|
||
kos_WriteTextToWindow (10,150,0x80,0x000000, "<ENTER> - ¯à®¤®«¦¨âì", 0);
|
||
}
|
||
if (status==5){ //Ïîäñêàçêà çàëà
|
||
kos_DrawBar(0,0,610,175,0xAAFFFF);
|
||
kos_WriteTextToWindow (10,10,0x80,0x000000, "Œ¥¨¥ 㤨â®à¨¨ à á¯à¥¤¥«¨«®áì â ª:", 0);
|
||
if (drawA==true){
|
||
kos_WriteTextToWindow (10,30,0x80,0x000000, "Žâ¢¥â A: ", 0);
|
||
kos_DisplayNumberToWindow(zalA,3,60,30,0x000000,nbDecimal,0);
|
||
kos_WriteTextToWindow (80,30,0x80,0x000000, "%", 0);
|
||
}
|
||
if (drawB==true){
|
||
kos_WriteTextToWindow (10,45,0x80,0x000000, "Žâ¢¥â B: ", 0);
|
||
kos_DisplayNumberToWindow(zalB,3,60,45,0x000000,nbDecimal,0);
|
||
kos_WriteTextToWindow (80,45,0x80,0x000000, "%", 0);
|
||
}
|
||
if (drawC==true){
|
||
kos_WriteTextToWindow (10,60,0x80,0x000000, "Žâ¢¥â C: ", 0);
|
||
kos_DisplayNumberToWindow(zalC,3,60,60,0x000000,nbDecimal,0);
|
||
kos_WriteTextToWindow (80,60,0x80,0x000000, "%", 0);
|
||
}
|
||
if (drawD==true){
|
||
kos_WriteTextToWindow (10,75,0x80,0x000000, "Žâ¢¥â D: ", 0);
|
||
kos_DisplayNumberToWindow(zalD,3,60,75,0x000000,nbDecimal,0);
|
||
kos_WriteTextToWindow (80,75,0x80,0x000000, "%", 0);
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
kos_WriteTextToWindow (10,150,0x80,0x000000, "<ENTER> - ¯à®¤®«¦¨âì", 0);
|
||
}
|
||
|
||
if (status==6){ //Âû çàáðàëè äåíüãè ;-)
|
||
kos_DrawBar(0,0,610,175,0xBBFFBB);
|
||
kos_WriteTextToWindow (10,10,0x80,0x000000, "‚ë § ¡à «¨ ¤¥ì£¨ ¨ ã諨. ‚ è ¢ë¨£àëè á®áâ ¢¨«:", 0);
|
||
kos_WriteTextToWindow (10,20,0x80,0x000000, summs[currentquestion-1], 0);
|
||
kos_WriteTextToWindow (10,150,0x80,0x000000, "<ESC> - ¢ë室", 0);
|
||
}
|
||
if (status==-1){ //Âû îøèáëèñü :-(
|
||
kos_DrawBar(0,0,610,175,0xFF8888);
|
||
kos_WriteTextToWindow (10,10,0x80,0x000000, "Š ᮦ «¥¨î, ¢ë ®è¨¡«¨áì... <20>à ¢¨«ìë© ®â¢¥â -", 0);
|
||
|
||
switch (correctanswer){
|
||
case 0x01:
|
||
kos_WriteTextToWindow (10,25,0x80,0x000000, "A. ", 0);
|
||
kos_WriteTextToWindow (30,25,0x0,0x000000, answerA, answerAlength-1);
|
||
break;
|
||
case 0x02:
|
||
kos_WriteTextToWindow (10,25,0x80,0x000000, "B. ", 0);
|
||
kos_WriteTextToWindow (30,25,0x0,0x000000, answerB, answerBlength-1);
|
||
break;
|
||
case 0x03:
|
||
kos_WriteTextToWindow (10,25,0x80,0x000000, "C. ", 0);
|
||
kos_WriteTextToWindow (30,25,0x0,0x000000, answerC, answerClength-1);
|
||
break;
|
||
case 0x04:
|
||
kos_WriteTextToWindow (10,25,0x80,0x000000, "D. ", 0);
|
||
kos_WriteTextToWindow (30,25,0x0,0x000000, answerD, answerDlength-1);
|
||
break;
|
||
}
|
||
kos_WriteTextToWindow (10,50,0x80,0x000000, "‚ १ã«ìâ ⥠¢ë ¢ë¨£à «¨:", 0);
|
||
|
||
if (currentquestion<6) {kos_WriteTextToWindow (220,50,0x80,0x000000,summs[0], 0);}
|
||
if ((currentquestion>5)&&(currentquestion<11)) {kos_WriteTextToWindow (220,50,0x80,0x000000,summs[5], 0);}
|
||
if (currentquestion>10) {kos_WriteTextToWindow (220,50,0x80,0x000000,summs[10], 0);}
|
||
|
||
|
||
|
||
|
||
kos_WriteTextToWindow (10,150,0x80,0x000000, "<ESC> - ¢ë室", 0);
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
void call_friend(){
|
||
int tmpcodee;
|
||
|
||
recode5:
|
||
tmpcodee =(rtlRand()%10)+1;
|
||
int tmpbyte;
|
||
|
||
if (currentquestion < 6 ){
|
||
if (tmpcodee>3){ //Äðóã çíàåò
|
||
if (correctanswer==0x01) {friendsAdvice[0]='A';}
|
||
if (correctanswer==0x02) {friendsAdvice[0]='B';}
|
||
if (correctanswer==0x03) {friendsAdvice[0]='C';}
|
||
if (correctanswer==0x04) {friendsAdvice[0]='D';}
|
||
}
|
||
else //Äðóã ãîâîðèò íàóãàä
|
||
{
|
||
|
||
int tmpbyte2=0;
|
||
recode51:
|
||
int tmpcodee2=(rtlRand()%4)+1;
|
||
|
||
switch(tmpcodee2){
|
||
case 1:
|
||
friendsAdvice[0]='A';
|
||
break;
|
||
case 2:
|
||
friendsAdvice[0]='B';
|
||
break;
|
||
case 3:
|
||
friendsAdvice[0]='C';
|
||
break;
|
||
case 4:
|
||
friendsAdvice[0]='D';
|
||
break;
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
if ((currentquestion > 5) && (currentquestion<11)){
|
||
if (tmpcodee>5){ //Äðóã çíàåò
|
||
if (correctanswer==0x01) {friendsAdvice[0]='A';}
|
||
if (correctanswer==0x02) {friendsAdvice[0]='B';}
|
||
if (correctanswer==0x03) {friendsAdvice[0]='C';}
|
||
if (correctanswer==0x04) {friendsAdvice[0]='D';}
|
||
}
|
||
else //Äðóã ãîâîðèò íàóãàä
|
||
{
|
||
|
||
int tmpbyte2=0;
|
||
recode52:
|
||
int tmpcodee2=(rtlRand()%4)+1;
|
||
switch(tmpcodee2){
|
||
case 1:
|
||
friendsAdvice[0]='A';
|
||
break;
|
||
case 2:
|
||
friendsAdvice[0]='B';
|
||
break;
|
||
case 3:
|
||
friendsAdvice[0]='C';
|
||
break;
|
||
case 4:
|
||
friendsAdvice[0]='D';
|
||
break;
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
if (currentquestion > 10){
|
||
if (tmpcodee>7){ //Äðóã çíàåò
|
||
if (correctanswer==0x01) {friendsAdvice[0]='A';}
|
||
if (correctanswer==0x02) {friendsAdvice[0]='B';}
|
||
if (correctanswer==0x03) {friendsAdvice[0]='C';}
|
||
if (correctanswer==0x04) {friendsAdvice[0]='D';}
|
||
}
|
||
else //Äðóã ãîâîðèò íàóãàä
|
||
{
|
||
|
||
int tmpbyte2=0;
|
||
recode53:
|
||
int tmpcodee2=(rtlRand()%4)+1;
|
||
|
||
switch(tmpcodee2){
|
||
case 1:
|
||
friendsAdvice[0]='A';
|
||
break;
|
||
case 2:
|
||
friendsAdvice[0]='B';
|
||
break;
|
||
case 3:
|
||
friendsAdvice[0]='C';
|
||
break;
|
||
case 4:
|
||
friendsAdvice[0]='D';
|
||
break;
|
||
}
|
||
}
|
||
|
||
if ((friendsAdvice[0]=='A')&&(drawA==false)){goto recode5;}
|
||
if ((friendsAdvice[0]=='B')&&(drawB==false)){goto recode5;}
|
||
if ((friendsAdvice[0]=='C')&&(drawC==false)){goto recode5;}
|
||
if ((friendsAdvice[0]=='D')&&(drawD==false)){goto recode5;}
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
}
|
||
|
||
void call_zal(){ //Ïîäñêàçêà çàëà
|
||
int maxpercent=0;
|
||
for (int tmpc=0; tmpc<(16-currentquestion);tmpc=tmpc+2){
|
||
maxpercent=(rtlRand()%101);
|
||
if (maxpercent>50) {break;}
|
||
}
|
||
|
||
if ((drawA==true)&&(drawB==true)&&(drawC==true)&&(drawD==true)){
|
||
switch (correctanswer){
|
||
case 0x01:
|
||
zalA=maxpercent;
|
||
zalB=(rtlRand()%(101-zalA));
|
||
zalC=(rtlRand()%(101-zalA-zalB));
|
||
zalD=100-zalA-zalB-zalC;
|
||
break;
|
||
|
||
case 0x02:
|
||
zalB=maxpercent;
|
||
zalA=(rtlRand()%(101-zalB));
|
||
zalC=(rtlRand()%(101-zalA-zalB));
|
||
zalD=100-zalA-zalB-zalC;
|
||
break;
|
||
|
||
case 0x03:
|
||
zalC=maxpercent;
|
||
zalB=(rtlRand()%(101-zalC));
|
||
zalA=(rtlRand()%(101-zalC-zalB));
|
||
zalD=100-zalA-zalB-zalC;
|
||
break;
|
||
|
||
case 0x04:
|
||
zalD=maxpercent;
|
||
zalB=(rtlRand()%(101-zalD));
|
||
zalC=(rtlRand()%(101-zalD-zalB));
|
||
zalA=100-zalD-zalB-zalC;
|
||
break;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if ((drawA==true)&&(drawB==true)){
|
||
if (correctanswer==0x01){
|
||
zalA=maxpercent;
|
||
zalB=100-zalA;
|
||
}
|
||
else
|
||
{
|
||
zalB=maxpercent;
|
||
zalA=100-zalB;
|
||
}
|
||
}
|
||
if ((drawA==true)&&(drawC==true)){
|
||
if (correctanswer==0x01){
|
||
zalA=maxpercent;
|
||
zalC=100-zalA;
|
||
}
|
||
else
|
||
{
|
||
zalC=maxpercent;
|
||
zalA=100-zalC;
|
||
}
|
||
}
|
||
if ((drawA==true)&&(drawD==true)){
|
||
if (correctanswer==0x01){
|
||
zalA=maxpercent;
|
||
zalD=100-zalA;
|
||
}
|
||
else
|
||
{
|
||
zalD=maxpercent;
|
||
zalA=100-zalD;
|
||
}
|
||
}
|
||
|
||
if ((drawB==true)&&(drawC==true)){
|
||
if (correctanswer==0x02){
|
||
zalB=maxpercent;
|
||
zalC=100-zalB;
|
||
}
|
||
else
|
||
{
|
||
zalC=maxpercent;
|
||
zalB=100-zalC;
|
||
}
|
||
}
|
||
if ((drawB==true)&&(drawD==true)){
|
||
if (correctanswer==0x02){
|
||
zalB=maxpercent;
|
||
zalD=100-zalB;
|
||
}
|
||
else
|
||
{
|
||
zalD=maxpercent;
|
||
zalB=100-zalD;
|
||
}
|
||
}
|
||
|
||
if ((drawC==true)&&(drawD==true)){
|
||
if (correctanswer==0x03){
|
||
zalC=maxpercent;
|
||
zalD=100-zalC;
|
||
}
|
||
else
|
||
{
|
||
zalD=maxpercent;
|
||
zalC=100-zalD;
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
void kos_Main(){
|
||
rtlSrand(kos_GetSystemClock() / 10000);
|
||
kos_InitHeap();
|
||
getFilePathName();
|
||
prepareFileData();
|
||
draw_window();
|
||
while (true){
|
||
|
||
switch (kos_WaitForEvent()){
|
||
case 1:
|
||
draw_window();
|
||
break;
|
||
case 2:
|
||
Byte keyCode;
|
||
kos_GetKey(keyCode);
|
||
|
||
if (status==0){ //Ìåíþ
|
||
if (keyCode==27){
|
||
app_halt();
|
||
}
|
||
if (keyCode==13){
|
||
currentquestion=1;
|
||
status=1;
|
||
loadquestion();
|
||
////// ÏÎÌÅÍßÒÜ ÌÅÑÒÀÌÈ!!!!!!! /////////
|
||
draw_window();
|
||
|
||
}
|
||
}
|
||
if (status==1){ //Èãðà
|
||
|
||
if (keyCode==8){
|
||
status=6;
|
||
draw_window();
|
||
}
|
||
|
||
if (drawA==true){
|
||
if ((keyCode==49)||(keyCode==97)||(keyCode==65)){
|
||
if (correctanswer==0x01){
|
||
status=2;
|
||
}
|
||
else
|
||
{
|
||
status=-1;
|
||
}
|
||
drawA = true;
|
||
drawB = true;
|
||
drawC = true;
|
||
drawD = true;
|
||
|
||
draw_window();
|
||
}
|
||
}
|
||
|
||
if (drawB==true){
|
||
if ((keyCode==50)||(keyCode==98)||(keyCode==66)){
|
||
if (correctanswer==0x02){
|
||
status=2;
|
||
}
|
||
else
|
||
{
|
||
status=-1;
|
||
}
|
||
drawA = true;
|
||
drawB = true;
|
||
drawC = true;
|
||
drawD = true;
|
||
|
||
draw_window();
|
||
}
|
||
}
|
||
if (drawC==true){
|
||
if ((keyCode==51)||(keyCode==99)||(keyCode==67)){
|
||
if (correctanswer==0x03){
|
||
status=2;
|
||
}
|
||
else
|
||
{
|
||
status=-1;
|
||
}
|
||
drawA = true;
|
||
drawB = true;
|
||
drawC = true;
|
||
drawD = true;
|
||
|
||
draw_window();
|
||
}
|
||
}
|
||
if (drawD==true){
|
||
if ((keyCode==52)||(keyCode==100)||(keyCode==68)){
|
||
if (correctanswer==0x04){
|
||
status=2;
|
||
}
|
||
else
|
||
{
|
||
status=-1;
|
||
}
|
||
drawA = true;
|
||
drawB = true;
|
||
drawC = true;
|
||
drawD = true;
|
||
|
||
draw_window();
|
||
}
|
||
}
|
||
|
||
if (callfriendavailable==true){ //Ðåàëèçàöèÿ ïîäñêàçêè "Çâîíîê äðóãó"
|
||
if (keyCode==56){
|
||
callfriendavailable=false;
|
||
status=4;
|
||
call_friend();
|
||
draw_window();
|
||
}
|
||
}
|
||
|
||
if (zalavailable==true){ //Ðåàëèçàöèÿ ïîäñêàçêè çàëà
|
||
if (keyCode==57){
|
||
zalavailable=false;
|
||
status=5;
|
||
call_zal();
|
||
draw_window();
|
||
}
|
||
}
|
||
|
||
if (na50available==true){ //Ðåàëèçàöèÿ ïîäñêàçêè "50 íà 50"
|
||
if (keyCode==55){
|
||
|
||
if (correctanswer==0x01){
|
||
drawA=true;
|
||
|
||
int tmpcodee;
|
||
|
||
recode1:
|
||
tmpcodee =(rtlRand()%3)+1;
|
||
|
||
int tmpbyte;
|
||
|
||
switch(tmpcodee){
|
||
case 1:
|
||
drawB=true;
|
||
drawC=false;
|
||
drawD=false;
|
||
break;
|
||
case 2:
|
||
drawB=false;
|
||
drawC=true;
|
||
drawD=false;
|
||
case 3:
|
||
drawB=false;
|
||
drawC=false;
|
||
drawD=true;
|
||
|
||
}
|
||
}
|
||
if (correctanswer==0x02){
|
||
drawB=true;
|
||
|
||
int tmpcodee;
|
||
|
||
recode2:
|
||
tmpcodee =(rtlRand()%3)+1;
|
||
|
||
int tmpbyte;
|
||
|
||
|
||
switch(tmpcodee){
|
||
case 1:
|
||
drawA=true;
|
||
drawC=false;
|
||
drawD=false;
|
||
break;
|
||
case 2:
|
||
drawA=false;
|
||
drawC=true;
|
||
drawD=false;
|
||
case 3:
|
||
drawA=false;
|
||
drawC=false;
|
||
drawD=true;
|
||
|
||
}
|
||
}
|
||
if (correctanswer==0x03){
|
||
drawC=true;
|
||
|
||
int tmpcodee;
|
||
|
||
recode3:
|
||
tmpcodee =(rtlRand()%3)+1;
|
||
int tmpbyte;
|
||
|
||
|
||
switch(tmpcodee){
|
||
case 1:
|
||
drawB=true;
|
||
drawA=false;
|
||
drawD=false;
|
||
break;
|
||
case 2:
|
||
drawB=false;
|
||
drawA=true;
|
||
drawD=false;
|
||
case 3:
|
||
drawB=false;
|
||
drawA=false;
|
||
drawD=true;
|
||
|
||
}
|
||
}
|
||
if (correctanswer==0x04){
|
||
drawA=true;
|
||
|
||
int tmpcodee;
|
||
|
||
recode4:
|
||
tmpcodee =(rtlRand()%3)+1;
|
||
|
||
int tmpbyte;
|
||
|
||
|
||
switch(tmpcodee){
|
||
case 1:
|
||
drawB=true;
|
||
drawC=false;
|
||
drawA=false;
|
||
break;
|
||
case 2:
|
||
drawB=false;
|
||
drawC=true;
|
||
drawA=false;
|
||
case 3:
|
||
drawB=false;
|
||
drawC=false;
|
||
drawA=true;
|
||
|
||
}
|
||
}
|
||
na50available=false;
|
||
draw_window();
|
||
|
||
}
|
||
}
|
||
|
||
}
|
||
if (status==2){ //Îêíî "Ýòî - ïðàâèëüíûé îòâåò!"
|
||
if (keyCode==13){
|
||
if (currentquestion<15){
|
||
currentquestion++;
|
||
status=1;
|
||
loadquestion();
|
||
draw_window();
|
||
}
|
||
else
|
||
{
|
||
status=3;
|
||
draw_window();
|
||
}
|
||
|
||
}
|
||
}
|
||
if (status==3){ //Âû âûèãðàëè ìèëëèîí
|
||
if (keyCode==27){
|
||
app_halt();
|
||
}
|
||
}
|
||
if (status==4){ //Ñîâåò äðóãà
|
||
if (keyCode==13){
|
||
status=1;
|
||
draw_window();
|
||
}
|
||
}
|
||
if (status==5){ //Ïîäñêàçêà çàëà
|
||
if (keyCode==13){
|
||
status=1;
|
||
draw_window();
|
||
}
|
||
}
|
||
if (status==6){ //Âû çàáðàëè äåíüãè ;-)
|
||
if (keyCode==27){
|
||
app_halt();
|
||
}
|
||
}
|
||
if (status==-1){ //Âû îøèáëèñü :-(
|
||
if (keyCode==27){
|
||
app_halt();
|
||
}
|
||
}
|
||
|
||
//kos_DrawBar(38,118,50,130,0xBBBBBB);
|
||
//kos_DisplayNumberToWindow (keyCode,3,40,120,0x000000, nbDecimal, false);
|
||
|
||
|
||
break;
|
||
case 3:
|
||
app_halt();
|
||
break;
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
|
||
void app_halt(){
|
||
delete filepathname;
|
||
|
||
if (needcleanup==true){
|
||
delete question;
|
||
delete answerA;
|
||
delete answerB;
|
||
delete answerC;
|
||
delete answerD;
|
||
}
|
||
kos_ExitApp();
|
||
}
|