#include #include #include #include #define LONGLINE printf("=====================================================================\n"); int intro(void); int game(void); int show(int d, int p, int e); int PlayerSelect(int *select, int d); int EnemySelect(int *select, int d); int battle(int *d, int *p, int pd, int *e, int ed); int repeat(void); unsigned char e[8] = {4,6,1,3,5,7,3,6}; /*敵の性格データ・・・コンピュータ同士を戦わせて、自然淘汰によって //最適な配列を見つけ出すプログラムも面白そう。*/ int main(void) { int re = 1; intro(); while(re) { game(); re = repeat(); } LONGLINE printf("ゲームを遊んで頂きありがとうございました!\n"); LONGLINE return 0; } int intro(void) /*ゲーム説明のイントロ部分*/ { printf("\n\n\n\n 剣と魔法で駆引きバトルゲーム ver.0.8\n\n"); printf("このゲームでは、あなたと敵が向かい合い、剣と魔法で戦うゲームです。\n"); printf("あなたは相手と距離を適切にとり、適切な攻撃を行わなければなりません。\n\n"); printf("ゲームが始まると、あなたは敵と距離1の状態で向き合います。\n"); printf("あなたの選択肢は5つ。\n\n"); printf(" 1.前進 2.後退 3.剣で攻撃\n 4.魔法で攻撃 5.盾で防御\n\n"); printf("敵と離れられるのは距離3までです。\n"); printf("剣は距離1でしか当たりません。\n魔法はどの距離でも使えます。\n"); printf("盾で防御する事によって、敵の魔法を反射し、ダメージを与える事ができます。\n"); printf("敵の選択も同様なので、相手の行動を読んだ戦い方が必要とされます。\n"); printf("開始時の体力は敵も味方も10です。与えるダメージはすべて1です。\n"); printf("何かキーを押すと開始します。\n"); _getch(); return 0; } int game(void) /*ゲームそのものの部分*/ { int soutai, player, enemy; int PlayerDecide, EnemyDecide; int loop = 1; srand((unsigned)time(NULL)); LONGLINE printf("ゲームスタート!\n"); while( loop ){ /*ドロー時再試合用*/ soutai = 1; player = 10; enemy = 10; while( player != 0 && enemy != 0 ) { LONGLINE show(soutai, player, enemy); PlayerSelect(&PlayerDecide, soutai); EnemySelect(&EnemyDecide, soutai); LONGLINE battle(&soutai, &player, PlayerDecide, &enemy, EnemyDecide); } printf("\nあなたの体力残り%d\n敵の体力残り%d\n\n",player,enemy); if(enemy == 0){ if(player == 0){printf("同士討ち!再試合!\n\n");} else{printf("あなたの勝ちです!おめでとう!!\n\n"); loop = 0;}} else {printf("残念!あなたは負けました。\n\n"); loop = 0;} } /*ドロー閉じ*/ return 0; } int show(int d, int p, int e) /*敵との距離を表示する関数*/ { printf("現在距離 %d です。○:自分 ●:敵\n",d); if( d == 1 ){printf(" ○―●\n");} else if( d == 2 ){printf(" ○――●\n");} else {printf(" ○―――●\n");} printf("あなたのHP:%d 敵のHP:%d ",p,e); return 0; } int PlayerSelect(int *select, int d) /*プレイヤーの行動決定関数*/ { printf("どうしますか?\n A:剣   S:魔法  D:防御\n W:前進  X:後退\n"); *select = _getch(); return 0; } int EnemySelect(int *select, int d) { int dice; dice = rand()%10; /*0〜9の値が返る*/ if(d == 1) /*距離が1の場合*/ { if(dice <= e[0]) {*select = 'a';}/*ある確率で剣攻撃*/ else if(dice <= e[1]) {*select = 's';}/*ある確率で魔法攻撃*/ else {*select = 'x';}/*ある確率で後退*/ } if(d == 2) { if(dice <= e[2]) {*select = 'a';}/*ある確率で剣攻撃*/ else if(dice <= e[3]) {*select = 's';}/*ある確率で魔法攻撃*/ else if(dice <= e[4]) {*select = 'd';}/*ある確率で防御*/ else if(dice <= e[5]) {*select = 'w';}/*ある確率で前進*/ else {*select = 'x';}/*ある確率で後退*/ } else { if(dice <= e[6]) {*select = 's';}/*ある確率で魔法攻撃*/ else if(dice <= e[7]) {*select = 'd';}/*ある確率で防御*/ else {*select = 'w';}/*ある確率で前進*/ } return 0; } int battle(int *d, int *p, int pd, int *e, int ed) { if(pd == 'w'){if(*d > 1){printf("あなたは前進した!\n"); *d = *d - 1;} else {printf("あなたは敵が目の前で前進できなかった!\n");}} if(ed == 'w'){if(*d > 1){printf("敵は前進した!\n"); *d = *d - 1;} else {printf("敵はあなたが目の前で前進できなかった!\n");}} if(pd == 'x'){if(*d < 3){printf("あなたは後退した!\n"); *d = *d + 1;} else {printf("あなたはこれ以上後退できなかった!\n");}} if(ed == 'x'){if(*d < 3){printf("敵は後退した!\n"); *d = *d + 1;} else {printf("敵はこれ以上後退できなかった!\n");}} if(pd == 'a'){if(*d == 1){printf("あなたの剣がHIT! 敵のHP-1\n"); *e = *e - 1;} else {printf("スカッ!あなたの剣は空を斬った!\n");}} if(ed == 'a'){if(*d == 1){printf("敵の剣がHIT! あなたののHP-1\n"); *p = *p - 1;} else {printf("スカッ!敵の剣は空を斬った!\n");}} if(pd == 's') { if(ed == 'd'){printf("あなたの魔法は反射されました!痛い!あなたのHP-1\n"); *p = *p - 1;} else{printf("あなたの魔法がHIT! 敵のHP-1\n"); *e = *e-1;} } if(ed == 's') { if(pd == 'd'){printf("敵の魔法を反射しました!敵のHP-1\n"); *e = *e - 1;} else{printf("敵の魔法がHIT! あなたのHP-1\n"); *p = *p - 1;} } if(pd == 'd'){printf("あなたは防御しています\n");} if(ed == 'd'){printf("敵は防御しています\n");} return 0; } int repeat(void) { int yn; printf("ゲームをもう一度行いますか?Hit Y/N:\n\n"); yn = _getch(); if (yn == 121){ yn = 1;} else{ yn = 0 ;} return yn; }