LoginSignup
0
0

More than 3 years have passed since last update.

開発者になって(いや、なる前に)最初に書くべきプログラム -じゃんけんゲーム-

Last updated at Posted at 2019-11-15

がいよう

研修ではJavaとかC#とかいろいろやらせると思うけど、多分、最初にやらせるのはゲーム系がいいんではないか?と思います。うちの課長は20年前、マインスイーパを課題で出されたそうです。

競技プログラミング

競プロというと、あるお題が出され、テキストベースのテストデータが入力されると、ある結果を出力するように期待される。
今回は、じゃんけんプログラムを普通に作ったところで面白くないから、自分が出す手と勝負する回数をあらかじめ入力し、CPUと勝負した結果を出力するというじゃんけんを作る。

問題文

自分が勝負したい回数(N)を最初に入力し、その後、自分が出す予定の手(グー=0、チョキ=1、パー=2)をN回入力する。その後、CPUと対戦をし、その結果(あなたの勝ち=a、負け=b、あいこ=c)を出力せよ。

制約

  • 1≦N≦100

入力

入力は以下の形式で標準入力される。

N
012

出力

a
b
c

入力例1

5
02102

出力例

あなたの勝ち:2回
CPUの勝ち:1回
あいこ:2回

なお、あくまでこれは基本回答であるからして、創造力(クリエイティビティ:配点20)が高い出力結果を出してもよい。

回答例

qiita.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Janken
{
    public class Program
    {
        public static string[] jankenAA ={"\nグー!   __\n     /」」」」\n     |っ丿\n  ∧_∧ / /\n ( ・ω・)/\n (つ  ノ\n  u-u"
                , "\nチョキ!\n     (V)\n     /アE)\n  ∧_∧ / /\n ( ・ω・)/\n (つ  ノ\n  u-u"
                , "\nパー!\n     「「「h\n     C ノ\n  ∧_∧ / /\n ( ・ω・)/\n (つ  ノ\n  u-u"
        };

        public static void Main(string[] args)
        {
            Console.WriteLine("※説明:最初に何回じゃんけんをするか回数を入力する。\nその後、回数分の自分の出すじゃんけん数値を入れる。\nグー=0、チョキ=1、パー=2");
            try
            {
                int n = int.Parse(Console.ReadLine());

                int[] jankMe = new int[n];

                for (int i = 0; i < n; i++)
                {
                    string jankme = Console.ReadLine();
                    if (!(jankme.Equals("0") || jankme.Equals("1") || jankme.Equals("2")))
                    {
                        Console.WriteLine("じゃんけん番号じゃないです");
                        i -= 1;
                        continue;
                    }
                    jankMe[i] = int.Parse(jankme);
                }

                for (int j = 0; j < n; j++)
                {
                    //Console.Clear();
                    Console.WriteLine("最初はグー、じゃんけん…");
                    int pjank = Player(jankMe[j]);
                    int cpjank = Cpu();
                    Judge(pjank, cpjank);
                }
                Statistics(judgeList);
                Console.ReadKey(true);

            }
            catch (Exception e)
            {
                string m = e.Message;
                Console.WriteLine(m);
                Console.ReadKey(true);
            }
        }
        /// <summary>
        /// プレイヤー
        /// </summary>
        /// <returns>じゃんけん番号</returns>
        public static int Player(int jankMeNow)
        {
            string janken = null;
            bool loopFlg = true;

            //while (loopFlg)
            //{
            //janken = Console.ReadLine();
            janken = jankMeNow.ToString();
            if (!(janken.Equals("0") || janken.Equals("1") || janken.Equals("2")))
            {
                Console.WriteLine("0か1か2で入れてください。");
                loopFlg = true;
            }
            else
            {
                loopFlg = false;
            }
            //}
            int jank = int.Parse(janken);
            Display(0, jank);
            return jank;
        }

        /// <summary>
        /// CPU
        /// </summary>
        /// <returns>じゃんけん番号</returns>
        public static int Cpu()
        {
            int randomInt = Janken();
            Display(1, randomInt);
            return randomInt;
        }

        /// <summary>
        /// 画面への表示
        /// </summary>
        /// <param name="isPlayer"></param>
        /// <param name="jank"></param>
        public static void Display(int isPlayer, int jank)
        {
            if (isPlayer == 0)
            {
                Console.Write("あなたは、");
            }
            else
            {
                Console.Write("コンピューターは、");
            }

            Console.WriteLine(jankenAA[jank]);
        }

        /// <summary>
        /// ランダム関数
        /// </summary>
        public static Random rand = new Random();

        /// <summary>
        /// CPUがランダムで出すじゃんけんの関数
        /// </summary>
        /// <returns>ランダムで出した数</returns>
        public static int Janken()
        {
            int jank = rand.Next(3);
            return jank;
        }

        /// <summary>
        /// ジャッジ
        /// </summary>
        /// <param name="player"></param>
        /// <param name="cpu"></param>

        public static List<int> judgeList = new List<int>();

        public static void Judge(int player, int cpu)
        {
            int judge = 0;

            if ((player == 0 && cpu == 1) || (player == 1 && cpu == 2) || (player == 2 && cpu == 0))
            {
                Console.WriteLine("【プレイヤーが勝ち】");
                judge = 0;
            }
            else if ((cpu == 0 && player == 1) || (cpu == 1 && player == 2) || (cpu == 2 && player == 0))
            {
                Console.WriteLine("【CPUが勝ち】");
                judge = 1;
            }
            else
            {
                Console.WriteLine("【あいこ】");
                judge = 2;
            }
            judgeList.Add(judge);
            Console.Write("\n");
        }
        public static void Statistics(List<int> jlist)
        {
            int playerWin = jlist.Where(j=>j==0).Count();
            int cpuWin = jlist.Where(j=>j==1).Count();
            int draw = jlist.Where(j => j == 2).Count();
            Console.WriteLine(string.Format("プレイヤーの勝利数:{0}\nCPUの勝利数:{1}\nあいこ数:{2}", playerWin,cpuWin,draw));
        }
    }
}

入力結果

※説明:最初に何回じゃんけんをするか回数を入力する。
その後、回数分の自分の出すじゃんけん数値を入れる。
グー=0、チョキ=1、パー=2
3
0
1
2

出力結果

最初はグー、じゃんけん…
あなたは、
グー!   __
     /」」」」
     |っ丿
  ∧_∧ / /
 ( ・ω・)/
 (つ  ノ
  u-u
コンピューターは、
グー!   __
     /」」」」
     |っ丿
  ∧_∧ / /
 ( ・ω・)/
 (つ  ノ
  u-u
【あいこ】

最初はグー、じゃんけん…
あなたは、
チョキ!
     (V)
     /アE)
  ∧_∧ / /
 ( ・ω・)/
 (つ  ノ
  u-u
コンピューターは、
パー!
     「「「h
     C ノ
  ∧_∧ / /
 ( ・ω・)/
 (つ  ノ
  u-u
【プレイヤーが勝ち】

最初はグー、じゃんけん…
あなたは、
パー!
     「「「h
     C ノ
  ∧_∧ / /
 ( ・ω・)/
 (つ  ノ
  u-u
コンピューターは、
チョキ!
     (V)
     /アE)
  ∧_∧ / /
 ( ・ω・)/
 (つ  ノ
  u-u
【CPUが勝ち】

プレイヤーの勝利数:1
CPUの勝利数:1
あいこ数:1

はい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0