初心者なりにドラクエ1の戦闘ぽいものを作っている途中なのですがプレイヤーか魔王のHPが0になるまでループさせたいのですがfor文をどう使った

初心者なりにドラクエ1の戦闘ぽいものを作っている途中なのですがプレイヤーか魔王のHPが0になるまでループさせたいのですがfor文をどう使った らいいかわかりません。どうかおしえてください printf("+-%s-+\n", a); printf("│レベル 20 │\n"); printf("│HP %d │\n",plife); printf("│MP %d │\n",mp); printf("+------+\n"); printf("+-%s-+\n",a); printf("│1.こうげき │\n"); printf("│ │\n"); printf("│2.ためる │\n"); printf("│ │\n"); printf("│3.ベホイミ │\n"); printf("+------+\n"); printf("コマンドを選んでください\n"); scanf("%d", &command); rewind(stdin); switch (command) { case 1: printf("勇者%sの攻撃!!\n",a); random = 1 + rand() % 10; if (random >= 2) { elife=elife - patk + edfe ; printf("竜王に%dのダメージ\n", patk); printf("竜王の攻撃!!\n"); plife=plife - eatk + pdfe ; printf("勇者に%dのダメージ\n",eatk); } else { printf("攻撃は外れた...\n"); printf("竜王の攻撃!!\n"); plife = plife - eatk + pdfe; printf("勇者に%dのダメージ\n", eatk); } break; case 2: printf("勇者%sは力を溜めた!!\n",a); patk=patk + 50; printf("竜王の攻撃!!\n"); plife = plife - eatk + pdfe; printf("勇者に%dのダメージ\n", eatk); break; case3: printf("勇者%sはベホイミを唱えた!!\n"); plife = plife + 80; }

C言語関連 | プログラミング34閲覧xmlns="http://www.w3.org/2000/svg">25

ベストアンサー

0

>プレイヤーか魔王のHPが0になるまでループさせたい >for文をどう使ったらいいか その構文(投稿してあるプログラム全文)の前に for( ; plife>0 && elife>0 ; ){ どちらのHPも1以上の時は繰り返すというfor()文を作り その構文の終わりに 追加したfor()文の } をつけて閉じる。

その他の回答(1件)

0

>ドラクエ1の戦闘ぽいもの こうします SwI5kY - Online C Compiler & Debugging Tool - Ideone.com https://ideone.com/SwI5kY *** #include<stdio.h> #include<stdlib.h> #include<time.h> #define LEN 128 typedef struct character_t{ char name[LEN]; int level; int hp; int mp; int atk; int def; int tension; int luck; char title[LEN];//肩書き }Character; int dice100(void){ return 1 + rand() % 100; } void showStat(Character pl){ printf("+-%8s-+\n", pl.name); printf("│レベル %3d │\n", pl.level); printf("│HP %3d │\n", pl.hp); printf("│MP %3d │\n", pl.mp); printf("+------+\n"); printf("+-%8s-+\n", pl.name); printf("│1.こうげき │\n"); printf("│ │\n"); printf("│2.ためる │\n"); printf("│ │\n"); printf("│3.ベホイミ │\n"); printf("+------+\n"); } void normal_attack(Character* uke, Character* seme){//通常の攻撃方法で攻撃 printf("%s%sの攻撃!!\n", seme->title, seme->name); if (dice100() >= seme->luck) { int damage = (seme->atk+seme->tension*50) - uke->def;//テンション付きアルテリオス計算式 uke->hp -= damage; if (uke->hp < 0) uke->hp = 0; printf("%sに%dのダメージ\n", uke->name, damage); } else { printf("攻撃は外れた...\n"); } seme->tension = 0; } int main(voi){ unsigned seed = (unsigned)time(NULL); srand(seed); // lv hp mp atk def t luk Character pl = {"ロト", 20, 250, 120, 40, 30, 0, 17, "勇者"}; Character en = {"竜王", 40, 650, 100, 45, 30, 0, 45, ""}; int turn; const int turnMax = 1000; for(turn=1; turn<turnMax; turn++){ showStat(pl); printf(">"); int command; scanf("%d", &command); //rewind(stdin); switch (command) { case 1: normal_attack(&en, &pl); break; case 2: printf("%s%sは力を溜めた!!\n", pl.title, pl.name); pl.tension += 1; break; case 3: printf("%s%sはベホイミを唱えた!!\n", pl.title, pl.name); pl.hp += 80; pl.mp -= 10; break; } if(!(en.hp > 0)){ printf("%sは死んだ", en.name); break; } normal_attack(&pl, &en); if(!(pl.hp > 0)){ printf("%sは死んだ", en.name); break; } } return 0; }