ページ 11

教えて下さい

Posted: 2016年1月14日(木) 17:00
by masa

コード:

#define _CRT_SECURE_NO_DEPRECATE 
#include <stdio.h>
#include <string.h> 

#define PLAYER_MAX (2)

typedef struct
{
	char name[21];//名前
	int  hp;//体力
	int  attack;//攻撃力
}PLAYER;

void input_player(PLAYER *);
void output_player(PLAYER *);
bool battle(PLAYER*, PLAYER*);

int main(void)
{

	PLAYER player_data[PLAYER_MAX];
	PLAYER *pt_player_data;
	int i,b_end,turn;

	
	pt_player_data = &player_data[0];
	
	for (i = 0; i < PLAYER_MAX; i++)
	{
		printf("ステータス入力\n", (i + 1));
		input_player(pt_player_data);
		pt_player_data++;
	}

	pt_player_data = &player_data[0];
	for (i = 0; i < PLAYER_MAX; i++)
	{
		printf("スターテス表示\n", (i + 1));
		output_player(pt_player_data);
		pt_player_data++;
	}

	turn = 0;
	do{
		b_end = battle(&player_data[turn], &player_data[(turn ^ 1)]);
		turn = (turn ^ 1);
	} while (!b_end);


	getchar();
	return 0;


}


void input_player(PLAYER*pt_data)
{
	printf("名前入力\n");
	scanf("%s", pt_data->name);
	rewind(stdin);

	printf("体力入力\n");
	scanf("%d", &pt_data->hp);
	rewind(stdin);

	printf("攻撃力入力\n");
	scanf("%d", &pt_data->attack);
	rewind(stdin);

}

void output_player(PLAYER *pt_data)
{
	printf("名前%s\n体力%d\n攻撃力%d\n", 
		pt_data->name, pt_data->hp, pt_data->attack);

}


bool battle(PLAYER *pt_atc, PLAYER *pt_def)
{
	pt_def->hp -= pt_atc->attack;

	
	printf("%sへ%dのダメージ\n", pt_def->name, pt_atc->attack);
	
	if (pt_def->hp < 0)
		pt_def = 0;


	if (pt_def <= 0){


		printf("%sさんの勝利です\n", pt_atc->name);


		return true;


	}

	return false;


}
2人の名前 体力 攻撃力を入力して対決するプログラムです。
入力された攻撃力で戦いあうだけでは面白くないので
通常攻撃
急所へ当たった(ダメージ2倍)
攻撃が外れた
昼寝を始めた(1から5回の間攻撃できない)
体力回復(10~150の間でランダムで回復)
を追加したいのですがわからないので教えて下さい

Re: 教えて下さい

Posted: 2016年1月14日(木) 21:49
by みけCAT
具体的にどこがわからないのですか?

Re: 教えて下さい

Posted: 2016年1月14日(木) 22:44
by masa
ダメージ2倍以外は全くわからないです

Re: 教えて下さい

Posted: 2016年1月14日(木) 22:47
by みけCAT
どのくらい自分で考えましたか?

Re: 教えて下さい

Posted: 2016年1月14日(木) 23:17
by masa
2時間位考えてました

Re: 教えて下さい

Posted: 2016年1月15日(金) 10:14
by asd
masa さんが書きました: 2人の名前 体力 攻撃力を入力して対決するプログラムです。
入力された攻撃力で戦いあうだけでは面白くないので
通常攻撃
急所へ当たった(ダメージ2倍)
攻撃が外れた
昼寝を始めた(1から5回の間攻撃できない)
体力回復(10~150の間でランダムで回復)
を追加したいのですがわからないので教えて下さい
とりあえず処理について整理なされてはいかがでしょうか。

提示されている項目の内、ダメージ2倍と攻撃が外れたについては通常攻撃の際の追加処理になるかと思います。
項番を振ると以下のような感じでしょうか。

1.通常攻撃
 1-1.急所へ当たった(ダメージ2倍)
 1-2.攻撃が外れた
2.昼寝を始めた(1から5回の間攻撃できない)
3.体力回復(10~150の間でランダムで回復)

ここで通常攻撃に追加される処理について掘り下げると、
・どういう条件の場合に急所に当たったことにするのか?
 →(例)キャラクタに「うんのよさ」パラメータを追加してそれを基にランダムにする(高ければ発生率は上がるとか)
・どういう場合に攻撃が外れたことにするのか
 →(例)キャラクタに「すばやさ」パラメータを追加して自分と相手のすばやさの差を基にランダムにする(差が大きければ外れやすくするとか)

という感じでキャラクタのもつパラメータの追加も必要に応じて発生するかもしれません。
あくまで一案なので最初は完全にランダムでもいいかもです^^

また現状提示されているプログラムでは交互に通常攻撃をするのみですが、
昼寝をしたり体力回復をしたりする分岐はどういった条件で行われるのでしょうか?
(完全にランダム?昼寝はランダムとして体力が少なくなってきたら体力回復する確率を上げるなど)

長文になりましたが、まずは上記も参考に言葉で構わないのでそれぞれの処理をどうやって行うのかを
整理するとよいと思います。
それができたらプログラムに落とし込む上で自分が考えているやり方と実現したい内容、やってみた結果との相違を挙げながら
質問されれば少しずつ完成に近づくのではと思います。
がんばってください(*´ヮ`)b

Re: 教えて下さい

Posted: 2016年1月17日(日) 13:17
by masa
昼寝を始めた(1から5回の間攻撃できない)
体力回復(10~150の間でランダムで回復)
が分かりません教えて下さい

Re: 教えて下さい

Posted: 2016年1月19日(火) 19:44
by masa
昼寝を始めた(1から5回の間攻撃できない)以外はできましたが
これが分かりません 教えて下さい。
バトル終了時にHPが負の値になってしまうので
どうすればいいですか

Re: 教えて下さい

Posted: 2016年1月19日(火) 21:52
by みけCAT
masa さんが書きました:昼寝を始めた(1から5回の間攻撃できない)以外はできましたが
一旦そのプログラムを貼っていただけますか?
masa さんが書きました:バトル終了時にHPが負の値になってしまうので
どうすればいいですか
どうしたいのですか?

Re: 教えて下さい

Posted: 2016年1月19日(火) 22:16
by masa
解決しました

Re: 教えて下さい

Posted: 2016年1月20日(水) 14:58
by asd
移動先?にリンクしておきます。
http://dixq.net/forum/viewtopic.php?f=3&t=17615