C言語

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
key

C言語

#1

投稿記事 by key » 9年前

コード:

 
bool battle(PLAYER *pt_atk, PLAYER *pt_def)
{

	if (pt_atk->attack <= 0)
		pt_atk->attack = 0;
	pt_def->hp -= pt_atk->attack;
	printf("%sの体力は%d\n", pt_def->name, pt_def->hp);
	if (pt_def->hp <= 0)
	{
		printf("%sの勝ちです。", pt_atk->name);
		return true;
	}
	return false;
}
2人で対決させるとHPがマイナスになってしまいます
実行すると一度に対決の結果が出力されるので
1ターンごとにエンターを押すと対決結果を表示
HPがマイナスにならないようにするプログラムを
教えてほしいです。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: C言語

#2

投稿記事 by みけCAT » 9年前

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ターン」って何?
  • 「対決結果」って何?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る