C#面向对象编程-猜拳游戏

1.需求

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

2.需求分析

根据需求,来分析一下对象,可分析出:玩家对象(Player)、计算机对象(Computer)、裁判对象(Judge)。

玩家出拳由用户控制,使用数字代表:1石头、2剪子、3布

计算机出拳由计算机随机产生

裁判根据玩家与计算机的出拳情况进行判断输赢

3.类对象的实现

玩家类示例代码

    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"></param>
        /// <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>
        /// <param name="max"></param>
        /// <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("请输入整数");
                }
            }
        }
    }

计算机类示例代码

    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;
        }
    }

裁判类示例代码

这个类通过一个特殊的方式来判定结果

    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.对象的实现

        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();
            }
        }
时间: 2024-08-03 23:27:59

C#面向对象编程-猜拳游戏的相关文章

面向对象_猜拳游戏

通过控制台命令方式实现一个猜拳游戏,用户通过输入(1.剪刀,2.石头,3.布)与电脑PK,最后通过积分的多少判定胜负 猜拳游戏实现思路: 1.在控制台输出玩法提示 2.是否开始游戏(接收1表示开始,0表示退出) 3.接收游戏的局数 4.循环接收用户的出拳(1.剪刀 2石头 3.布) 5.系统随机出拳 6.进行比较记录胜者次数 7.公布结果 package com.study.second; import java.util.Random; import java.util.Scanner; /*

[从玩游戏来理解编程]关于面向对象编程的浅解(1)

我最近在玩星际争霸2,感觉到面向对象真是太重要了.有三个种族,每个种族有自己的兵种,一个兵种就是一个类,而且他们的父类都是一个类. 每个单位都有自己的属性和技能,之前学习的c语言是面向过程的,慢慢的也理解到了面向对象在某些地方的重要性. 之前都是在学习算法,实现上用的c语言,看不出来到底有什么区别,反而在用c来的更简洁和更快,最近慢慢的接触到小项目之类的什么的就慢慢感觉到面向对象的重要性. 最近在看一本书叫<making games with python and pygame>,这本书很好,

Python之路【第五篇】:面向对象编程

面向对象编程思维导向图 http://naotu.baidu.com/file/03516c91377d6cad0ded041aa4ce4433?token=ccaba09527261666 密码: Tim 面向:过程.函数.对象 面向过程:根据业务逻辑从上到下写垒代码! 面向过程的编程弊:每次调用的时候都的重写,代码特别长,代码重用性没有,每次增加新功能所有的代码都的修改!那有什么办法解决上面出现的弊端呢?函数就出现了. 面向函数:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可!

037类和对象:面向对象编程

面向对象编程(OOP)   OOA:面向对象分析   OOD:面向对象设计   OOP:面向对象编程 1.self 是什么呢?  python中的self相当于C++的this指针  就像类是图纸,而对象是可以住人的房子,每个房子长得一样,但它们有不同的主人,self就相当于每个房子的门牌号.  self参数的作用:绑定方法,有了self参数python就可以分清哪个对象再调用方法:                  可以认为self其实就是实例对象的唯一标识.  例:    >>> c

黑马程序员-----面向对象编程概念

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ----- 第一讲   面向对象编程概念 本小节知识点: 1.[了解]编程的实质是什么? 2.[掌握]面向对象的基本概念 类    包    接口      继承      多态 ( 面向过程是强调我们要做一件事情有哪些步骤, 面向对象是强调我们做一件事

Python基础6-1 面向对象编程

概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强..." 面向过程编程最易被初学者接受,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,即:将之前实现的代码块复制到现需功能处. while True:     if cpu利用率 > 90%:         #发送邮件提醒         连接邮箱服务器         发送邮件     

Day6 - Python基础6 面向对象编程

Python之路,Day6 - 面向对象学习 本节内容: 面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人拿棍打狗, 狗可以咬人,怎么描述这种不同的角色和他们的功能呢? 你搜罗了自己掌握的所有技能,写出了下面的代码来描述这两个角色 1 2 3 4 5 6 7 8 9 10 11

转载知乎上的一篇:“ 面向对象编程的弊端是什么?”

弊端是,没有人还记得面向对象原本要解决的问题是什么. 1.面向对象原本要解决什么(或者说有什么优良特性)似乎很简单,但实际又很不简单:面向对象三要素封装.继承.多态 (警告:事实上,从业界如此总结出这面向对象三要素的一刹那开始,就已经开始犯错了!). 封装:封装的意义,在于明确标识出允许外部使用的所有成员函数和数据项,或者叫接口. 有了封装,就可以明确区分内外,使得类实现者可以修改封装内的东西而不影响外部调用者:而外部调用者也可以知道自己不可以碰哪里.这就提供一个良好的合作基础--或者说,只要接

名家吐槽:面向对象编程从骨子里就有问题

仅供娱乐. 面向对象是90年代"结构化编程"的万金油,风靡一时,但很难说它就是那些用它开发出来的东西的"终极"编程模式. "面向对象编程是一个极其糟糕的主意,只有硅谷里的人能干出这种事情." - Edsger Dijkstra(图灵奖获得者) "面向对象设计是用罗马数字做计算." - Rob Pike(Go语言之父) "'面向对象'这个词包含很多意思.有一半是显而易见的,而另一半是错误的."- Paul G