key さんが書きました:HPがマイナスにならないようにするプログラム
デバッガ、チートツール、宇宙線、配列の範囲外アクセスなどによる不正なデータの書き換えを考慮しないのであれば、単純にHPがマイナスにならないようにするだけでしょう。
また、HPを格納するメンバの型をunsigned intなどの符号なし整数にすれば、絶対にマイナスにならなくなるでしょう。
コード:
bool battle(PLAYER *pt_atk, PLAYER *pt_def)
{
if (pt_atk->attack <= 0)
pt_atk->attack = 0;
if (pt_def->hp >= pt_atk->attack;
pt_def->hp -= pt_atk->attack;
else
pt_def->hp = 0;
printf("%sの体力は%d\n", pt_def->name, pt_def->hp);
if (pt_def->hp <= 0)
{
printf("%sの勝ちです。", pt_atk->name);
return true;
}
return false;
}
key さんが書きました:実行すると一度に対決の結果が出力されるので
1ターンごとにエンターを押すと対決結果を表示
実際に対決をしている部分のプログラムと、詳しい仕様を教えてほしいです。
仕様としては、例えば
- エンターが押されたかをどうやって判定する?例えば
- PS/2やUSBでキーボードと通信する
- マイコンのピンにプルアップまたはプルダウンしたスイッチをつなぎ、入力を得る
- '\n'が入力されたらエンターが押されたとみなす
など
- 「1ターン」って何?
- 「対決結果」って何?