我编写的第一个程序:聊天机器人
时间:2011-05-04 来源:逆
这是我编写的第一个程序:聊天机器人。
代码如下,非常粗陋。希望大家多多指点,谢谢!
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;
控制台直接就退出了,不知道是什么原因?