
コンピューター対戦のプログラムを組みたいので
その土台となるプレイヤー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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
何という石ですか?
-
ビルの前とかにある建物の名前...
-
石に水はしみますか?
-
熱石を浴槽に入れたい
-
白くてラメが入ったような石を...
-
100円ライターの石って交換でき...
-
石が積んであると怖い??
-
FGOのガチャで石400個近く使っ...
-
この石は黒曜石でしょうか? 徳...
-
この石(?)は何ですか?
-
この石は大理石でしょうか? 川...
-
この石は何で、掘られている文...
-
石塁と石築地ってなにが違うん...
-
袋入り砂の数量について
-
山ズリって?
-
米の比重と糠の比重を教えてく...
-
si面とre面の見分け方
-
砂場の砂がすぐに固まるので、...
-
輝石とはどういう石をいうので...
-
火成岩が冷却される期間は
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ビルの前とかにある建物の名前...
-
石塁と石築地ってなにが違うん...
-
石が積んであると怖い??
-
この石は黒曜石でしょうか? 徳...
-
この石は大理石でしょうか? 川...
-
この石は何で、掘られている文...
-
熱石を浴槽に入れたい
-
石の沈降速度を教えてください ...
-
石取りゲームをC言語プログラム...
-
庭に凄く邪魔な大きい庭石があ...
-
祟りでしょうか??
-
Java 石取りゲーム
-
石をこすって字が書ける石と書...
-
FGOのガチャで石400個近く使っ...
-
川で、するあの遊びの名前は?
-
石に水はしみますか?
-
カラスが、
-
ゲートを作る際の基礎がグラグ...
-
石を磨く方法について
-
大きな石が欲しい
おすすめ情報