コンピューター対戦のプログラムを組みたいので
その土台となるプレイヤーVSプレイヤー(どっちも人間がやる内容)の石取りゲームでのC言語プログラムを教えてください。
ルールとしては最初に石の個数を入力し(10個以上)、二人のプレイヤーが交互に1から3個ずつ石を取り、最後の1個を取った方が負けとなる。
作動例
石の数(10以上): 15
石の数: 15
プレイヤー1の番です
何個取る(1〜3個)? 3
石の数: 12
プレイヤー2の番です
何個取る(1〜3個)? 2
石の数: 10
プレイヤー1の番です
何個取る(1〜3個)? 4
プレイヤー1の番です
何個取る(1〜3個)? 3
石の数: 7
プレイヤー2の番です
何個取る(1〜3個)? 3
石の数: 4
プレイヤー1の番です
何個取る(1〜3個)? 2
石の数: 2
プレイヤー2の番です
何個取る(1〜3個)? 1
石の数: 1
プレイヤー2の勝ち
No.1ベストアンサー
- 回答日時:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define A 0
#define B 4
typedef struct env_t {
int stones;
int player;
} Env_t;
char* Message[] = {"石の数 (10以上) : ", "石の数: %d\n",\
"プレイヤー%dの番です\n何個取る (1〜3個) ?",\
"プレイヤー%dの勝ち\n"};
Env_t init(void) {
Env_t env;
char s[5];
int num;
while (true) {
printf("%s", Message[0]);
scanf("%4s%*[^\n]", s);
getchar();
num = strtol(s, NULL, 10);
if (num > 9) {
env.stones = num;
env.player = 1;
return env;
}
}
}
int input(Env_t env, char* prompt) {
char s[2];
int num;
while (true) {
printf(prompt, env.player);
scanf("%1s%*[^\n]", s);
getchar();
num = strtol(s, NULL, 10);
if ((num > A) && (num < B)) {
return num;
}
}
}
Env_t Eval(int num, Env_t env) {
env.stones -= num;
env.player = env.player == 1 ? 2 : 1;
return env;
}
bool is_game_ends(Env_t env) {
return env.stones < 2 ? true : false;
}
int main(void) {
Env_t env = init();
printf(Message[1], env.stones);
while (true) {
env = Eval(input(env, Message[2]), env);
if (is_game_ends(env)) {
printf(Message[1], env.stones);
printf(Message[3], env.player == 1 ? 2 : 1);
return EXIT_SUCCESS;
}
printf(Message[1], env.stones);
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java Java 石取りゲーム 3 2023/02/02 15:46
- オンラインゲーム fpsゲームについて質問です。 チートがプレイヤーをキルすることと高ランク(Apexならマスターやプ 1 2023/07/09 21:47
- ゲーム ゲームのプレイヤーとキャラクターの関係の呼称。 たとえば、プレイヤーとマリオであれば、プレイヤーはプ 2 2022/08/04 07:09
- オンラインゲーム Wi-Fi、プレイヤー、勝手に侵入。 1 2022/09/20 01:45
- iPod・ウォークマン・音楽プレーヤー 音楽プレイヤーを探しています 3 2023/06/03 18:55
- スピーカー・コンポ・ステレオ CDプレイヤー→アンプでCDを聴くのと、パソコンへCDから取り込みパソコン→DAC→アンプ経由で聞く 7 2022/06/07 10:49
- レトロゲーム Wiiのゲームの名前 1 2022/10/03 22:09
- オンラインゲーム コミュ障でもオンラインゲームは出来ますか? 4 2023/02/07 08:57
- 英語 「Aと言う名前で~する」は英語で何と言いますか。 例えば、 ゲームを始めるときにプレイヤー名を入力し 3 2022/11/30 21:57
- その他(コンピューター・テクノロジー) いやー、質問では無いんですが… Macユーザーなんでブルーレイディスクをプレイヤー 無しでは再生出来 4 2023/04/10 23:49
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報