C# 一句话多个答案

C# multiple answers for one sentence

我想编写一个程序来执行以下操作。

代码

public partial class Form1 : Form
{           

    SpeechSynthesizer s = new SpeechSynthesizer();
    Choices list = new Choices();
    Boolean wake = true;
    public Form1()
    {

        SpeechRecognitionEngine rec = new SpeechRecognitionEngine();
        list.Add(new String[] { "hello", "how are you", "what time is it", "what day is it","wake", "sleep", "restart", "open studio", "close studio", "search ", "standby", "mute", "unmute", "up", "down", "hex system up", "google dog"});
        Grammar gr = new Grammar(new GrammarBuilder(list));
        try
        {

            rec.RequestRecognizerUpdate();
            rec.LoadGrammar(gr);
            rec.SpeechRecognized += rec_SpeachRecognized;
            rec.SetInputToDefaultAudioDevice();
            rec.RecognizeAsync(RecognizeMode.Multiple);
            rec.LoadGrammar(new DictationGrammar());
            RecognitionResult Result = rec.Recognize();
            string ResultString = "";
            foreach (RecognizedWordUnit w in Result.Words)                
            {
                ResultString += w.Text;
            }

        }
        catch { return; }


        InitializeComponent();
    }
    public void KillProg(String s)
    {

        System.Diagnostics.Process[] procs = null;
        try
        {
            procs = Process.GetProcessesByName(s);
            Process prog = procs[0];
            if (!prog.HasExited) { prog.Kill(); }


    }finally
        {
            if (procs != null) 
            { 
                foreach (Process p in procs)
                {
                    p.Dispose();
                }
            }
        }
}    


    public void restart()
    {
        Process.Start(@"D:\here.exe");
        Environment.Exit(0);
    }
    public void  say(String h)
    {

        s.Speak(h);

    }

    public static void ExecuteCommand(string Command)
    {
        System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", "/c" + Command);
        procStartInfo.RedirectStandardOutput = true;
        procStartInfo.UseShellExecute = false;
        procStartInfo.CreateNoWindow = true;
        System.Diagnostics.Process proc = new System.Diagnostics.Process();
        proc.StartInfo = procStartInfo;
        proc.Start();
        proc.Close();
    }
    //Speech Commands
    private void rec_SpeachRecognized(object sender, SpeechRecognizedEventArgs e)
    {            
        String r = e.Result.Text;
        if (r == "wake")  wake = true;
        if (r == "sleep")  wake = false;
        if (wake == true)
        {
            if (r.ToLower().Contains("search"))
            {  string query = r.Replace("search", "");
                query = System.Web.HttpUtility.UrlEncode(query);
                string url = "https://www.google.com.au/search?q=" + query;
                System.Diagnostics.Process.Start(url);  }
                if (r == "hex system up") { Process.Start(@"C:\Program Files\Rainmeter\Rainmeter.exe"); say("Welcome back sir                   the system is loading and all energy is stabilized      ,          now i am at 100% capacity"); }
                if (r == "down") { ExecuteCommand("C:/nircmd.exe changesysvolume -10000"); }
                if (r == "up") { ExecuteCommand("C:/nircmd.exe changesysvolume 10000"); }
                if (r == "unmute") { ExecuteCommand("C:/nircmd.exe mutesysvolume 0"); say("system unmute sir"); }
                if (r == "mute") { say("mute now!"); ExecuteCommand("C:/nircmd.exe mutesysvolume 1"); }
                if (r == "standby") { say("The system will enter in waiting mode sir"); ExecuteCommand("C:/nircmd.exe standby"); }
                if (r == "close studio") { KillProg("WDExpress"); }
                if (r == "open studio") { Process.Start(@"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\WDExpress.exe"); }
                if (r == "hello") { say("Hi"); }
                if (r == "how are you") { say("Great , and you?"); }
                if (r == "what time is it") { say(DateTime.Now.ToString("hh:mm")); }
                if (r == "what day is it") { say(DateTime.Now.ToString("M/d/yyyy")); }
                if (r == "open google") { Process.Start("https://www.google.ro"); }


        }



    }

    private void say()
    {
        throw new NotImplementedException();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    public bool c { get; set; }

    public int r { get; set; }

    public int rnd { get; set; }

    public Grammar dictationGrammar { get; set; }
}
 }

您需要 System.Random to generate a random numberxy(0..4、1..5 随便):

using System;

public class Program
{
    public static void Main()
    {
        // Define answers
        string[] answers = new[] {
            "Some answer",
            "Another answer",
            "Yet another answer",
            "Foo answer",
            "Bar answer"
        };

        // Create a new instance of the Random class
        var rng = new Random();

        // Pick a random number between 0 and the number of elements in the answers array
        int randomnumber = rng.Next(0, answers.Length);

        // Print random answer
        Console.WriteLine(answers[randomnumber]);
    }
}

就是这样。就那么简单。玩上面的代码 here.

在你的情况下你可能不会写 Console.WriteLine(answers[randomnumber]);say(answers[randomnumber]);

另一个注意事项:而不是:

if (r == "hex system up") { ... }
if (r == "down") { ... }
if (r == "up")  { ... }
if (r == "unmute") { ... }
if (r == "mute")  { ... }
if (r == "standby") { ... }

学习 switch statement 并重写您的代码,使其看起来类似于:

switch (r.ToLowerInvariant()) {
    case "hex system up":
        Process.Start(@"C:\Program Files\Rainmeter\Rainmeter.exe");
        Say("Welcome back sir");
        break;
    case "down":
        ExecuteCommand(@"C:\nircmd.exe changesysvolume -10000");
        break;
    case "up":
        ExecuteCommand(@"C:\nircmd.exe changesysvolume 10000");
        break;
    case "unmute":
        ExecuteCommand(@"C:\nircmd.exe mutesysvolume 0");
        Say("system unmute sir");
        break;
    case "mute":
        Say("mute now!");
        ExecuteCommand(@"C:\nircmd.exe mutesysvolume 1");
        break;
    case "standby":
        Say("The system will enter in waiting mode sir");
        ExecuteCommand(@"C:\nircmd.exe standby");
        break;
    // ... rest here ...
    default:
        Say("Unknown command sir!");
        break;
}

此外,尽量保持一致:

  • ExecuteC命令 -> say => S天。
  • @"C:\Progam Files..." -> "C:/nircmd.exe" => @"C:\nircmd.exe"

阅读.Net Naming Guidelines

I'm new in C# so please explain step by step everything:d

如果您需要更多信息,请提出 具体 问题,不要问别人 "explain everything step by step".