質問内容
列挙体、関数を用いたじゃんけんゲームを以下の仕様で作成しています。
(1)じゃんけんを1回した後に「続けますか?」というメッセージを画面に表示し、続ける場合は数字の1を、やめる場合は1以外の数を入力させ、続ける場合は初回に戻ってじゃんけんをし、続かない場合は終了する。
(2)じゃんけんを1回するたびにそれまでの累積の勝敗を表示する。
1.1~1.7の解とメイン関数を統合してじゃんけんゲームを作成しています。
1.1 じゃんけんゲームで列挙体Gu(グー)に値0、Chki(チョキ)に値2、Pa(パー)に値5を割り当てるenum janken型列挙体を宣言し、これをJPON型と再定義せよ。
1.2 乱数の種に時刻を使用し、1~6の乱数(整数型)を発生する関数saikoroを作成せよ。
1.3 1~6のサイの目を引数で受け取り、目が1,2ならグーを、3,4ならチョキを、5,6ならパーを発生させる関数sysjanを作成せよ。(sysjanはコンピュータが出す拳)
1.4 コンピュータが出した拳を表示する関数watashinokenを以下の仕様で作成せよ
・引数で受け取る変数名をkenとし、その型はJPON型とする。
・引数で受け取った拳の値によって「あなたは○○を出しました。」と表示する。ここで、引数値がGuならグー、Chokiならチョキ、Paならパーの文字が表示されたものとする。
・表示の場合分けにはswitch-case文を用いる。
・この関数に戻り値はない。
1.5 挑戦者が出した拳を表示する関数anatanokenを以下の仕様で作成せよ
1.4と同じ
1.6 コンピュータが出した拳と挑戦者が出した拳を比較し、勝負結果を戻り値として返す関数shoubuを以下の仕様で作成せよ。
・引数で挑戦者の拳をkenin、コンピュータの拳をkenoutとし、その型はどちらもJPON型とする。
・勝負結果を整数型変数shoubukekkaにセットしてretrunする。なお、勝負結果と戻り値の対応関係は下記の通りとする。
・挑戦者の勝ち shoubukekka=1
・コンピュータの勝ち shoubukekka=-1
・あいこ shoubukekka=0
1.7 勝負結果を表示する関数kekkaを以下の仕様で作成せよ。
・引数が-1のとき、「あなたの負けです」と表示する。
・引数が+1のとき、「あなたの勝ちです」と表示する。
・引数が0のとき、「あいこです」と表示する。
・この関数に戻り値はない。
define _CRT_SECURE_NO_WARNINGS
include <stdio.h>
include <stdlib.h>
include <time.h>
typedef enum janken { Gu = 0, Choki = 2, Pa = 5 } JPON;
int saikoro(void) {
int sai;
srand((unsigned)time(NULL));
sai = rand() % 6 + 1;
return(0);
}
int sysjan(int sai)
{
int pon;
switch (sai) {
case 1: pon = Gu; break;
case 2: pon = Gu; break;
case 3: pon = Choki; break;
case 4: pon = Choki; break;
case 5: pon = Pa; break;
case 6: pon = Pa; break;
}
return pon;
}
int shoubu(JPON kenin, JPON kenout)
{
int shoubukekka;
switch (kenin) {
case Gu:
if (kenout == Gu) shoubukekka = 0;
else if (kenout == Choki) shoubukekka = 1;
else shoubukekka = -1;
break;
case Choki:
if (kenout == Gu) shoubukekka = -1;
else if (kenout == Choki) shoubukekka = 0;
else shoubukekka = 1;
break;
case Pa:
if (kenout == Gu) shoubukekka = 1;
else if (kenout == Choki) shoubukekka = -1;
else shoubukekka = 0;
break;
}
return (shoubukekka);
}
void watashinoken(JPON ken)
{
switch (ken) {
case Gu: printf("わたしはグーを出しました。\n"); break;
case Choki: printf("わたしはチョキを出しました。\n"); break;
case Pa: printf("わたしはパーを出しました。\n"); break;
}
}
void anatanoken(JPON ken)
{
switch (ken) {
case Gu: printf("あなたはグーを出しました。\n"); break;
case Choki: printf("あなたはチョキを出しました。\n"); break;
case Pa: printf("あなたはパーを出しました。\n"); break;
}
}
void kekka(int r)
{
switch (r) {
case -1: printf("あなたの負けです\n"); break;
case 1: printf("あなたの勝ちです\n"); break;
case 0: printf("あいこです\n"); break;
}
}
int main(void) {
JPON choken;
JPON sysken;
int ken_buf;
int sai;
int shoubukekka;
do {
printf("\nジャンケンをしましょう。\n");
printf("\nグーは0 チョキは2 パーは5を入れます。\n");
printf("\nじゃんけんぽん!はいどうぞ:\a");
scanf("%d", &ken_buf);
choken = (JPON)ken_buf;
if ((choken != Gu) && (choken != Choki) && (choken != Pa))
printf("\n@@@@正しく入れてください!@@@@\n");
} while (!(choken == Gu || choken == Choki || choken == Pa));
sai = saikoro();
sysken = sysjan(sai); ←エラー
shoubukekka = shoubu(choken, sysken);
printf("\a");
anatanoken(choken);
watashinoken(sysken);
kekka(shoubukekka);
printf("\n終わります。おつかれさまでした。\n\n");
return(0);
}
この仕様で作成してみたのですが、エラーが1つだけ出てきてしまいます。
どうしたら解消されるのでしょうか?
###エラー名
'=': 'int' から 'JPON' に変換できません。
コード:C2440
補足情報(FW/ツールのバージョンなど)
Visual Studioを使用してます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/02 03:36
2021/05/02 03:58
2021/05/02 07:48
2021/05/02 08:01
2021/05/02 09:02
2021/05/02 10:37