导航

我编写的第一个程序:聊天机器人

这是我编写的第一个程序:聊天机器人。

代码如下,非常粗陋。希望大家多多指点,谢谢!

PS:

这个聊天机器人是在看了杨中科老师的视频后做的,思路都是课上杨老师讲的,只是加了一个食谱。本以为看视频的时候都看明白了,之后自己写一遍不会太难。结果出乎我的意料,光DEBUG就花了很长时间。杨老师课上的一句话“程序员不是听课听出来的,也不是看书看出来的,而是编程编出来的”真的太有道理了。

PS:

程序中创建了一个字符串数组"recipeone".eat时如果输入字符串"food"中包含"recipeone"中的某个字符串,就开始eat。

于是就写了:if (food.Contains(recipeone[]))和if (food.Contains(recipeone)),发现都不行,Contains方法不能包含字符串数组。最后无可奈何,用了foreach循环,一个个比一下。不知道有没有更好的办法,希望大家能告诉我,谢谢!

 namespace oneRobot
{
    class Program
    {
        static void Main(string[] args)
        {
            //构造机器人,名字name:大熊。饥饿值hungerLevel“5”
            RobotOne MyFirstRobot = new RobotOne("大熊", 5);
            Console.WriteLine("你好!");
            //开始聊天
            while (true)
            {

                //饥饿值<0,饿死退出。 0<饥饿值<3,喊饿,进食。
                if (MyFirstRobot.hungerLevel < 0)
                {
                    MyFirstRobot.die();
                    return;
                }
                else if (MyFirstRobot.hungerLevel < 3 && MyFirstRobot.hungerLevel >= 0)
                {
                    MyFirstRobot.hungry();
                    MyFirstRobot.Eat(Console.ReadLine());

                }
               //饥饿值>=3,聊天。输入内容含“88”或“再见”,退出。否则,用chat方法聊天。
                else
                {
                    string input = Console.ReadLine();
                    if (input.Contains("88") || input.Contains("再见"))
                    {
                        Console.WriteLine("886");
                        return;
                    }
                    else
                    {
                        MyFirstRobot.Chat(input);
                    }
                }
            }
        }
    }
    class RobotOne
    {
        //机器人食谱
        public string[] recipeOne = new string[] { "果", "香蕉", "水果", "西瓜", "草莓", "梨", "橘子",
                         "柚子", "荔枝", "甘蔗", "包子", "饺子", "驴肉火烧", "面", "米", "肉", "粥", "蔬菜" };
        string name;
        public int hungerLevel;

        //喊饿方法
        public void hungry()
        {
            Console.WriteLine("饿死啦,我要吃饭");
            hungerLevel--;
        }
        //饿死了。
        public void die()
        {
            Console.WriteLine("饿死了。。。。。");
        }
        //如果输入中包含食谱中的内容,进食。
        public void Eat(string food)                
        {
            foreach (string str in recipeOne)
            {
                if (food.Contains(str))
                {
                    hungerLevel += 3;
                    Console.WriteLine("太好吃了!你是好人");
                    return;
                }
            }
        }
        //聊天。
        public void Chat(string talk)       
        {
            if (talk.Contains("你") && (talk.Contains("名字") || talk.Contains("叫啥") || talk.Contains("是谁")))
            {
                Console.WriteLine("我是最聪明的机器人{0}", this.name);
                hungerLevel--;
            }
            else if (talk.Contains("你好"))
            {
                Console.WriteLine("你好!");
                hungerLevel--;
            }
            else if (talk.Contains("天气") && (talk.Contains("?") || talk.Contains("吗") || talk.Contains("怎么样")))
            {
                Console.WriteLine("天气很好!");
                hungerLevel--;
            }
            else
            {
                Console.WriteLine("听不懂!");
                hungerLevel--;
            }
        }
        //构造函数。初始化机器人的名字,饥饿度。
        public RobotOne(string inputname, int inputhungry)            
        {
            name = inputname;
            hungerLevel = inputhungry;
        }
    }

}

PS:

程序输入“88”后,程序return,控制台直接关闭。

我把机器人的类放到类库项目中,主程序一个项目,输入“88”后,

程序执行          MyFirstRobot.die();
                     return;

但是没有立即退出,而是出现了“输入任意键继续。。。”,按任意一个键后控制台退出。

而将此段程序换成                  

                            Console.WriteLine("饿死了。。。。。");
                            return;

控制台直接就退出了,不知道是什么原因?

posted on 2011-05-04 17:07  李泽  阅读(4541)  评论(18编辑  收藏  举报