Zunächst einmal: Was ist eine rekursive Funktion?

Antwort: Eine Funktion, die sich selbst wieder aufruft.

Wozu benötigt man das?

Wenn das Ergebnis der Funktion identisch zu seinem Ausgangspunkt ist. Übrigens lässt sich jede Rekursion durch eine Schleife ersetzen, aber nicht umgekehrt.

Beispiel für eine Rekursionsaufgabe: Durchsuche das ganze Dateisystem und träge sämtliche Dateien (aber nicht die Ordner) in eine Datenbank ein.

Lösungsansatz: Eine Funktion, die 1) einen Ordner und 2) eine Datenbank erhält. Sie trägt jede Datei in die Datenbank ein, ruft sich dann selbst auf jeden Unterordner auf.

...zur Antwort

An sich hängt die Hackbarkeit an einem Punkt – der Updatebarkeit

Je problemloser, und für den User unbemerkter ein Auto sich updaten kann, desto leichter kann man es allein über das Internet hacken.

Im anderen Extrem ist nur das Auto unhackbar, wo sämtliche Software auf Read-only-Memory liegt. Geht auch nicht, schon allein der Variablen wegen.

An sich: Für jemanden mit genügend Resourcen wird es IMMER hackbar sein. Die Frage ist nur, wie schwierig es ist. Und das liegt daran, wie viel Geld in sichere Verschlüsselung, Authentifizierung und Authorisierung gesteckt wird – und auch, wie sehr der User überwacht wird

...zur Antwort

Da "das funktioniert nicht" keine eingehende Fehlerbeschreibung ist, mach ich dir mal eine Liste, was alle da sein muss, damit das funktioniert, und dann hakst du einfach ab, und schaust, wo es klemmt.

  • eine Methode "findViewById(WasAuchImmerFürEineKlasse parameter) muss entweder statisch und statisch importiert sein, oder von einer Instanz der Klasse bzw. ihrer Unterklasse her aufgerufen sein. (Ist die Methode verfügbar?)
  • id.ergebnis muss Instanz von WasAuchImmerFürEineKlasse sein. Übrigens: die Methode heißt doch "findViewById" – bedeutet logischerweise, dass das übergebene Parameter eine Id sein sollte. Du übergibst aber das "ergebnis" der id – was auch immer das ist. Entweder, das ist der Fehler oder du hast massive Inkonsistenz in der Benennung
  • R muss eine Instanzvariable id haben, welches wiederum eine Instanzvariable Ergebnis haben muss – nichts davon darf null sein (Tipp: arbeite mal mit gettern. Dann siehst du auch, wo es knallt)
  • diese View muss eine Methode haben "setText(String text)" und "erg" muss ein String sein
  • Wenn alles nichts hilft: Debuggen

Ich hoffe, ich konnte helfen

LG Asqiir

...zur Antwort

Probiers mal hiermit.

https://infothek.rotkel.de/tastaturkuerzel/schriftzeichen/sonderbuchstaben/nach-sprachen.html

...zur Antwort

Benutze am besten das Model-View-Controller-System. Das heißt, du hast einen Controller, der dein Programm steuert. Der steuert die View, die Anzeige. Beide haben Zugriff auf das Model, den Speicher; aber nur der Controller darf die Daten verändern.

Dein Model hält, für ein Spielfeld, ein mehrdimensionales Arrays. Die View hält ein JButton-Array der selben Größer. Jedes Mal, wenn die View neu lädt, holt sie die Daten für die Buttons aus dem Model. Möglicherweise kennt auch jeder Button sein Darstellung im Model.

...zur Antwort

Ich verstehe dein Problem erst mal so:

1. Du hast eine Klasse Tier.

2. In einer anderen Klasse hast du eine statische Variable namens … nennen wir sie "Tierliste" und lassen wir sie definiert sein als public static Tier[].

3. Wenn du ein Array benutzt, weißt du schon genau, wie viele Tiere du speichern willst. Sonst würdest du eine java.util.List benutzen.

4. Du erzeugst ein neues Tier. Dieses soll automatisch in die tierliste hinzugefügt werden.

Dazu hast du zwei Möglichkeiten, welche du nimmst, hängt davon ab, auf welche Art dein Programm konzipiert ist.

1. Möglichkeit: dein Programm hat einen globalen Controller, der alle Tiere kennt, sie entweder kontrolliert (=Zoowärter) oder zumindest hält, validiert etc (=Zoo). In dem Fall wäre dieses statische Array a) von diesem Controller abhängig, damit b) nicht mehr statisch (nur eine Tierliste je Zoo) und c) nicht mehr öffentlich: denn da darf nicht jeder drauf zugreifen.

2. Möglichkeit: dein Programm hat in der Mitte ein Model (Speicherobjekt), dem jedes andere Objekt seine Existenz mitteilt und dieses Model entscheidet, was sie mit ihm macht. In diesem Fall würde die Klasse Tier in ihrem Konstruktor eine Methode des Models aufrufen, in der das Model es einträgt. Oder, besser noch: es wirft ein ActionEvent, "ich-bin-hier" oder so ähnlich.

Ich glaube, eigentlich willst du eine globale Variable, in der jeder eintragen kann, was er will, aber das wäre schlechter Stil. Denn was wäre, wenn jemand drauf zugreift, mit dem du nicht gerechnet hast? Wenn dein Programm das benötigt, hast du es schlecht geplant…

...zur Antwort
Warum funktioniert diese Typumwandlung (Java - String zu Integer)?

Ich entwicklegerade ein Spiel, in welchem die Anzahl Herzen (Leben) des Spielers beim öffnen gelesen aus einer .txt datei gelesen werden. So sieht der Code aus:

public int readPlayersLivesFromDataFile() {

    File playersLivesFile = new File("/home/" + System.getProperty("user.name") + "/.ww/data/saves/lives.txt");


    int lives_return = Integer.valueOf(readFromFile(playersLivesFile));

    return lives_return;


}

private String readFromFile(File file) {

    FileReader fileReader = null;

    try {
        fileReader = new FileReader(file);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

    StringBuilder textInFile = new StringBuilder(10);
    int readen = 0;
    boolean endOfFile = false;

    while (!endOfFile) {

        try {
            readen = fileReader.read();
        } catch (IOException e) {
            e.printStackTrace();
        }

        if (readen == -1)
            endOfFile = true;
        else
            textInFile.append((char) readen);

    }

    return textInFile.toString();

}

Wenn ich das Spiel ausführe, kommt diese Fehlermeldung von Intellij Idea: Exception in thread "main" java.lang.ExceptionInInitializerError Caused by: java.lang.NumberFormatException: For input string: "100 " at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:580) at java.lang.Integer.valueOf(Integer.java:766) at malte_ww.SaveManager.readPlayersLivesFromDataFile(SaveManager.java:31) at malte_ww.GamePanel.(GamePanel.java:20) at malte_ww.GameWindow.(GameWindow.java:15) at malte_ww.WizardsWar.(WizardsWar.java:8)

Process finished with exit code 1

Caused by: java.lang.NumberFormatException: For input string: "100 " Die Hundert ist eben genau der Inhalt von dem File. Wieso geht die Typumwandlung nicht??
...zum Beitrag

Da steht "100 " in der Fehlermeldung. Mit dem Leerzeichen. Evtl ist das das Problem?

...zur Antwort

Was ist ein "Command" deiner Meinung nach? Und was die "Main Classe"?

Zum Verständnis: Es gibt in Java eine Mainmethode. Diese wird bei Start des Programms gestartet. Es darf (und muss) genau eine Mainmethode pro Programm geben. Von dieser aus wird jeder weitere Vorgang aus gestartet.

Es gibt, jedenfalls nicht standardisiert, keine "Mainklasse". Manche benutzen eine, aber das ist ebenso sinnlos, wie es schlechter Stil ist.

Poste dein konkretes Problem, vielleicht kann ich dir dann weiterhelfen … ;-)

...zur Antwort

Ich würde an deiner Stelle versuchen, an eine Second- oder Thirdleveldomain irgendeiner obskuren ausländischen Topleveldomain zu bekommen. (Könnte aber ins Geld gehen. Und wie schwierig es ist, mit sowas in Deutschland an Webspace zu kommen, weiß ich auch nicht - anonymer Webspace wird auch noch mal ein Kapitel für sich sein.) (Ausweisen musst du dich glaube ich nur bei .de, da bräuchtest du dann Urkundenfälschung.)

Noch eine Möglichkeit (wenn auch technisch anspruchsvoller): eine legale Darknet-seite. .onion-domains sind sicher auch für die Inhaber anonym.

...zur Antwort

Was ist die Aufgabe (genau)?

Gebe die Zahlen 1 4 9 16 25 aus.

Die einfachste Lösungsmöglichkeit:

System.out.println("1 4 9 16 25");

So war das natürlich nicht gemeint, es ging darum, dass es fünf aufeinander folgende Quadratzahlen sind. (Bitte formuliere deine Fragen klarer und achte darauf, dass die Formatierung des Codes stimmt!)

Also:

  • Tue 5 Mal:
  • den Index (die Zahl, die aussagt, das wievielte Mal wir es gerade tun)
  • zum Quadrat aus

Lies dir diesen Link bitte durch: https://www.gutefrage.net/frage/wie-schreibt-man-eine-methode-filter-welche-alle-werte-eines-feldes-a-ausgibt-die-groesser-als-n-sindmit-systemoutprintln?foundIn=list-answers-by-user#answer-239659961

Da habe ich schon mal erklärt, was Java für Schleifen kennt und was der Unterschied ist.

Erste Tatsache: Wir machen etwas eine feste Anzahl oft. (In verständlichem deutsch: wir wissen, wir oft wir es tun): 5 Mal. Das heißt: es ist Unsinn, eine While-schleife zu nehmen. Eine For-schleife ist viel passender.

For-Schleifen funktionieren so:

for(int index=0; index<soOftSollEsGetanWerden; index++) {
//Hier kommt das, was getan werden soll
}

Was tut das?

1. Einen int (primitiver ganzzahliger Datentyp) namens index erstellen, diesem den Wert 0 zuweisen

2. Die Bedingung, die für erneutes ausführen der Schleife wahr sein muss: index muss kleiner als eine von dir gewählte Zahl sein.

3. Ein Befehl, der jede Runde ausgeführt wird. index++ bedeutet, dass bei jeder Ausführung +1 gerechnet wird.

Was muss jetzt jedes Mal getan werden?

Wir müssen die Quadratzahl von index ausgeben.

Also so?

for(int index=0; index<5; index++) {
System.out.println(index*index);
}

Das Ergebnis sieht folgendermaßen aus:

0
1
4
16

Und? Hast du schon erraten, wo der Fehler liegt?

Ich habe dir 90% deiner Hausaufgabe gemacht, nach dem Rest kannst du jetzt gucken, aber ich helfe natürlich auch gerne weiter.

...zur Antwort

Nur mal so als Vorwarnung: ich habe eine ein bisschen "extremistische" Haltung, was Privatsphäre angeht. Das hier ist also nur meine Meinung. An sich kannst du alles Preis geben, was du verraten willst, dass hier ist also nur eine Richtline.


Man gibt an sich leichter Daten Preis, als man annehmen würde. Beispiel: dein Handy. Dein Mobilfunkanbieter, die Anbieter jeder einzelnen App und deren Daten-Dritthändler, sowie mit ziemlicher Sicherheit mehrere Geheimdienste wissen auf Schritt und Tritt, wo du bist und was du machst. Und das betrifft ALLE deine Aktivitäten, wenn du keine besonderen Vorkehrungen triffst. (Hier mal eine Sache, die du konkret machen könntest: die App "Signal" statt der App "What'sApp".) [Und ja, das bedeutet im Klartext: ich gönne ihn kein einziges Bit Daten über mich. Und es geht hierbei nicht nur ums Handeln. Warum willst du ihnen Sachen zur Verfügung stellen, selbst wenn sie damit nichts anfangen können?]

Es gibt ein paar offensichtliche Sachen, die man nie Preis geben sollte. Bankdaten und Passwörter beispielsweise. Was E-mail-adressen angeht: möglichst viele bei Unterschiedlichen Anbietern. Am besten hostest du einen eigenen Server. Für Spammails und kostenlose Computerspiele und soziale Netzwerke kannst du Gmail o. ähnl. nehmen. Für alles, was wichtiger ist, lohnt es sich schon, ein paar Euro auf den Tisch zu legen. (Jährlich.) Dazu kannst du dich mal bei Heise online umsehen.

An sich ist der Kampf um Datensicherheit so ähnlich wie der Kampf gegen Windmühlen. Sinnlos. Aber versuchen könne wir es ja trotzdem!

 - Linux anstelle von Windows oder Mac
 - Das Smartphone öfter auf aus oder Flugmodus. (Die Menschen früher haben schließlich auch ohne ständige Erreichbarkeit überlebt.)
 - Firefox als Browser und die Privatsphäreeinstellungen sorgfältig konfigurieren.
 - Oder gleich Tor-Browser. Wobei der eher dafür sorgt, dass es noch wahrscheinlicher gespeichert wird.
 - immer https statt http, wobei das gar nicht so leicht einzustellen ist.
 - Virenschutz auf einer Virtual Machine laufen lassen. Im Ernst, manchmal macht Virenschutz es schlimmer statt besser.
 - Regelmäßig updates machen, aber ich glaube, das brauche ich nicht zu sagen.
 - Nutz überall, wo du kannst, Verschlüsselung!

An sich ist Datensparsamkeit mehr ein Lebensstil als etwas, dass sich so ganz einfach machen lässt. Es bedarf einer gewissen Überzeugung und der Bereitschaft, auch etwas weniger angenehmes hinzunehmen. So wie Vegetarier werden, zum Beispiel.

Du willst aber trotzdem Clouddienste benutzen. Faustregel: Wenn es kein Geld kostet, nimmt es deine Daten. Wenn da auch noch keine Werbung ist, nimmst es deine Daten. Und wenn Google draufsteht, nimmt es auf jeden Fall deine Daten. Und beim Geheimdienst landen sie so oder so. Und ansonsten:  AGB gründlich lesen. (Tip: gf hier ist einer der Datenhungrigsten Dienste, die ich kenne)

Was kannst du tun?

1. Überleg mal während deines normalen Surfvorgangs total paranoid, was für Daten die Firen speichern können, ganz egal, ob sie es tun.
2. Stelle dir vor, diese Daten (Bilder, Bewegungprofile [das ist, wenn alle gefundenen Daten kombiniert werden, um noch detaillierter zu werden], etc) währen an großen Plakaten in der Stadt gepinnt.

Kein Problem damit? Herzlichen Glückwunsch, du machst alles richtig.

Ich hoffe, ich konnte dir helfen.

...zur Antwort

Faustregel: immer dann, wenn du einen eingerückten Block hast.

Es gibt immer einen Head (so nenne ich es zumindest) und einen Rumpf. Im Head wird der Aufruf o. ähnl. deklariert, im Rumpf steht das, was dann tatsächlich aufgerufen wird.

Also:

Head {
//Rumpf
}

Beispiele: (Das Schräge ist immer der Head, alles fette ist zwingend, der Rest ist optional, die Rümpfe lasse ich leer.)

  • Klassen
public class MeineKlasse extends WasAnderes implements MehrZeug {
}
  • Methoden
//Beispiele:
public static void main(String[] args) {
} //eine Mainmethode

public void meineMethode() {
}

private int getIrgendEineZahl() {
return eineZahl;
}

//Allgemein:
Sichtbarkeitsebene static/abstract/etc Rückgabewert methodenName(parameter) {
Methodenaufrufe;
}

Sichtbarkeitsebene: public, private, protected etc

static/abstract/etc: optionales Argument

Rückgabewert: im Normalfall void

Parameter: was man der Methode übergeben muss

  • Schleifen
for(int i=0; i<eineZahl; i++) {
}

for(int i:intArray) {
}

while(Bedingung) {
}

do {
} while(Bedingung);
  • try-catch-Struktur
try {
wasRiskantes();
} catch(Exception ex) {
}
  • if-else-Struktur
if(Bedingung) {
}

if(Bedingung) {
} else {
}
  • switch-case-Struktur
switch(meinChar) {
case('a'): {}
case('b'): {}
}
...zur Antwort

Ein Array kann man sich am besten als Liste vorstellen, auch wenn es das nicht direkt ist. Wie arbeitet man damit?

  • Ein Array erzeugen. Ein Array ist typsicher, d.h., dass man nur Objekte der beim Erzeugen angegebenen Klasse hinzufügen darf. (Und natürlich auch von deren Unterklassen.) Statt Objekte kann Array auch Elementartypen enthalten. (Sowas wie ints.)
String[] stringArray = new String[3]; //Ein Stringarray
int[] intArray = new int[20]; //die Zahl besagt, wie groß das Array ist
Object[] objekte = new Object[100]; //die Zahl ist NICHT nullbasiert
  • Objekte einem Array hinzufügen (Arrays arbeiten nullbasiert!)
stringArray[0] = "hi!"; //Arrays arbeiten null-basiert!

for(int i=0; i<intArray.length; i++) {
intArray[i] = i;
}

//allgemein:
arrayvariable[anwelchestelle] = dashinzugefügteobjekt;
  • Auf Objekte in einem Array zugreifen
int meinLieblingsInt = intArray[7]; //nullbasiert!

So arbeiten Arrays.

Bedenke:

  • wenn du etwas an die 3. Stelle hinzuzufügst, rutscht das dahinter nicht auf. Du überschreibst den vorherigen Wert.
  • Längen bzw. Größen sind 1-basiert. (So, wie wir normal zählen.) Die Index-zahlen sind nullbasiert.
  • Du kannst ein Array nicht mit einer for-each-Schleife durchiterieren, solange die Werte  null (englisches Wort, nicht die Zahl) sind.

Ich hoffe, ich konnte dir helfen.

...zur Antwort

Da sind mehrere Fehler:

  • Du darfst das Wort "Class" nicht für eigene Namen benutzen, da es zu den Keywörtern von Java gehört.
  • Die Mainmethode eines Javaprogrammes ist immer statisch. (Da sie nicht an ein bestimmtes Objekt gebunden ist, und das auch nicht sein kann.)
  • Die Mainmethode eines Javaprogramms hat keinen Rückgabewert. (Bist du  zufällig C-Programmierer?)
  • Die Mainmethode eines Javaprogramms hat immer die Parameter String[] args.
  • Die Printmethode von Java heißt System.out.print() oder System.out.println(), je nachdem, ob du in einer neuen Zeile anfangen möchtest.
  • Hinter einem Methodenaufruf muss ein Semikolon ";" folgen.

Wenn du alle diese Punkte beachtest, sieht dein Programm so aus:

public class MeinBeispielKlassenName {
public static void main(String[] args) {
System.out.println("Hello World");
}
}

Ich hoffe, ich konnte dir weiterhelfen.

...zur Antwort

Du hast die Methode out() oben benutzt, aber da, wo du sie definierst, forderst du die Parameter String[] args an, und zwar ohne Grund.

Möglicherweise hast du dein Programm durch die ganze Sache mit dem Scanner einfach nur unnötig kompliziert gemacht: (Dies ist nur die main Methode.)

public static void main(Sting[] args) {
z="zwei";
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
//dafür musst du das nötige imortieren, das package io sollte reichen

String input = reader.readLine();
//dies ist eine blockierende Methode, die auf eine Eingabe in der Konsole wartet

if(input.equals(z)) {
System.out.println("Warum zwei und nicht drei?");
}
}

So kannst du das Ganze mit weniger Code realisieren. Wenn du bei deiner ursprünglichen Fassung bleiben willst: Fang die Exception mal mit einem try/catch-Block ab und lasse dir den Stacktrace geben und veröffentliche ihn hier, so kann man mal gucken, was denn schief gelaufen ist. (Das geht dann in ungefähre so:)

try {
tuWasRiskantes(); //der restliche Code
} catch (Exception ex) { //eigentlich ist es schlechter Stil, aller Exceptions auf einmal zu fangen und nicht nur die, die man erwartet
ex.printStackTrace();
}

So lässt man sich die Fehlermeldung der Exception ausgeben.

...zur Antwort

Bitte schreibe deinen Pythoncode auch als Code, da die Einrückungen in Python ja wichtig sind. Ich habe das mal versucht, schreib bitte, wenn ich was falsch interpretiert habe.

def fakultaet(x):
 if x > 1:
return x * fakultaet(x-1)
 else:
return 1

x = int(input("Bitte Zahl eingeben"))
for i in range (1, x+1):
print("Fakultät von",i, fakultaet(i))

Was tut der Code nun?

  1. Eine vom User eingegebene Zahl wird x genannt.
  2. Für jede Zahl zwischen 1 und der Zahl vom User+1 wird die Fakultät ausgegeben. (Oder habe ich da was falsch verstanden?)

Jetzt zu dem Code der Funktion fakultaet. Zuerst einmal: was ist eigentlich eine Fakultät?

  • Eine Fakultät von einer Zahl ist eine Zahl, bei der jede ganze Zahl von 1 bis ersterer Zahl miteinander multipliziert wird.
  • Beispiel Fakultät von 7: 7! = 1 * 2 * 3 * 4 * 5 * 6 * 7
  • Mit anderen Worten: 7! = 6! * 7 = 5! * 6 * 7 usw.
  • Anders ausgedrückt: Fakultät von x = Fakultät von x minus eins multipliziert mit x. Und das tut dein Code, wie wir gleich sehen.
def fakultaet (x): #eine eingegebene Zahl erhalten
if x > 1: #sonst ist es keine gültige Eingabe
return x * fakultaet (x-1)
#Erklärung: siehe letzter Stichpunkt
else:
return 1 #Übrigens nicht nur der gültigen Eingabe wegen, sondern auch, weil eine rekursive Methode einen Ausweg braucht

Also holt das fakultaet(x-1) lediglich die Fakultät für eine Zahl kleiner als x - die Rekursion könnte man stattdessen auch in einer Klammer ausdrücken. (es gibt sicherlich schönere Wege, aber was solls.):

def f(x):
i = 1
ergebnis = 1
while i <= x:
ergebnis = ergebnis * i
i = i+1
return ergebnis

Die Methode tut das Gleiche, nur von klein nach groß statt von groß nach klein, wie deine rekursive Methode. (Übrigens ist deine auch noch effizienter.

Ist es jetzt etwas klarer?

...zur Antwort

Text wird in Java auch ein String-Objekt genannt, kurz ein String - mit anderen Worten, ein Textobjekt.

So kann man ihn definieren:

String s = "mein Text"; //Kurzschreibweise
String t = new String("mein Text"); //langschreibweise

Strings in Java sind unveränderlich, dass heißt, dass folgender Code zwei Strings erzeugt:

String s = "";
s="hi";

Was bedeutet das konkret? Wenn du zum Beispiel ein Objekt erzeugst, dann eine zweite Referenz auf dieses Objekt zeigst und dann etwas an dem Objekt änderst, kennt die jeweils andere Referenz die Änderung auch, da beide auf das gleiche Objekt zeigen. Bei Strings ist das nicht der Fall.

Object[] o = { new Object(), new Object() };
Object[] p = o;
p.add(new Object());

if(o.equals(p)) {
System.out.println("die Variablen zeigen auf das gleiche Objekt");
//diese Bedingung wird erfüllt.
}
//jetzt das gleiche mit einem String:

String s = "hi";
String s2 = s;
s = "wo?"

if(!o.equals(p)) { //! => ungleich/unwahr
System.out.println("Referenzen zeigen nicht auf das gleiche Objekt");
}
//das wird auch erfüllt

Was kann man noch so mit Strings machen?

  • Man kann sie zu einem CharArray umwandeln
  • ihre Länge herausfinden
  • testen, ob sie Teilstrings enthalten
  • diese Gegebenenfalls ersetzen
  • dazu kann man reguläre Ausdrücke verwenden (eine eher komplizierte, aber ziemlich mächtige Angelegenheit für die Textverarbeitung)
  • Sie auf Werte abtesten, beliebig Zeichen(ketten) an- und abhängen
  • mit der Groß- und Kleinschreibung spielen
  • und und und ...

Sonst noch Fragen?

...zur Antwort

Um einen String zu einem CharArray zu machen, nimmst du folgenden Befehl:

char[] zeichnekette = deinString.toCharArray();

Wenn du einfach nur überprüfen willst, ob ein String ein bestimmtes Zeichen enthält, diesen hier (liefert einen boolean zurück):

deinString.contains(irgendeinString);

Wobei irgendeinString dein Char (nur als String) ist: z.B.: "a" oder "/"

...zur Antwort

Was geht denn alles so, ohne allzu großen Aufwand?

  • Pcman
  • Pong
  • Minesweeper
  • (vermutlich auch) pinnball
  • einfach Jump'n'Runs
  • Billard(?)
  • Point-and-Click-Adventures
  • Irgendwas mit Labyrinthen
  • Rätsel aller Art (z.B. Sudoku)
  • evtl Schach
  • eine Katze, die Mäuse fangen muss, und wenn sie 20 sec keine kriegt, stirbt sie , und die Mäuse respawnen immer langsamer
  • und und und
...zur Antwort