#include #include #include #include typedef struct gift{ int HP,ATK,DEF,EXP;}gift; typedef struct base{ int base; char basename[10]; int HP,ATK,DEF; char unique[50]; char unique_ex[200]; gift gift;}base; typedef struct indi{ int HP,ATK,DEF;}indi; typedef struct effo{ int HP,ATK,DEF;}effo; typedef struct character{ char name[20]; base base; indi indi; effo effo; }character; typedef struct level{ character *c; int lv; int EXP; }level; double HPkeisan(int,int,int,int); double keisan(int,int,int,int); void fight(level*,level*,int,base[8]); void battle(level*, level*,int,int,int,int); void atk(level*,int*,double*); void def(level*,int*,double*); void uni(int*,double*,double*,double*,int*,int,level*,level*,double*,double*,double*); void grow(level*,level*); void pointme(int*,int*,int*,int*,level*,int,int*); void pointbot(int*,int*,int*,int*,level*); void mogisen(base[8]); int main(){ srand((unsigned)time(NULL)); gift kanto_gift[8]={ {3,0,0,1}, {0,1,0,2}, {0,0,3,3}, {0,0,2,4}, {0,5,0,5}, {0,1,0,6}, {0,3,0,7}, {0,1,0,8} }; /*xは ふったポイント ポイント上限10*/ /*attack :攻撃力=素の攻撃力*(5+x)/10で攻撃*/ /*defence :防御力=素の防御力*(5+x)/10で防御*/ /*charge :xポイント次に持ち越す(*ポイント上限10の範囲内)*/ base kanto[8]={ {0,"Tokyo",32,87,13,"rush_hour","通勤ラッシュは都会の証。2xポイントためる(次のターンに回す)(※上限:10)・HP(10-x)/10倍",kanto_gift[1]}, {1,"Saitama",72,76,24,"hottest_summer","日本で一番暑い夏。そのターンに限り攻撃力が(10+x)/10倍",kanto_gift[2]}, {2,"Kanagawa",34,28,72,"near_Yokohama","出身地?…横浜の近くです。 そのターンに限り相手の攻撃力が(10-x)/10倍",kanto_gift[3]}, {3,"Tochigi",66,38,62,"There_is_nothing","敵の攻撃?ないんだな、それが。そのターンの相手の行動をx/10の確率で無効",kanto_gift[4]}, {4,"Gunma",98,99,1,"attack_of_the_Empire","生粋の戦士の威圧。そのターンに限り相手の防御力(10-x)/10倍",kanto_gift[5]}, {5,"Ibaraki",47,63,37,"academic_city_tsukuba","その力は後進のために。xポイントためる(次のターンに回す)(※上限:10)",kanto_gift[6]}, {6,"Yamanashi",58,52,48,"proper_final_judgement_super_miracle_fujiyama","富士山は我らのもの 敵のHPをx奪い、自分のHPがx増える(阻害不可)",kanto_gift[7]}, {7,"Chiba",87,58,42,"TDL","夢の国で心の回復。HPが(10+x)/10倍",kanto_gift[8]}, }; int i,counter,a1,a2,r,or=0,h=9,preor,base,k; double abi,abi1,abi2; character *c,*enemy; level *l,*lenemy; char name[20]; FILE *fp; char fname[]="pokemon_save.txt"; srand((unsigned)time(NULL)); printf("\nゲーム画面を最大化してのプレイをお勧めします\n\n"); printf("あそびかたを見る ->0 プレイを始める->1 >"); scanf("%d",&or); if(or==0)mogisen(kanto); printf("はじめから->0,続きから->1 >"); scanf("%d",&or); if(or==0){ printf("あなたのパーティのキャラクタ数を設定してください(3~7がオススメです)>"); scanf("%d",&counter); c=(character*)malloc(counter*sizeof(character)); l=(level*)malloc(counter*sizeof(level)); enemy=(character*)malloc(8*sizeof(character)); lenemy=(level*)malloc(8*sizeof(level)); for(i=0;ibase)||(base>8)){ printf("\n\t種族を選んでください\n\t 1:Tokyo,2:Saitama,3:Kanagawa,4:Tochigi,5:Gunma,6:Ibaraki,7:Yamanashi,8:Chiba\n\t 1~8の範囲で選択したい種族の番号を入力してください>"); scanf("%d",&base);} (c+i)->base=kanto[base-1]; printf("\n\t\tあなたが選んだ種族は%10sです\n\t\t種族値 | HP | ATK | DEF |\n\t\t       |%2d/100| %2d/100| %2d/100|\n\t\t固有技 %50s\n",(c+i)->base.basename,(c+i)->base.HP,(c+i)->base.ATK,(c+i)->base.DEF,(c+i)->base.unique); printf("\n\t\t固有技の説明を見たい場合は1を,見ずに情報入力を進める場合は0を押してください >"); scanf("%d",&or); if(or==1){ printf("\n\t\t%s:%s\n\t\t\t(xは割り振ったポイントをさします)\n",(c+i)->base.unique,(c+i)->base.unique_ex); } printf("\n\n\t\tこのまま情報入力を進めてよければ1を、変更したい場合は0を押してください>"); scanf("%d",&or); base=9; } printf("\n\t種族を%sに決定しました\n",(c+i)->base.basename); /*敵の種族設定 野生の○○の〇〇*/ k=rand(); for(h=0;hbase=kanto[(h+k)%8]; or=0; printf("\n\t次は個体値を決定します\n"); while(or==0){ printf("\n\t\t体力に関する個体値を決めます 好きなタイミングで0と入力してください>"); scanf("%d",&or); h=rand()%31+1; (c+i)->indi.HP=h; h=(h+h)%31+1; (enemy+i)->indi.HP=h; printf("\n\t\t攻撃力に関する個体値を決めます 好きなタイミングで0と入力してください>"); scanf("%d",&or); h=rand()%31+1; (c+i)->indi.ATK=h; h=(h+h)%31+1; (enemy+i)->indi.ATK=h; printf("\n\t\t防御力に関する個体値を決めます 好きなタイミングで0と入力してください>"); scanf("%d",&or); h=rand()%31+1; (c+i)->indi.DEF=h; h=(h+h)%31+1; (enemy+i)->indi.DEF=h; /* printf("\n\n\t\t体力:%d,攻撃力:%d,防御力:%d\n", (c+i)->indi.HP,(c+i)->indi.ATK,(c+i)->indi.DEF);*/ printf("\n\t\t<評価>"); h=(c+i)->indi.HP+(c+i)->indi.ATK+(c+i)->indi.DEF; if(75<=h)printf("\n\t\t\t首都レベルです\n"); else if(60<=h) printf("\n\t\tウォーターフロントレベルです\n"); else if(45<=h) printf("\n\t\t郊外住宅地レベルです\n"); else printf("\n\t\tかろうじて首都圏レベルです\n"); printf("\t\t"); h=0; if(((c+i)->indi.HP > (c+i)->indi.ATK)&&((c+i)->indi.HP > (c+i)->indi.DEF)){ printf("強みは体力ですね "); h=(c+i)->indi.HP;} else if(((c+i)->indi.ATK>(c+i)->indi.DEF)&&((c+i)->indi.ATK!=(c+i)->indi.HP)){ printf("強みは攻撃力ですね "); h=(c+i)->indi.ATK;} else if(((c+i)->indi.ATK<(c+i)->indi.DEF)&&((c+i)->indi.DEF!=(c+i)->indi.HP)){ printf("強みは防御力ですね "); h=(c+i)->indi.DEF;} else printf("バランス型ですね\n"); if(h==31)printf("首都高速道路が通っていそうなほどです\n"); else if(h>=26)printf("東京外環自動車道が通っていそうなほどです\n"); else if(h>=16)printf("首都圏中央連絡道が通っていそうなほどです\n"); else if(h>=1)printf("未開地ですか?\n"); printf("\t\tこのまま情報入力を進めてよければ1を、変更したい場合は0を押してください>"); scanf("%d",&or); } /*パーティと敵の個体値入力完了*/ or=0; printf("\n\n\t\t個体値を決定しました\n"); printf("\n\t次はこの子の名前を決めます\n"); while(or==0){ printf("\n\t\t名前を半角英数字20字以内で入力してください>"); scanf("%s",(c+i)->name); printf("\n\t\t名前は%sでよろしいですか?\n\t\tこのまま情報入力を進めてよければ1を、変更したい場合は0を押してください>",(c+i)->name); scanf("%d",&or); }/*名前の入力完了*/ printf("\n\t名前を%sに決定しました\n\n\n",(c+i)->name); (l+i)->c=(c+i); (l+i)->lv=1; (lenemy+i)->c=(enemy+i); (lenemy+i)->lv=1; strcpy((enemy+i)->name,(enemy+i)->base.basename); or=0; h=9;}/*パーティと敵の基本情報入力完了*/ } if(or==1){/*セーブファイル読み込み*/ fp=fopen(fname,"r"); fscanf(fp,"%d\n",&counter); c=(character*)malloc(counter*sizeof(character)); l=(level*)malloc(counter*sizeof(level)); enemy=(character*)malloc(8*sizeof(character)); lenemy=(level*)malloc(8*sizeof(level)); for(i=0;i < counter;i++){/*味方データ読み込み*/ fscanf(fp,"%d %d %d %d %d %d %d %d %d %s\n",&base,&(c+i)->indi.HP,&(c+i)->indi.ATK,&(c+i)->indi.DEF,&(c+i)->effo.HP,&(c+i)->effo.ATK,&(c+i)->effo.DEF,&(l+i)->lv,&(l+i)->EXP,(c+i)->name); (c+i)->base=kanto[base]; (l+i)->c=(c+i); /*味方データ読み込み完了*/ } for(i=0;i < counter;i++){/*敵データ読み込み*/ fscanf(fp,"%d %d %d %d %d %d %d %d %d \n",&base,&(enemy+i)->indi.HP,&(enemy+i)->indi.ATK,&(enemy+i)->indi.DEF,&(enemy+i)->effo.HP,&(enemy+i)->effo.ATK,&(enemy+i)->effo.DEF,&(lenemy+i)->lv,&(lenemy+i)->EXP); (enemy+i)->base=kanto[base]; strcpy((enemy+i)->name,(enemy+i)->base.basename); (lenemy+i)->c=(enemy+i); /*敵データ読み込み完了*/ } fclose(fp); /*セーブファイル読み込み完了*/} or=3; printf("それでは早速プレイを始めましょう\n"); /*プレイ*/ printf("\t\tバトル->1, プレイ終了->0 >"); scanf("%d",&or); while(or!=0){/*バトル*/ fight(l,lenemy,counter,kanto); printf("\n\tバトル->1, プレイ終了->0 >"); scanf("%d",&or);/*バトル終了*/} /*プレイ終了*/ printf("\t\tデータを保存しますか?\n\t\t(*データは一つのみ保存できます) \n\t\t\tyes->0,no->1 >"); scanf("%d",&or); if(or==0){/*セーブ*/ fp=fopen(fname,"w"); fprintf(fp,"%d\n",counter); for(i=0;ic->base.base,(l+i)->c->indi.HP,(l+i)->c->indi.ATK,(l+i)->c->indi.DEF,(l+i)->c->effo.HP,(l+i)->c->effo.ATK,(l+i)->c->effo.DEF,(l+i)->lv,(l+i)->EXP,(l+i)->c->name); for(i=0;ic->base.base,(lenemy+i)->c->indi.HP,(lenemy+i)->c->indi.ATK,(lenemy+i)->c->indi.DEF,(lenemy+i)->c->effo.HP,(lenemy+i)->c->effo.ATK,(lenemy+i)->c->effo.DEF,(lenemy+i)->lv,(lenemy+i)->EXP); fclose(fp); /*セーブここまで*/ printf("\t\tセーブ完了しました\n"); } printf("\t\tありがとうございました\n"); /*プレイ終了ここまで*/ /*プレイ終了*/ } /*counter=登録キャラ数*/ void fight(level *l,level *lenemy, int counter,base kanto[8]){ int a1,a2,h,i,or; a1=rand()%counter; printf("\n\t\t\t野生の%sが現れた!\n",(lenemy+a1)->c->name); for(i=0;ic->name,(l+i)->c->base.basename); printf("\n\t\t\t種族ごとの固有技をチェック->0,このままバトルを続ける->1 >"); scanf("%d",&or); if(or==0) for(i=0;i<8;i++) printf("\n\t\t\t\t%s族の固有技 %s:%s\n",kanto[i].basename,kanto[i].unique,kanto[i].unique_ex); printf("\n\t\t\tどの子を戦わせますか? >"); scanf("%d",&a2); or=0; printf("\t\t\t\t先攻->1 後攻->2 >"); scanf("%d",&or); if(or==2)battle((lenemy+a1),(l+a2-1),counter,a1,a2-1,2); else battle((l+a2-1),(lenemy+a1),counter,a2-1,a1,1); } void battle(level *l1,level *l2,int counter,int a1,int a2,int ask/*先行:1*/){ double kougeki1,kougeki2,bougyo1,bougyo2,tairyoku1,tairyoku2,h; int or,k=1,point1=1,point2=2,attack1=0,defence1=0,unique1=0,attack2=0,defence2=0,unique2=0,i=0; kougeki1=keisan(l1->c->base.ATK,l1->c->indi.ATK,l1->c->effo.ATK,l1->lv); kougeki2=keisan(l2->c->base.ATK,l2->c->indi.ATK,l2->c->effo.ATK,l2->lv); bougyo1=keisan(l1->c->base.DEF,l1->c->indi.DEF,l1->c->effo.DEF,l1->lv); bougyo2=keisan(l2->c->base.DEF,l2->c->indi.DEF,l2->c->effo.DEF,l2->lv); tairyoku1=HPkeisan(l1->c->base.HP,l1->c->indi.HP,l1->c->effo.HP,l1->lv); tairyoku2=HPkeisan(l2->c->base.HP,l2->c->indi.HP,l2->c->effo.HP,l2->lv); while((tairyoku1>0)&&(tairyoku2>0)){/*体力0になるまでバトル*/ kougeki1=keisan(l1->c->base.ATK,l1->c->indi.ATK,l1->c->effo.ATK,l1->lv); kougeki2=keisan(l2->c->base.ATK,l2->c->indi.ATK,l2->c->effo.ATK,l2->lv); bougyo1=keisan(l1->c->base.DEF,l1->c->indi.DEF,l1->c->effo.DEF,l1->lv); bougyo2=keisan(l2->c->base.DEF,l2->c->indi.DEF,l2->c->effo.DEF,l2->lv); printf("\n\t\t\t%sの能力\n\t\t\t\t| HP | ATK | DEF |\n\t\t\t\t| %4.2f | %4.2f | %4.2f |\n",l1->c->name,tairyoku1,kougeki1,bougyo1); printf("\t\t\t%sの能力\n\t\t\t\t| HP | ATK | DEF |\n\t\t\t\t| %4.2f | %4.2f | %4.2f |\n",l2->c->name,tairyoku2,kougeki2,bougyo2); if(ask==1){ if(point1>10)point1=10; pointme(&point1,&attack1,&defence1,&unique1,l1,ask,&i); } else pointbot(&point1,&attack1,&defence1,&unique1,l1); /*先攻*/ printf("\t\t\t%sのターン!\n",l1->c->name); point1++; if(((a1!=1)&&(a1!=6))||(unique1==0))if(point1>5)point1=5; if(((a1==1)||(a1==6))&&(unique1!=0))uni(&unique1,&kougeki1,&bougyo1,&tairyoku1,&point1,a1,l1,l2,&kougeki2,&bougyo2,&tairyoku2); if(attack1!=0)atk(l1,&attack1,&kougeki1); else kougeki1=0; if(defence2!=0)def(l2,&defence2,&bougyo2); else bougyo2=0; if((a2==2)&&(unique2!=0))uni(&unique2,&kougeki2,&bougyo2,&tairyoku2,&point2,a2,l2,l1,&kougeki1,&bougyo1,&tairyoku1); if((a1!=2)&&(a1!=3)&&(a1!=1)&&(a1!=4)&&(a1!=6)&&(unique1!=0)) uni(&unique1,&kougeki1,&bougyo1,&tairyoku1,&point1,a1,l1,l2,&kougeki2,&bougyo2,&tairyoku2); if((a2==3)&&(unique2!=0))uni(&unique2,&kougeki2,&bougyo2,&tairyoku2,&point2,a2,l2,l1,&kougeki1,&bougyo1,&tairyoku1); h=kougeki1-bougyo2; if(h<0)h=0; tairyoku2-=h; printf("\n\t\t\t\t%sに%4.2fのダメージ!!\n",l2->c->name,h); if(tairyoku2<0)break; if(point2>10)point2=10; if(ask==1)pointbot(&point2,&attack2,&defence2,&unique2,l2); else pointme(&point2,&attack2,&defence2,&unique2,l2,ask,&i); printf("\n\t\t\t%sのターン!\n",l2->c->name); point2++; if(((a2!=1)&&(a2!=6))||(unique2==0))if(point2>5)point2=5; if(((a2==1)||(a2==6))&&(unique2!=0))uni(&unique2,&kougeki2,&bougyo2,&tairyoku2,&point2,a2,l2,l1,&kougeki1,&bougyo1,&tairyoku1); if(attack2!=0)atk(l2,&attack2,&kougeki2); else kougeki2=0; if(defence1!=0)def(l1,&defence1,&bougyo1); else bougyo1=0; if((a1==2)&&(unique1!=0))uni(&unique1,&kougeki1,&bougyo1,&tairyoku1,&point1,a1,l1,l2,&kougeki2,&bougyo2,&tairyoku2); if((a2!=2)&&(a2!=3)&&(a2!=1)&&(a2!=4)&&(a2!=6)&&(unique2!=0)) uni(&unique2,&kougeki2,&bougyo2,&tairyoku2,&point2,a2,l2,l1,&kougeki1,&bougyo1,&tairyoku1); if((a1==3)&&(unique1!=0))uni(&unique1,&kougeki1,&bougyo1,&tairyoku1,&point1,a1,l1,l2,&kougeki2,&bougyo2,&tairyoku2); if((a1==4)&&(unique1!=0))uni(&unique1,&kougeki1,&bougyo1,&tairyoku1,&point1,a1,l1,l2,&kougeki2,&bougyo2,&tairyoku2); if((a2==4)&&(unique2!=0))uni(&unique2,&kougeki2,&bougyo2,&tairyoku2,&point2,a2,l2,l1,&kougeki1,&bougyo1,&tairyoku1); h=kougeki2-bougyo1; if(h<0)h=0; tairyoku1-=h; printf("\n\t\t\t\t%sに%4.2fのダメージ!!\n",l1->c->name,h); k++;/*バトル終了*/} if(tairyoku2<0) { printf("\n\t\t\t\t%sの勝利!\n",l1->c->name); grow(l1,l2); } else { printf("\n\t\t\t\t%sの勝利!\n",l2->c->name); grow(l2,l1); } /*勝った方は経験値と努力値 負けた方は努力値をゲット レベル2乗EXPたまったらlvup*/ } void grow(level *l1,level *l2){ int i,max; i=l2->c->base.gift.EXP+l2->lv; l1->EXP+=i; l1->c->effo.HP+=l2->c->base.gift.HP+l2->lv; l1->c->effo.ATK+=l2->c->base.gift.ATK+l2->lv; l1->c->effo.DEF+=l2->c->base.gift.DEF+l2->lv; l2->c->effo.HP+=l1->c->base.gift.HP; l2->c->effo.ATK+=l1->c->base.gift.ATK; l2->c->effo.DEF+=l1->c->base.gift.DEF; printf("\t\t\t\t%sは経験値%dをゲットした!\n",l1->c->name,i); max=2* l1->lv; while(i>max){ l1->lv++; i-=max; l1->EXP=i; printf("\t\t\t\tレベルアップ!!\n\t\t\t\t\t%sはレベル%dになった!\n",l1->c->name,l1->lv); max=2*l1->lv; } printf("\t\t\t\t%sの次のレベルアップまであと経験値%d!",l1->c->name,max-i); } void atk(level *l,int *attack,double *kougeki){ printf("\t\t\t\t%sのこうげき lv%d 発動!\n",l->c->name,*attack); *kougeki=*kougeki*(*attack+5)/10; *attack=0; } void def(level *l,int *defence,double *bougyo){ printf("\t\t\t\t%sのぼうぎょ lv%d 発動!\n",l->c->name,*defence); *bougyo=*bougyo*(*defence+5)/10; *defence=0; } void uni(int *unique,double *kougeki,double *bougyo,double *tairyoku,int *point,int a,level* l,level *el,double *ekougeki,double *ebougyo,double *etairyoku){ int k; double i; printf("\t\t\t\t%sのこゆうわざ %s lv%d 発動!!\n",l->c->name,l->c->base.unique,*unique); a=l->c->base.base; if(a==0){ i=*tairyoku * *unique/10; *point=*point + 2* *unique; *tairyoku-= i; printf("\t\t\t\t\t%dポイントためた! %sのHPが%4.2f下がった↓︎\n",2* *unique,l->c->name,i); } if(a==1){ i=*kougeki * *unique/10; *kougeki+= i; printf("\t\t\t\t%sの攻撃力が%4.2f上がった↑︎\n",l->c->name,i); } if(a==2){ i=*ekougeki* *unique/10; *ekougeki= *ekougeki - i; printf("\t\t\t\t%sの攻撃力が%4.2f下がった↓\n",el->c->name,i); } if(a==3){ k=rand()%10; if(0<=k<*unique){ *ekougeki=0; *ebougyo=0; /*"敵の攻撃?ないんだな、それが。そのターンの相手の行動をx/10の確率で無効*/ printf("\t\t\t\t%sの行動無効!!\n",el->c->name);} else printf("\t\t\t\t発動失敗...\n"); } if(a==4){ i=*ebougyo * *unique/10; *ebougyo=*ebougyo - i;/*"生粋の戦士の威圧。そのターンに限り相手の防御力(10-x)/10倍*/ printf("\t\t\t\t%sの防御力が%4.2f下がった↓\n",el->c->name,i); } if(a==5){*point+= *unique;/*"その力は後進のために。2xポイントためる(*ポイント上限の範囲内)*/ printf("\t\t\t\t%dポイントためた!\n",*unique);} if(a==6){ i=*etairyoku * *unique/10; *tairyoku+=i; *etairyoku-=i; printf("\t\t\t\t%sからHPを%4.2f奪った!\n",el->c->name,i); } if(a==7){ i=*tairyoku * *unique /10; *tairyoku+=i; printf("\t\t\t\t%sのHP%4.2f回復↑\n",l->c->name,i); } *unique=0; } double HPkeisan(int base,int indi,int effo,int lv){ double ans; ans=2 * base + indi + effo/4; ans=ans*lv/100+lv+10; return ans; } double keisan(int base,int indi,int effo,int lv){ double ans; ans=2 * base + indi + effo/4; ans=ans*lv/100+5; return ans; } void pointme(int *point,int *attack,int *defence,int *unique,level *l,int ask/*1で先攻*/,int *t/*t回目のポイント割り振り*/){ int i,or; for(i=*point;i>0;i--){ printf("\t\t\t残りポイント: %d",i); printf("\n\t\t\t\tこうげき->1 ぼうぎょ->2 こゆうわざ %s->3 >",l->c->base.unique); scanf("%d",&or); if(or==1)*attack=*attack+1; else if(or==2)*defence=*defence+1; else *unique=*unique+1; } printf("\n\t\t\t\tこうげきに%dポイント ぼうぎょに%dポイント %sに%dポイント割りふります\n\n",*attack,*defence,l->c->base.unique,*unique); *t=*t+1; } void pointbot(int *epoint,int *eattack,int *edefence,int *eunique,level *l){ int i,or; for(i=*epoint;i>0;i--){ or=rand()%3+1; if(or==1)*eattack=*eattack+1; else if(or==2)*edefence=*edefence+1; else *eunique=*eunique+1; } } void mogisen(base kanto[8]){ double kougeki,ekougeki,bougyo,ebougyo,tairyoku,etairyoku,gap; int attack,eattack,defence,edefence,unique,eunique,k,i,h; int or=2; printf("\n\t\t\t>それでは模擬戦形式であそびかたを見ていきましょう\n"); k=rand()%8; printf("\n\t\t\t\t野生の%sが現れた!\n",kanto[k].basename); for(i=0;i<8;i++) printf("\n\t\t\t%d 種族:%s\n",i+1,kanto[i].basename); printf("\n\t\t\tどの子を戦わせますか? >"); scanf("%d",&i); i--; printf("\n\t\t\t>あなたは先攻です\n"); tairyoku=10.00; etairyoku=10.00; kougeki=7.00; ekougeki=5.50; bougyo=6.00; ebougyo=8.00; printf("\n\t\t\t%s(味方)の能力\n\t\t\t\t| HP | ATK | DEF |\n\t\t\t\t| %4.2f | %4.2f | %4.2f |\n",kanto[i].basename,tairyoku,kougeki,bougyo); printf("\t\t\t%s(敵)の能力\n\t\t\t\t| HP | ATK | DEF |\n\t\t\t\t| %4.2f | %4.2f | %4.2f |\n",kanto[k].basename,etairyoku,ekougeki,ebougyo); printf("\n\t\t\t>それでは%sとともに戦っていきましょう\n",kanto[i].basename); printf("\t\t\t>このゲームでは、与えられたポイントを割り振ることで行動を起こします\n"); while(or!=1){ printf("\n\t\t\t>こうげき に1ポイント振ってみましょう\n"); printf("\t\t\t残りポイント: 1"); printf("\n\t\t\t\tこうげき->1 ぼうぎょ->2 >"); scanf("%d",&or); } printf("\n\t\t\tこうげきに1ポイント ぼうぎょに0ポイント割り振ります\n"); gap=kougeki*6/10; etairyoku-=gap; printf("\n\t\t\t%s(味方)のターン!\n",kanto[i].basename); printf("\n\t\t\t\t%s(味方)のこうげき lv1 発動!\n",kanto[i].basename); printf("\n\t\t\t\t%s(敵)に%4.2fのダメージ!!\n",kanto[k].basename,gap); printf("\n\t\t\t\t敵に攻撃力*(x+5)/10の力でこうげきしました!!\n"); printf("\n\t\t\t%s(敵)のターン!\n",kanto[k].basename); printf("\n\t\t\t\t>%s(敵)は後攻ボーナスではじめから2ポイントもらっています\n\t\t\t\t>敵の行動に注目しましょう\n\n",kanto[k].basename); gap=ekougeki*6/10; tairyoku-=gap; printf("\n\t\t\t\t%s(敵)のこうげき lv1 発動!\n",kanto[k].basename); printf("\n\t\t\t\t%s(味方)に%4.2fのダメージ!!\n",kanto[i].basename,gap); printf("\n\n\t\t\t\t>lvの後ろの数字だけその行動にポイントが割り振られたことになります\n\t\t\t\t>こうげきに1ポイント振られていることがわかりますね\n\t\t\t\t>残りの1ポイントはどこに行ったのでしょう?\n\n\t\t\t\t>...とりあえずバトルを進めてみましょう\n"); printf("\n\t\t\t%s(味方)の能力\n\t\t\t\t| HP | ATK | DEF |\n\t\t\t\t| %4.2f | %4.2f | %4.2f |\n",kanto[i].basename,tairyoku,kougeki,bougyo); printf("\t\t\t%s(敵)の能力\n\t\t\t\t| HP | ATK | DEF |\n\t\t\t\t| %4.2f | %4.2f | %4.2f |\n",kanto[k].basename,etairyoku,ekougeki,ebougyo); while(or!=2){ printf("\n\t\t\t>ぼうぎょ に1ポイント振ってみましょう\n"); printf("\t\t\t残りポイント: 2"); printf("\n\t\t\t\tこうげき->1 ぼうぎょ->2 >"); scanf("%d",&or);} while(or!=1){ printf("\n\t\t\t>こうげき に1ポイント振ってみましょう\n"); printf("\t\t\t残りポイント: 1"); printf("\n\t\t\t\tこうげき->1 ぼうぎょ->2 >"); scanf("%d",&or); } printf("\n\t\t\tこうげきに1ポイント ぼうぎょに1ポイント割り振ります\n"); printf("\n\t\t\t%s(味方)のターン!\n",kanto[i].basename); printf("\n\t\t\t\t%s(味方)のこうげき lv1 発動!\n",kanto[i].basename); printf("\n\t\t\t\t%s(敵)のぼうぎょ lv1 発動!\n",kanto[k].basename); printf("\n\t\t\t\t%s(敵)に0.00のダメージ!!\n",kanto[k].basename); printf("\n\n\t\t\t\t>先ほどの消えた1ポイントはどうやら ぼうぎょ に振られていたようです。\n\t\t\t\t>こうげきが相殺されてしまいました\n"); printf("\n\t\t\t%s(敵)のターン!\n",kanto[k].basename); printf("\n\t\t\t\t%s(敵)のこうげき lv2 発動!\n",kanto[k].basename); printf("\n\t\t\t\t%s(味方)のぼうぎょ lv1 発動!\n",kanto[i].basename); gap=ekougeki*7/10-bougyo*6/10; tairyoku-=gap; printf("\n\t\t\t\t%s(味方)に%4.2fのダメージ!!\n",kanto[i].basename,gap); printf("\n\t\t\t\t>こうげきを受けてしまいましたね。\n\t\t\t\t>今敵は3ポイント持っていました。\n\t\t\t\t>そのうち2ポイントをこうげきに回したということは...\n"); printf("\n\t\t\t%s(味方)の能力\n\t\t\t\t| HP | ATK | DEF |\n\t\t\t\t| %4.2f | %4.2f | %4.2f |\n",kanto[i].basename,tairyoku,kougeki,bougyo); printf("\t\t\t%s(敵)の能力\n\t\t\t\t| HP | ATK | DEF |\n\t\t\t\t| %4.2f | %4.2f | %4.2f |\n",kanto[k].basename,etairyoku,ekougeki,ebougyo); for(h=3;h>0;h--){ or=0; while(or!=2){ printf("\n\t\t\t>ぼうぎょ に1ポイント振ってみましょう\n"); printf("\t\t\t残りポイント: %d",h); printf("\n\t\t\t\tこうげき->1 ぼうぎょ->2 >"); scanf("%d",&or); } } printf("\n\t\t\tこうげきに0ポイント ぼうぎょに3ポイント割り振ります\n"); printf("\n\t\t\t%s(味方)のターン!\n",kanto[i].basename); printf("\n\t\t\t\t%s(敵)のぼうぎょ lv1 発動!\n",kanto[k].basename); printf("\n\t\t\t\t%s(敵)に0.00のダメージ!!\n",kanto[k].basename); printf("\n\n\t\t\t\t>予想通り、敵はぼうぎょに1ポイント割り振っていましたね\n"); printf("\n\t\t\t%s(敵)のターン!\n",kanto[k].basename); printf("\n\t\t\t\t%s(敵)のこうげき lv4 発動!\n",kanto[k].basename); printf("\n\t\t\t\t%s(味方)のぼうぎょ lv3 発動!\n",kanto[i].basename); gap=ekougeki*9/10-bougyo*8/10; printf("\n\t\t\t\t%s(味方)に%4.2fのダメージ!!\n",kanto[i].basename,gap); printf("\n\t\t\t\t>今、敵には4ポイント与えられています。\n\t\t\t\t>こうげきlv4が実行されたということは...?\n"); printf("\n\t\t\t%s(味方)の能力\n\t\t\t\t| HP | ATK | DEF |\n\t\t\t\t| %4.2f | %4.2f | %4.2f |\n",kanto[i].basename,tairyoku,kougeki,bougyo); printf("\t\t\t%s(敵)の能力\n\t\t\t\t| HP | ATK | DEF |\n\t\t\t\t| %4.2f | %4.2f | %4.2f |\n",kanto[k].basename,etairyoku,ekougeki,ebougyo); for(h=4;0こうげき に1ポイント振ってみましょう\n"); printf("\t\t\t残りポイント:%d ",h); printf("\n\t\t\t\tこうげき->1 ぼうぎょ->2 >"); scanf("%d",&or); } } printf("\n\t\t\t%s(味方)のターン!\n",kanto[i].basename); printf("\n\t\t\t\t%s(味方)のこうげき lv4 発動!\n",kanto[i].basename); gap=kougeki*9/10; etairyoku-=gap; printf("\n\t\t\t\t%s(敵)に%4.2fのダメージ!!\n",kanto[k].basename,gap); printf("\n\n\t\t\t\t%s(味方)の勝利!\n",kanto[i].basename); printf("\n\n\t\t>バトルの基本的な動作については以上です\n"); printf("\n\n\t\t>次にこゆうわざについてお話しします\n\n\t\t>キャラクターたちは種族ごとに固有のわざを持っています\n\n\t\t>バトル時に こゆうわざ という選択肢にポイントを割り振ることで こゆうわざ を行うことができます\n\n\n\t\t\t>種族とこゆうわざ一覧\n"); for(i=0;i<8;i++) printf("\n\t\t\t\t>%s族の固有技 %s:%s\n",kanto[i].basename,kanto[i].unique,kanto[i].unique_ex); printf("\n\t\t>それでは 固有技込みでバトルをもう一度やってみましょう"); k=5; printf("\n\t\t\t\t野生の%sが現れた!\n",kanto[k].basename); for(i=0;i<8;i++) printf("\n\t\t\t%d 種族:%s\n",i+1,kanto[i].basename); printf("\n\t\t\t>今回はsaitamaを選んでみましょう"); i=1; while(i!=2){ printf("\n\t\t\tどの子を戦わせますか? >"); scanf("%d",&i); } i--; printf("\n\t\t\t>今回は後攻です\n\n"); tairyoku=10.00; etairyoku=10.00; kougeki=7.00; ekougeki=5.50; bougyo=6.50; ebougyo=8.00; printf("\t\t\t%s(敵)の能力\n\t\t\t\t| HP | ATK | DEF |\n\t\t\t\t| %4.2f | %4.2f | %4.2f |\n",kanto[k].basename,etairyoku,ekougeki,ebougyo); printf("\n\t\t\t%s(味方)の能力\n\t\t\t\t| HP | ATK | DEF |\n\t\t\t\t| %4.2f | %4.2f | %4.2f |\n",kanto[i].basename,tairyoku,kougeki,bougyo); printf("\n\t\t\t>それでは%sとともに戦っていきましょう\n",kanto[i].basename); printf("\n\t\t\t%s(敵)のターン!\n",kanto[k].basename); gap=ekougeki*6/10; tairyoku-=gap; printf("\n\t\t\t\t%s(敵)のこうげき lv1 発動!\n",kanto[k].basename); printf("\n\t\t\t\t%s(味方)に%4.2fのダメージ!!\n",kanto[i].basename,gap); printf("\n\t\t\t>後攻ボーナスで2ポイントもらえます\n"); or=2; while(or!=1){ printf("\t\t\t>こうげき に1ポイント振ってみましょう\n"); printf("\n\t\t\t残りポイント: 2"); printf("\n\t\t\t\tこうげき->1 ぼうぎょ->2 こゆうわざ->3 >"); scanf("%d",&or); } while(or!=3){ printf("\n\t\t\t>こゆうわざ に1ポイント振ってみましょう\n"); printf("\t\t\t残りポイント: 1"); printf("\n\t\t\t\tこうげき->1 ぼうぎょ->2 こゆうわざ->3 >"); scanf("%d",&or); } printf("\n\t\t\t%s(味方)のターン!\n",kanto[i].basename); printf("\n\t\t\t\t%s(味方)のこゆうわざ %s lv1 発動!\n",kanto[i].basename,kanto[i].unique); gap=kougeki * 1/10; printf("\t\t\t\t%sの攻撃力が%4.2f上がった↑\n",kanto[i].basename,gap); printf("\n\t\t\t\t%s(味方)のこうげき lv1 発動!\n",kanto[i].basename); gap=gap+kougeki; gap=gap*6/10; etairyoku-=gap; printf("\n\t\t\t\t%s(敵)に%4.2fのダメージ!!\n",kanto[k].basename,gap); printf("\n\t\t\t>このように こゆうわざを使います。\n\t\t\t>ほとんどのスキルの効果は1ターンです\n\t\t\t>saitamaのように自分の攻撃力を底上げするスキルはこうげきも同時に行わないと意味がありません\n\t\t\t>気をつけてください\n\n"); printf("\t\t\t%s(敵)の能力\n\t\t\t\t| HP | ATK | DEF |\n\t\t\t\t| %4.2f | %4.2f | %4.2f |\n",kanto[k].basename,etairyoku,ekougeki,ebougyo); printf("\n\t\t\t%s(味方)の能力\n\t\t\t\t| HP | ATK | DEF |\n\t\t\t\t| %4.2f | %4.2f | %4.2f |\n",kanto[i].basename,tairyoku,kougeki,bougyo); printf("\n\t\t\t%s(敵)のターン!\n",kanto[k].basename); gap=ekougeki*6/10; tairyoku-=gap; printf("\n\t\t\t\t%s(敵)のこゆうわざ %s lv1 発動!\n",kanto[k].basename,kanto[k].unique); printf("\t\t\t\t1ポイントためた!\n"); printf("\n\t\t\t\t%s(味方)に0.00のダメージ!!\n",kanto[i].basename); printf("\n\t\t\t>今、敵には2ポイント割り振られています\n\t\t\t>次の味方のターンで敵はぼうぎょlv1を発動すると予想できますね。\n\t\t\t>また、敵はこゆうわざで1ポイント貯めていました\n\t\t\t>次の敵のターンでのこうげきに備えてぼうぎょに3ポイント割り振っておきましょう\n"); for(h=3;0ぼうぎょ に1ポイント振ってみましょう\n"); printf("\t\t\t残りポイント:%d ",h); printf("\n\t\t\t\tこうげき->1 ぼうぎょ->2 こゆうわざ->3>"); scanf("%d",&or); } } printf("\n\t\t\t%s(味方)のターン!\n",kanto[i].basename); printf("\n\t\t\t\t%s(敵)のぼうぎょ lv1 発動!\n",kanto[i].basename); printf("\n\t\t\t\t%s(敵)に0.00のダメージ!!\n",kanto[k].basename); printf("\t\t\t%s(敵)の能力\n\t\t\t\t| HP | ATK | DEF |\n\t\t\t\t| %4.2f | %4.2f | %4.2f |\n",kanto[k].basename,etairyoku,ekougeki,ebougyo); printf("\n\t\t\t%s(味方)の能力\n\t\t\t\t| HP | ATK | DEF |\n\t\t\t\t| %4.2f | %4.2f | %4.2f |\n",kanto[i].basename,tairyoku,kougeki,bougyo); printf("\n\t\t\t%s(敵)のターン!\n",kanto[k].basename); printf("\n\t\t\t\t%s(敵)のこうげき lv4 発動!\n",kanto[k].basename); printf("\n\t\t\t\t%s(味方)のぼうぎょ lv3 発動!\n",kanto[i].basename); gap=ekougeki*9/10-bougyo*8/10; tairyoku-=gap; printf("\n\t\t\t\t%s(味方)に0.00のダメージ!!\n",kanto[i].basename); printf("\n\t\t\t\t>今敵はぼうぎょに1ポイントも割り振ってません!\n\t\t\t\t>こうげき のチャンスですよ!\n"); for(h=2;0こゆうわざ に1ポイント振ってみましょう\n"); printf("\t\t\t残りポイント:%d ",h+2); printf("\n\t\t\t\tこうげき->1 ぼうぎょ->2 こゆうわざ->3>"); scanf("%d",&or); } } for(h=2;0こうげき に1ポイント振ってみましょう\n"); printf("\t\t\t残りポイント:%d ",h); printf("\n\t\t\t\tこうげき->1 ぼうぎょ->2 こゆうわざ->3>"); scanf("%d",&or); } } printf("\n\t\t\t%s(味方)のターン!\n",kanto[i].basename); printf("\n\t\t\t\t%s(味方)のこゆうわざ %s lv2 発動!\n",kanto[i].basename,kanto[i].unique); gap=kougeki * 2/10; printf("\t\t\t\t%sの攻撃力が%4.2f上がった↑\n",kanto[i].basename,gap); printf("\n\t\t\t\t%s(味方)のこうげき lv1 発動!\n",kanto[i].basename); gap=gap+kougeki; gap=gap*7/10; etairyoku-=gap; printf("\n\t\t\t\t%s(敵)に%4.2fのダメージ!!\n",kanto[k].basename,gap); printf("\t\t\t%s(敵)の能力\n\t\t\t\t| HP | ATK | DEF |\n\t\t\t\t| %4.2f | %4.2f | %4.2f |\n",kanto[k].basename,etairyoku,ekougeki,ebougyo); printf("\n\t\t\t%s(味方)の能力\n\t\t\t\t| HP | ATK | DEF |\n\t\t\t\t| %4.2f | %4.2f | %4.2f |\n",kanto[i].basename,tairyoku,kougeki,bougyo); printf("\n\n\t\t\t\t%s(味方)の勝利!\n",kanto[i].basename); printf("\n\n\t\t>このように、直前の相手の行動から次来る手を読んで応戦していってください\n\n\n\t模擬戦はここまでです\n\tそれではプレイをはじめましょう\n"); printf("\tはじめての方は はじめから を選んでキャラクターの設定を行ってください\n\n"); }