教えて下さい

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

教えて下さい

#1

投稿記事 by masa » 9年前

コード:

#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の間でランダムで回復)
を追加したいのですがわからないので教えて下さい

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

Re: 教えて下さい

#2

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

具体的にどこがわからないのですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

masa

Re: 教えて下さい

#3

投稿記事 by masa » 9年前

ダメージ2倍以外は全くわからないです

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

Re: 教えて下さい

#4

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

どのくらい自分で考えましたか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

masa

Re: 教えて下さい

#5

投稿記事 by masa » 9年前

2時間位考えてました

アバター
asd
記事: 319
登録日時: 15年前

Re: 教えて下さい

#6

投稿記事 by asd » 9年前

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

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

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

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

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

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

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

masa

Re: 教えて下さい

#7

投稿記事 by masa » 9年前

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

masa

Re: 教えて下さい

#8

投稿記事 by masa » 9年前

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

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

Re: 教えて下さい

#9

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

masa さんが書きました:昼寝を始めた(1から5回の間攻撃できない)以外はできましたが
一旦そのプログラムを貼っていただけますか?
masa さんが書きました:バトル終了時にHPが負の値になってしまうので
どうすればいいですか
どうしたいのですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

masa

Re: 教えて下さい

#10

投稿記事 by masa » 9年前

解決しました

アバター
asd
記事: 319
登録日時: 15年前

Re: 教えて下さい

#11

投稿記事 by asd » 9年前

移動先?にリンクしておきます。
http://dixq.net/forum/viewtopic.php?f=3&t=17615
Advanced Supporting Developer
無理やりこじつけ(ぉ

閉鎖

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