当前位置:首页 > C#学习 > 正文内容

面向对象版聊天机器人

小道6年前 (2018-08-20)C#学习4281

机器人有不同的名字、维护自己的FullLevel,可以SayHello(我叫***),可以喂食(Eat(int foodCount)),可以对它说话(Speak),对异常情况(错误的喂饭数字,喂的太多撑死了)进行处理,有两个机器人供选择,一开始通过1、2数字选择聊天机器人。

    class Program
    {
        static void Main(string[] args)
        {
            机器人 J1 = new 机器人();//new 产生一个对象。
            J1.Name = "小E";//给J1命名
            机器人 J2 = new 机器人();//new 产生一个对象。
            J2.Name = "大E";//给J2命名
            Console.WriteLine("机器人:你要和哪个机器人聊天呢?请输入【1或2】.");
            机器人 J;//创建一个机器人变量
            string s = Console.ReadLine();//接收用户输入的字符串
            if (s == "1")//判断用户输入的是否为"1"字符串
            {
                J = J1;//J指向“J1指向的对象”
            }
            else if (s == "2")//判断用户输入的是否为"2"字符串
            {
                J = J2;//J指向“J2指向的对象”
            }
            else//如果用户输入的不是"1"或者"2"则执行下面语句
            {
                Console.WriteLine("机器人:你输入的有误。");//提示
                return;//退出程序
            }
            J.SayHello();//调用机器人类的方法.
            Console.WriteLine("机器人:你要和我聊天吗?");//提示

            while (true)//while为真。一直执行
            {
                string sp = Console.ReadLine();//接收用户输入的字符串
                J.Speak(sp);//调用机器人类的方法。
            }
            Console.ReadKey();//按任意键退出
        }
    }
    class 机器人
    {
        public string Name { set; get; } //定义一个属性。一般常用这种属性定义。

        private int FullLevel=10;//定义一个 局部整型字段,饥饿程度。
        private void Eat(string i)//定义一个局部 “吃”的方法,接收一个字符串, 这个方法仅用于内部使用,外部无须使用。
        {
            int a;//定义一个 整型变量
            if (int.TryParse(i, out a))//判断接收的字符串 是否可以转换成整型,并返回一个布尔值。
            {
                int i1 = Convert.ToInt32(i);//将字符串转换成整型
                if (i1 < 0 || i1 > 20)//判断输入的值是否符合
                {
                    Console.WriteLine("机器人:每次我只能吃1~19个食物。");//提示
                }
                else
                {
                    FullLevel = FullLevel + i1 + 1;//符合标准就相加。
                    Console.WriteLine("机器人:吃饱了,你现在还可以提问{0}问题。", FullLevel);//提示
                }
            }
            else
            {
                Console.WriteLine("机器人:你输入的食物有问题。");//输入非法值提示
                return;//退出程序
            }
        }
        public void SayHello()//定义一个 “介绍自己的”方法。
        {
            Console.WriteLine("机器人:我的名字叫:{0}",this.Name);//输出
        }
        public void Speak(string s) //定义一个说的方法。
        {
            if (FullLevel < 0)//判断饥饿程度是不是小于0
            {
                Console.WriteLine("机器人:我饿死了,给我喂点食物吧。");//如果小于0则提示
                string wei = Console.ReadLine();//用户输入
                this.Eat(wei);//调用Eat方法。
            }
            else//如果大于0则执行下面语句
            {
                if (s.Contains("天气"))//用户输入的字符串是否包含“天气”
                {
                    if (s.Contains("北京"))//用户输入的字符串是否包含“北京”
                    {
                        Console.WriteLine("机器人:今天北京天气很好。");//为真 则输出。
                    }
                    else
                        Console.WriteLine("机器人:其他地方的天气我不知道。");//为假 则输出。
                }
                else if (s.Contains("女朋友"))//用户输入的字符串是否包含“女朋友”
                {
                    Console.WriteLine("机器人:年纪小,不考虑。");//为真 则输出。
                }
                else if (s.Contains("年龄")||s.Contains("岁"))//用户输入的字符串是否包含“年龄”或“岁”
                {
                    Console.WriteLine("机器人:我永远18岁。");//为真 则输出。
                }
                else
                {
                    Console.WriteLine("机器人:你说的什么?我听不懂。");//为假 则输出。
                }
                FullLevel--;//每次提问 饥饿自减1
            }
        }
        }

输出结果:

image.png

扫描二维码推送至手机访问。

版权声明:本文由小道发布,如需转载请注明出处。

本文链接:https://daobk.com/post/37.html

分享给朋友:

“面向对象版聊天机器人” 的相关文章

类型转换Cast和Convert

类型转换Cast和Convert

把源类型赋值给目标类型,两个类型不一致的时候会发生类型转换。a=b,b是源,a是目标。隐式转换、显式转换。当目标类型一定能满足源类型转换过去后的要求的话就是隐式转换;如果当目标类型不一定能满足源类型转换过去后的要求的话就需要显式转换(程序员自己负责)。比如:把中国人转换为人是隐式转换,把人转换为中国...

数组:​从一个整数数组中取出最大的整数。

数组:​从一个整数数组中取出最大的整数。

保存多个值。任意类型都可以声明数组。int[] nums = {5,3,8};//数组可以直接赋值。 int[] nums = new int[3];//也可以先声明数组 不赋值。   &...

函数重名:构成重载的条件:参数类型不同或者参数个数不同(不严谨),与返回值无关。

函数重名:构成重载的条件:参数类型不同或者参数个数不同(不严谨),与返回值无关。

构成重载的条件:参数类型不同或者参数个数不同(不严谨),与返回值无关。        static void Main(string[] args)//默认函数   &...

字符串的处理

字符串的处理

C#中单个字符用单引号包含就是char类型,('a'),单引号中放且只能放一个字符。单个字符也可以表示为字符串,还可以有长度为0的字符串使用s.Length属性来获得字符串中的字符个数string可以看做是char的只读数组。char c = s[1];。C#中字符串有一个重要的特性...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。