###前提・実現したいこと
C言語で自分の腕試しに簡易的なカードゲームを作ろうとしています。
###発生している問題・エラーメッセージ
コンパイルは問題なく出来ましたが、肝心の起動が上手くいきません。
タスクマネージャー上では「起動中」なのですが、1~2分待っても何も反応がありません。
###該当のソースコード
C
1#include <stdio.h> 2#include <stdlib.h> 3#include <time.h> 4 5#define Cardtype 2 6#define Intype 4 7#define CardMax 3 8 9typedef struct status{ 10 int hp; 11 int cards[2][4]; 12 int have[5]; 13} Sta; 14 15/* カードの名前を判定する */ 16void Namejudge(const int id){ 17 switch(id){ 18 case 10 : printf("無の剣"); break; 19 case 11 : printf("緑の剣"); break; 20 case 12 : printf("赤の剣"); break; 21 case 13 : printf("青の剣"); break; 22 case 20 : printf("無の盾"); break; 23 case 21 : printf("緑の盾"); break; 24 case 22 : printf("赤の盾"); break; 25 case 23 : printf("青の盾"); break; 26 } 27} 28 29/* カードの説明文を判定する */ 30void Descjudge(const int id){ 31 char desc[256]; 32 33 switch(id){ 34 case 10 : printf("相手に無属性威力4の攻撃。"); break; 35 case 11 : printf("相手に木属性威力4の攻撃。"); break; 36 case 12 : printf("相手に火属性威力4の攻撃。"); break; 37 case 13 : printf("相手に水属性威力4の攻撃。"); break; 38 case 20 : printf("全属性の攻撃を半減させる。"); break; 39 case 21 : printf("水属性の攻撃を無効化、木属性の攻撃を半減させる。"); break; 40 case 22 : printf("木属性の攻撃を無効化、火属性の攻撃を半減させる。"); break; 41 case 23 : printf("火属性の攻撃を無効化、水属性の攻撃を半減させる。"); break; 42 } 43} 44 45/* 初期化処理 */ 46void Initia(Sta *std){ 47 int r, n, m; 48 int f; 49 50 srand(time(NULL)); 51 52 std->hp = 100; 53 54 for(f = 0; f < 5; f++){ 55 do{ 56 n = rand() % Cardtype + 1; 57 m = rand() % Intype; 58 59 if(std->cards[n - 1][m] == CardMax){ 60 std->have[f] = n * 10 + m; 61 std->cards[n - 1][m] += 1; 62 } 63 } while(std->have[f] < 10); 64 } 65 66} 67 68/* 選択処理 */ 69int choosecard(Sta std, Sta ene){ 70 int f, choice; 71 72 printf("自分残りHP:%d", std.hp); 73 printf("相手残りHP:%d", ene.hp); 74 75 printf("手持ちカード\n"); 76 77 for(f = 0; f < 5; f++){ 78 printf("%d番:", f + 1); 79 Namejudge(std.have[f]); 80 printf(" - "); 81 Descjudge(std.have[f]); 82 } 83 84 printf("カードを選択してください(1~5):"); 85 86 do{ 87 scanf("%d", &choice); 88 if(choice < 1 || choice > 5){ 89 printf("\a1~5で選択してください。:"); 90 } 91 } while(choice < 1 || choice > 5); 92 93 return choice - 1; 94} 95 96/* ダメージ計算、演算処理、文章表示 */ 97void Fight(int p, int e, Sta *pla, Sta *ene){ 98 int pd, ed; 99 int obju; 100 101 if(pla->have[p] / 10 == 1 && ene->have[e] / 10 == 1){ 102 /* どちらも攻撃札の場合、単純にダメージを付与 */ 103 pd = 4; 104 ed = 4; 105 printf("互いの攻撃がぶつかり合った!\n"); 106 }else if(pla->have[p] / 10 == 1 && ene->have[e] / 10 == 2){ 107 /* こちらが攻撃札の場合、ダメージ変動するかの判定 */ 108 /* 無属性盾なら半減 */ 109 if(ene->have[e] % 10 == 0) pd = 2; 110 else{ 111 obju = ((pla->have[p] % 10) - (ene->have[e] % 10) + 3) % 3; 112 /* 1なら貫通、2なら無効、0なら半減 */ 113 switch(obju){ 114 case 0 : pd = 2; printf("こちらの攻撃は相手の盾で弱められてしまった!\n"); break; 115 case 1 : pd = 4; printf("こちらの攻撃は相手の盾を貫通した!\n"); break; 116 case 2 : pd = 0; printf("こちらの攻撃は相手の盾に阻まれてしまった!\n"); break; 117 } 118 } 119 ed = 0; 120 }else if(pla->have[p] / 10 == 2 && ene->have[e] / 10 == 1){ 121 /* 今度は逆、やることもほぼ変わらない */ 122 /* 無属性盾なら半減 */ 123 if(pla->have[p] % 10 == 0) ed = 2; 124 else{ 125 obju = ((pla->have[p] % 10) - (ene->have[e] % 10) + 3) % 3; 126 /* 1なら無効、2なら貫通、0なら半減 */ 127 switch(obju){ 128 case 0 : ed = 2; printf("こちらの盾で相手の攻撃を弱めた!\n"); break; 129 case 1 : ed = 0; printf("こちらの盾は相手の攻撃を阻んだ!\n"); break; 130 case 2 : ed = 4; printf("こちらの盾は相手の攻撃で破れてしまった!\n"); break; 131 } 132 } 133 pd = 0; 134 }else{ 135 /* どちらも防御札なので互いにダメージなし */ 136 pd = 0; 137 ed = 0; 138 printf("互いに守りあっている。\n"); 139 } 140 141 pla->hp -= ed; 142 ene->hp -= pd; 143} 144 145int main(void){ 146 Sta Pla, Ene; 147 int turn, plac, enec; 148 149 srand(time(NULL)); 150 151 Initia(&Pla); 152 Initia(&Ene); 153 154 turn = 0; 155 156 puts("========================"); 157 puts(" Cards Battle "); 158 puts("========================"); 159 160 do{ 161 printf("---%dターン目---\n", ++turn); 162 plac = choosecard(Pla, Ene); 163 enec = rand() % 5; 164 printf("カードオープン!\n"); 165 166 printf("あなたは「"); 167 Namejudge(Pla.have[plac]); 168 printf("」を召喚!\n"); 169 170 printf("あいては「"); 171 Namejudge(Ene.have[enec]); 172 printf("」を召喚!\n"); 173 174 Fight(plac, enec, &Pla, &Ene); 175 176 if(Pla.hp <= 0 || Ene.hp <= 0) break; 177 } while(1); 178 179 return 0; 180}
###試したこと
どこかエラーにひっからないレベルで間違えているのかと思いましたが、まだ初めて間もないためよくわからず戸惑っています。
###補足情報(言語/FW/ツール等のバージョンなど)
コンパイラはMinGWを使っています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/22 06:19
2017/10/22 06:26 編集