dポイントプレゼントキャンペーン実施中!

C言語のじゃんけんゲームのプログラムです。正直何がダメなのか分かりません。
エラー表示は
watashinoken関数のkenが定義されていないなどがありました。
また、1回した後に1を押したらもう一度、1以外で終了するプログラムと、
累計勝敗(〇勝〇敗〇分け)を表示するプログラムを追加するにはどうすればいいですか?
ちょー急ぎでお願いします!

#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();
return(sai);
}

int sysjan(int sainome) {
int pon;
switch(sainome)
{

case 1:pon = 0; break;
case 2:pon = 0; break;
case 3:pon = 2; break;
case 4:pon = 2; break;
case 5:pon = 5; break;
case 6:pon = 5; break;
}
return((JPON)pon);
}

int watashinoken(void)
{
switch (ken)
{
case Gu: {
printf("私はグーを出しました。\n"); break; }
case Choki: {
printf("私はチョキを出しました。\n"); break; }
case Pa: {
printf("私はパーを出しました。\n"); break; }
}

int anatanoken(void)
{
switch (ken)
{
case ken = 0: {
printf("あなたはグーを出しました。\n"); break; }
case ken = 2: {
printf("あなたはチョキを出しました。\n"); break; }
case ken = 5: {
printf("あなたはパーを出しました。\n"); break; }
}

int shoubu(kenin, kenout) {
int shoubukekka;
switch (kenout) {
case Gu:
{if (kenout == 0)shoubukekka = 0;
else if (kenout == 2)shoubukekka = 1;
else shoubukekka = -1;
}
case Choki:
{if (kenout == 0)shoubukekka = -1;
else if (kenout == 2)shoubukekka = 0;
else shoubukekka = 1;
}
case Pa:
{if (kenout == 0)
shoubukekka = 1;
else if (keno==2)
shoubukekka = -1;
else
shoubukekka = 0;
}
return(shoubukekka);

void kekka(int shoubukekka) {
if (shoubukekka == -1)printf("\nあなたの負けです\n");

else if (shoubukekka == 1)printf("\nあなたの勝ちです。\n");

else if (shoubukekka == 0)printf("\nあいこです\n");
int main(void)
JPON coken;
JPON sysken;
int ken_buf, sai, shoubukekka;
do {
puts("\nジャンケンをしましょう。");
puts("グーは0 チョキは2 パーは5をいれます。");

puts("\nじゃんけんぽん はい!どうぞ:"); scanf_s("%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();
sysjan = (sai);
shoubukekka = shoubu(choken, sysjan);
printf("\a");
anatanoken(choken);
watashinoken(sysjan);
kekka(shoubukekka);
printf("\n終わります。お疲れ様でした。\n\n");
return(0);

}

A 回答 (2件)

> watashinoken関数のkenが定義されていないなどがありました。



watashinoken関数は

> int watashinoken(void)

と無引数で定義されてるのに、いきなり

> switch (ken)

とかなってるんだけど、このkenは何?って事。watashinoken関数でこのswitch文以前には何もkenが定義されていません。
当然エラーが起きますね。

> 1回した後に1を押したらもう一度、1以外で終了するプログラムと、
累計勝敗(〇勝〇敗〇分け)を表示するプログラムを追加するにはどうすればいいですか?

まず、一般論。
まぁ、ゲームに限らないんだけど、例えばGUIのソフトなんかで、「ずーっと起動してるままの状態」を形作るブツをつや〜にイベントループと呼びます。
カッコつけて言ってるだけなんだけど、原則CLIのソフトも同じで、「何らかの動作をしまくってる」状態だと当然ループしてないとならない。
つまり、形式的にはmain関数内では

while (1) {
 ジャンケンやる命令
}
return 0;

と書かれてるのが基本なのね。
そうするとwhileはただ繰り返すだけなんだけど、ここから脱出したり「繰り返しをやり直す」命令があれば・・・って話になる。
それが次の2つになるわけ。

・break => 脱出
・continue => アタマに戻る

つまり、考え方としては

while (1) {
 ジャンケンやる命令
 if (入力 == 1) {
  continue;
 } else {
  break;
 }
}
return 0;

とすれば良い、って事ですな。

累計勝敗に対しては単に変数用意しておいて記録取っていけば良いだけ、です。
    • good
    • 0

「エラー表示」に「watashinoken関数のkenが定義されていない」とあるんだったら, 「それ」がダメなんだよ.



もっとはっきり言えば
あなたの理解度
がダメなんだけど.
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A