ページ 11

教えて下さい

Posted: 2015年12月24日(木) 23:30
by me

コード:

#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;
 
 
}
2人の名前を入力した後ランダムでステータスを設定するようにしたいのですがわからないので教えて下さい

Re: 教えて下さい

Posted: 2015年12月25日(金) 10:21
by かずま
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: 教えて下さい

Posted: 2015年12月25日(金) 10:28
by かずま
かずま さんが書きました:
me さんが書きました:

コード:

    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;
    }
すみません。次のように修正してください。

コード:

	while (!battle(&player_data[turn], &player_data[1 - turn]))
		turn = 1 - turn;

Re: 教えて下さい

Posted: 2015年12月26日(土) 09:05
by me
攻撃力とHPです

Re: 教えて下さい

Posted: 2015年12月26日(土) 12:30
by かずま
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;
}

Re: 教えて下さい

Posted: 2015年12月26日(土) 14:10
by me
1から255です

Re: 教えて下さい

Posted: 2015年12月26日(土) 17:10
by かずま
me さんが書きました:1から255です

コード:

    pt_data->hp = rand() % 255 + 1;