C#のループについて
現在C#でジャンケンゲームの課題に取り組んでいるのですが、ループ処理や各メソッドに対しての変数にエラーがでてしまい、修正方法が分からず、どなたか教えて頂けないでしょうか?
・ユーザはグー、チョキ、パーをそれぞれ1、2、3の数字で入力する。
・CPUは乱数を使って出す手を選ぶ。
・5回勝負として、人間とコンピュータの勝った回数を数え、勝敗がつくたびに1回ずつ表示する。
あいこは決着がつくまで再勝負。途中でどちらかが3勝しても、5回最後まで勝負を続ける。
・指定された範囲以外の値を入力したら負けにする
【実行例】
ユーザ名を入力してください:goto
手を入力してください(グー1、チョキ2、パー3): 1
CPU:チョキ
WIN
goto:1勝、CPU:0勝
手を入力してください(グー1、チョキ2、パー3): 3
CPU:パー
DRAW
手を入力してください(グー1、チョキ2、パー3): 3
CPU:チョキ
LOSE
goto:1勝、CPU:1勝
手を入力してください(グー1、チョキ2、パー3): 0
LOSE(反則負け)
goto:1勝、CPU:2勝
(中略)
goto:3勝、CPU:2勝
gotoさんの総合勝利です!
using System;
namespace Ensyuu007
{
static class Program
{
static string? Myhand;
static int CntWin = 0; //勝利回数
static int CntLose = 0; //敗北回数
static int CntDraw = 0; //引分回数
//ユーザー名の入力
static void Main(string[] args)
{
string EnterName = Console.ReadLine();
Console.WriteLine("ユーザ名を入力してください: {0}", EnterName);
Console.ReadLine();
}
//じゃんけんを5回行います。
for (int GameCnt = 0; GameCnt <= 5; GameCnt++)
{
//正しく入力されたかチェックを行うメソッド。
static string Check(ref string Myhand)
{
static = Console.ReadLine();
Console.WriteLine("手を入力してください(グー1、チョキ2、パー3):{0}", Myhand);
//正しく入力されたかチェックします。
Check(ref Myhand);
//0,1,2が入力された場合
if (Myhand.Equals("1") || Myhand.Equals("2") || Myhand.Equals("3"))
{
//入力した数字をそのまま返します。
return Myhand;
}
//1,2,3以外が入力された場合
else
{
Console.WriteLine("LOSE(反則負け)");
return Myhand;
}
}
//じゃんけんを開始するメソッド。
static void Start()
{
//コンピューターとじゃんけんさせます。
Janken(ref Myhand);
Console.ReadLine();
}
//コンピュータと自分の入力した手を判別するメソッド
static void Janken(ref string Myhand)
{
// Random クラスの新しいインスタンスを生成する
Random ran = new System.Random();
//コンピュータの出す手を1以上3以下に設定する。
string[] com = new string[] { "1", "2", "3" };
string con = ran.Next(3).ToString();
//配列型、変数teに出す名前を設定
string[] te = { "グー", "チョキ", "パー" };
//コンピュータが勝利した場合
if (((Myhand == "1") && (con == "3")) ||
((Myhand == "2") && (con == "1")) ||
((Myhand == "3") && (con == "0")))
{
Console.WriteLine("あなた:" + te.GetValue(int.Parse(Myhand)));
Console.WriteLine("コンピュータ:" + te.GetValue(int.Parse(con)));
Console.WriteLine("LOSE");
CntLose++; //敗北回数に加算
}
//自分が勝利した場合
else if (((Myhand == "1") && (con == "2")) ||
((Myhand == "2") && (con == "3")) ||
((Myhand == "3") && (con == "1")))
{
Console.WriteLine("あなた:" + te.GetValue(int.Parse(Myhand)));
Console.WriteLine("コンピュータ:" + te.GetValue(int.Parse(con)));
Console.WriteLine("WIN");
CntWin++; //勝利回数に加算
}
//あいこだった場合
else
{
Console.WriteLine("あなた:" + te.GetValue(int.Parse(Myhand)));
Console.WriteLine("コンピュータ:" + te.GetValue(int.Parse(con)));
Console.WriteLine("DRAW");
CntDraw++; //引分回数に加算
}
}
}
static void Resurut()
{
if (CntWin > CntLose)
{
Console.WriteLine("総合勝利です");
}
else if (CntLose < CntWin)
{
Console.WriteLine("CPUの総合勝利です");
}
お礼
ありがとうございます。 Lengthを使うという漠然としたイメージしかなかったので、 すっきりしました。 さっそく挑戦してみます。 すいませんカテゴリを間違えてしまいました。
補足
ちなみにですが、下記のようなテキストファイルの内容を 読み込んで、この場合に、同じく合計で「P」がいくつあるか という場合にはどうなりますか? ABC.txt ABCDEFGGHIJJJKLMNOOPPPPQRSTUUVWXYZ ABCDEFGGHIJJJKLMNOOPPPPQRSTUUVWXYZ ABCDEFGGHIJJJKLMNOOPPPPQRSTUUVWXYZ public string getTitleCount(TextReader tr) { string str = null; while ((str = tr.ReadLine()) != null) { int noOfP = System.Array.FindAll(str.ToCharArray(), delegate(char x) { return x == 'P'; }).Length; Console.WriteLine("{0}文字です。", noOfP); } return str; }