小白面向对象聊天机器人

.Net技术 码拜 9年前 (2016-04-30) 986次浏览
界面小白面向对象聊天机器人
代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace robot
{
public partial class Form2 : Form
{
robot r1 = new robot();

public Form2()
{
r1.name = “小A”;
r1.age = 8;
InitializeComponent();
}
public class robot
{

public string name
{
get;
set;
}
public int age
{
get;
set;
}
public string sayhello()
{
return string .Format (“你好!本人叫{0}”, name);

}
public string speak(string str)//对话方法
{
if (str.Contains(“姓名”) || str.Contains(“名字”) || str.Contains(“叫什么”))
{
return string.Format (“嘻嘻,本人叫{0}”, name);
}
else if (str.Contains(“年龄”) || str.Contains(“多大了”) || str.Contains(“多大岁数”))
{
return string.Format(“今年{0}岁了”, age);
}
else if (str.Contains(“你好”) || str.Contains(“hello”) || str.Contains(“hi”))
{
return string.Format(“你也好,哈哈”);
}
else if (str.Contains(“天气”) || str.Contains(“心情”))
{
return string.Format(“天气好心情自然就好了阿,嘿嘿”);
}
else if (str.Contains(“笑话”) || str.Contains(“搞笑的”))
{
return string.Format(“从前有个鬼,他放了个屁,然后死掉了,哈哈哈哈”);
}
else
{
return string.Format(“不好意思,你在说什么本人听不懂欸!”);
}
}
}
private void button2_Click(object sender, EventArgs e)
{
textBox2 .Text  += textBox1.Text + “\n”;
textBox1.Text = “”;
}

private void textBox2_TextChanged(object sender, EventArgs e)
{
textBox2.Text = “”;
textBox2 .Text = r1.sayhello();
string str = textBox1.Text;
while (true)
{
textBox2 .Text  = r1.speak(str);
}
}

}
}
求高手指点一下,现在一发送就未响应
小白新手谢过

解决方案

10

while (true)
{
textBox2 .Text  = r1.speak(str);
}
虽然不知道你是干嘛,但你这里在死循环

10

本人大致知道楼猪想干嘛,但是逻辑有点问题,要注意是一问一答哦,不能问了就根本停不下来。

10

text2 号称“处理用户输入,它再响应用户时,它就是处理一个事件。而一个事件就是一瞬间就结束的事情,不是什么自始至终控制着整个程序的标题党。当你搞懂这个的时候,凭编程感觉,你就永远也不会在 text2_changed 中写 while 循环了。

10

事件驱动的程序,最起码地,是”先发散、后集中“的编程模式。你把几个各司其职的事件联系起来,就组合成千变万化的可能的状态。没有一个事件是什么死循环的,每一个事件都只是一瞬间的事情。这就是基本的交互程序编程思路。(假如没有学习过交互程序编程,一定要多从这方面的流程设计去努力,不要只用那种简单的数学函数编程的思维方式来搞程序设计)
例如你响应 button2 点击事件时,一方面可以把 textbox1的内容附加到 text2 上面,同时清空 textbox1,但是接下来调用 r.speak(….) 的职责应该是这个事件的事,它负责把 r 说的话再贴到 textbox2 中。
对于 text2,它就算是能够响应用户从 textbox1 上最新录入的话(实际上原因是它可能取到的只是上面那个事件已经清空之后的结果),那么它调用 r.speak(…) 也应该只是添加 r 的一句话的返回结果就结束此事件(否则,相同事件下一次什么时候触发?)。
而且 text2 也不应该清空本人。
而且 r.speak(…) 的这个输入值应该是取最新的输入,你的程序一点也没有这方面的概念。
总之,最首要地,是从根上学点的交互设计逻辑。你用一张纸、一支笔就应该能把交互程序设计清楚。你应该先发散地将每一个控件的职责分别设计清楚,然后再不断测试其组合起来(用户输入有着千变万化的可能性)能否逻辑正确。这就好像把一堆电容、电阻搭在一起成为一个简单的逻辑控制器一样。假如一开始就没有根,那就长不成树。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明小白面向对象聊天机器人
喜欢 (0)
[1034331897@qq.com]
分享 (0)