コンピューター対戦のプログラムを組みたいので
その土台となるプレイヤー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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ビルの前とかにある建物の名前...
-
チンパンジーの生息する山に数...
-
熱石を浴槽に入れたい
-
Java 石取りゲーム
-
川で、するあの遊びの名前は?
-
FGOのガチャで石400個近く使っ...
-
石塁と石築地ってなにが違うん...
-
石が積んであると怖い??
-
カラスが、
-
この石は黒曜石でしょうか? 徳...
-
石の沈降速度を教えてください ...
-
100円ライターの石って交換でき...
-
植物 名前を教えてください。
-
ここは、溺れた犬に石をぶつけ...
-
草花の名前、教えてください。
-
祟りでしょうか??
-
石を割ると黄色いのがあるので...
-
庭に凄く邪魔な大きい庭石があ...
-
砂利の分離方法
-
石に水はしみますか?
おすすめ情報