Esempio n. 1
0
        private KamokoGameStateServer NewGameState(CreateGameRequest req, DateTime start, DateTime end)
        {
            var course = _courses[req.Course];

            #region Random Selection
            var init = new List <int>();
            for (int i = 0; i < course.Length; i++)
            {
                init.Add(i);
            }

            var rand = new List <int>();
            while (init.Count > 0)
            {
                if (init.Count == 1)
                {
                    rand.Add(init[0]);
                    break;
                }

                var idx = _rnd.Next(0, init.Count);
                var tmp = init[idx];
                init.RemoveAt(idx);
                rand.Add(tmp);
            }

            var select = new QuestSentence[req.Questions];
            for (var i = 0; i < select.Length; i++)
            {
                var idx = _rnd.Next(0, rand.Count);
                var tmp = rand[idx];
                rand.RemoveAt(idx);
                select[i] = course[tmp];
            }
            #endregion

            return(new KamokoGameStateServer
            {
                AdminId = Guid.NewGuid(),
                Course = req.Course,
                Difficult = req.Difficult,
                Start = start,
                End = end,
                GameId = Guid.NewGuid(),
                Questions = select,
                Timeout = req.Timeout < 5 ? 5 : req.Timeout
            });
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            var ofd = new OpenFileDialog();

            ofd.ShowDialog();

            var sen = new List <Sentence>();

            foreach (var path in ofd.FileNames)
            {
                using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read))
                {
                    var xml    = new XmlSerializer(typeof(Course));
                    var course = xml.Deserialize(fs) as Course;

                    foreach (var d in course.Documents)
                    {
                        foreach (var s in d.Sentences)
                        {
                            var valid = true;
                            foreach (var f in s.Fragments)
                            {
                                if (f is ConstantFragment)
                                {
                                    continue;
                                }

                                if (f is VariableFragment v)
                                {
                                    if (v.Fragments.Any(x => x is VariableFragment)) // Keine zu komplexen Beispiele auswählen
                                    {
                                        valid = false;
                                        break;
                                    }

                                    foreach (var o in v.Fragments) // optionen
                                    {
                                        var option = o as ConstantFragment;
                                        if (option == null)
                                        {
                                            continue;
                                        }

                                        if (option.SpeakerVotes.Count < 2)
                                        {
                                            valid = false;
                                            break;
                                        }

                                        var first = option.SpeakerVotes.First().Vote; // Wird (A) für die Überprüfung für gleiches Urteil UND (B) als Wert für QuestionSentence verwendet.
                                        if (first is VoteReservation)                 // Akzeptiere keine "Bedingte Zustimmung"
                                        {
                                            valid = false;
                                            break;
                                        }

                                        for (var i = 1; i < option.SpeakerVotes.Count; i++) // Alle Muttersprachler müssen das gleiche Urteil fällen.
                                        {
                                            if (option.SpeakerVotes[i].Vote.Level != first.Level)
                                            {
                                                valid = false;
                                                break;
                                            }
                                        }

                                        if (!valid)
                                        {
                                            break;
                                        }
                                    }

                                    if (!valid)
                                    {
                                        break;
                                    }
                                }
                            }

                            sen.Add(s);
                        }
                    }
                }
            }

            var sfd = new SaveFileDialog {
                Filter = "KAMOKO-QuestionSample (*.kamokoQuest)|*.kamokoQuest"
            };

            sfd.ShowDialog();

            var quests = new List <QuestSentence>();

            foreach (var s in sen)
            {
                var ns = new QuestSentence();
                foreach (var f in s.Fragments)
                {
                    if (f is ConstantFragment c)
                    {
                        ns.AddConstant(c.Content);
                    }

                    if (!(f is VariableFragment v))
                    {
                        continue;
                    }

                    var texts = new List <string>();
                    var votes = new List <int>();

                    foreach (var cf in v.Fragments.OfType <ConstantFragment>())
                    {
                        if (cf.SpeakerVotes.Count < 2)
                        {
                            continue;
                        }

                        texts.Add(cf.Content);
                        votes.Add(cf.SpeakerVotes.First().Vote.Level == 10 ? 1 : -1);
                    }

                    if (votes.Count == 0)
                    {
                        ns = null;
                        break;
                    }

                    ns.AddOption(texts.ToArray(), votes.ToArray());
                }

                if (ns != null)
                {
                    quests.Add(ns);
                }
            }

            File.WriteAllText(sfd.FileName, JsonConvert.SerializeObject(quests.ToArray()), Encoding.UTF8);
        }