#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;
int b_end;
int turn;
pt_player_data = &player_data[0];
for (i = 0; i < PLAYER_MAX; i++)
{
printf("%d人目\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("%d人目\n", (i + 1));
output_player(pt_player_data);
pt_player_data++;
}
printf("バトルスタート\n");
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", pt_data->name);
printf("体力:%d\n", pt_data->hp);
printf("攻撃力:%d\n", pt_data->attack);
}
bool battle(PLAYER *pt_atc, PLAYER *pt_def)
{
pt_def->hp -= 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;
}
教えて下さい
教えて下さい
Re: 教えて下さい
「教えてください」についての質問ですか?me さんが書きました:2人の名前を入力した後ランダムでステータスを設定するようにしたいのですがわからないので教えて下さい
「バトルゲームのスタート」などの適切なタイトルにしてください。
ステータスってなんでしょう?
turn のことでしょうか?
現在時刻(秒)の下位 1ビットにしてみました。
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h> // puts, printf, scanf
#include <stdlib.h> // exit
#include <time.h>
#include <windows.h> // Sleep
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[2];
int turn = time(0) & 1; // turn = 0 or 1
puts("1人目"); input_player(&player_data[0]);
puts("2人目"); input_player(&player_data[1]);
puts("1人目"); output_player(&player_data[0]);
puts("2人目"); output_player(&player_data[1]);
puts("バトルスタート");
while (1) {
if (battle(&player_data[turn], &player_data[1 - turn])) break;
turn = 1 - turn;
if (battle(&player_data[turn], &player_data[1 - turn])) break;
turn = 1 - turn;
}
getchar();
return 0;
}
void input_player(PLAYER*pt_data)
{
printf("名前を入力してください==> ");
scanf("%20s", pt_data->name);
printf("体力を入力してください==> ");
if (scanf("%d", &pt_data->hp) != 1) exit(1);
printf("攻撃力を入力してください==> ");
if (scanf("%d", &pt_data->attack) != 1) exit(1);
}
void output_player(PLAYER *pt_data)
{
printf("名前:%s 体力:%d 攻撃力:%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;
if (pt_def->hp < 0) pt_def->hp = 0;
Sleep(1000);
output_player(pt_def);
if (pt_def->hp > 0) return false;
printf("プレイヤー%s勝ち\n", pt_atc->name);
return true;
}
Re: 教えて下さい
すみません。次のように修正してください。
Re: 教えて下さい
値の範囲は?me さんが書きました:攻撃力とHPです
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h> // puts, printf, scanf
#include <stdlib.h> // exit, srand, rand
#include <time.h>
#include <windows.h> // Sleep
const int MAX_HP = 1000;
const int MAX_ATTACK = 100;
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[2];
srand(time(0));
puts("1人目"); input_player(&player_data[0]);
puts("2人目"); input_player(&player_data[1]);
puts("1人目"); output_player(&player_data[0]);
puts("2人目"); output_player(&player_data[1]);
puts("バトルスタート");
int turn = 0;
while (!battle(&player_data[turn], &player_data[!turn]))
turn = !turn;
getchar();
return 0;
}
void input_player(PLAYER*pt_data)
{
printf("名前を入力してください==> ");
scanf("%20s", pt_data->name);
pt_data->hp = rand() % (MAX_HP + 1);
pt_data->attack = rand() % (MAX_ATTACK + 1);
}
void output_player(PLAYER *pt_data)
{
printf("名前:%s 体力:%d 攻撃力:%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;
if (pt_def->hp < 0) pt_def->hp = 0;
Sleep(1000);
output_player(pt_def);
if (pt_def->hp > 0) return false;
printf("プレイヤー %s 勝ち\n", pt_atc->name);
return true;
}