/********************************************************************************/ /* */ /* Primary */ /* */ /********************************************************************************/ /***************** DDOBJ elSpi::LoadObject("プラグインファイル名","画像ファイル名" ,LOAD_DEFAULT or LOAD_RAM); BOOL elSpi::SwapObject("プラグインファイル名","画像ファイル名" ,DDOBJ,LOAD_DEFAULT or LOAD_RAM); 公開変数は、 int elSpi::SizeX[DDOBJ]; int elSpi::SizeY[DDOBJ]; ******************/ #include "stdlib.h" //#define DIRECTMUSIC #define ELSPI #include "El.h" #include "elSpi2.h" /********************************************************************************/ #include #include //画面 #define LOADF_SCREEN 1 #define START_SCREEN 2 #define GAME_FORMAT_SCREEN 3 #define MAIN1_SCREEN 4 #define IVENT_SCREEN 5 #define MAP_SCREEN 6 #define REST_SCREEN 7 #define TEST_SCREEN 8 #define CALENDER_SCREEN 9 #define LOADFILE_SCREEN 10 #define SYSTEM_SCREEN 11 #define SAVE_SCREEN 12 #define LOAD_SCREEN 13 #define GGG_SCREEN 555 //定数 #define TextMax 1000//1ファイル1000行まで対応 #define TextGyosu 3 //画面上に表示される行数 #define OFF 0 #define ON 1 #define YET 2 #define GRAPHX 700/*画像の大きさ(X)*/ #define GRAPHY 455/*画像の大きさ(Y)*/ #define X_MAX 800/*画像の大きさ(X)*/ #define Y_MAX 600/*画像の大きさ(Y)*/ #define SCENE_N 10 #define VK_Z 0x5a #define VK_X 0x58 #define VK_C 0x43 #define VK_V 0x56 #define VK_B 0x42 #define VK_N 0x42 #define ASA 1 #define HIRU 2 #define YORU 3 /********************************************************************************/ void LoadScreen(void); void Main1Screen(void); void RestScreen(void); void Starting(void );//オープニング画面 void LoadFile(void );/*オープニング画面でのロード部分*/ void GmFormat(void );//ポイントの振り分け int Study(int );/*勉強*/ void Test(int );/*テスト*/ void Test_Kioku(int ); int Test_Start(int ); void Calender(void );/*カレンダー*/ void GGG(void );/*グラフィックテスト*/ void Save(void );/*セーブ部分*/ void Load(void );/*ロード部分*/ void SysMenu(void );/*システムメニュー*/ void Koudou(void );/*行動部分*/ void _LoadText(char *text); void _TextCheck(void ); int _Select_f(int ); int _Graphic_f(int ); void _Jump_f(int ); void _FlagChange_f(int ); void _FlagChange_tp(int ); void _FlagCheck_f(int ); void _TextChange_day(int ); void _TextChange_rf(int ); void _TextChange_f(int ); void _WhiteOut_w(int i); void _Return(int ); /********************************************************************************/ char mes[TextMax][256],gameflag[1000], app_scene[SCENE_N+1],tree_scene[5][SCENE_N+1], filename[20]="text.txt", mes_void[]="                                         "; int line=0,//行数 GraphNumber=0,now_time=0/*乱数用*/, now_line=0,line_max, rireki[21]; char LongBuffer[50]; char SubjectTable[6][20]={"英語","数学","国語","理科","地歴","小論"}; char KoudouString[18][20]={"移動","勉強","休憩","テスト","カレンダー", "システム" ,"数学-150","数学-100","数学-60","数学+100","数学+200","数学600","数学700","数学800","数学900"}; int NextKey,NextKey2; int TreeKey; /********************************************************************************/ /* ゲーム用データ(構造体) */ /********************************************************************************/ struct gm{//主人公の個人データ int subject[6];//科目 int sabori_sbj[6];//さぼり科目 int tairyoku;//体力 int konjou;//根性 int ai;//愛 int syutyu;//集中力 int baio;//バイオリズム int now_studydata[6],before_studydata[6],stay_studydata[6]; /*初日から何時間目に勉強したかという値を記録(現在/以前/継続)*/ int _month;//月 int _day;//日 int _jikan;//時間 int _place;//場所 }; struct tst{//テストデータ int answer[10][10];//答えのデータ }; struct gm game,game_max; struct tst test; long int GraphJPG[3],StringJPG,WHITE_JPG; long int SYSTEMJPG,SYS_JPG; long int HAIKEI_JPG/*パラメータなど*/,BACK_JPG/*パラメータの後ろの画像*/; //DSOBJ SampleWAV; /********************************************************************************/ /********************************************************************************/ /* */ /* メイン関数 */ /* */ /********************************************************************************/ int elMain("Primary") { // elWindow(640,480,FALSE); _LoadText(filename); //テキストロード // elLoop(){ elSetScreen(LOADF_SCREEN,LoadScreen()); elSetScreen(START_SCREEN,Starting()); elSetScreen(GAME_FORMAT_SCREEN,GmFormat()); elSetScreen(IVENT_SCREEN,_TextCheck()); elSetScreen(REST_SCREEN,RestScreen()); elSetScreen(TEST_SCREEN,Test(1)); elSetScreen(CALENDER_SCREEN,Calender()); elSetScreen(GGG_SCREEN,GGG()); elSetScreen(LOADFILE_SCREEN,LoadFile()); elSetScreen(SYSTEM_SCREEN,SysMenu()); elSetScreen(SAVE_SCREEN,Save()); elSetScreen(LOAD_SCREEN,Load()); elSetScreen(MAIN1_SCREEN,Main1Screen()); } elExitMain(); } /********************************************************************************/ /* */ /* ウィンドウ生成関数 */ /* */ /********************************************************************************/ void elCreate(void)/*初期化*/ { elDraw::Screen(X_MAX,Y_MAX); elCallScreen(LOADF_SCREEN); } /********************************************************************************/ /* */ /* キーボード関数 */ /* */ /********************************************************************************/ void elKeyboard(void) { case VK_ESCAPE: elDraw::Exit(); break; elExitKeyboard(); } /********************************************************************************/ /* */ /* イベント関数 */ /* */ /********************************************************************************/ long elEvent(void) { elExitEvent(); // (o) } /********************************************************************************/ /* */ /* ロード画面 */ /* */ /********************************************************************************/ void LoadScreen(void) { int temp; //画像 sprintf(LongBuffer,"black.jpg",1); GraphJPG[0]=elSpi::LoadObject("ifjpeg.spi",LongBuffer); GraphJPG[1]=elSpi::LoadObject("ifjpeg.spi",LongBuffer); GraphJPG[2]=elSpi::LoadObject("ifjpeg.spi",LongBuffer); sprintf(LongBuffer,"white.jpg",1); WHITE_JPG=elSpi::LoadObject("ifjpeg.spi",LongBuffer); sprintf(LongBuffer,"sysmenu.jpg",1); SYS_JPG=elSpi::LoadObject("ifjpeg.spi",LongBuffer); //音楽 // sprintf(Buffer,"start.wav"); // SampleWAV=elSound::LoadObject(Buffer,3); sprintf(LongBuffer,"opening.jpg"); BACK_JPG=elSpi::LoadObject("ifjpeg.spi",LongBuffer); HAIKEI_JPG=elSpi::LoadObject("ifjpeg.spi",LongBuffer); // フラグ初期化 for(temp=0;temp<1000;temp++) gameflag[temp]=0; //ゲームデータ初期化 for(temp=0;temp<6;temp++){ game.subject[temp]=40; game.sabori_sbj[temp]=0; } for(temp=0;temp<21;temp++){ rireki[temp]=0; } game.tairyoku=6;game.syutyu=6;game.konjou=2; game.ai=3;game._month=12;game._day=10; game._jikan=8; for(temp=0;temp<6;temp++){ game.before_studydata[temp]=240; } elCallScreen(START_SCREEN); } ///////////////////////////////////////////////////////////////////////////////////////////// void Starting(void )//オープニング画面///////////////////////////////////////////////////// { int temp,tree_flag=2; elDraw::Clear(); //画像の表示 elDraw::DirectLayer(0,0,HAIKEI_JPG,0,0,X_MAX,Y_MAX); //オープニング画面処理開始 for(temp=0;temp<2;temp++){ //もし選択肢がマウスの座標位置なら if( ((MousePX>=462)&&(MousePX<=765)) && ((MousePY>=475+temp*30)&& (MousePY<=475+temp*30+25)) ){ // 左ボタンが押された場合 if(MouseCL){ tree_flag=temp; } } } elDraw::Refresh(); if(tree_flag==0){ elSpi::SwapObject("ifjpeg.spi","makchr.jpg",HAIKEI_JPG); elCallScreen(GAME_FORMAT_SCREEN); } else if(tree_flag==1){ sprintf(LongBuffer,"system.jpg"); SYSTEMJPG=elSpi::LoadObject("ifjpeg.spi",LongBuffer); elCallScreen(LOADFILE_SCREEN); } } //////////////////////////////////////////////////////////////////////////////////// void LoadFile(void ){/*オープニングのロード部分*/ static int temp,temp2; char tempstring[20], savefile[4][20]={"save1.dat","save2.dat", "save3.dat","save4.dat"}; elDraw::Clear(); elDraw::DirectLayer(0,0,SYSTEMJPG,0,0,X_MAX,Y_MAX); elFont::Begin(GOTHIC,30,0,FALSE,FALSE,FALSE); elFont::Color(RGB(255,0,0),RGB(255,255,255),TRUE); for(temp=0;temp<4;temp++){ sprintf(tempstring,"セーブファイル%d",temp); elFont::Draw(200,100*temp+100,tempstring); } elFont::Before(); if( ((MousePX>=100)&&(MousePX<=700)) && ((MousePY>=100)&&(MousePY<=199)) && (MouseCL) ){//セーブファイル1 MouseCL=NULL; temp2=0; } else if( ((MousePX>=100)&&(MousePX<=700)) && ((MousePY>=200)&&(MousePY<=299)) && (MouseCL) ){//セーブファイル2 MouseCL=NULL; temp2=1; } else if( ((MousePX>=100)&&(MousePX<=700)) && ((MousePY>=300)&&(MousePY<=399)) && (MouseCL) ){//セーブファイル3 MouseCL=NULL; temp2=2; } else if( ((MousePX>=100)&&(MousePX<=700)) && ((MousePY>=400)&&(MousePY<=499)) && (MouseCL) ){//セーブファイル4 MouseCL=NULL; temp2=3; } if( ((MousePX>=100)&&(MousePX<=290)) && ((MousePY>=520)&&(MousePY<=580)) && (MouseCL) ){//ロード MouseCL=NULL; FILE *fp; struct gm temp_gm[2]; fp=fopen(savefile[temp2],"r"); if(!fp) exit(1); fread(temp_gm,sizeof(struct gm),2,fp); game=temp_gm[0]; game_max=temp_gm[1]; fclose(fp); MouseCL=NULL; // sprintf(LongBuffer,"black.jpg"); sprintf(LongBuffer,"gamen.jpg"); StringJPG=elSpi::LoadObject("ifjpeg.spi",LongBuffer); elFadeType(FADE_SLIDE_UPDOWN,20); elFadeScreen(MAIN1_SCREEN); } else if( ((MousePX>=510)&&(MousePX<=700)) && ((MousePY>=520)&&(MousePY<=580)) && (MouseCL) ){//元の画面に戻る MouseCL=NULL; elFadeType(FADE_SLIDE_UPDOWN,20); elFadeScreen(START_SCREEN); } elDraw::Refresh(); } /********************************************************************************/ /* */ /* メイン画面  */ /* */ /********************************************************************************/ void Main1Screen(void) { elDraw::Clear(); elDraw::DirectLayer(0,0,HAIKEI_JPG,0,0,X_MAX,GRAPHY);//h1.jpg elDraw::Layer(0,0,StringJPG,0,0,800,600);//gamen.jpg elDraw::DirectLayer(653+game.subject[0]/10,80,SYS_JPG,225,10,323-game.subject[0]/10,23); elDraw::Layer(653,80,SYS_JPG,325,10,game.subject[0]/10+325,23);//パラメータ表示 elDraw::DirectLayer(653+game.subject[1]/10,133,SYS_JPG,225,10,323-game.subject[1]/10,23); elDraw::Layer(653,133,SYS_JPG,325,10,game.subject[1]/10+325,23);//パラメータ表示 elDraw::DirectLayer(653+game.subject[2]/10,183,SYS_JPG,225,10,323-game.subject[2]/10,23); elDraw::Layer(653,183,SYS_JPG,325,10,game.subject[2]/10+325,23);//パラメータ表示 elDraw::DirectLayer(653+game.subject[3]/10,236,SYS_JPG,225,10,323-game.subject[3]/10,23); elDraw::Layer(653,236,SYS_JPG,325,10,game.subject[3]/10+325,23);//パラメータ表示 elDraw::DirectLayer(653+game.subject[4]/10,292,SYS_JPG,225,10,323-game.subject[4]/10,23); elDraw::Layer(653,292,SYS_JPG,325,10,game.subject[4]/10+325,23);//パラメータ表示 elDraw::DirectLayer(653+game.subject[5]/10,345,SYS_JPG,225,10,323-game.subject[5]/10,23); elDraw::Layer(653,345,SYS_JPG,325,10,game.subject[5]/10+325,23);//パラメータ表示 elDraw::DirectLayer(653+game.tairyoku*98/game_max.tairyoku,425,SYS_JPG,225,10,325-game.tairyoku*100/game_max.tairyoku,25); elDraw::Layer(653,425,SYS_JPG,325,10,game.tairyoku*98/game_max.tairyoku+325,25);//パラメータ表示 //gamen.jpgの隠し作業 elDraw::DirectLayer(205,206,HAIKEI_JPG,205,206,502,GRAPHY);//h1.jpg Koudou(); } /********************************************************************************/ /* */ /* テキストロード */ /* */ /********************************************************************************/ //データファイルのロード void _LoadText(char *text) { FILE *fp; int i=0; char buf[256]; fp=fopen(text,"rt"); if(!fp) exit(1); line=0; while(TRUE){ fscanf(fp,"%s",&(mes[line])); if(feof(fp)) break; if(fgets(buf,256,fp)==NULL){ printf("fgets 関数でエラーが生じました。\n"); exit(1); } else{ strncpy(mes[line],mes_void,strlen(buf)-1); strncpy(mes[line],buf,strlen(buf)-1); } line++; } line_max=line; line=0; fclose(fp); } /********************************************************************************/ /* */ /* テキストチェック */ /* */ /********************************************************************************/ void _TextCheck(void ) { char month[6],day[6],time[10]; int i,tree_flag=0,flag=ON,temp_flag=OFF,rtn; static int Sz=16,Szp=1/* フォントサイズ(Sz)、サイズ加減値(Szp)*/; elDraw::Clear(); elDraw::DirectLayer(0,0,HAIKEI_JPG,0,0,X_MAX,GRAPHY); elDraw::Layer(0,0,StringJPG,0,0,215,158); elDraw::Layer(0,GRAPHY,StringJPG,0,GRAPHY,615,Y_MAX); //日付の表示 elFont::Begin(GOTHIC,Sz*2.1,0,FALSE,FALSE,FALSE); elFont::Color(RGB(55,55,55),RGB(0,0,0),TRUE); sprintf(month,"%2d",game._month); elFont::Draw(85,32,month); elFont::Before(); elFont::Begin(GOTHIC,Sz*1.5,0,FALSE,FALSE,FALSE); elFont::Color(RGB(55,55,55),RGB(0,0,0),TRUE); sprintf(day,"%2d",game._day); elFont::Draw(145,55,day); elFont::Before(); elFont::Begin(GOTHIC,Sz*1.7,0,FALSE,FALSE,FALSE); elFont::Color(RGB(55,55,55),RGB(0,0,0),TRUE); sprintf(time,"%2d:00",game._jikan); elFont::Draw(85,97,time); elFont::Before(); elDraw::Layer(0,0,GraphJPG[0],0,0,X_MAX,GRAPHY); elDraw::Layer(0,0,GraphJPG[1],0,0,X_MAX,GRAPHY); elDraw::Layer(0,0,GraphJPG[2],0,0,X_MAX,GRAPHY); for(i=0;i=30)&&(MousePX<=30+GRAPHX)) && ((MousePY>=GRAPHY+16*1+20)&&(MousePY<=GRAPHY+16*1+39)) ){ if(MouseCL){// 選択肢1 MouseCL=NULL;tree_flag=1; } } if( ((MousePX>=30)&&(MousePX<=30+GRAPHX)) && ((MousePY>=GRAPHY+16*2+20)&&(MousePY<=GRAPHY+16*2+39)) ){ if(MouseCL){// 選択肢2 MouseCL=NULL;tree_flag=2; } } if( ((MousePX>=30)&&(MousePX<=30+GRAPHX)) && ((MousePY>=GRAPHY+16*3+20)&&(MousePY<=GRAPHY+16*3+39)) ){ if(MouseCL){// 選択肢3 MouseCL=NULL;tree_flag=3; } } if(tree_flag!=0){ //キーが押されたらジャンプ処理開始 flag=OFF; for(k=0;k'){ app_scene[0+1]=':'; for(j=1;j<=SCENE_N;j++){ app_scene[j+1]=mes[line+i][j+1]; //ジャンプ先をapp_sceneに格納 } for(j=0;j227 if( ((MousePX>240)&&(MousePX<=255)) && ((MousePY>=100+i*60)&&(MousePY<=100+i*60+27)) ){ // 左ボタンが押された場合……。 if(MouseCL){ // 初期化します。 MouseCL=NULL;tree_flag=i+1; zougenti=1;zougenti2=1; } // 右ボタンが押された場合……。 else if(MouseCR){ // 初期化します。 MouseCR=NULL;tree_flag=i+1; zougenti=-1;zougenti2=-1; } } //もし選択肢がマウスの座標位置なら(科目10桁目) if( ((MousePX>=225)&&(MousePX<=240)) && ((MousePY>=100+i*60)&&(MousePY<=100+i*60+27))){ teido=10; // 左ボタンが押された場合……。 if(MouseCL){ MouseCL=NULL; // 初期化します。 if(CharacterPoint>=10){ tree_flag=i+1; zougenti=1;zougenti2=1; } } // 右ボタンが押された場合……。 else if(MouseCR){ // 初期化します。 MouseCR=NULL;tree_flag=i+1; zougenti=-1;zougenti2=-1; } } } for(i=6;i<9;i++){ //もし選択肢がマウスの座標位置なら(科目)y=245>295 if( ((MousePX>=500)&&(MousePX<=570)) && ((MousePY>=100+(i-6)*60)&& (MousePY<=100+(i-6)*60+20)) ){ // 左ボタンが押された場合……。 if(MouseCL){ MouseCL=NULL; // 初期化します。 if(CharacterPoint>=10){ tree_flag=i+1; zougenti=1;zougenti2=10; } } // 右ボタンが押された場合……。 else if(MouseCR){ // 初期化します。 MouseCR=NULL;tree_flag=i+1; zougenti=-1;zougenti2=-10; } } } //ポイント振り分け処理開始 if(tree_flag!=0){ if(tree_flag<=6)//科目 game.subject[tree_flag-1]+=zougenti*teido; else if(tree_flag==7)//体力 game.tairyoku+=zougenti; else if(tree_flag==8)//集中力 game.syutyu+=zougenti; else if(tree_flag==9)//根性 game.konjou+=zougenti; //上限値・下限値を越えたときの処理開始 for(i=0;i<6;i++){//科目 if(game.subject[i]>100 && teido==1){ game.subject[i]=100; CharacterPoint+=zougenti2; } else if(game.subject[i]<1 && teido==1){ game.subject[i]=1; CharacterPoint+=zougenti2; } if(game.subject[i]>100 && teido==10){ game.subject[i]-=10; CharacterPoint+=zougenti2*teido; } else if(game.subject[i]<1 && teido==10){ game.subject[i]+=10; CharacterPoint+=zougenti2*teido; } } if(game.tairyoku>10){//体力 game.tairyoku=10; CharacterPoint+=zougenti2; } else if(game.tairyoku<6){ game.tairyoku=6; CharacterPoint+=zougenti2; } if(game.syutyu>10){//集中力 game.syutyu=10; CharacterPoint+=zougenti2; } else if(game.syutyu<6){ game.syutyu=6; CharacterPoint+=zougenti2; } if(game.konjou>10){//根性 game.konjou=10; CharacterPoint+=zougenti2; } else if(game.konjou<0){ game.konjou=0; CharacterPoint+=zougenti2; } //上限値・下限値を越えたときの処理終了 CharacterPoint-=zougenti2*teido; if(CharacterPoint==0) return_flag=ON; tree_flag=0; } //ポイント振り分け処理終了 //ポイント振り分けに関する選択処理終了 //テキスト表示 elFont::Begin(GOTHIC,Sz*5,0,FALSE,FALSE,FALSE); elFont::Color(RGB(255,255,255),RGB(0,0,0),TRUE); sprintf(CharacterPointString," %3d ",CharacterPoint); elFont::Draw(330,355,CharacterPointString); elFont::Before(); //データの表示 elFont::Begin(GOTHIC,StatusFontSize,0,FALSE,FALSE,FALSE); elFont::Color(RGB(255,255,255),RGB(0,0,0),TRUE); for(i=0;i<6;i++){ sprintf(SubjectData,"%3d ",game.subject[i]); elFont::Draw(220,100+i*(StatusFontSize+33),SubjectData); } sprintf(SubjectData,"%3d ",game.tairyoku); elFont::Draw(500,100,SubjectData); sprintf(SubjectData,"%3d ",game.syutyu); elFont::Draw(500,160,SubjectData); sprintf(SubjectData,"%3d ",game.konjou); elFont::Draw(500,220,SubjectData); elFont::Before(); elDraw::Refresh(); if(return_flag==ON){ game_max=game; sprintf(LongBuffer,"gamen.jpg"); StringJPG=elSpi::LoadObject("ifjpeg.spi",LongBuffer); elSpi::SwapObject("ifjpeg.spi","h1.jpg",HAIKEI_JPG); elSpi::SwapObject("ifjpeg.spi","Ttomoe2.jpg",BACK_JPG); for(int temp=0;temp<6;temp++){ game.subject[temp]*=10; } CharacterPoint=10; elCallScreen(MAIN1_SCREEN); } } /********************************************************************************/ /* */ /* メイン処理部分 */ /* */ /********************************************************************************/ //////////////////////////////////////////////////////////////////////////////////// void GGG(void)/*グラフィックテスト*/ { char *SubjectData; int i,tree_flag=0; static int Sz=16,Szp=1,flag[5],start=0; elDraw::Clear(); SubjectData=(char *)malloc(30*sizeof(char )); elFont::Begin(GOTHIC,Sz,0,FALSE,FALSE,FALSE); elFont::Color(RGB(255,255,255),RGB(0,0,0),TRUE); for(i=0;i<3;i++){ if(start==0) flag[i]=0; sprintf(SubjectData," JPG%2d ",i); elFont::Draw(540,10+i*16,SubjectData); } elFont::Before(); start=1; for(i=0;i<3;i++){ if( ((MousePX>=540)&&(MousePX<=640)) && ((MousePY>=10+i*16)&&(MousePY<=10+i*16+15)) ){ // 左ボタンが押された場合……。 if(MouseCL){// 初期化します。 MouseCL==NULL;flag[i]=1-flag[i]; } } } //勉強部分結果処理開始 for(i=0;i<3;i++){ if(flag[0]==1) elDraw::Layer(0,0,GraphJPG[0],0,0,X_MAX,Y_MAX); if(flag[1]==1) elDraw::Layer(0,0,GraphJPG[1],0,0,X_MAX,Y_MAX); if(flag[2]==1) elDraw::Layer(0,0,GraphJPG[2],0,0,X_MAX,Y_MAX); } free(SubjectData); elDraw::Refresh(); } //////////////////////////////////////////////////////////////////////////////////// int Study(int Study_Flag)/*勉強部分*/ { /* 学力上昇値=勉強基本値×(勉強効率+100%)×勉強タイプ 勉強基本値:継続/サボりルールと愛の値により決定 勉強効率:=集中力・愛・根性・体力・バイオリズムにより決定 勉強タイプ:=普通勉強・無理勉強 */ char month[6],day[6],time[10],SubjectData[12],result[6]; int temp;//作業用メモリ int nowdate[6],beforedate[6],resultdate[6];//日付変数(現在/以前に勉強した日/二つの差分) int base_study/*基本勉強値*/,study_kouritu/*勉強効率*/; int tree_flag=0,return_flag=OFF; static int Sz=16,Szp=1/* フォントサイズ(Sz)、サイズ加減値(Szp)*/; static int flag_item=OFF,flag_subject=OFF,studytype/*勉強タイプ*/; elDraw::Clear(); elDraw::DirectLayer(0,0,HAIKEI_JPG,0,0,X_MAX,GRAPHY); elDraw::Layer(0,0,StringJPG,0,0,800,600);//gamen.jpg elDraw::DirectLayer(653+game.subject[0]/10,80,SYS_JPG,225,10,323-game.subject[0]/10,23); elDraw::Layer(653,80,SYS_JPG,325,10,game.subject[0]/10+325,23);//パラメータ表示 elDraw::DirectLayer(653+game.subject[1]/10,133,SYS_JPG,225,10,323-game.subject[1]/10,23); elDraw::Layer(653,133,SYS_JPG,325,10,game.subject[1]/10+325,23);//パラメータ表示 elDraw::DirectLayer(653+game.subject[2]/10,183,SYS_JPG,225,10,323-game.subject[2]/10,23); elDraw::Layer(653,183,SYS_JPG,325,10,game.subject[2]/10+325,23);//パラメータ表示 elDraw::DirectLayer(653+game.subject[3]/10,236,SYS_JPG,225,10,323-game.subject[3]/10,23); elDraw::Layer(653,236,SYS_JPG,325,10,game.subject[3]/10+325,23);//パラメータ表示 elDraw::DirectLayer(653+game.subject[4]/10,292,SYS_JPG,225,10,323-game.subject[4]/10,23); elDraw::Layer(653,292,SYS_JPG,325,10,game.subject[4]/10+325,23);//パラメータ表示 elDraw::DirectLayer(653+game.subject[5]/10,345,SYS_JPG,225,10,323-game.subject[5]/10,23); elDraw::Layer(653,345,SYS_JPG,325,10,game.subject[5]/10+325,23);//パラメータ表示 elDraw::DirectLayer(653+game.tairyoku*98/game_max.tairyoku,425,SYS_JPG,225,10,325-game.tairyoku*100/game_max.tairyoku,25); elDraw::Layer(653,425,SYS_JPG,325,10,game.tairyoku*98/game_max.tairyoku+325,25);//パラメータ表示 if(flag_subject==OFF) elDraw::DirectLayer(205,345,HAIKEI_JPG,205,345,352,GRAPHY); if(flag_item==OFF) elDraw::DirectLayer(355,206,HAIKEI_JPG,355,206,502,GRAPHY); //日付の表示 elFont::Begin(GOTHIC,Sz*2.1,0,FALSE,FALSE,FALSE); elFont::Color(RGB(55,55,55),RGB(0,0,0),TRUE); sprintf(month,"%2d",game._month); elFont::Draw(85,32,month); elFont::Before(); elFont::Begin(GOTHIC,Sz*1.5,0,FALSE,FALSE,FALSE); elFont::Color(RGB(55,55,55),RGB(0,0,0),TRUE); sprintf(day,"%2d",game._day); elFont::Draw(145,55,day); elFont::Before(); elFont::Begin(GOTHIC,Sz*1.7,0,FALSE,FALSE,FALSE); elFont::Color(RGB(55,55,55),RGB(0,0,0),TRUE); sprintf(time,"%2d:00",game._jikan); elFont::Draw(85,97,time); elFont::Before(); //勉強タイプの選択 for(temp=0;temp<3;temp++){ if( ((MousePX>=217)&&(MousePX<=319)) && ((MousePY>=220+temp*40)&&(MousePY<=220+temp*40+27)) ){ // 普通勉強 if(MouseCL&&temp==0){// 初期化します。 MouseCL=NULL;studytype=1; flag_subject=ON; } // 無理勉強 else if(MouseCL&&temp==1){// 初期化します。 MouseCL=NULL;studytype=3; flag_subject=ON; } // アイテム else if(MouseCL&&temp==2){// 初期化します。 MouseCL=NULL; flag_item=ON; } } } //科目選択のための選択枝 for(temp=0;temp<6;temp++){ //もし選択肢がマウスの座標位置なら if(flag_subject==ON){//勉強のタイプが決定していたとき if(temp%2==0){ if( ((MousePX>=212)&&(MousePX<=265)) && ((MousePY>=354+temp*16)&&(MousePY<=378+temp*16+15)) ){ if(MouseCL){// 初期化します。 MouseCL=NULL;tree_flag=temp+1; if(temp==4) tree_flag=4; } } } else if(temp%2==1){ if( ((MousePX>=269)&&(MousePX<=324)) && ((MousePY>=354+(temp-1)*16)&&(MousePY<=378+(temp-1)*16+15)) ){ if(MouseCL){// 初期化します。 MouseCL=NULL;tree_flag=temp+1; if(temp==3) tree_flag=5; } } } } } //勉強部分結果処理開始 if(tree_flag!=0){//ボタンが押されたとき //勉強基本値の決定 { //各科目において以前やった日付と比べる。 //勉強基本値:継続/さぼりルールと愛の値により決定 { temp=tree_flag-1; //12/1から何時間掛かっているか計算 if(game._month==12){ nowdate[temp]=game._day*24+game._jikan; } else{ nowdate[temp]=game._month*31*24+game._day+game._jikan; } beforedate[temp]=game.before_studydata[temp]; resultdate[temp]=nowdate[temp]-beforedate[temp]; if(1<=resultdate[temp] && resultdate[temp]<=23){ //継続ルール //日数による基本値の決定ー> 1-3>>+1,4-6>>+2,7->>+3 if(game.stay_studydata[temp]<4) base_study=1; else if(game.stay_studydata[temp]<6) base_study=2; else base_study=3; game.stay_studydata[temp]+=1;//継続回数の追加 } else if(resultdate[temp]>=24){//1日すぎて勉強しなかったら game.stay_studydata[temp]=0;//継続回数を0回にする } game.before_studydata[temp]=nowdate[temp]; //愛による判定 base_study+=game.ai-2; //勉強基本値は1以下にならない if(base_study<1) base_study=1; } }//勉強基本値の決定終了 //勉強効率の決定(%) { int temp; study_kouritu= 40/*初期値*/+game.syutyu*4/*集中力*/+(game.ai-2)*30/*愛*/ +game.konjou*4/*根性*/+(game.baio-8)*3/*バイオリズム*/; /*体力*/ temp=game_max.tairyoku/2-game_max.tairyoku; if(temp>0)//体力が基準以下だったら study_kouritu-=temp*3; }//勉強効率の決定終了 //上昇値の計算 //学力上昇値=勉強基本値×(勉強効率+100%)×勉強タイプ game.subject[tree_flag-1]+=(base_study*(study_kouritu+100)/10*studytype); if(game.subject[tree_flag-1]>=1000) game.subject[tree_flag-1]=1000; else if(game.subject[tree_flag-1]<=0) game.subject[tree_flag-1]=0; //時間の経過・体力の減少 { //時間の経過 if(studytype==1)//普通(家:4,予備校:3) game._jikan+=3; else if(studytype==3)//無理(6) game._jikan+=6; //体力の減少 game.tairyoku-=studytype; if(game.tairyoku<=0){ //力つき、1日消費する game._day+=1; game.tairyoku=6; } } studytype=-1; flag_item=OFF; flag_subject=OFF; return_flag=ON; }//勉強上昇の終了 else if(MouseCR){//勉強のキャンセル MouseCR=NULL;studytype=-1; flag_item=OFF;flag_subject=OFF; return_flag=ON; } elDraw::Refresh(); //勉強部分結果処理終了 return return_flag; } //////////////////////////////////////////////////////////////////////////////////// void RestScreen(void )/*休憩部分*/ { char *Today; char month[6],day[6],time[10]; static int Sz=16,Szp=1; /* フォントサイズ(Sz)、サイズ加減値(Szp)*/ //日付の表示 elFont::Begin(GOTHIC,Sz*2.1,0,FALSE,FALSE,FALSE); elFont::Color(RGB(55,55,55),RGB(0,0,0),TRUE); sprintf(month,"%2d",game._month); elFont::Draw(85,32,month); elFont::Before(); elFont::Begin(GOTHIC,Sz*1.5,0,FALSE,FALSE,FALSE); elFont::Color(RGB(55,55,55),RGB(0,0,0),TRUE); sprintf(day,"%2d",game._day); elFont::Draw(145,55,day); elFont::Before(); elFont::Begin(GOTHIC,Sz*1.7,0,FALSE,FALSE,FALSE); elFont::Color(RGB(55,55,55),RGB(0,0,0),TRUE); sprintf(time,"%2d:00",game._jikan); elFont::Draw(85,97,time); elFont::Before(); elDraw::Refresh(); elSystem::SetWait(1,3000);// ウェイトNo.1に3秒を設定 // 3秒以上が経過すると。Wait関数がTRUEになります while(elSystem::Wait(1)==FALSE){// ウェイトNo.1が設定時間を経過した場合 ; } //体力の調整・日付変更など game.tairyoku+=1; game._jikan+=1; if(game.tairyoku>=game_max.tairyoku) game.tairyoku=game_max.tairyoku; free(Today); elCallScreen(MAIN1_SCREEN); } //////////////////////////////////////////////////////////////////////////////////// int now_qnum;/*現在何番目の問題をやっているか*/ void Test_Kioku(int subject){/*テスト記憶部分*/ int q_pnum=3/*一つの問題についてのパターン数*/, q_snum=10/*問題の総数*/, q_num=10/*問題のパターン数*/, temp,temp2; //記憶部分開始////////////////////////////////////////////////////////////////////// //問題の作成 for(temp=0;temp=20) speed=4,lv=6; if(level<=-15) mask=4,lv=1; else if(level<=-10) mask=3,lv=2; else if(level>=10) mask=1,lv=5; //背景の表示 elDraw::Clear(); elDraw::DirectLayer(0,0,HAIKEI_JPG,0,0,800,600); //文字の表示 elFont::Begin(GOTHIC,Sz*1.7,0,FALSE,FALSE,FALSE); elFont::Color(RGB(0,0,0),RGB(120,120,255),TRUE); sprintf(ChrTmp,"%2d",now_qnum*3+flag[0]+flag[1]+flag[2]);//現在何問正解か elFont::Draw(650,140,ChrTmp); sprintf(ChrTmp2,"%2d",(10-now_qnum)*3-flag[0]-flag[1]-flag[2]);//残り何問か elFont::Draw(650,260,ChrTmp2); sprintf(ChrTmp3,"%2d",lv);//レベルはいくつか elFont::Draw(650,380,ChrTmp3); elFont::Before(); //残り時間の表示 elDraw::DirectLayer(135+(557*(MAXTIME-time))/MAXTIME, 502,SYS_JPG,0,550,time*557/MAXTIME,590);//マスク表示 if(count==0){/*カウンタが0の時に答えのパターンを決定*/ for(temp=0;temp=40){/*ずれ具合が40以上ならずれ具合を0に戻す*/ mx[temp]=0;mx2[temp]+=1; if(mx2[temp]>=10) mx2[temp]=0; } for(temp2=1;temp2=10){ if(xtemp[temp]==10 && mx[temp]==0){ do{/*正しい答えと異なるまでダミーパターンを決める*/ ans_temp=rand()*(q_num)/RAND_MAX; }while(ans_temp==ptn[temp][0]/*test.answer[temp][now_qnum]*/); ptn[temp][temp2]=ans_temp; } xtemp[temp]-=10; } jpgtemp[temp]=40*ptn[temp][temp2];/*パターンによる絵の選択*/ int temp3=0; if(121+xtemp[temp]*40+mx[temp]+40>522) temp3=(121+xtemp[temp]*40+mx[temp]+40)-522; elDraw::DirectLayer(121+xtemp[temp]*40+mx[temp],178+temp*109,SYS_JPG, 1+jpgtemp[temp]+1,0+505,40+jpgtemp[temp]-temp3+1,40+505);//ダミーパターン表示 } jpgtemp[temp]=40*ptn[temp][0];/*パターンによる絵の選択*/ int temp3=0; if(121+mx2[temp]*40+mx[temp]+40>522) temp3=(121+mx2[temp]*40+mx[temp]+40)-522; elDraw::DirectLayer(121+mx2[temp]*40+mx[temp],178+temp*109,SYS_JPG, 1+jpgtemp[temp]+1,0+505,40+jpgtemp[temp]-temp3+1,40+505);//正しい解をスロットに表示 elDraw::DirectLayer(124,122+temp*110,SYS_JPG,1+jpgtemp[temp]+1,0+505,40+ jpgtemp[temp]+1,40+505);//正しい解の表示 if((121+40*mask<=MousePX)&&(MousePX<=522-mask*40)){ if( ((MousePY>=178+temp*109)&&(MousePY<=178+temp*109+39)) &&(MouseCL)&&flag[temp]==OFF){//n番目のスロットの位置に来てクリックした場合 MouseCL=NULL; if((MousePX>=121+mx2[temp]*40+mx[temp])&&(MousePX<=121+mx2[temp]*40+mx[temp]+39)){ flag[temp]=ON; } else temptime[temp]=20/*20ターン待つ*/; } } if(MouseCR){ MouseCL=NULL; return OFF; } elDraw::DirectLayer(121,178+temp*109,SYS_JPG,100,550,100+40*mask,590);//マスク表示 elDraw::DirectLayer(522-mask*40,178+temp*109,SYS_JPG,100,550,100+mask*40,590);//マスク表示 } elDraw::Refresh(); count++; time++; if((flag[0]==ON && flag[1]==ON && flag[2]==ON)||time==MAXTIME){ count=0; for(temp=0;temp<3;temp++){ flag[temp]=OFF; temptime[temp]=0; } now_qnum++;/*問題数を1更新する*/ if(time==MAXTIME){ time=0;return OFF;} else if(now_qnum!=q_snum) return YET;/*問題数がまだ残っていたとき*/ else{ time=0;return OFF;/*問題がすべて終了したとき*/} } return ON; } void Test(int subject){/*テスト部分*/ static int flag=ON; if(flag==ON){/*一度だけ通る*/ now_qnum=0;/*現在の問題番号数*/ Test_Kioku(subject); flag=OFF; } if(Test_Start(subject)==OFF/*テストが終了したら元の画面へ戻る*/){ flag=ON; elSpi::SwapObject("ifjpeg.spi","h1.jpg",HAIKEI_JPG); elFadeType(FADE_LINE2,20); elFadeScreen(MAIN1_SCREEN); } } //////////////////////////////////////////////////////////////////////////////////// void Calender(void ){/*カレンダー表示部分*/ int i; static int Sz=32,Szp=1;/* フォントサイズ(Sz)、サイズ加減値(Szp)*/ char Day[20]; elDraw::Clear(); if(game._month==1){ elDraw::DirectLayer(0,0,HAIKEI_JPG,0,0,X_MAX,Y_MAX); } else if(game._month==2){ elDraw::DirectLayer(0,0,HAIKEI_JPG,0,0,X_MAX,Y_MAX); } elFont::Begin(GOTHIC,Sz*1.7,0,FALSE,FALSE,FALSE); elFont::Color(RGB(0,0,0),RGB(255,255,255),TRUE); for(i=1;i<=31;i++){ sprintf(Day,"%2d",i); elFont::Draw(80+70*((i-1)%7),125+50*((i-1)/7),Day); } for(i=1;i<=31;i++){ if(game._day>i){ sprintf(Day,"×",i); elFont::Draw(80+70*((i-1)%7),125+50*((i-1)/7),Day); } else if(game._day==i){ sprintf(Day,"○",i); elFont::Draw(80+70*((i-1)%7),125+50*((i-1)/7),Day); } } elFont::Before(); elDraw::Refresh(); if(MouseCL){// 左ボタンが押された場合……。 MouseCL=NULL; elSpi::SwapObject("ifjpeg.spi","h1.jpg",HAIKEI_JPG); elFadeType(FADE_SLIDE_UPDOWN,20); elFadeScreen(MAIN1_SCREEN); } } //////////////////////////////////////////////////////////////////////////////////// void SysMenu(void ){/*システムメニュー部分*/ int temp; char month[6],day[6],time[10],chrtemp[4]; static int flag=OFF,flag2=0/*0:デフォルト、1:save、2:load*/; static int Sz=16,Szp=1; /* フォントサイズ(Sz)、サイズ加減値(Szp)*/ elDraw::Clear(); elDraw::DirectLayer(0,0,HAIKEI_JPG,0,0,X_MAX,GRAPHY);//h1.jpg elDraw::Layer(0,0,StringJPG,0,0,800,600);//gamen.jpg elDraw::DirectLayer(653+game.subject[0]/10,80,SYS_JPG,225,10,323-game.subject[0]/10,23); elDraw::Layer(653,80,SYS_JPG,325,10,game.subject[0]/10+325,23);//パラメータ表示 elDraw::DirectLayer(653+game.subject[1]/10,133,SYS_JPG,225,10,323-game.subject[1]/10,23); elDraw::Layer(653,133,SYS_JPG,325,10,game.subject[1]/10+325,23);//パラメータ表示 elDraw::DirectLayer(653+game.subject[2]/10,183,SYS_JPG,225,10,323-game.subject[2]/10,23); elDraw::Layer(653,183,SYS_JPG,325,10,game.subject[2]/10+325,23);//パラメータ表示 elDraw::DirectLayer(653+game.subject[3]/10,236,SYS_JPG,225,10,323-game.subject[3]/10,23); elDraw::Layer(653,236,SYS_JPG,325,10,game.subject[3]/10+325,23);//パラメータ表示 elDraw::DirectLayer(653+game.subject[4]/10,292,SYS_JPG,225,10,323-game.subject[4]/10,23); elDraw::Layer(653,292,SYS_JPG,325,10,game.subject[4]/10+325,23);//パラメータ表示 elDraw::DirectLayer(653+game.subject[5]/10,345,SYS_JPG,225,10,323-game.subject[5]/10,23); elDraw::Layer(653,345,SYS_JPG,325,10,game.subject[5]/10+325,23);//パラメータ表示 elDraw::DirectLayer(653+game.tairyoku*98/game_max.tairyoku,425,SYS_JPG,225,10,325-game.tairyoku*100/game_max.tairyoku,25); elDraw::Layer(653,425,SYS_JPG,325,10,game.tairyoku*98/game_max.tairyoku+325,25);//パラメータ表示 //gamen.jpgの隠し作業 elDraw::DirectLayer(205,206,HAIKEI_JPG,205,206,502,GRAPHY);//h1.jpg elDraw::Layer(180,200,SYS_JPG,180,200,360,GRAPHY);//sysmenu.jpg //日付の表示 elFont::Begin(GOTHIC,Sz*2.1,0,FALSE,FALSE,FALSE); elFont::Color(RGB(55,55,55),RGB(0,0,0),TRUE); sprintf(month,"%2d",game._month); elFont::Draw(85,32,month); elFont::Before(); elFont::Begin(GOTHIC,Sz*1.5,0,FALSE,FALSE,FALSE); elFont::Color(RGB(55,55,55),RGB(0,0,0),TRUE); sprintf(day,"%2d",game._day); elFont::Draw(145,55,day); elFont::Before(); elFont::Begin(GOTHIC,Sz*1.7,0,FALSE,FALSE,FALSE); elFont::Color(RGB(55,55,55),RGB(0,0,0),TRUE); sprintf(time,"%2d:00",game._jikan); elFont::Draw(85,97,time); elFont::Before(); if(flag==ON){ elDraw::Layer(367,187,SYS_JPG,367,187,543,422);//sysmenu.jpg //パラメータの表示 elFont::Begin(GOTHIC,Sz*1.5,0,FALSE,FALSE,FALSE); elFont::Color(RGB(55,55,55),RGB(110,0,0),TRUE); sprintf(chrtemp,"%2d",game.tairyoku); elFont::Draw(469,208,chrtemp); sprintf(chrtemp,"%2d",game.syutyu); elFont::Draw(469,248,chrtemp); sprintf(chrtemp,"%2d",game.konjou); elFont::Draw(469,290,chrtemp); sprintf(chrtemp,"%2d",game.ai); elFont::Draw(469,331,chrtemp); sprintf(chrtemp,"%2d",game.baio); elFont::Draw(469,371,chrtemp); elFont::Before(); } for(temp=0;temp<7;temp++){ if( ((MousePX>=210)&&(MousePX<=310)) && ((MousePY>=255+temp*28)&&(MousePY<=255+temp*28+25)) && (MouseCL) ){ MouseCL=NULL; elFadeType(FADE_SLIDE_UPDOWN,20); if(temp==0){/*セーブ*/ flag=OFF; elCallScreen(SAVE_SCREEN); } else if(temp==1){/*ロード*/ flag=OFF; elCallScreen(LOAD_SCREEN); } else if(temp==2){/*カレンダー*/ flag=OFF; elFadeScreen(CALENDER_SCREEN); } else if(temp==3){/*パラメータ表示*/ flag=ON; } else if(temp==4){/*模試結果*/ flag=OFF;//体験版では使用しない } else if(temp==5){/*タイトルに戻る*/ flag=OFF;//製作中 for(int temp2=0;temp2<6;temp2++){ game.subject[temp2]/=10; } elCallScreen(LOADF_SCREEN); } else if(temp==6){/*ゲーム終了*/ flag=OFF;//製作中 } } } if( MouseCR ){//元の画面に戻る MouseCR=NULL; flag=OFF; elFadeType(FADE_LINE3,20); elFadeScreen(MAIN1_SCREEN); } elDraw::Refresh(); } //////////////////////////////////////////////////////////// void Save(void ){/*セーブ部分*/ char month[6],day[6],time[10],chrtemp[4]; char tempstring[20], savefile[4][20]={"save1.dat","save2.dat", "save3.dat","save4.dat"}; static int temp,temp2; int flag=OFF; static int Sz=16,Szp=1; /* フォントサイズ(Sz)、サイズ加減値(Szp)*/ elDraw::Clear(); elDraw::DirectLayer(0,0,HAIKEI_JPG,0,0,X_MAX,GRAPHY);//h1.jpg elDraw::Layer(0,0,StringJPG,0,0,800,600);//gamen.jpg elDraw::DirectLayer(653+game.subject[0]/10,80,SYS_JPG,225,10,323-game.subject[0]/10,23); elDraw::Layer(653,80,SYS_JPG,325,10,game.subject[0]/10+325,23);//パラメータ表示 elDraw::DirectLayer(653+game.subject[1]/10,133,SYS_JPG,225,10,323-game.subject[1]/10,23); elDraw::Layer(653,133,SYS_JPG,325,10,game.subject[1]/10+325,23);//パラメータ表示 elDraw::DirectLayer(653+game.subject[2]/10,183,SYS_JPG,225,10,323-game.subject[2]/10,23); elDraw::Layer(653,183,SYS_JPG,325,10,game.subject[2]/10+325,23);//パラメータ表示 elDraw::DirectLayer(653+game.subject[3]/10,236,SYS_JPG,225,10,323-game.subject[3]/10,23); elDraw::Layer(653,236,SYS_JPG,325,10,game.subject[3]/10+325,23);//パラメータ表示 elDraw::DirectLayer(653+game.subject[4]/10,292,SYS_JPG,225,10,323-game.subject[4]/10,23); elDraw::Layer(653,292,SYS_JPG,325,10,game.subject[4]/10+325,23);//パラメータ表示 elDraw::DirectLayer(653+game.subject[5]/10,345,SYS_JPG,225,10,323-game.subject[5]/10,23); elDraw::Layer(653,345,SYS_JPG,325,10,game.subject[5]/10+325,23);//パラメータ表示 elDraw::DirectLayer(653+game.tairyoku*98/game_max.tairyoku,425,SYS_JPG,225,10,325-game.tairyoku*100/game_max.tairyoku,25); elDraw::Layer(653,425,SYS_JPG,325,10,game.tairyoku*98/game_max.tairyoku+325,25);//パラメータ表示 //gamen.jpgの隠し作業 elDraw::DirectLayer(205,206,HAIKEI_JPG,205,206,502,GRAPHY);//h1.jpg elDraw::Layer(180,200,SYS_JPG,180,200,350,GRAPHY);//sysmenu.jpg elDraw::Layer(367,187,SYS_JPG,0,240,180,485);//sysmenu.jpg //日付の表示 elFont::Begin(GOTHIC,Sz*2.1,0,FALSE,FALSE,FALSE); elFont::Color(RGB(55,55,55),RGB(0,0,0),TRUE); sprintf(month,"%2d",game._month); elFont::Draw(85,32,month); elFont::Before(); elFont::Begin(GOTHIC,Sz*1.5,0,FALSE,FALSE,FALSE); elFont::Color(RGB(55,55,55),RGB(0,0,0),TRUE); sprintf(day,"%2d",game._day); elFont::Draw(145,55,day); elFont::Before(); elFont::Begin(GOTHIC,Sz*1.7,0,FALSE,FALSE,FALSE); elFont::Color(RGB(55,55,55),RGB(0,0,0),TRUE); sprintf(time,"%2d:00",game._jikan); elFont::Draw(85,97,time); elFont::Before(); if( ((MousePX>=391)&&(MousePX<=513)) && ((MousePY>=243)&&(MousePY<=271)) && (MouseCL) ){//セーブファイル1 MouseCL=NULL;temp2=0;flag=ON; } else if( ((MousePX>=391)&&(MousePX<=513)) && ((MousePY>=283)&&(MousePY<=311)) && (MouseCL) ){//セーブファイル2 MouseCL=NULL;temp2=1;flag=ON; } else if( ((MousePX>=391)&&(MousePX<=513)) && ((MousePY>=321)&&(MousePY<=349)) && (MouseCL) ){//セーブファイル3 MouseCL=NULL;temp2=2;flag=ON; } else if( ((MousePX>=391)&&(MousePX<=513)) && ((MousePY>=360)&&(MousePY<=388)) && (MouseCL) ){//セーブファイル4 MouseCL=NULL;temp2=3;flag=ON; } if(flag==ON){//セーブ FILE *fp; struct gm temp_gm[2]; temp_gm[0]=game; temp_gm[1]=game_max; fp=fopen(savefile[temp2],"w+"); if(!fp) exit(1); fwrite(temp_gm,sizeof(struct gm),2,fp); fclose(fp); } if(MouseCR){//元の画面に戻る MouseCR=NULL; elCallScreen(MAIN1_SCREEN); } elDraw::Refresh(); } void Load(void ){/*ロード部分*/ char month[6],day[6],time[10],chrtemp[4]; char tempstring[20], savefile[4][20]={"save1.dat","save2.dat", "save3.dat","save4.dat"}; static int temp,temp2; int flag=OFF; static int Sz=16,Szp=1; /* フォントサイズ(Sz)、サイズ加減値(Szp)*/ elDraw::Clear(); elDraw::DirectLayer(0,0,HAIKEI_JPG,0,0,X_MAX,GRAPHY);//h1.jpg elDraw::Layer(0,0,StringJPG,0,0,800,600);//gamen.jpg elDraw::DirectLayer(653+game.subject[0]/10,80,SYS_JPG,225,10,323-game.subject[0]/10,23); elDraw::Layer(653,80,SYS_JPG,325,10,game.subject[0]/10+323,23);//パラメータ表示 elDraw::DirectLayer(653+game.subject[1]/10,133,SYS_JPG,225,10,323-game.subject[1]/10,23); elDraw::Layer(653,133,SYS_JPG,325,10,game.subject[1]/10+323,23);//パラメータ表示 elDraw::DirectLayer(653+game.subject[2]/10,183,SYS_JPG,225,10,323-game.subject[2]/10,23); elDraw::Layer(653,183,SYS_JPG,325,10,game.subject[2]/10+323,23);//パラメータ表示 elDraw::DirectLayer(653+game.subject[3]/10,236,SYS_JPG,225,10,323-game.subject[3]/10,23); elDraw::Layer(653,236,SYS_JPG,325,10,game.subject[3]/10+323,23);//パラメータ表示 elDraw::DirectLayer(653+game.subject[4]/10,292,SYS_JPG,225,10,323-game.subject[4]/10,23); elDraw::Layer(653,292,SYS_JPG,325,10,game.subject[4]/10+323,23);//パラメータ表示 elDraw::DirectLayer(653+game.subject[5]/10,345,SYS_JPG,225,10,323-game.subject[5]/10,23); elDraw::Layer(653,345,SYS_JPG,325,10,game.subject[5]/10+323,23);//パラメータ表示 elDraw::DirectLayer(653+game.tairyoku*100/game_max.tairyoku,420,SYS_JPG,225,10,325-game.tairyoku*100/game_max.tairyoku,25); elDraw::Layer(653,420,SYS_JPG,325,10,game.tairyoku*100/game_max.tairyoku+325,25);//パラメータ表示 //gamen.jpgの隠し作業 elDraw::DirectLayer(205,206,HAIKEI_JPG,205,206,502,452);//h1.jpg elDraw::Layer(180,200,SYS_JPG,180,200,350,460);//sysmenu.jpg elDraw::Layer(367,187,SYS_JPG,0,0,180,240);//sysmenu.jpg //日付の表示 elFont::Begin(GOTHIC,Sz*2.1,0,FALSE,FALSE,FALSE); elFont::Color(RGB(55,55,55),RGB(0,0,0),TRUE); sprintf(month,"%2d",game._month); elFont::Draw(85,32,month); elFont::Before(); elFont::Begin(GOTHIC,Sz*1.5,0,FALSE,FALSE,FALSE); elFont::Color(RGB(55,55,55),RGB(0,0,0),TRUE); sprintf(day,"%2d",game._day); elFont::Draw(145,55,day); elFont::Before(); elFont::Begin(GOTHIC,Sz*1.7,0,FALSE,FALSE,FALSE); elFont::Color(RGB(55,55,55),RGB(0,0,0),TRUE); sprintf(time,"%2d:00",game._jikan); elFont::Draw(85,97,time); elFont::Before(); if( ((MousePX>=395)&&(MousePX<=516)) && ((MousePY>=238)&&(MousePY<=268)) && (MouseCL) ){//セーブファイル1 MouseCL=NULL;temp2=0;flag=ON; } else if( ((MousePX>=395)&&(MousePX<=516)) && ((MousePY>=278)&&(MousePY<=308)) && (MouseCL) ){//セーブファイル2 MouseCL=NULL;temp2=1;flag=ON; } else if( ((MousePX>=395)&&(MousePX<=516)) && ((MousePY>=316)&&(MousePY<=346)) && (MouseCL) ){//セーブファイル3 MouseCL=NULL;temp2=2;flag=ON; } else if( ((MousePX>=395)&&(MousePX<=516)) && ((MousePY>=355)&&(MousePY<=385)) && (MouseCL) ){//セーブファイル4 MouseCL=NULL;temp2=3;flag=ON; } if(flag==ON){//ロード FILE *fp; struct gm temp_gm[2]; fp=fopen(savefile[temp2],"r"); if(!fp) exit(1); fread(temp_gm,sizeof(struct gm),2,fp); game=temp_gm[0]; game_max=temp_gm[1]; fclose(fp); } if(MouseCR){//元の画面に戻る MouseCR=NULL; elCallScreen(MAIN1_SCREEN); } elDraw::Refresh(); } //////////////////////////////////////////////////////////////////////////////////// void Koudou(void )/*行動部分*/ { char month[5],day[5],time[10],KoudouData[20]; int i,temp,plus=0; int nowdate[6],beforedate[6],resultdate[6]; static int Sz=16,Szp=1, /* フォントサイズ(Sz)、サイズ加減値(Szp)*/ Study_Flag=OFF,tree_flag=0,temp_tree_flag=0; now_time++; if(now_time>10) now_time=0; //行動部分処理開始/////////////////////////////////////// if(tree_flag==0){ //データの表示 //行動パターンを決める for(i=0;i<15;i++){ //もし選択肢がマウスの座標位置なら if( ((MousePX>=67)&&(MousePX<=170)) && ((MousePY>=230+i*42)&&(MousePY<=230+i*42+25)) ){ // 左ボタンが押された場合……。 if(MouseCL){ // 初期化します。 temp_tree_flag=tree_flag; MouseCL=NULL;tree_flag=i+1; for(temp=0;temp<21-1;temp++){//履歴 rireki[temp]=rireki[temp+1]; } rireki[21-1]=tree_flag=i+1; } } } //日付の更新 if(game._jikan>=22){ game._jikan=game._jikan+10-24; game._day=game._day+1; game.tairyoku+=3; if(game.tairyoku>=game_max.tairyoku) game.tairyoku=game_max.tairyoku; //さぼりルール for(temp=0;temp<6;temp++){/*科目別に判定*/ //12/1から何時間掛かっているか計算 if(game._month==12){ nowdate[temp]=game._day*24+game._jikan; } else{ nowdate[temp]=game._month*31*24+game._day+game._jikan; } beforedate[temp]=game.before_studydata[temp]; resultdate[temp]=nowdate[temp]-beforedate[temp]; if(49<=resultdate[temp] && resultdate[temp]<=96){//3,4日さぼり game.subject[temp]-=20; } else if(97<=resultdate[temp] && resultdate[temp]<=142){//5,6日さぼり game.subject[temp]-=30; } else if(143<=resultdate[temp] && resultdate[temp]<=214){//7,8,9日さぼり game.subject[temp]-=40; } else if(215<=resultdate[temp]){//10日以上さぼり game.subject[temp]-=50; } } } if(game.tairyoku<=0) game._day+=1; if(game._day==32){ if(game._month==12) game._month=1; else game._month+=1; game._day=1; } //日付の表示 elFont::Begin(GOTHIC,Sz*2.1,0,FALSE,FALSE,FALSE); elFont::Color(RGB(55,55,55),RGB(0,0,0),TRUE); sprintf(month,"%2d",game._month); elFont::Draw(85,32,month); elFont::Before(); elFont::Begin(GOTHIC,Sz*1.5,0,FALSE,FALSE,FALSE); elFont::Color(RGB(55,55,55),RGB(0,0,0),TRUE); sprintf(day,"%2d",game._day); elFont::Draw(145,55,day); elFont::Before(); elFont::Begin(GOTHIC,Sz*1.7,0,FALSE,FALSE,FALSE); elFont::Color(RGB(55,55,55),RGB(0,0,0),TRUE); sprintf(time,"%2d:00",game._jikan); elFont::Draw(85,97,time); elFont::Before(); elFont::Begin(GOTHIC,Sz,0,FALSE,FALSE,FALSE); elFont::Color(RGB(255,255,255),RGB(0,0,0),TRUE); elFont::Draw(120,GRAPHY+(now_line)*16+40,"何をする?"); elFont::Draw(120,GRAPHY+(now_line+1)*16+40, "クリックしてください"); elFont::Before(); } else{ if(tree_flag==1){//勉強//////////////////////// // elSpi::SwapObject("ifjpeg.spi","g1.jpg",HAIKEI_JPG); if(Study(Study_Flag)==ON) tree_flag=0; //Studyの返り値がOFFのとき勉強を繰りかえす Study_Flag=ON; } else if(tree_flag==2){//移動//////////////////////// tree_flag=0; Study_Flag=OFF; elCallScreen(IVENT_SCREEN); } else if(tree_flag==3){//休憩////////////////// tree_flag=0; game.tairyoku+=1; Study_Flag=OFF; elCallScreen(REST_SCREEN); for (int i=0;i<3;i++){ sprintf(LongBuffer,"g%d.jpg",i+1); GraphJPG[i]=elSpi::LoadObject("ifjpeg.spi",LongBuffer); } } else if(tree_flag==4){//テスト////////////////// tree_flag=0; Study_Flag=OFF; elSpi::SwapObject("ifjpeg.spi","test.jpg",HAIKEI_JPG); elCallScreen(TEST_SCREEN); } else if(tree_flag==5){//システムメニュー////////////// tree_flag=0; Study_Flag=OFF; sprintf(LongBuffer,"system.jpg"); SYSTEMJPG=elSpi::LoadObject("ifjpeg.spi",LongBuffer); elCallScreen(SYSTEM_SCREEN); } /* else if(tree_flag==6){//カレンダー////////////// tree_flag=0; Study_Flag=OFF; if(game._month==1){//1月 elSpi::SwapObject("ifjpeg.spi","calender1.jpg",HAIKEI_JPG); } else if(game._month==2){//2月 elSpi::SwapObject("ifjpeg.spi","calender2.jpg",HAIKEI_JPG); } elCallScreen(CALENDER_SCREEN); } else if(tree_flag==7){ tree_flag=0;game.subject[1]=500-150;} else if(tree_flag==8){ tree_flag=0;game.subject[1]=500-100;} else if(tree_flag==9){ tree_flag=0;game.subject[1]=500-60;} else if(tree_flag==10){ tree_flag=0;game.subject[1]=500+100;} else if(tree_flag==11){ tree_flag=0;game.subject[1]=500+200;} else if(tree_flag==12){ tree_flag=0;game.subject[1]=600;} else if(tree_flag==13){ tree_flag=0;game.subject[1]=700;} else if(tree_flag==14){ tree_flag=0;game.subject[1]=800;} else if(tree_flag==15){ tree_flag=0;game.subject[1]=900;} */ } elDraw::Refresh(); } /*時間経過に関する処理>>3秒のウエイトをかける // 画面が切り換わった直後の場合 if (elChangeScreen()) { // ウェイトNo.1に3秒を設定 elSystem::SetWait(1,3000); } */