/* * This file is part of gwap, an open platform for games with a purpose * * Copyright (C) 2013 * Project play4science * Lehr- und Forschungseinheit für Programmier- und Modellierungssprachen * Ludwig-Maximilians-Universität München * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package gwap.elearn; /** * @author Katharina Krug * */ //@Stateless //@Name("elearnRandomTermChoice") public class RandomTermChoice { /* @Logger protected Log log; @In protected GameRound gameRound; @In protected GameConfiguration newElearnGameVariables; private Term term; @PersistenceContext private EntityManager em; private List<Term> random; @Out private Term thisrandom; static String antwortenrichtig2; static Term chosenterm; static boolean timerstarted = false; int points = 0; private List<Term> random2; private List<Term> auswahlausrichtig; private List<Term> auswahlausfalsch; private Term[] defaktoauswahl; private Random zahl = new Random(); private int zufall = 0; private int zufall2 = 0; private ArrayList<String> thisselect; private ArrayList<String> thisselectnew; private int rest; private int zeitbonus; private Term checkIfAlreadySaid(List<Term> random) { if (newElearnGameVariables.getChosentermsnumber2() == 0) { return random.get(0); } else { for (int j = 0; j < random.size(); j++) for (int i = 0; i < newElearnGameVariables .getChosentermsnumber2(); i++) { if (newElearnGameVariables.getChosenterms2()[i] .toLowerCase().equals( random.get(j).getTermname().toLowerCase())) { break; } if (i + 1 == newElearnGameVariables.getChosentermsnumber2()) { return random.get(j); } } return random .get(newElearnGameVariables.getChosentermsnumber2() + 1); } } // select termname from terms order by random() @Factory("thisrandom") public String choose() { / * Bestimmte Variablen der injizierten GameVariablen werden zu jeder * angefangenen neuen Runde wieder auf bestimmte Werte gesetzt. So wird * z.B. die erreichte Ansage der vorigen Runde, wieder auf 0 gesetzt. * Sowie auch die Ansage der neuen Runde auf die in der vorigen Runde * gewählten “Nächsten Ansage” gesetzt. / // if (newElearnGameVariables.getFirsttime()) { // newElearnGameVariables.setChosenterms2(new String[30]); // } // java.util.Date now = new java.util.Date(); // SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH.mm.ss"); // String ausgabe = sdf.format(now); // log.info("Start: " + ausgabe); // log.info("Punkte: " + newElearnGameVariables.getScore()); // log.info("Momentane Ansage: " + newElearnGameVariables.getAnsage()); // log.info("Erreichte Ansage in voriger Runde: " // + newElearnGameVariables.getErreichteAnsage()); // log.info("Momentane Zeit: " + newElearnGameVariables.getZeit()); // if (newElearnGameVariables.getAlteZeit() == 60) { // zeitbonus = 1; // } else if (newElearnGameVariables.getAlteZeit() == 45) { // zeitbonus = 2; // } else if (newElearnGameVariables.getAlteZeit() == 30) { // zeitbonus = 3; // } else { // zeitbonus = 4; // } // if (gameRound.getNumber() > 3 && gameRound.getNumber() % 3 == 1 // && newElearnGameVariables.getChecked() == false) { // newElearnGameVariables.setScoreNormal(newElearnGameVariables // .getScore() // - newElearnGameVariables.getAnsage() // * newElearnGameVariables.getLevel() * zeitbonus); // // } else if (newElearnGameVariables.getFirsttime()) { // newElearnGameVariables.setFirsttime(false); // } else if (newElearnGameVariables.getErreichteAnsage() == newElearnGameVariables // .getAnsage()) { // // System.out.println("erreicht gleich ansage"); // } else { // // newElearnGameVariables.setScoreNormal(newElearnGameVariables // .getScore() // - newElearnGameVariables.getAnsage() // * newElearnGameVariables.getLevel() // * zeitbonus // + newElearnGameVariables.getErreichteAnsage() // * newElearnGameVariables.getLevel() * zeitbonus); // // System.out.println("nicht erreicht gleich ansage"); // newElearnGameVariables.setChecked(false); // } // newElearnGameVariables.setErreichteAnsage(0); // newElearnGameVariables.setAnsage(newElearnGameVariables // .getZukunftigeAnsage()); // newElearnGameVariables.setAlteZeit(newElearnGameVariables.getZeit()); / * Die injizierte GameRound teilt mit in welcher Runde sich der Anwender * befindet, anHand dieser Information wird mittels einer Query ein * Zufallsterm aus einer bestimmten Gruppe an Termen gewählt. Befindet * man sich z.B. in einer Runde des Level 2. Wird ein Zufallsterm * gewählt der confirmedTerms besitzt (denn ohne sie könnte man ja keine * Punkte erreichen) und der das Rating=2 besitzt, das sind * Mittel-schwierig-eingestufte Begriffe. / // if (gameRound.getNumber() <= 10) { // newElearnGameVariables.setLevel(1); // } else if (gameRound.getNumber() <= 20) { // newElearnGameVariables.setLevel(2); // } else { // newElearnGameVariables.setLevel(3); // } // Query q = em.createNamedQuery("term.randomByRating"); // q.setParameter("level", newElearnGameVariables.getLevel()); // random = q.getResultList(); setChosenterm(checkIfAlreadySaid(random)); newElearnGameVariables.setChosentermsSpecial( newElearnGameVariables.getChosentermsnumber2(), getChosenterm(), newElearnGameVariables.getChosenterms2()); newElearnGameVariables.setChosentermsnumber2(newElearnGameVariables .getChosentermsnumber2() + 1); thisrandom = getChosenterm(); / * Befindet sich der User in einer Palette-Runde (jede dritte Runde des * Spiels) ist auch eine zweite Query in dieser Methode von Bedeutung. * In dieser werden fünf Zufallsterme gewählt, die keine bestätigten * Terme des Fragebegriffs sind. Sie stellen die falschen * Auswahlmöglichkeiten im Palette-Modus dar. Ebenfalls zufällig * ausgewählt werden die richtigen bestätigten Terme des Fragebegriffs * die zur Auswahl stehen. / random2 = em .createQuery( "select p from Term p where p.id not in (select p2c.id from Term p2 join p2.confirmedTerms p2c where p2.id =:termId) and p.id != :termId order by random()") .setParameter("termId", getChosenterm().getId()) .setMaxResults(5).getResultList(); List<String> zufallsZahlArray = new ArrayList<String>(); zufallsZahlArray.add("0"); zufallsZahlArray.add("1"); zufallsZahlArray.add("2"); zufallsZahlArray.add("3"); zufallsZahlArray.add("4"); zufallsZahlArray.add("5"); zufallsZahlArray.add("6"); zufallsZahlArray.add("7"); zufallsZahlArray.add("8"); zufallsZahlArray.add("9"); Collections.shuffle(zufallsZahlArray); / * Die Auswahl an Terme wird dann in eine beliebige Reihenfolge geordnet * und die richtigen Terme in einer ArrayList Variable der Game * Variablen gespeichert. / auswahlausrichtig = (getChosenterm()).getConfirmedTags(); auswahlausfalsch = random2; thisselect = new ArrayList<String>(); defaktoauswahl = null; defaktoauswahl = new Term[10]; // fix sobald jeder term mehr als 5 Assoziationen hat for (int i = 0; i < 2 * newElearnGameVariables.getAnsage(); i++) { if (i % 2 == 0) { defaktoauswahl[Integer.parseInt(zufallsZahlArray.get(i))] = auswahlausrichtig .get(zahl.nextInt(auswahlausrichtig.size())); thisselect.add(zufallsZahlArray.get(i)); } else { defaktoauswahl[Integer.parseInt(zufallsZahlArray.get(i))] = auswahlausfalsch .get(zahl.nextInt(auswahlausfalsch.size())); } newElearnGameVariables.setAntworten(defaktoauswahl); } / * Das folgende ist nötig, da die selektierte Reihenfolge in der obrigen * for-Schleife genau falsch gespeichert wird / Integer thisselectinzahl[] = new Integer[thisselect.size()]; String thisselectinstringsort[] = new String[thisselect.size()]; for (int z = 0; z < thisselect.size(); z++) { thisselectinzahl[z] = Integer.parseInt(thisselect.get(z)); } java.util.Arrays.sort(thisselectinzahl); for (int q = 0; q < thisselect.size(); q++) { thisselectinstringsort[q] = thisselectinzahl[q].toString(); } java.util.Arrays.sort(thisselectinzahl); thisselectnew = new ArrayList<String>(); for (int j = 0; j < thisselect.size(); j++) { thisselectnew.add(thisselectinstringsort[j]); } newElearnGameVariables.setRightSelected(thisselectnew); log.info("Das ist der Frageterm der momentanen Runde: " + getChosenterm().getTermname()); newElearnGameVariables.setQuestionTerm(random.get(0)); return null; } public void setChosenterm(Term chosenterm) { this.chosenterm = chosenterm; chosenterm.getConfirmedTags().size(); } public Term getChosenterm() { return chosenterm; } */ }