zoukankan      html  css  js  c++  java
  • C#面向对象编程实例-猜拳游戏

    1.需求

    现在要制作一个游戏,玩家与计算机进行猜拳游戏,玩家出拳,计算机出拳,计算机自动判断输赢。 

    2.需求分析

    根据需求,来分析一下对象,可分析出:玩家对象(Player)、计算机对象(Computer)、裁判对象(Judge)。 玩家出拳由用户控制,使用数字代表:1石头、2剪子、3布 计算机出拳由计算机随机产生 裁判根据玩家与计算机的出拳情况进行判断输赢 

    3.类对象的实现

    玩家类示例代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    class Player
    {
     
        string name;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
     
        public int ShowFist()
        {
            Console.WriteLine("请问,你要出什么拳?  1.剪刀     2.石头    3.布");
            int result = ReadInt(1, 3);
            string fist = IntToFist(result);
            Console.WriteLine("玩家:{0}出了1个{1}", name, fist);
            return result;
        }
     
        /// <summary>
        /// 将用户输入的数字转换成相应的拳头
        /// </summary>
        /// <param name="input">
        /// <returns></returns>
        private string IntToFist(int input)
        {
            string result = string.Empty;
     
            switch (input)
            {
                case 1:
                    result = "剪刀";
                    break;
                case 2:
                    result = "石头";
                    break;
                case 3:
                    result = "布";
                    break;
            }
            return result;
        }
     
        /// <summary>
        /// 从控制台接收数据并验证有效性
        /// </summary>
        /// <param name="min">
        /// <param name="max">
        /// <returns></returns>
        private int ReadInt(int min,int max)
        {
            while (true)
            {
                //从控制台获取用户输入的数据
                string str = Console.ReadLine();
     
                //将用户输入的字符串转换成Int类型
                int result;
                if (int.TryParse(str, out result))
                {
                    //判断输入的范围
                    if (result >= min && result <= max)
                    {
                        return result;
                    }
                    else
                    {
                        Console.WriteLine("请输入1个{0}-{1}范围的数", min, max);
                        continue;
                    }
                }
                else
                {
                    Console.WriteLine("请输入整数");
                }
            }
        }
    }

    计算机类示例代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    class Computer
    {
        //生成一个随机数,让计算机随机出拳
        Random ran = new Random();
        public int ShowFist()
        {
            int result = ran.Next(1, 4);
            Console.WriteLine("计算机出了:{0}", IntToFist(result));
            return result;
        }
     
        private string IntToFist(int input)
        {
            string result = string.Empty;
     
            switch (input)
            {
                case 1:
                    result = "剪刀";
                    break;
                case 2:
                    result = "石头";
                    break;
                case 3:
                    result = "布";
                    break;
            }
            return result;
        }
    }


    裁判类示例代码 这个类通过一个特殊的方式来判定结果

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    class Judge
    {
        public void Determine(int p1, int p2)
        {
            //1剪刀   2石头 3布
            //1 3   1-3=-2 在玩家出1剪刀的情况下,计算机出3布,玩家赢
            //2 1   2-1=1   在玩家出2石头的情况下,计算机出1剪刀,玩家赢
            //3 2   3-2=1   在玩家出3布的情况下,计算机出2石头,玩家赢
            if (p1 - p2 == -2 || p1 - p2 == 1)
            {
                Console.WriteLine("玩家胜利!");
            }
            else if (p1 == p2)
            {
                Console.WriteLine("平局");
            }
            else
            {
                Console.WriteLine("玩家失败!");
            }
        }
    }

    4.对象的实现

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    static void Main(string[] args)
    {
        Player p1 = new Player() { Name="Tony"};
        Computer c1 = new Computer();
        Judge j1 = new Judge();
        while (true)
        {
            int res1 = p1.ShowFist();
            int res2 = c1.ShowFist();
            j1.Determine(res1, res2);
            Console.ReadKey();
        }
    }
  • 相关阅读:
    ZeptoLab Code Rush 2015
    UVa 10048 Audiophobia【Floyd】
    POJ 1847 Tram【Floyd】
    UVa 247 Calling Circles【传递闭包】
    UVa 1395 Slim Span【最小生成树】
    HDU 4006 The kth great number【优先队列】
    UVa 674 Coin Change【记忆化搜索】
    UVa 10285 Longest Run on a Snowboard【记忆化搜索】
    【NOIP2016提高A组模拟9.28】求导
    【NOIP2012模拟10.9】电费结算
  • 原文地址:https://www.cnblogs.com/rr163/p/4112909.html
Copyright © 2011-2022 走看看