commit 3ae4c12387087208aa4b9bcb5e956b16f26e9f52 Author: Thomas Smits Date: Sun Sep 15 15:44:10 2024 +0200 Update of exercises diff --git a/_001/kafka.txt b/_001/kafka.txt new file mode 100644 index 0000000..b5695c5 --- /dev/null +++ b/_001/kafka.txt @@ -0,0 +1,11 @@ +Verhaftung - Gespräch mit Frau Grubach - Dann Fräulein Bürstner + +Jemand mußte Josef K. verleumdet haben, denn ohne daß er etwas Böses getan hätte, wurde er eines Morgens verhaftet. Die Köchin der Frau Grubach, seiner Zimmervermieterin, die ihm jeden Tag gegen acht Uhr früh das Frühstück brachte, kam diesmal nicht. Das war noch niemals geschehen. K. wartete noch ein Weilchen, sah von seinem Kopfkissen aus die alte Frau, die ihm gegenüber wohnte und die ihn mit einer an ihr ganz ungewöhnlichen Neugierde beobachtete, dann aber, gleichzeitig befremdet und hungrig, läutete er. Sofort klopfte es und ein Mann, den er in dieser Wohnung noch niemals gesehen hatte, trat ein. Er war schlank und doch fest gebaut, er trug ein anliegendes schwarzes Kleid, das, ähnlich den Reiseanzügen, mit verschiedenen Falten, Taschen, Schnallen, Knöpfen und einem Gürtel versehen war und infolgedessen, ohne daß man sich darüber klar wurde, wozu es dienen sollte, besonders praktisch erschien. "Wer sind Sie?" fragte K. und saß gleich halb aufrecht im Bett. Der Mann aber ging über die Frage hinweg, als müsse man seine Erscheinung hinnehmen, und sagte bloß seinerseits: "Sie haben geläutet?" "Anna soll mir das Frühstück bringen", sagte K. und versuchte, zunächst stillschweigend, durch Aufmerksamkeit und Überlegung festzustellen, wer der Mann eigentlich war. Aber dieser setzte sich nicht allzulange seinen Blicken aus, sondern wandte sich zur Tür, die er ein wenig öffnete, um jemandem, der offenbar knapp hinter der Tür stand, zu sagen: "Er will, daß Anna ihm das Frühstück bringt." Ein kleines Gelächter im Nebenzimmer folgte, es war nach dem Klang nicht sicher, ob nicht mehrere Personen daran beteiligt waren. Obwohl der fremde Mann dadurch nichts erfahren haben konnte, was er nicht schon früher gewußt hätte, sagte er nun doch zu K. im Tone einer Meldung: "Es ist unmöglich." "Das wäre neu", sagte K., sprang aus dem Bett und zog rasch seine Hosen an. "Ich will doch sehen, was für Leute im Nebenzimmer sind und wie Frau Grubach diese Störung mir gegenüber verantworten wird." Es fiel ihm zwar gleich ein, daß er das nicht hätte laut sagen müssen und daß er dadurch gewissermaßen ein Beaufsichtigungsrecht des Fremden anerkannte, aber es schien ihm jetzt nicht wichtig. Immerhin faßte es der Fremde so auf, denn er sagte: "Wollen Sie nicht lieber hierbleiben?" "Ich will weder hierbleiben, noch von Ihnen angesprochen werden, solange Sie sich mir nicht vorstellen." "Es war gut gemeint", sagte der Fremde und öffnete nun freiwillig die Tür. Im Nebenzimmer, in das K. langsamer eintrat, als er wollte, sah es auf den ersten Blick fast genau so aus wie am Abend vorher. Es war das Wohnzimmer der Frau Grubach, vielleicht war in diesem mit Möbeln, Decken, Porzellan und Photographien überfüllten Zimmer heute ein wenig mehr Raum als sonst, man erkannte das nicht gleich, um so weniger, als die Hauptveränderung in der Anwesenheit eines Mannes bestand, der beim offenen Fenster mit einem Buch saß, von dem er jetzt aufblickte. "Sie hätten in Ihrem Zimmer bleiben sollen! Hat es Ihnen denn Franz nicht gesagt?" "Ja, was wollen Sie denn?" sagte K. und sah von der neuen Bekanntschaft zu dem mit Franz Benannten, der in der Tür stehengeblieben war, und dann wieder zurück. Durch das offene Fenster erblickte man wieder die alte Frau, die mit wahrhaft greisenhafter Neugierde zu dem jetzt gegenüberliegenden Fenster getreten war, um auch weiterhin alles zu sehen. "Ich will doch Frau Grubach -", sagte K., machte eine Bewegung, als reiße er sich von den zwei Männern los, die aber weit von ihm entfernt standen, und wollte weitergehen. "Nein", sagte der Mann beim Fenster, warf das Buch auf ein Tischchen und stand auf. "Sie dürfen nicht weggehen, Sie sind ja verhaftet." "Es sieht so aus", sagte K. "Und warum denn?" fragte er dann. "Wir sind nicht dazu bestellt, Ihnen das zu sagen. Gehen Sie in Ihr Zimmer und warten Sie. Das Verfahren ist nun einmal eingeleitet, und Sie werden alles zur richtigen Zeit erfahren. Ich gehe über meinen Auftrag hinaus, wenn ich Ihnen so freundschaftlich zurede. Aber ich hoffe, es hört es niemand sonst als Franz, und der ist selbst gegen alle Vorschrift freundlich zu Ihnen. Wenn Sie auch weiterhin so viel Glück haben wie bei der Bestimmung Ihrer Wächter, dann können Sie zuversichtlich sein." K. wollte sich setzen, aber nun sah er, daß im ganzen Zimmer keine Sitzgelegenheit war, außer dem Sessel beim Fenster. "Sie werden noch einsehen, wie wahr das alles ist", sagte Franz und ging gleichzeitig mit dem andern Mann auf ihn zu. Besonders der letztere überragte K. bedeutend und klopfte ihm öfters auf die Schulter. Beide prüften K.s Nachthemd und sagten, daß er jetzt ein viel schlechteres Hemd werde anziehen müssen, daß sie aber dieses Hemd wie auch seine übrige Wäsche aufbewahren und, wenn seine Sache günstig ausfallen sollte, ihm wieder zurückgeben würden. "Es ist besser, Sie geben die Sachen uns als ins Depot", sagten sie, "denn im Depot kommen öfters Unterschleife vor und außerdem verkauft man dort alle Sachen nach einer gewissen Zeit, ohne Rücksicht, ob das betreffende Verfahren zu Ende ist oder nicht. Und wie lange dauern doch derartige Prozesse, besonders in letzter Zeit! Sie bekämen dann schließlich allerdings vom Depot den Erlös, aber dieser Erlös ist erstens an sich schon gering, denn beim Verkauf entscheidet nicht die Höhe des Angebotes, sondern die Höhe der Bestechung, und weiter verringern sich solche Erlöse erfahrungsgemäß, wenn sie von Hand zu Hand und von Jahr zu Jahr weitergegeben werden." K. achtete auf diese Reden kaum, das Verfügungsrecht über seine Sachen, das er vielleicht noch besaß, schätzte er nicht hoch ein, viel wichtiger war es ihm, Klarheit über seine Lage zu bekommen; in Gegenwart dieser Leute konnte er aber nicht einmal nachdenken, immer wieder stieß der Bauch des zweiten Wächters - es konnten ja nur Wächter sein - förmlich freundschaftlich an ihn, sah er aber auf, dann erblickte er ein zu diesem dicken Körper gar nicht passendes trockenes, knochiges Gesicht mit starker, seitlich gedrehter Nase, das sich über ihn hinweg mit dem anderen Wächter verständigte. Was waren denn das für Menschen? Wovon sprachen sie? Welcher Behörde gehörten sie an? K. lebte doch in einem Rechtsstaat, überall herrschte Friede, alle Gesetze bestanden aufrecht, wer wagte, ihn in seiner Wohnung zu überfallen? Er neigte stets dazu, alles möglichst leicht zu nehmen, das Schlimmste erst beim Eintritt des Schlimmsten zu glauben, keine Vorsorge für die Zukunft zu treffen, selbst wenn alles drohte. Hier schien ihm das aber nicht richtig, man konnte zwar das Ganze als Spaß ansehen, als einen groben Spaß, den ihm aus unbekannten Gründen, vielleicht weil heute sein dreißigster Geburtstag war, die Kollegen in der Bank veranstaltet hatten, es war natürlich möglich, vielleicht brauchte er nur auf irgendeine Weise den Wächtern ins Gesicht zu lachen, und sie würden mitlachen, vielleicht waren es Dienstmänner von der Straßenecke, sie sahen ihnen nicht unähnlich - trotzdem war er diesmal, förmlich schon seit dem ersten Anblick des Wächters Franz, entschlossen, nicht den geringsten Vorteil, den er vielleicht gegenüber diesen Leuten besaß, aus der Hand zu geben. Darin, daß man später sagen würde, er habe keinen Spaß verstanden, sah K. eine ganz geringe Gefahr, wohl aber erinnerte er sich - ohne daß es sonst seine Gewohnheit gewesen wäre, aus Erfahrungen zu lernen - an einige, an sich unbedeutende Fälle, in denen er zum Unterschied von seinen Freunden mit Bewußtsein, ohne das geringste Gefühl für die möglichen Folgen, sich unvorsichtig benommen hatte und dafür durch das Ergebnis gestraft worden war. Es sollte nicht wieder geschehen, zumindest nicht diesmal; war es eine Komödie, so wollte er mitspielen. + +Noch war er frei. "Erlauben Sie", sagte er und ging eilig zwischen den Wächtern durch in sein Zimmer. "Er scheint vernünftig zu sein", hörte er hinter sich sagen. In seinem Zimmer riß er gleich die Schubladen des Schreibtischs auf, es lag dort alles in großer Ordnung, aber gerade die Legitimationspapiere, die er suchte, konnte er in der Aufregung nicht gleich finden. Schließlich fand er seine Radfahrlegitimation und wollte schon mit ihr zu den Wächtern gehen, dann aber schien ihm das Papier zu geringfügig und er suchte weiter, bis er den Geburtsschein fand. Als er wieder in das Nebenzimmer zurückkam, öffnete sich gerade die gegenüberliegende Tür und Frau Grubach wollte dort eintreten. Man sah sie nur einen Augenblick, denn kaum hatte sie K. erkannt, als sie offenbar verlegen wurde, um Verzeihung bat, verschwand und äußerst vorsichtig die Tür schloß. "Kommen Sie doch herein", hatte K. gerade noch sagen können. Nun aber stand er mit seinen Papieren in der Mitte des Zimmers, sah noch auf die Tür hin, die sich nicht wieder öffnete, und wurde erst durch einen Anruf der Wächter aufgeschreckt, die bei dem Tischchen am offenen Fenster saßen und, wie K. jetzt erkannte, sein Frühstück verzehrten. "Warum ist sie nicht eingetreten?" fragte er. "Sie darf nicht", sagte der große Wächter. "Sie sind doch verhaftet." "Wie kann ich denn verhaftet sein? Und gar auf diese Weise?" "Nun fangen Sie also wieder an", sagte der Wächter und tauchte ein Butterbrot ins Honigfäßchen. "Solche Fragen beantworten wir nicht." "Sie werden sie beantworten müssen", sagte K. "Hier sind meine Legitimationspapiere, zeigen Sie mir jetzt die Ihrigen und vor allem den Verhaftbefehl." "Du lieber Himmel!" sagte der Wächter. "Daß Sie sich in Ihre Lage nicht fügen können und daß Sie es darauf angelegt zu haben scheinen, uns, die wir Ihnen jetzt wahrscheinlich von allen Ihren Mitmenschen am nächsten stehen, nutzlos zu reizen!" "Es ist so, glauben Sie es doch", sagte Franz, führte die Kaffeetasse, die er in der Hand hielt, nicht zum Mund, sondern sah K. mit einem langen, wahrscheinlich bedeutungsvollen, aber unverständlichen Blick an. K. ließ sich, ohne es zu wollen, in ein Zwiegespräch der Blicke mit Franz ein, schlug dann aber doch auf seine Papiere und sagte: "Hier sind meine Legitimationspapiere." "Was kümmern uns denn die?" rief nun schon der große Wächter. "Sie führen sich ärger auf als ein Kind. Was wollen Sie denn? Wollen Sie Ihren großen, verfluchten Prozeß dadurch zu einem raschen Ende bringen, daß Sie mit uns, den Wächtern, über Legitimation und Verhaftbefehl diskutieren? Wir sind niedrige Angestellte, die sich in einem Legitimationspapier kaum auskennen und die mit Ihrer Sache nichts anderes zu tun haben, als daß sie zehn Stunden täglich bei Ihnen Wache halten und dafür bezahlt werden. Das ist alles, was wir sind, trotzdem aber sind wir fähig, einzusehen, daß die hohen Behörden, in deren Dienst wir stehen, ehe sie eine solche Verhaftung verfügen, sich sehr genau über die Gründe der Verhaftung und die Person des Verhafteten unterrichten. Es gibt darin keinen Irrtum. Unsere Behörde, soweit ich sie kenne, und ich kenne nur die niedrigsten Grade, sucht doch nicht etwa die Schuld in der Bevölkerung, sondern wird, wie es im Gesetz heißt, von der Schuld angezogen und muß uns Wächter ausschicken. Das ist Gesetz. Wo gäbe es da einen Irrtum?" "Dieses Gesetz kenne ich nicht", sagte K. "Desto schlimmer für Sie", sagte der Wächter. "Es besteht wohl auch nur in Ihren Köpfen", sagte K., er wollte sich irgendwie in die Gedanken der Wächter einschleichen, sie zu seinen Gunsten wenden oder sich dort einbürgern. Aber der Wächter sagte nur abweisend: "Sie werden es zu fühlen bekommen." Franz mischte sich ein und sagte: "Sieh, Willem, er gibt zu, er kenne das Gesetz nicht, und behauptet gleichzeitig, schuldlos zu sein." "Du hast ganz recht, aber ihm kann man nichts begreiflich machen", sagte der andere. K. antwortete nichts mehr; muß ich, dachte er, durch das Geschwätz dieser niedrigsten Organe - sie geben selbst zu, es zu sein - mich noch mehr verwirren lassen? Sie reden doch jedenfalls von Dingen, die sie gar nicht verstehen. Ihre Sicherheit ist nur durch ihre Dummheit möglich. Ein paar Worte, die ich mit einem mir ebenbürtigen Menschen sprechen werde, werden alles unvergleichlich klarer machen als die längsten Reden mit diesen. Er ging einige Male in dem freien Raum des Zimmers auf und ab, drüben sah er die alte Frau, die einen noch viel älteren Greis zum Fenster gezerrt hatte, den sie umschlungen hielt. K. mußte dieser Schaustellung ein Ende machen: "Führen Sie mich zu Ihrem Vorgesetzten", sagte er. "Wenn er es wünscht; nicht früher", sagte der Wächter, der Willem genannt worden war. "Und nun rate ich Ihnen", fügte er hinzu, "in Ihr Zimmer zu gehen, sich ruhig zu verhalten und darauf zu warten, was über Sie verfügt werden wird. Wir raten Ihnen, zerstreuen Sie sich nicht durch nutzlose Gedanken, sondern sammeln Sie sich, es werden große Anforderungen an Sie gestellt werden. Sie haben uns nicht so behandelt, wie es unser Entgegenkommen verdient hätte, Sie haben vergessen, daß wir, mögen wir auch sein was immer, zumindest jetzt Ihnen gegenüber freie Männer sind, das ist kein kleines Übergewicht. Trotzdem sind wir bereit, falls Sie Geld haben, Ihnen ein kleines Frühstück aus dem Kaffeehaus drüben zu bringen." + +Ohne auf dieses Angebot zu antworten, stand K. ein Weilchen lang still. Vielleicht würden ihn die beiden, wenn er die Tür des folgenden Zimmers oder gar die Tür des Vorzimmers öffnete, gar nicht zu hindern wagen, vielleicht wäre es die einfachste Lösung des Ganzen, daß er es auf die Spitze trieb. Aber vielleicht würden sie ihn doch packen und, war er einmal niedergeworfen, so war auch alle Überlegenheit verloren, die er jetzt ihnen gegenüber in gewisser Hinsicht doch wahrte. Deshalb zog er die Sicherheit der Lösung vor, wie sie der natürliche Verlauf bringen mußte, und ging in sein Zimmer zurück, ohne daß von seiner Seite oder von Seite der Wächter ein weiteres Wort gefallen wäre. + +Er warf sich auf sein Bett und nahm vom Waschtisch einen schönen Apfel, den er sich gestern abend für das Frühstück vorbereitet hatte. Jetzt war er sein einziges Frühstück und jedenfalls, wie er sich beim ersten großen Bissen versicherte, viel besser, als das Frühstück aus dem schmutzigen Nachtcafé gewesen wäre, das er durch die Gnade der Wächter hätte bekommen können. Er fühlte sich wohl und zuversichtlich, in der Bank versäumte er zwar heute vormittag seinen Dienst, aber das war bei der verhältnismäßig hohen Stellung, die er dort einnahm, leicht entschuldigt. Sollte er die wirkliche Entschuldigung anführen? Er gedachte es zu tun, Würde man ihm nicht glauben, was in diesem Fall begreiflich war, so konnte er Frau Grubach als Zeugin führen oder auch die beiden Alten von drüben, die wohl jetzt auf dem Marsch zum gegenüberliegenden Fenster waren. Es wunderte K., wenigstens aus dem Gedankengang der Wächter wunderte es ihn, daß sie ihn in das Zimmer getrieben und ihn hier allein gelassen hatten, wo er doch zehnfache Möglichkeit hatte, sich umzubringen. Gleichzeitig allerdings fragte er sich, diesmal aus seinem Gedankengang, was für einen Grund er haben könnte, es zu tun. Etwa weil die zwei nebenan saßen und sein Frühstück abgefangen hatten? Es wäre so sinnlos gewesen, sich umzubringen, daß er, selbst wenn er es hätte tun wollen, infolge der Sinnlosigkeit dazu nicht imstande gewesen wäre. Wäre die geistige Beschränktheit der Wächter nicht so auffallend gewesen, so hätte man annehmen können, daß auch sie, infolge der gleichen Überzeugung, keine Gefahr darin gesehen hätten, ihn allein zu lassen. Sie mochten jetzt, wenn sie wollten, zusehen, wie er zu einem Wandschränkchen ging, in dem er einen guten Schnaps aufbewahrte, wie er ein Gläschen zuerst zum Ersatz des Frühstücks leerte und wie er ein zweites Gläschen dazu bestimmte, sich Mut zu machen, das letztere nur aus Vorsicht für den unwahrscheinlichen Fall, daß es nötig sein sollte. + + diff --git a/_001/readme.md b/_001/readme.md new file mode 100644 index 0000000..4010670 --- /dev/null +++ b/_001/readme.md @@ -0,0 +1,36 @@ +# Klasse per Reflection analysieren +## Lernziel + + + +Reflection einsetzen, um Klassen zu untersuchen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.reflection.analyzer](../sources/src/main/java/pr2/reflection/analyzer/). + +Schreiben Sie eine Klasse `Analyzer`, der man auf der Kommandozeile den Namen einer Klasse übergeben kann. Diese Klasse wird dann von `Analyzer` geladen und alle öffentlichen Methoden und Attribute der angegebenen Klasse werden auf der Konsole ausgegeben. + +```console +> java Analyzer java.awt.Point +public int java.awt.Point.x +public int java.awt.Point.y +public boolean java.awt.Point.equals(java.lang.Object) +public java.lang.String java.awt.Point.toString() +public java.awt.Point java.awt.Point.getLocation( +... +``` + + + \ No newline at end of file diff --git a/_002/readme.md b/_002/readme.md new file mode 100644 index 0000000..7834440 --- /dev/null +++ b/_002/readme.md @@ -0,0 +1,27 @@ +# Objekte per Reflection erzeugen +## Lernziel + + + +Objekte per Reflection erzeugen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.reflection.reflector](../sources/src/main/java/pr2/reflection/reflector/). + +Schreiben Sie eine Klasse `Reflector`, die über Reflection ein neues Objekt vom Typ `java.util.Date` erzeugt und auf diesem Objekt die `toString`-Methode aufruft. Das Ergebnis des Aufrufs soll dann auf der Konsole ausgegeben werden. + + + + \ No newline at end of file diff --git a/_003/kafka.txt b/_003/kafka.txt new file mode 100644 index 0000000..b5695c5 --- /dev/null +++ b/_003/kafka.txt @@ -0,0 +1,11 @@ +Verhaftung - Gespräch mit Frau Grubach - Dann Fräulein Bürstner + +Jemand mußte Josef K. verleumdet haben, denn ohne daß er etwas Böses getan hätte, wurde er eines Morgens verhaftet. Die Köchin der Frau Grubach, seiner Zimmervermieterin, die ihm jeden Tag gegen acht Uhr früh das Frühstück brachte, kam diesmal nicht. Das war noch niemals geschehen. K. wartete noch ein Weilchen, sah von seinem Kopfkissen aus die alte Frau, die ihm gegenüber wohnte und die ihn mit einer an ihr ganz ungewöhnlichen Neugierde beobachtete, dann aber, gleichzeitig befremdet und hungrig, läutete er. Sofort klopfte es und ein Mann, den er in dieser Wohnung noch niemals gesehen hatte, trat ein. Er war schlank und doch fest gebaut, er trug ein anliegendes schwarzes Kleid, das, ähnlich den Reiseanzügen, mit verschiedenen Falten, Taschen, Schnallen, Knöpfen und einem Gürtel versehen war und infolgedessen, ohne daß man sich darüber klar wurde, wozu es dienen sollte, besonders praktisch erschien. "Wer sind Sie?" fragte K. und saß gleich halb aufrecht im Bett. Der Mann aber ging über die Frage hinweg, als müsse man seine Erscheinung hinnehmen, und sagte bloß seinerseits: "Sie haben geläutet?" "Anna soll mir das Frühstück bringen", sagte K. und versuchte, zunächst stillschweigend, durch Aufmerksamkeit und Überlegung festzustellen, wer der Mann eigentlich war. Aber dieser setzte sich nicht allzulange seinen Blicken aus, sondern wandte sich zur Tür, die er ein wenig öffnete, um jemandem, der offenbar knapp hinter der Tür stand, zu sagen: "Er will, daß Anna ihm das Frühstück bringt." Ein kleines Gelächter im Nebenzimmer folgte, es war nach dem Klang nicht sicher, ob nicht mehrere Personen daran beteiligt waren. Obwohl der fremde Mann dadurch nichts erfahren haben konnte, was er nicht schon früher gewußt hätte, sagte er nun doch zu K. im Tone einer Meldung: "Es ist unmöglich." "Das wäre neu", sagte K., sprang aus dem Bett und zog rasch seine Hosen an. "Ich will doch sehen, was für Leute im Nebenzimmer sind und wie Frau Grubach diese Störung mir gegenüber verantworten wird." Es fiel ihm zwar gleich ein, daß er das nicht hätte laut sagen müssen und daß er dadurch gewissermaßen ein Beaufsichtigungsrecht des Fremden anerkannte, aber es schien ihm jetzt nicht wichtig. Immerhin faßte es der Fremde so auf, denn er sagte: "Wollen Sie nicht lieber hierbleiben?" "Ich will weder hierbleiben, noch von Ihnen angesprochen werden, solange Sie sich mir nicht vorstellen." "Es war gut gemeint", sagte der Fremde und öffnete nun freiwillig die Tür. Im Nebenzimmer, in das K. langsamer eintrat, als er wollte, sah es auf den ersten Blick fast genau so aus wie am Abend vorher. Es war das Wohnzimmer der Frau Grubach, vielleicht war in diesem mit Möbeln, Decken, Porzellan und Photographien überfüllten Zimmer heute ein wenig mehr Raum als sonst, man erkannte das nicht gleich, um so weniger, als die Hauptveränderung in der Anwesenheit eines Mannes bestand, der beim offenen Fenster mit einem Buch saß, von dem er jetzt aufblickte. "Sie hätten in Ihrem Zimmer bleiben sollen! Hat es Ihnen denn Franz nicht gesagt?" "Ja, was wollen Sie denn?" sagte K. und sah von der neuen Bekanntschaft zu dem mit Franz Benannten, der in der Tür stehengeblieben war, und dann wieder zurück. Durch das offene Fenster erblickte man wieder die alte Frau, die mit wahrhaft greisenhafter Neugierde zu dem jetzt gegenüberliegenden Fenster getreten war, um auch weiterhin alles zu sehen. "Ich will doch Frau Grubach -", sagte K., machte eine Bewegung, als reiße er sich von den zwei Männern los, die aber weit von ihm entfernt standen, und wollte weitergehen. "Nein", sagte der Mann beim Fenster, warf das Buch auf ein Tischchen und stand auf. "Sie dürfen nicht weggehen, Sie sind ja verhaftet." "Es sieht so aus", sagte K. "Und warum denn?" fragte er dann. "Wir sind nicht dazu bestellt, Ihnen das zu sagen. Gehen Sie in Ihr Zimmer und warten Sie. Das Verfahren ist nun einmal eingeleitet, und Sie werden alles zur richtigen Zeit erfahren. Ich gehe über meinen Auftrag hinaus, wenn ich Ihnen so freundschaftlich zurede. Aber ich hoffe, es hört es niemand sonst als Franz, und der ist selbst gegen alle Vorschrift freundlich zu Ihnen. Wenn Sie auch weiterhin so viel Glück haben wie bei der Bestimmung Ihrer Wächter, dann können Sie zuversichtlich sein." K. wollte sich setzen, aber nun sah er, daß im ganzen Zimmer keine Sitzgelegenheit war, außer dem Sessel beim Fenster. "Sie werden noch einsehen, wie wahr das alles ist", sagte Franz und ging gleichzeitig mit dem andern Mann auf ihn zu. Besonders der letztere überragte K. bedeutend und klopfte ihm öfters auf die Schulter. Beide prüften K.s Nachthemd und sagten, daß er jetzt ein viel schlechteres Hemd werde anziehen müssen, daß sie aber dieses Hemd wie auch seine übrige Wäsche aufbewahren und, wenn seine Sache günstig ausfallen sollte, ihm wieder zurückgeben würden. "Es ist besser, Sie geben die Sachen uns als ins Depot", sagten sie, "denn im Depot kommen öfters Unterschleife vor und außerdem verkauft man dort alle Sachen nach einer gewissen Zeit, ohne Rücksicht, ob das betreffende Verfahren zu Ende ist oder nicht. Und wie lange dauern doch derartige Prozesse, besonders in letzter Zeit! Sie bekämen dann schließlich allerdings vom Depot den Erlös, aber dieser Erlös ist erstens an sich schon gering, denn beim Verkauf entscheidet nicht die Höhe des Angebotes, sondern die Höhe der Bestechung, und weiter verringern sich solche Erlöse erfahrungsgemäß, wenn sie von Hand zu Hand und von Jahr zu Jahr weitergegeben werden." K. achtete auf diese Reden kaum, das Verfügungsrecht über seine Sachen, das er vielleicht noch besaß, schätzte er nicht hoch ein, viel wichtiger war es ihm, Klarheit über seine Lage zu bekommen; in Gegenwart dieser Leute konnte er aber nicht einmal nachdenken, immer wieder stieß der Bauch des zweiten Wächters - es konnten ja nur Wächter sein - förmlich freundschaftlich an ihn, sah er aber auf, dann erblickte er ein zu diesem dicken Körper gar nicht passendes trockenes, knochiges Gesicht mit starker, seitlich gedrehter Nase, das sich über ihn hinweg mit dem anderen Wächter verständigte. Was waren denn das für Menschen? Wovon sprachen sie? Welcher Behörde gehörten sie an? K. lebte doch in einem Rechtsstaat, überall herrschte Friede, alle Gesetze bestanden aufrecht, wer wagte, ihn in seiner Wohnung zu überfallen? Er neigte stets dazu, alles möglichst leicht zu nehmen, das Schlimmste erst beim Eintritt des Schlimmsten zu glauben, keine Vorsorge für die Zukunft zu treffen, selbst wenn alles drohte. Hier schien ihm das aber nicht richtig, man konnte zwar das Ganze als Spaß ansehen, als einen groben Spaß, den ihm aus unbekannten Gründen, vielleicht weil heute sein dreißigster Geburtstag war, die Kollegen in der Bank veranstaltet hatten, es war natürlich möglich, vielleicht brauchte er nur auf irgendeine Weise den Wächtern ins Gesicht zu lachen, und sie würden mitlachen, vielleicht waren es Dienstmänner von der Straßenecke, sie sahen ihnen nicht unähnlich - trotzdem war er diesmal, förmlich schon seit dem ersten Anblick des Wächters Franz, entschlossen, nicht den geringsten Vorteil, den er vielleicht gegenüber diesen Leuten besaß, aus der Hand zu geben. Darin, daß man später sagen würde, er habe keinen Spaß verstanden, sah K. eine ganz geringe Gefahr, wohl aber erinnerte er sich - ohne daß es sonst seine Gewohnheit gewesen wäre, aus Erfahrungen zu lernen - an einige, an sich unbedeutende Fälle, in denen er zum Unterschied von seinen Freunden mit Bewußtsein, ohne das geringste Gefühl für die möglichen Folgen, sich unvorsichtig benommen hatte und dafür durch das Ergebnis gestraft worden war. Es sollte nicht wieder geschehen, zumindest nicht diesmal; war es eine Komödie, so wollte er mitspielen. + +Noch war er frei. "Erlauben Sie", sagte er und ging eilig zwischen den Wächtern durch in sein Zimmer. "Er scheint vernünftig zu sein", hörte er hinter sich sagen. In seinem Zimmer riß er gleich die Schubladen des Schreibtischs auf, es lag dort alles in großer Ordnung, aber gerade die Legitimationspapiere, die er suchte, konnte er in der Aufregung nicht gleich finden. Schließlich fand er seine Radfahrlegitimation und wollte schon mit ihr zu den Wächtern gehen, dann aber schien ihm das Papier zu geringfügig und er suchte weiter, bis er den Geburtsschein fand. Als er wieder in das Nebenzimmer zurückkam, öffnete sich gerade die gegenüberliegende Tür und Frau Grubach wollte dort eintreten. Man sah sie nur einen Augenblick, denn kaum hatte sie K. erkannt, als sie offenbar verlegen wurde, um Verzeihung bat, verschwand und äußerst vorsichtig die Tür schloß. "Kommen Sie doch herein", hatte K. gerade noch sagen können. Nun aber stand er mit seinen Papieren in der Mitte des Zimmers, sah noch auf die Tür hin, die sich nicht wieder öffnete, und wurde erst durch einen Anruf der Wächter aufgeschreckt, die bei dem Tischchen am offenen Fenster saßen und, wie K. jetzt erkannte, sein Frühstück verzehrten. "Warum ist sie nicht eingetreten?" fragte er. "Sie darf nicht", sagte der große Wächter. "Sie sind doch verhaftet." "Wie kann ich denn verhaftet sein? Und gar auf diese Weise?" "Nun fangen Sie also wieder an", sagte der Wächter und tauchte ein Butterbrot ins Honigfäßchen. "Solche Fragen beantworten wir nicht." "Sie werden sie beantworten müssen", sagte K. "Hier sind meine Legitimationspapiere, zeigen Sie mir jetzt die Ihrigen und vor allem den Verhaftbefehl." "Du lieber Himmel!" sagte der Wächter. "Daß Sie sich in Ihre Lage nicht fügen können und daß Sie es darauf angelegt zu haben scheinen, uns, die wir Ihnen jetzt wahrscheinlich von allen Ihren Mitmenschen am nächsten stehen, nutzlos zu reizen!" "Es ist so, glauben Sie es doch", sagte Franz, führte die Kaffeetasse, die er in der Hand hielt, nicht zum Mund, sondern sah K. mit einem langen, wahrscheinlich bedeutungsvollen, aber unverständlichen Blick an. K. ließ sich, ohne es zu wollen, in ein Zwiegespräch der Blicke mit Franz ein, schlug dann aber doch auf seine Papiere und sagte: "Hier sind meine Legitimationspapiere." "Was kümmern uns denn die?" rief nun schon der große Wächter. "Sie führen sich ärger auf als ein Kind. Was wollen Sie denn? Wollen Sie Ihren großen, verfluchten Prozeß dadurch zu einem raschen Ende bringen, daß Sie mit uns, den Wächtern, über Legitimation und Verhaftbefehl diskutieren? Wir sind niedrige Angestellte, die sich in einem Legitimationspapier kaum auskennen und die mit Ihrer Sache nichts anderes zu tun haben, als daß sie zehn Stunden täglich bei Ihnen Wache halten und dafür bezahlt werden. Das ist alles, was wir sind, trotzdem aber sind wir fähig, einzusehen, daß die hohen Behörden, in deren Dienst wir stehen, ehe sie eine solche Verhaftung verfügen, sich sehr genau über die Gründe der Verhaftung und die Person des Verhafteten unterrichten. Es gibt darin keinen Irrtum. Unsere Behörde, soweit ich sie kenne, und ich kenne nur die niedrigsten Grade, sucht doch nicht etwa die Schuld in der Bevölkerung, sondern wird, wie es im Gesetz heißt, von der Schuld angezogen und muß uns Wächter ausschicken. Das ist Gesetz. Wo gäbe es da einen Irrtum?" "Dieses Gesetz kenne ich nicht", sagte K. "Desto schlimmer für Sie", sagte der Wächter. "Es besteht wohl auch nur in Ihren Köpfen", sagte K., er wollte sich irgendwie in die Gedanken der Wächter einschleichen, sie zu seinen Gunsten wenden oder sich dort einbürgern. Aber der Wächter sagte nur abweisend: "Sie werden es zu fühlen bekommen." Franz mischte sich ein und sagte: "Sieh, Willem, er gibt zu, er kenne das Gesetz nicht, und behauptet gleichzeitig, schuldlos zu sein." "Du hast ganz recht, aber ihm kann man nichts begreiflich machen", sagte der andere. K. antwortete nichts mehr; muß ich, dachte er, durch das Geschwätz dieser niedrigsten Organe - sie geben selbst zu, es zu sein - mich noch mehr verwirren lassen? Sie reden doch jedenfalls von Dingen, die sie gar nicht verstehen. Ihre Sicherheit ist nur durch ihre Dummheit möglich. Ein paar Worte, die ich mit einem mir ebenbürtigen Menschen sprechen werde, werden alles unvergleichlich klarer machen als die längsten Reden mit diesen. Er ging einige Male in dem freien Raum des Zimmers auf und ab, drüben sah er die alte Frau, die einen noch viel älteren Greis zum Fenster gezerrt hatte, den sie umschlungen hielt. K. mußte dieser Schaustellung ein Ende machen: "Führen Sie mich zu Ihrem Vorgesetzten", sagte er. "Wenn er es wünscht; nicht früher", sagte der Wächter, der Willem genannt worden war. "Und nun rate ich Ihnen", fügte er hinzu, "in Ihr Zimmer zu gehen, sich ruhig zu verhalten und darauf zu warten, was über Sie verfügt werden wird. Wir raten Ihnen, zerstreuen Sie sich nicht durch nutzlose Gedanken, sondern sammeln Sie sich, es werden große Anforderungen an Sie gestellt werden. Sie haben uns nicht so behandelt, wie es unser Entgegenkommen verdient hätte, Sie haben vergessen, daß wir, mögen wir auch sein was immer, zumindest jetzt Ihnen gegenüber freie Männer sind, das ist kein kleines Übergewicht. Trotzdem sind wir bereit, falls Sie Geld haben, Ihnen ein kleines Frühstück aus dem Kaffeehaus drüben zu bringen." + +Ohne auf dieses Angebot zu antworten, stand K. ein Weilchen lang still. Vielleicht würden ihn die beiden, wenn er die Tür des folgenden Zimmers oder gar die Tür des Vorzimmers öffnete, gar nicht zu hindern wagen, vielleicht wäre es die einfachste Lösung des Ganzen, daß er es auf die Spitze trieb. Aber vielleicht würden sie ihn doch packen und, war er einmal niedergeworfen, so war auch alle Überlegenheit verloren, die er jetzt ihnen gegenüber in gewisser Hinsicht doch wahrte. Deshalb zog er die Sicherheit der Lösung vor, wie sie der natürliche Verlauf bringen mußte, und ging in sein Zimmer zurück, ohne daß von seiner Seite oder von Seite der Wächter ein weiteres Wort gefallen wäre. + +Er warf sich auf sein Bett und nahm vom Waschtisch einen schönen Apfel, den er sich gestern abend für das Frühstück vorbereitet hatte. Jetzt war er sein einziges Frühstück und jedenfalls, wie er sich beim ersten großen Bissen versicherte, viel besser, als das Frühstück aus dem schmutzigen Nachtcafé gewesen wäre, das er durch die Gnade der Wächter hätte bekommen können. Er fühlte sich wohl und zuversichtlich, in der Bank versäumte er zwar heute vormittag seinen Dienst, aber das war bei der verhältnismäßig hohen Stellung, die er dort einnahm, leicht entschuldigt. Sollte er die wirkliche Entschuldigung anführen? Er gedachte es zu tun, Würde man ihm nicht glauben, was in diesem Fall begreiflich war, so konnte er Frau Grubach als Zeugin führen oder auch die beiden Alten von drüben, die wohl jetzt auf dem Marsch zum gegenüberliegenden Fenster waren. Es wunderte K., wenigstens aus dem Gedankengang der Wächter wunderte es ihn, daß sie ihn in das Zimmer getrieben und ihn hier allein gelassen hatten, wo er doch zehnfache Möglichkeit hatte, sich umzubringen. Gleichzeitig allerdings fragte er sich, diesmal aus seinem Gedankengang, was für einen Grund er haben könnte, es zu tun. Etwa weil die zwei nebenan saßen und sein Frühstück abgefangen hatten? Es wäre so sinnlos gewesen, sich umzubringen, daß er, selbst wenn er es hätte tun wollen, infolge der Sinnlosigkeit dazu nicht imstande gewesen wäre. Wäre die geistige Beschränktheit der Wächter nicht so auffallend gewesen, so hätte man annehmen können, daß auch sie, infolge der gleichen Überzeugung, keine Gefahr darin gesehen hätten, ihn allein zu lassen. Sie mochten jetzt, wenn sie wollten, zusehen, wie er zu einem Wandschränkchen ging, in dem er einen guten Schnaps aufbewahrte, wie er ein Gläschen zuerst zum Ersatz des Frühstücks leerte und wie er ein zweites Gläschen dazu bestimmte, sich Mut zu machen, das letztere nur aus Vorsicht für den unwahrscheinlichen Fall, daß es nötig sein sollte. + + diff --git a/_003/readme.md b/_003/readme.md new file mode 100644 index 0000000..714bd4b --- /dev/null +++ b/_003/readme.md @@ -0,0 +1,34 @@ +# wait und notify benutzen +## Lernziel + + + +Thread-Koordination über Condition-Variablen. + +## Aufgabe + +Gehen Sie in das Paket +[pr2.threads.notifier](../sources/src/main/java/pr2/threads/notifier/). + +Schreiben Sie eine Klasse `Notifier`, die ein einziges `String`-Attribut enthält. Sie soll weiterhin zwei Methoden haben: + + * `setString(String string)` -- Diese Methode setzt den String auf einen neuen Wert, aber nur, wenn der String `null` ist. Ist der String bereits gesetzt, wartet die Methode darauf, dass ein anderer Thread den String über die `getString()`-Methode liest und wieder zurücksetzt. + * `getString()` -- Liest den String aus, gibt das Ergebnis zurück und setzt das Attribut wieder zurück auf `null`. Wenn kein String vorhanden ist (d.h. wenn das Attribut bereits `null` ist), wartet die Methode, bis ein anderer Thread mit `setString(String string)` einen String abspeichert. + +Schreinben Sie eine Klasse `Main` mit einer `main`-Methode. Starten Sie zwei Threads, die Strings in einer `Notifier`-Instanz abspeichern und drei Threads, die Strings auslesen. Lassen Sie die Threads nach jeder Operation für 200 Millisekunden schlafen. + +Verwenden Sie bitte `wait` und `notify` bzw. `notifyAll`, um die Threads entsprechend zu koordinieren. + + + \ No newline at end of file diff --git a/_004/img/schnick.png b/_004/img/schnick.png new file mode 100644 index 0000000..9066a36 Binary files /dev/null and b/_004/img/schnick.png differ diff --git a/_004/kafka.txt b/_004/kafka.txt new file mode 100644 index 0000000..b5695c5 --- /dev/null +++ b/_004/kafka.txt @@ -0,0 +1,11 @@ +Verhaftung - Gespräch mit Frau Grubach - Dann Fräulein Bürstner + +Jemand mußte Josef K. verleumdet haben, denn ohne daß er etwas Böses getan hätte, wurde er eines Morgens verhaftet. Die Köchin der Frau Grubach, seiner Zimmervermieterin, die ihm jeden Tag gegen acht Uhr früh das Frühstück brachte, kam diesmal nicht. Das war noch niemals geschehen. K. wartete noch ein Weilchen, sah von seinem Kopfkissen aus die alte Frau, die ihm gegenüber wohnte und die ihn mit einer an ihr ganz ungewöhnlichen Neugierde beobachtete, dann aber, gleichzeitig befremdet und hungrig, läutete er. Sofort klopfte es und ein Mann, den er in dieser Wohnung noch niemals gesehen hatte, trat ein. Er war schlank und doch fest gebaut, er trug ein anliegendes schwarzes Kleid, das, ähnlich den Reiseanzügen, mit verschiedenen Falten, Taschen, Schnallen, Knöpfen und einem Gürtel versehen war und infolgedessen, ohne daß man sich darüber klar wurde, wozu es dienen sollte, besonders praktisch erschien. "Wer sind Sie?" fragte K. und saß gleich halb aufrecht im Bett. Der Mann aber ging über die Frage hinweg, als müsse man seine Erscheinung hinnehmen, und sagte bloß seinerseits: "Sie haben geläutet?" "Anna soll mir das Frühstück bringen", sagte K. und versuchte, zunächst stillschweigend, durch Aufmerksamkeit und Überlegung festzustellen, wer der Mann eigentlich war. Aber dieser setzte sich nicht allzulange seinen Blicken aus, sondern wandte sich zur Tür, die er ein wenig öffnete, um jemandem, der offenbar knapp hinter der Tür stand, zu sagen: "Er will, daß Anna ihm das Frühstück bringt." Ein kleines Gelächter im Nebenzimmer folgte, es war nach dem Klang nicht sicher, ob nicht mehrere Personen daran beteiligt waren. Obwohl der fremde Mann dadurch nichts erfahren haben konnte, was er nicht schon früher gewußt hätte, sagte er nun doch zu K. im Tone einer Meldung: "Es ist unmöglich." "Das wäre neu", sagte K., sprang aus dem Bett und zog rasch seine Hosen an. "Ich will doch sehen, was für Leute im Nebenzimmer sind und wie Frau Grubach diese Störung mir gegenüber verantworten wird." Es fiel ihm zwar gleich ein, daß er das nicht hätte laut sagen müssen und daß er dadurch gewissermaßen ein Beaufsichtigungsrecht des Fremden anerkannte, aber es schien ihm jetzt nicht wichtig. Immerhin faßte es der Fremde so auf, denn er sagte: "Wollen Sie nicht lieber hierbleiben?" "Ich will weder hierbleiben, noch von Ihnen angesprochen werden, solange Sie sich mir nicht vorstellen." "Es war gut gemeint", sagte der Fremde und öffnete nun freiwillig die Tür. Im Nebenzimmer, in das K. langsamer eintrat, als er wollte, sah es auf den ersten Blick fast genau so aus wie am Abend vorher. Es war das Wohnzimmer der Frau Grubach, vielleicht war in diesem mit Möbeln, Decken, Porzellan und Photographien überfüllten Zimmer heute ein wenig mehr Raum als sonst, man erkannte das nicht gleich, um so weniger, als die Hauptveränderung in der Anwesenheit eines Mannes bestand, der beim offenen Fenster mit einem Buch saß, von dem er jetzt aufblickte. "Sie hätten in Ihrem Zimmer bleiben sollen! Hat es Ihnen denn Franz nicht gesagt?" "Ja, was wollen Sie denn?" sagte K. und sah von der neuen Bekanntschaft zu dem mit Franz Benannten, der in der Tür stehengeblieben war, und dann wieder zurück. Durch das offene Fenster erblickte man wieder die alte Frau, die mit wahrhaft greisenhafter Neugierde zu dem jetzt gegenüberliegenden Fenster getreten war, um auch weiterhin alles zu sehen. "Ich will doch Frau Grubach -", sagte K., machte eine Bewegung, als reiße er sich von den zwei Männern los, die aber weit von ihm entfernt standen, und wollte weitergehen. "Nein", sagte der Mann beim Fenster, warf das Buch auf ein Tischchen und stand auf. "Sie dürfen nicht weggehen, Sie sind ja verhaftet." "Es sieht so aus", sagte K. "Und warum denn?" fragte er dann. "Wir sind nicht dazu bestellt, Ihnen das zu sagen. Gehen Sie in Ihr Zimmer und warten Sie. Das Verfahren ist nun einmal eingeleitet, und Sie werden alles zur richtigen Zeit erfahren. Ich gehe über meinen Auftrag hinaus, wenn ich Ihnen so freundschaftlich zurede. Aber ich hoffe, es hört es niemand sonst als Franz, und der ist selbst gegen alle Vorschrift freundlich zu Ihnen. Wenn Sie auch weiterhin so viel Glück haben wie bei der Bestimmung Ihrer Wächter, dann können Sie zuversichtlich sein." K. wollte sich setzen, aber nun sah er, daß im ganzen Zimmer keine Sitzgelegenheit war, außer dem Sessel beim Fenster. "Sie werden noch einsehen, wie wahr das alles ist", sagte Franz und ging gleichzeitig mit dem andern Mann auf ihn zu. Besonders der letztere überragte K. bedeutend und klopfte ihm öfters auf die Schulter. Beide prüften K.s Nachthemd und sagten, daß er jetzt ein viel schlechteres Hemd werde anziehen müssen, daß sie aber dieses Hemd wie auch seine übrige Wäsche aufbewahren und, wenn seine Sache günstig ausfallen sollte, ihm wieder zurückgeben würden. "Es ist besser, Sie geben die Sachen uns als ins Depot", sagten sie, "denn im Depot kommen öfters Unterschleife vor und außerdem verkauft man dort alle Sachen nach einer gewissen Zeit, ohne Rücksicht, ob das betreffende Verfahren zu Ende ist oder nicht. Und wie lange dauern doch derartige Prozesse, besonders in letzter Zeit! Sie bekämen dann schließlich allerdings vom Depot den Erlös, aber dieser Erlös ist erstens an sich schon gering, denn beim Verkauf entscheidet nicht die Höhe des Angebotes, sondern die Höhe der Bestechung, und weiter verringern sich solche Erlöse erfahrungsgemäß, wenn sie von Hand zu Hand und von Jahr zu Jahr weitergegeben werden." K. achtete auf diese Reden kaum, das Verfügungsrecht über seine Sachen, das er vielleicht noch besaß, schätzte er nicht hoch ein, viel wichtiger war es ihm, Klarheit über seine Lage zu bekommen; in Gegenwart dieser Leute konnte er aber nicht einmal nachdenken, immer wieder stieß der Bauch des zweiten Wächters - es konnten ja nur Wächter sein - förmlich freundschaftlich an ihn, sah er aber auf, dann erblickte er ein zu diesem dicken Körper gar nicht passendes trockenes, knochiges Gesicht mit starker, seitlich gedrehter Nase, das sich über ihn hinweg mit dem anderen Wächter verständigte. Was waren denn das für Menschen? Wovon sprachen sie? Welcher Behörde gehörten sie an? K. lebte doch in einem Rechtsstaat, überall herrschte Friede, alle Gesetze bestanden aufrecht, wer wagte, ihn in seiner Wohnung zu überfallen? Er neigte stets dazu, alles möglichst leicht zu nehmen, das Schlimmste erst beim Eintritt des Schlimmsten zu glauben, keine Vorsorge für die Zukunft zu treffen, selbst wenn alles drohte. Hier schien ihm das aber nicht richtig, man konnte zwar das Ganze als Spaß ansehen, als einen groben Spaß, den ihm aus unbekannten Gründen, vielleicht weil heute sein dreißigster Geburtstag war, die Kollegen in der Bank veranstaltet hatten, es war natürlich möglich, vielleicht brauchte er nur auf irgendeine Weise den Wächtern ins Gesicht zu lachen, und sie würden mitlachen, vielleicht waren es Dienstmänner von der Straßenecke, sie sahen ihnen nicht unähnlich - trotzdem war er diesmal, förmlich schon seit dem ersten Anblick des Wächters Franz, entschlossen, nicht den geringsten Vorteil, den er vielleicht gegenüber diesen Leuten besaß, aus der Hand zu geben. Darin, daß man später sagen würde, er habe keinen Spaß verstanden, sah K. eine ganz geringe Gefahr, wohl aber erinnerte er sich - ohne daß es sonst seine Gewohnheit gewesen wäre, aus Erfahrungen zu lernen - an einige, an sich unbedeutende Fälle, in denen er zum Unterschied von seinen Freunden mit Bewußtsein, ohne das geringste Gefühl für die möglichen Folgen, sich unvorsichtig benommen hatte und dafür durch das Ergebnis gestraft worden war. Es sollte nicht wieder geschehen, zumindest nicht diesmal; war es eine Komödie, so wollte er mitspielen. + +Noch war er frei. "Erlauben Sie", sagte er und ging eilig zwischen den Wächtern durch in sein Zimmer. "Er scheint vernünftig zu sein", hörte er hinter sich sagen. In seinem Zimmer riß er gleich die Schubladen des Schreibtischs auf, es lag dort alles in großer Ordnung, aber gerade die Legitimationspapiere, die er suchte, konnte er in der Aufregung nicht gleich finden. Schließlich fand er seine Radfahrlegitimation und wollte schon mit ihr zu den Wächtern gehen, dann aber schien ihm das Papier zu geringfügig und er suchte weiter, bis er den Geburtsschein fand. Als er wieder in das Nebenzimmer zurückkam, öffnete sich gerade die gegenüberliegende Tür und Frau Grubach wollte dort eintreten. Man sah sie nur einen Augenblick, denn kaum hatte sie K. erkannt, als sie offenbar verlegen wurde, um Verzeihung bat, verschwand und äußerst vorsichtig die Tür schloß. "Kommen Sie doch herein", hatte K. gerade noch sagen können. Nun aber stand er mit seinen Papieren in der Mitte des Zimmers, sah noch auf die Tür hin, die sich nicht wieder öffnete, und wurde erst durch einen Anruf der Wächter aufgeschreckt, die bei dem Tischchen am offenen Fenster saßen und, wie K. jetzt erkannte, sein Frühstück verzehrten. "Warum ist sie nicht eingetreten?" fragte er. "Sie darf nicht", sagte der große Wächter. "Sie sind doch verhaftet." "Wie kann ich denn verhaftet sein? Und gar auf diese Weise?" "Nun fangen Sie also wieder an", sagte der Wächter und tauchte ein Butterbrot ins Honigfäßchen. "Solche Fragen beantworten wir nicht." "Sie werden sie beantworten müssen", sagte K. "Hier sind meine Legitimationspapiere, zeigen Sie mir jetzt die Ihrigen und vor allem den Verhaftbefehl." "Du lieber Himmel!" sagte der Wächter. "Daß Sie sich in Ihre Lage nicht fügen können und daß Sie es darauf angelegt zu haben scheinen, uns, die wir Ihnen jetzt wahrscheinlich von allen Ihren Mitmenschen am nächsten stehen, nutzlos zu reizen!" "Es ist so, glauben Sie es doch", sagte Franz, führte die Kaffeetasse, die er in der Hand hielt, nicht zum Mund, sondern sah K. mit einem langen, wahrscheinlich bedeutungsvollen, aber unverständlichen Blick an. K. ließ sich, ohne es zu wollen, in ein Zwiegespräch der Blicke mit Franz ein, schlug dann aber doch auf seine Papiere und sagte: "Hier sind meine Legitimationspapiere." "Was kümmern uns denn die?" rief nun schon der große Wächter. "Sie führen sich ärger auf als ein Kind. Was wollen Sie denn? Wollen Sie Ihren großen, verfluchten Prozeß dadurch zu einem raschen Ende bringen, daß Sie mit uns, den Wächtern, über Legitimation und Verhaftbefehl diskutieren? Wir sind niedrige Angestellte, die sich in einem Legitimationspapier kaum auskennen und die mit Ihrer Sache nichts anderes zu tun haben, als daß sie zehn Stunden täglich bei Ihnen Wache halten und dafür bezahlt werden. Das ist alles, was wir sind, trotzdem aber sind wir fähig, einzusehen, daß die hohen Behörden, in deren Dienst wir stehen, ehe sie eine solche Verhaftung verfügen, sich sehr genau über die Gründe der Verhaftung und die Person des Verhafteten unterrichten. Es gibt darin keinen Irrtum. Unsere Behörde, soweit ich sie kenne, und ich kenne nur die niedrigsten Grade, sucht doch nicht etwa die Schuld in der Bevölkerung, sondern wird, wie es im Gesetz heißt, von der Schuld angezogen und muß uns Wächter ausschicken. Das ist Gesetz. Wo gäbe es da einen Irrtum?" "Dieses Gesetz kenne ich nicht", sagte K. "Desto schlimmer für Sie", sagte der Wächter. "Es besteht wohl auch nur in Ihren Köpfen", sagte K., er wollte sich irgendwie in die Gedanken der Wächter einschleichen, sie zu seinen Gunsten wenden oder sich dort einbürgern. Aber der Wächter sagte nur abweisend: "Sie werden es zu fühlen bekommen." Franz mischte sich ein und sagte: "Sieh, Willem, er gibt zu, er kenne das Gesetz nicht, und behauptet gleichzeitig, schuldlos zu sein." "Du hast ganz recht, aber ihm kann man nichts begreiflich machen", sagte der andere. K. antwortete nichts mehr; muß ich, dachte er, durch das Geschwätz dieser niedrigsten Organe - sie geben selbst zu, es zu sein - mich noch mehr verwirren lassen? Sie reden doch jedenfalls von Dingen, die sie gar nicht verstehen. Ihre Sicherheit ist nur durch ihre Dummheit möglich. Ein paar Worte, die ich mit einem mir ebenbürtigen Menschen sprechen werde, werden alles unvergleichlich klarer machen als die längsten Reden mit diesen. Er ging einige Male in dem freien Raum des Zimmers auf und ab, drüben sah er die alte Frau, die einen noch viel älteren Greis zum Fenster gezerrt hatte, den sie umschlungen hielt. K. mußte dieser Schaustellung ein Ende machen: "Führen Sie mich zu Ihrem Vorgesetzten", sagte er. "Wenn er es wünscht; nicht früher", sagte der Wächter, der Willem genannt worden war. "Und nun rate ich Ihnen", fügte er hinzu, "in Ihr Zimmer zu gehen, sich ruhig zu verhalten und darauf zu warten, was über Sie verfügt werden wird. Wir raten Ihnen, zerstreuen Sie sich nicht durch nutzlose Gedanken, sondern sammeln Sie sich, es werden große Anforderungen an Sie gestellt werden. Sie haben uns nicht so behandelt, wie es unser Entgegenkommen verdient hätte, Sie haben vergessen, daß wir, mögen wir auch sein was immer, zumindest jetzt Ihnen gegenüber freie Männer sind, das ist kein kleines Übergewicht. Trotzdem sind wir bereit, falls Sie Geld haben, Ihnen ein kleines Frühstück aus dem Kaffeehaus drüben zu bringen." + +Ohne auf dieses Angebot zu antworten, stand K. ein Weilchen lang still. Vielleicht würden ihn die beiden, wenn er die Tür des folgenden Zimmers oder gar die Tür des Vorzimmers öffnete, gar nicht zu hindern wagen, vielleicht wäre es die einfachste Lösung des Ganzen, daß er es auf die Spitze trieb. Aber vielleicht würden sie ihn doch packen und, war er einmal niedergeworfen, so war auch alle Überlegenheit verloren, die er jetzt ihnen gegenüber in gewisser Hinsicht doch wahrte. Deshalb zog er die Sicherheit der Lösung vor, wie sie der natürliche Verlauf bringen mußte, und ging in sein Zimmer zurück, ohne daß von seiner Seite oder von Seite der Wächter ein weiteres Wort gefallen wäre. + +Er warf sich auf sein Bett und nahm vom Waschtisch einen schönen Apfel, den er sich gestern abend für das Frühstück vorbereitet hatte. Jetzt war er sein einziges Frühstück und jedenfalls, wie er sich beim ersten großen Bissen versicherte, viel besser, als das Frühstück aus dem schmutzigen Nachtcafé gewesen wäre, das er durch die Gnade der Wächter hätte bekommen können. Er fühlte sich wohl und zuversichtlich, in der Bank versäumte er zwar heute vormittag seinen Dienst, aber das war bei der verhältnismäßig hohen Stellung, die er dort einnahm, leicht entschuldigt. Sollte er die wirkliche Entschuldigung anführen? Er gedachte es zu tun, Würde man ihm nicht glauben, was in diesem Fall begreiflich war, so konnte er Frau Grubach als Zeugin führen oder auch die beiden Alten von drüben, die wohl jetzt auf dem Marsch zum gegenüberliegenden Fenster waren. Es wunderte K., wenigstens aus dem Gedankengang der Wächter wunderte es ihn, daß sie ihn in das Zimmer getrieben und ihn hier allein gelassen hatten, wo er doch zehnfache Möglichkeit hatte, sich umzubringen. Gleichzeitig allerdings fragte er sich, diesmal aus seinem Gedankengang, was für einen Grund er haben könnte, es zu tun. Etwa weil die zwei nebenan saßen und sein Frühstück abgefangen hatten? Es wäre so sinnlos gewesen, sich umzubringen, daß er, selbst wenn er es hätte tun wollen, infolge der Sinnlosigkeit dazu nicht imstande gewesen wäre. Wäre die geistige Beschränktheit der Wächter nicht so auffallend gewesen, so hätte man annehmen können, daß auch sie, infolge der gleichen Überzeugung, keine Gefahr darin gesehen hätten, ihn allein zu lassen. Sie mochten jetzt, wenn sie wollten, zusehen, wie er zu einem Wandschränkchen ging, in dem er einen guten Schnaps aufbewahrte, wie er ein Gläschen zuerst zum Ersatz des Frühstücks leerte und wie er ein zweites Gläschen dazu bestimmte, sich Mut zu machen, das letztere nur aus Vorsicht für den unwahrscheinlichen Fall, daß es nötig sein sollte. + + diff --git a/_004/readme.md b/_004/readme.md new file mode 100644 index 0000000..4f73019 --- /dev/null +++ b/_004/readme.md @@ -0,0 +1,26 @@ +# Parallele Ausgaben erzeugen +## Lernziel + + + +Erste Schritte mit Threads. + +## Aufgabe + +Gehen Sie in das Paket [pr2.threads.paralleldrucker](../sources/src/main/java/pr2/threads/paralleldrucker/). + +Schreiben Sie ein Java-Programm `Paralleldrucker`, das zwei Threads startet, die beide in einer Endlosschleife einen Text auf der Konsole ausgeben, zum Beispiel "Thread 1 speaking". Parallel dazu soll der Main-Thread ebenfalls eine wiederkehrende Ausgabe erzeugen, z.B. "Hier spricht der Main-Thread". Verwenden Sie bitte für die Erzeugung der Threads anonyme innere Klassen, die `Runnable` implementieren. + + + \ No newline at end of file diff --git a/_005/daten.dat b/_005/daten.dat new file mode 100644 index 0000000..8d3eacd Binary files /dev/null and b/_005/daten.dat differ diff --git a/_005/games.txt b/_005/games.txt new file mode 100644 index 0000000..3390355 --- /dev/null +++ b/_005/games.txt @@ -0,0 +1,994 @@ +96;Half-Life 2;9.2;Nov 16, 2004 +96;Grand Theft Auto V;7.8;Apr 14, 2015 +96;The Orange Box;9.3;Oct 10, 2007 +96;Half-Life;9.1;Oct 31, 1998 +96;BioShock;8.4;Aug 21, 2007 +95;Baldur's Gate II: Shadows of Amn;9.2;Sep 24, 2000 +95;Portal 2;8.8;Apr 19, 2011 +94;The Elder Scrolls V: Skyrim;8.1;Nov 11, 2011 +94;Mass Effect 2;8.7;Jan 26, 2010 +94;Grand Theft Auto: Vice City;8.8;May 12, 2003 +94;Civilization II;9.0;Feb 29, 1996 +94;Quake;8.8;Jun 22, 1996 +94;BioShock Infinite;8.5;Mar 26, 2013 +94;The Elder Scrolls IV: Oblivion;8.0;Mar 20, 2006 +94;Grim Fandango;9.1;Sep 30, 1998 +94;Diablo;8.7;Nov 30, 1996 +94;Sid Meier's Civilization IV;8.2;Oct 25, 2005 +93;The Witcher 3: Wild Hunt;9.1;May 19, 2015 +93;Company of Heroes;8.8;Sep 13, 2006 +93;Unreal Tournament 2004;8.9;Mar 16, 2004 +93;Starcraft II: Wings of Liberty;8.2;Jul 27, 2010 +93;Minecraft;7.4;May 10, 2009 +93;Grand Theft Auto III;8.4;May 20, 2002 +93;Homeworld;8.9;Aug 31, 1999 +93;Star Wars: Knights of the Old Republic;9.0;Nov 18, 2003 +93;World of Warcraft;7.2;Nov 23, 2004 +93;Grand Theft Auto: San Andreas;8.8;Jun 7, 2005 +92;Call of Duty 4: Modern Warfare;8.5;Nov 5, 2007 +92;Warcraft III: Reign of Chaos;9.1;Jul 3, 2002 +92;The Sims;7.9;Jan 31, 2000 +92;Sid Meier's Gettysburg!;7.7;Sep 30, 1997 +92;World Soccer Winning Eleven 7 International;7.9;Apr 9, 2004 +92;Team Fortress 2;9.2;Apr 8, 2008 +92;System Shock 2;9.1;Aug 11, 1999 +92;Tom Clancy's Splinter Cell: Chaos Theory;8.8;Mar 28, 2005 +92;Undertale;8.2;Sep 15, 2015 +92;Rome: Total War;9.1;Sep 22, 2004 +92;Thief: The Dark Project;9.1;Nov 30, 1998 +92;Age of Empires II: The Age of Kings;9.0;Sep 30, 1999 +92;Unreal Tournament (1999);9.1;Nov 30, 1999 +92;Sid Meier's Alpha Centauri;9.1;Feb 12, 1999 +92;Galactic Civilizations II: Twilight of the Arnor;8.4;Apr 30, 2008 +92;Tiger Woods PGA Tour 2003;6.0;Oct 31, 2002 +91;Dishonored;8.4;Oct 9, 2012 +91;Medal of Honor: Allied Assault;8.6;Jan 20, 2002 +91;Myth: The Fallen Lords;8.8;Oct 31, 1997 +91;World of Warcraft: Wrath of the Lich King;7.4;Nov 13, 2008 +91;F1 Challenge '99-'02;8.3;Jun 24, 2003 +91;Baldur's Gate;9.0;Nov 30, 1998 +91;IL-2 Sturmovik;8.7;Nov 18, 2001 +91;FreeSpace 2;8.8;Sep 30, 1999 +91;Metal Gear Solid V: The Phantom Pain;7.7;Sep 1, 2015 +91;Tom Clancy's Splinter Cell;8.6;Feb 19, 2003 +91;Crysis;8.0;Nov 13, 2007 +91;World of Warcraft: The Burning Crusade;7.9;Jan 16, 2007 +91;Tiger Woods PGA Tour 2005;4.6;Sep 20, 2004 +91;The Longest Journey;8.9;Nov 16, 2000 +91;Tony Hawk's Pro Skater 2;8.5;Oct 31, 2000 +91;Star Wars Jedi Knight: Dark Forces II;8.5;Sep 30, 1997 +91;Batman: Arkham Asylum;8.7;Sep 15, 2009 +91;Galactic Civilizations II: Dark Avatar;8.2;Feb 14, 2007 +91;The Operative: No One Lives Forever;8.9;Nov 9, 2000 +91;Battlefield 2;8.4;Jun 21, 2005 +91;Street Fighter IV;8.0;Jul 1, 2009 +91;Fallout 3;7.9;Oct 28, 2008 +91;Batman: Arkham City;8.6;Nov 22, 2011 +91;Fez;6.5;May 1, 2013 +91;Planescape: Torment;9.3;Nov 30, 1999 +91;Neverwinter Nights;8.1;Jun 16, 2002 +91;No One Lives Forever 2: A Spy in H.A.R.M.'s Way;8.7;Sep 30, 2002 +91;Dragon Age: Origins;8.6;Nov 3, 2009 +91;Mark of the Ninja;8.0;Oct 16, 2012 +91;Dark Souls II;7.1;Apr 25, 2014 +91;Call of Duty;8.5;Oct 29, 2003 +91;Madden NFL 2004;8.2;Aug 12, 2003 +90;The Sims 2;8.8;Sep 14, 2004 +90;World of Warcraft: Cataclysm;5.5;Dec 7, 2010 +90;World of Goo;8.5;Oct 21, 2008 +90;Spelunky;7.2;Aug 8, 2013 +90;Black & White;7.6;Mar 26, 2001 +90;Portal;9.3;Apr 8, 2008 +90;NHL 2001;6.9;Sep 28, 2000 +90;Tony Hawk's Pro Skater 3;8.6;Mar 28, 2002 +90;Deus Ex;9.3;Jun 26, 2000 +90;Half-Life 2: Episode Two;9.2;Oct 10, 2007 +90;Braid;8.6;Jan 26, 2010 +90;The Chronicles of Riddick: Escape From Butcher Bay - Developer's Cut;8.7;Dec 8, 2004 +90;Sid Meier's Civilization III;8.4;Oct 30, 2001 +90;Silent Hunter III;7.8;Mar 15, 2005 +90;Sid Meier's Civilization V;7.8;Sep 21, 2010 +90;Falcon 4.0: Allied Force;8.6;Jun 28, 2005 +90;Deus Ex: Human Revolution;8.5;Aug 23, 2011 +90;Dark Souls III;8.2;Apr 12, 2016 +90;Flight Simulator 2002;8.4;Oct 19, 2001 +90;Brothers: A Tale of Two Sons;8.5;Sep 3, 2013 +90;Dota 2;6.2;Jul 9, 2013 +90;Guild Wars 2;7.9;Aug 28, 2012 +90;Freedom Force;8.0;Mar 24, 2002 +90;GTR 2;8.7;Sep 29, 2006 +90;Grand Theft Auto IV;6.5;Dec 2, 2008 +90;Total War: Shogun 2;8.3;Mar 15, 2011 +90;Empire: Total War;6.9;Mar 3, 2009 +90;Command & Conquer: Red Alert;8.9;Oct 31, 1996 +89;Star Wars Jedi Knight II: Jedi Outcast;8.6;Mar 26, 2002 +89;The Walking Dead: A Telltale Games Series;8.7;Dec 11, 2012 +89;Age of Mythology;8.9;Nov 1, 2002 +89;Sacrifice;8.8;Nov 5, 2000 +89;The Witcher 3: Wild Hunt - Hearts of Stone;8.4;Oct 13, 2015 +89;Pillars of Eternity;8.3;Mar 26, 2015 +89;The Elder Scrolls III: Morrowind;9.0;May 1, 2002 +89;Rocksmith 2014 Edition;7.9;Oct 22, 2013 +89;Fallout;8.9;Sep 30, 1997 +89;World Soccer Winning Eleven 9;8.4;Apr 28, 2006 +89;Worldwide Soccer Manager 2005;8.7;Dec 7, 2004 +89;Left 4 Dead;9.2;Nov 18, 2008 +89;Left 4 Dead 2;8.5;Nov 17, 2009 +89;NASCAR Racing 2002 Season;5.8;Feb 14, 2002 +89;Mass Effect;8.6;May 28, 2008 +89;Combat Mission: Barbarossa to Berlin;8.3;Oct 29, 2002 +89;Homeworld: Cataclysm;8.9;Sep 7, 2000 +89;The Walking Dead: Episode 5 - No Time Left;8.9;Nov 21, 2012 +89;Guild Wars;8.4;Apr 26, 2005 +89;Borderlands 2;8.2;Sep 18, 2012 +89;Max Payne;9.1;Jul 23, 2001 +89;Out of the Park Baseball 15;7.2;Apr 21, 2014 +89;World in Conflict;8.1;Sep 18, 2007 +89;NASCAR Racing 4;8.2;Feb 6, 2001 +89;Duke Nukem 3D;8.8;Jan 31, 1996 +89;Far Cry;8.0;Mar 23, 2004 +89;FIFA Soccer 12;7.1;Sep 27, 2011 +89;XCOM: Enemy Unknown;8.2;Oct 9, 2012 +89;Mass Effect 3;5.4;Mar 6, 2012 +89;Rise of Nations;9.0;May 20, 2003 +89;NASCAR Racing 2003 Season;8.6;Feb 14, 2003 +89;Descent 3;8.3;Jun 14, 2000 +89;The Curse of Monkey Island;9.1;Oct 31, 1997 +89;Battlefield 3;7.5;Oct 25, 2011 +89;Battlefield 1942;8.6;Sep 10, 2002 +89;Madden NFL 2003;8.4;Aug 12, 2002 +89;DiRT 2;8.3;Dec 10, 2009 +89;Stardew Valley;8.5;Feb 26, 2016 +89;Prince of Persia: The Sands of Time;8.6;Nov 30, 2003 +89;Railroad Tycoon II;8.4;Oct 31, 1998 +88;Microsoft Flight Simulator 2004: A Century of Flight;8.2;Jul 29, 2003 +88;Medieval: Total War;8.8;Aug 19, 2002 +88;Mafia;9.1;Aug 27, 2002 +88;LIMBO;8.1;Aug 2, 2011 +88;Nuclear Throne;7.4;Dec 5, 2015 +88;Crusader Kings II: The Old Gods;8.8;May 28, 2013 +88;Assassin's Creed: Brotherhood;8.2;Mar 22, 2011 +88;Superbike 2001;6.5;Oct 9, 2000 +88;F.E.A.R.;8.3;Oct 17, 2005 +88;Kerbal Space Program;8.1;Apr 27, 2015 +88;Tribes 2;8.5;Mar 28, 2001 +88;Age of Empires II: The Conquerors Expansion;9.0;Aug 24, 2000 +88;Tiger Woods PGA Tour 2004;8.8;Sep 22, 2003 +88;Warcraft III: The Frozen Throne;9.0;Jul 1, 2003 +88;Starcraft;9.1;Apr 1, 1998 +88;Far Cry 3;8.2;Dec 4, 2012 +88;XCOM 2;7.0;Feb 5, 2016 +88;World Soccer Winning Eleven 8 International;8.5;Feb 16, 2005 +88;Torchlight II;8.6;Sep 20, 2012 +88;Myth II: Soulblighter;9.0;Nov 30, 1998 +88;Return to Castle Wolfenstein;8.7;Nov 19, 2001 +88;Shogo: Mobile Armor Division;8.9;Sep 30, 1998 +88;Thirty Flights of Loving;5.0;Aug 20, 2012 +88;Hearthstone: Heroes of Warcraft;6.3;Mar 11, 2014 +88;Medieval II: Total War;8.9;Nov 13, 2006 +88;F1 2002;7.6;Jun 13, 2002 +88;The Stanley Parable;8.0;Oct 17, 2013 +88;BioShock 2;8.0;Feb 9, 2010 +88;Counter-Strike: Source;8.9;Sep 26, 2005 +88;Starcraft II: Legacy of the Void;8.3;Nov 10, 2015 +88;Diablo III;4.0;May 15, 2012 +88;Rise of Nations: Thrones & Patriots;8.8;Apr 27, 2004 +88;Sid Meier's Pirates!;8.3;Nov 22, 2004 +88;EVE Online: Special Edition;7.8;Mar 10, 2009 +88;Guacamelee! Gold Edition;7.3;Aug 8, 2013 +88;Armadillo Run;8.2;Apr 22, 2006 +88;Dark Age of Camelot;8.9;Sep 1, 2001 +88;Baldur's Gate II: Throne of Bhaal;8.9;Jun 21, 2001 +88;Counter-Strike;9.3;Nov 8, 2000 +88;Tony Hawk's Pro Skater 4;8.4;Aug 27, 2003 +88;Ori and the Blind Forest;8.7;Mar 11, 2015 +88;Diablo II;8.8;Jun 29, 2000 +88;The Witcher 2: Assassins of Kings;8.5;May 17, 2011 +87;Plants vs. Zombies;8.9;Aug 18, 2009 +87;Doom 3;7.5;Aug 3, 2004 +87;Super Meat Boy;8.3;Apr 5, 2011 +87;Football Manager 2010;9.1;Nov 3, 2009 +87;Oddworld: Abe's Oddysee - New 'n' Tasty;7.8;Feb 25, 2015 +87;Tom Clancy's Splinter Cell: Pandora Tomorrow;8.0;Mar 23, 2004 +87;Europa Universalis II;8.8;Nov 12, 2001 +87;Burnout Paradise: The Ultimate Box;7.5;Feb 5, 2009 +87;Battlefield: Bad Company 2;8.3;Mar 2, 2010 +87;GRID;7.9;Jun 3, 2008 +87;Crypt of the NecroDancer;7.7;Apr 23, 2015 +87;Sins of a Solar Empire;8.2;Feb 4, 2008 +87;MechWarrior 4: Vengeance;8.2;Nov 23, 2000 +87;Thief II: The Metal Age;9.1;Feb 29, 2000 +87;Diablo II: Lord of Destruction;9.1;Jun 27, 2001 +87;Monkey Island 2 Special Edition: LeChuck's Revenge;9.0;Jul 7, 2010 +87;Half-Life 2: Episode One;8.6;Jun 1, 2006 +87;The Swapper;8.7;May 30, 2013 +87;Hitman 2: Silent Assassin;8.2;Oct 1, 2002 +87;Year Walk;7.0;Mar 6, 2014 +87;Max Payne 3;7.6;Jun 1, 2012 +87;TowerFall Ascension;6.6;Mar 11, 2014 +87;Battlefield 3: Armored Kill;7.0;Sep 11, 2012 +87;NHL 2002;8.7;Sep 17, 2001 +87;Icewind Dale;8.3;Jun 29, 2000 +87;The Witness;6.6;Jan 26, 2016 +87;Brothers in Arms: Road to Hill 30;7.1;Mar 15, 2005 +87;Kohan: Immortal Sovereigns;8.6;Mar 14, 2001 +87;Day of the Tentacle Remastered;7.9;Mar 21, 2016 +87;Dead Space 2;8.3;Jan 25, 2011 +87;Diablo III: Reaper of Souls;6.6;Mar 25, 2014 +87;Shogun: Total War Warlord Edition;8.7;Aug 13, 2001 +87;Serious Sam: The First Encounter;8.4;Mar 21, 2001 +87;Grand Prix 3;8.3;Aug 24, 2000 +87;Call of Duty: United Offensive;8.3;Sep 14, 2004 +87;Divinity: Original Sin;8.7;Jan 17, 2014 +87;Company of Heroes: Opposing Fronts;8.6;Sep 24, 2007 +87;Psychonauts;8.9;Apr 19, 2005 +87;Gears of War;7.8;Nov 6, 2007 +87;Out of the Park Baseball 4;7.8;Feb 28, 2002 +87;Europa Universalis IV;8.7;Aug 13, 2013 +87;NHL 2004;8.2;Sep 22, 2003 +87;Zeus: Master of Olympus;9.0;Oct 22, 2000 +87;World of Warcraft: Warlords of Draenor;6.0;Nov 13, 2014 +87;Warhammer 40,000: Dawn of War - Dark Crusade;8.9;Oct 9, 2006 +87;Commandos 2: Men of Courage;8.8;Sep 20, 2001 +86;Tales From The Borderlands: Episode 5 - The Vault of the Traveler;8.7;Oct 20, 2015 +86;Bastion;8.6;Aug 16, 2011 +86;Gone Home;5.4;Aug 15, 2013 +86;Pac-Man Championship Edition DX +;7.3;Sep 24, 2013 +86;Supreme Commander;8.3;Feb 20, 2007 +86;Total War: Shogun 2 - Fall of the Samurai;8.4;Mar 23, 2012 +86;Startopia;8.7;Jun 19, 2001 +86;Enemy Engaged: RAH-66 Comanche Versus Ka-52 Hokum;8.3;Jul 31, 2000 +86;Fallout 2;9.2;Sep 30, 1998 +86;Final Fantasy XIV: Heavensward;7.7;Jun 23, 2015 +86;Football Manager 2013;6.7;Nov 1, 2012 +86;Out of the Park Baseball 14;8.6;Apr 15, 2013 +86;The Witcher: Enhanced Edition;8.5;Sep 16, 2008 +86;Borderlands: The Secret Armory of General Knoxx;7.6;Feb 25, 2010 +86;Call of Duty 2;8.3;Oct 25, 2005 +86;Astebreed;7.3;May 30, 2014 +86;Ground Control;7.8;May 31, 2000 +86;Rise of the Tomb Raider;8.0;Jan 28, 2016 +86;Resident Evil 5;7.1;Sep 18, 2009 +86;Saints Row IV;7.4;Aug 20, 2013 +86;Black Mesa;9.0;Sep 14, 2012 +86;EverQuest: Omens of War;7.7;Sep 13, 2004 +86;Steel Beasts;8.4;Sep 24, 2000 +86;Total Annihilation;8.9;Sep 30, 1997 +86;Need for Speed: Hot Pursuit;6.7;Nov 16, 2010 +86;FIFA Soccer 13;6.6;Sep 25, 2012 +86;Sid Meier's Civilization IV: Beyond the Sword;8.6;Jul 23, 2007 +86;The Sims 3;7.6;Jun 2, 2009 +86;Freedom Force vs The 3rd Reich;7.7;Mar 8, 2005 +86;The Binding of Isaac: Rebirth;8.3;Nov 4, 2014 +86;Tribes: Ascend;7.7;Apr 12, 2012 +86;Titanfall;6.1;Mar 11, 2014 +86;Rayman Origins;8.4;Mar 29, 2012 +86;Her Story;5.7;Jun 24, 2015 +86;Starcraft II: Heart of the Swarm;7.9;Mar 12, 2013 +86;Mass Effect 2: Lair of the Shadow Broker;8.5;Sep 7, 2010 +86;LEGO Star Wars II: The Original Trilogy;8.3;Sep 12, 2006 +86;Dungeon Siege;7.9;Mar 31, 2002 +86;Crysis 2;6.7;Mar 22, 2011 +86;Call of Duty: Modern Warfare 2;4.1;Nov 10, 2009 +86;The Secret of Monkey Island: Special Edition;9.1;Jul 15, 2009 +86;Max Payne 2: The Fall of Max Payne;9.0;Oct 14, 2003 +86;Homeworld Remastered Collection;8.2;Feb 25, 2015 +86;Galactic Civilizations II: Dread Lords;8.0;Feb 21, 2006 +86;Tomb Raider;8.5;Mar 5, 2013 +86;Star Trek: Voyager Elite Force;8.2;Sep 20, 2000 +86;Worldwide Soccer Manager 2008;8.4;Oct 23, 2007 +86;IL-2 Sturmovik: Forgotten Battles;8.6;Mar 2, 2003 +86;Hyper Light Drifter;8.1;Mar 31, 2016 +86;DiRT 3;6.9;May 24, 2011 +86;Unreal Tournament 2003;8.1;Sep 30, 2002 +86;Age of Wonders II: The Wizard's Throne;8.4;Jun 12, 2002 +86;Links 2001;6.8;Oct 24, 2000 +86;EverQuest: The Ruins of Kunark;8.8;Mar 31, 2000 +86;Full Throttle;8.8;Apr 30, 1995 +86;The Lord of the Rings Online: Shadows of Angmar;8.1;Apr 24, 2007 +86;Pony Island;6.8;Jan 4, 2016 +86;Warhammer 40,000: Dawn of War;8.8;Sep 20, 2004 +86;Warhammer Online: Age of Reckoning;7.9;Sep 16, 2008 +86;Dead Space;8.0;Oct 20, 2008 +86;Bionic Commando Rearmed;7.0;Aug 13, 2008 +86;Command & Conquer: Red Alert 2 - Yuri's Revenge;9.0;Oct 10, 2001 +86;Europa Universalis;8.1;Feb 2, 2001 +86;Escape from Monkey Island;8.2;Nov 8, 2000 +86;IL-2 Sturmovik: 1946;8.8;Mar 13, 2007 +86;XCOM: Enemy Within;7.9;Nov 12, 2013 +86;Battlefield 3: Back to Karkand;7.2;Dec 13, 2011 +86;Heroes of the Storm;6.7;Jun 2, 2015 +86;Civilization III: Conquests;8.4;Nov 4, 2003 +86;Path of Exile;8.0;Jan 25, 2013 +86;Battlefield: Bad Company 2 Vietnam;8.1;Dec 18, 2010 +86;Assassin's Creed II;6.8;Mar 9, 2010 +86;The Elder Scrolls IV: Shivering Isles;8.4;Mar 26, 2007 +86;DiRT Rally;8.8;Dec 7, 2015 +86;Rocket League;8.1;Jul 7, 2015 +86;Allegiance;8.2;Mar 31, 2000 +85;The Talos Principle;8.5;Dec 11, 2014 +85;Cities: Skylines;8.9;Mar 10, 2015 +85;Falcon 4.0;8.0;Nov 30, 1998 +85;Tom Clancy's Rainbow Six;8.6;Jul 31, 1998 +85;Madden NFL 2005;6.4;Sep 14, 2004 +85;Legend of Grimrock II;8.0;Oct 15, 2014 +85;Sam & Max Episode 205: What's New, Beelzebub?;8.6;Apr 10, 2008 +85;Dragon Age: Inquisition;5.8;Nov 18, 2014 +85;Tales from the Borderlands: A Telltale Game Series;8.7;Apr 26, 2016 +85;Tom Clancy's Rainbow Six: Vegas;7.7;Dec 12, 2006 +85;City of Heroes;8.5;Apr 27, 2004 +85;SWAT 4;8.6;Apr 5, 2005 +85;Clive Barker's Undying;8.7;Feb 21, 2001 +85;EverQuest;8.2;Mar 16, 1999 +85;Warhammer 40,000: Dawn of War II;8.1;Feb 18, 2009 +85;Command & Conquer 3: Tiberium Wars;8.0;Mar 26, 2007 +85;Bit.Trip Presents...Runner2: Future Legend of Rhythm Alien;8.2;Feb 26, 2013 +85;Hotline Miami;8.5;Oct 23, 2012 +85;Out of the Park Baseball 13;8.2;Apr 9, 2012 +85;Wizardry 8;8.6;Nov 14, 2001 +85;Aliens Versus Predator 2;8.7;Oct 31, 2001 +85;Operation Flashpoint: Cold War Crisis;9.0;Aug 30, 2001 +85;Tropico;8.4;Apr 5, 2001 +85;Giants: Citizen Kabuto;8.9;Dec 6, 2000 +85;NASCAR SimRacing;4.9;Feb 15, 2005 +85;The Lord of the Rings Online: Mines of Moria;8.3;Nov 17, 2008 +85;The Binding of Isaac: Afterbirth;8.1;Oct 30, 2015 +85;Amnesia: The Dark Descent;8.6;Feb 17, 2011 +85;GTR FIA Racing;8.6;May 3, 2005 +85;Football Manager 2011;8.4;Nov 23, 2010 +85;Dust: An Elysian Tail;8.5;May 24, 2013 +85;South Park: The Stick of Truth;8.6;Mar 4, 2014 +85;Dark Souls: Prepare to Die Edition;7.4;Aug 24, 2012 +85;Medieval II: Total War Kingdoms;8.8;Aug 28, 2007 +85;Shovel Knight;7.9;Jun 26, 2014 +85;DmC: Devil May Cry;6.7;Jan 24, 2013 +85;Peggle Deluxe;8.1;Feb 19, 2008 +85;Monopoly Tycoon;8.0;Sep 24, 2001 +85;Indigo Prophecy;8.3;Oct 2, 2005 +85;Prince of Persia: The Two Thrones;8.0;Dec 1, 2005 +85;Sam & Max Episode 204: Chariots of the Dogs;8.1;Mar 13, 2008 +85;Assetto Corsa;8.4;Dec 19, 2014 +85;Machinarium;8.8;Oct 16, 2009 +85;Frozen Synapse;7.7;May 26, 2011 +85;Valkyria Chronicles;8.3;Nov 11, 2014 +85;Freelancer;8.9;Mar 3, 2003 +85;Zenzizenzic;5.9;Jul 23, 2015 +85;The Wolf Among Us: Episode 1 - Faith;9.0;Oct 11, 2013 +85;Mega Man Legacy Collection;7.3;Aug 25, 2015 +85;Warhammer 40,000: Dawn of War II - Chaos Rising;8.7;Mar 11, 2010 +85;Far Cry 2;5.8;Oct 21, 2008 +85;The Walking Dead: Episode 3 - Long Road Ahead;8.4;Aug 29, 2012 +85;AudioSurf;8.8;Feb 15, 2008 +85;BattleBlock Theater;8.0;May 15, 2014 +85;Star Wars: Knights of the Old Republic II - The Sith Lords;8.4;Feb 8, 2005 +85;MVP Baseball 2005;8.1;Feb 22, 2005 +85;The Elder Scrolls III: Bloodmoon;8.5;Jun 3, 2003 +85;Rogue Legacy;7.9;Jun 27, 2013 +85;Chaos Reborn;8.4;Oct 26, 2015 +85;Thief: Deadly Shadows;8.4;May 25, 2004 +85;Football Manager 2014;5.4;Oct 30, 2013 +85;System Shock: Enhanced Edition;7.9;Sep 22, 2015 +85;EverQuest: Gates of Discord;6.8;Feb 9, 2004 +85;FIFA 2001 Major League Soccer;7.3;Oct 30, 2000 +85;Sid Meier's Civilization V: Brave New World;8.6;Jul 9, 2013 +85;Final Fantasy XI;7.5;Oct 28, 2003 +85;Serious Sam: The Second Encounter;8.5;Feb 4, 2002 +85;The Sims: Hot Date;7.9;Nov 12, 2001 +85;American McGee's Alice;8.2;Dec 6, 2000 +85;Trials Evolution: Gold Edition;6.7;Mar 21, 2013 +85;Warhammer 40,000: Dawn of War - Winter Assault;8.3;Sep 21, 2005 +85;Tony Hawk's Underground 2;7.9;Oct 4, 2004 +85;Papers, Please;8.5;Aug 8, 2013 +85;Star Wars: The Old Republic;5.9;Dec 20, 2011 +85;Anarchy Online: Shadowlands;8.7;Sep 8, 2003 +85;Dark Age of Camelot: Shrouded Isles;8.8;Dec 2, 2002 +85;Obsidian;8.3;Dec 31, 1996 +84;The Walking Dead: Episode 2 - Starved for Help;8.6;Jun 29, 2012 +84;Saints Row: The Third;8.1;Nov 15, 2011 +84;Fallout: New Vegas;8.5;Oct 19, 2010 +84;The Movies;8.3;Nov 8, 2005 +84;Neverwinter Nights: Hordes of the Underdark;8.6;Dec 2, 2003 +84;Command & Conquer: Generals;8.3;Feb 10, 2003 +84;Sid Meier's SimGolf;8.2;Jan 23, 2002 +84;Middle-earth: Shadow of Mordor;8.0;Sep 30, 2014 +84;SpaceChem;8.4;Mar 2, 2011 +84;Downwell;6.2;Oct 15, 2015 +84;Pinball FX 2;8.0;Oct 27, 2012 +84;Devil Daggers;6.7;Feb 18, 2016 +84;PlanetSide 2;7.0;Nov 20, 2012 +84;Enter the Gungeon;7.4;Apr 5, 2016 +84;GT Legends;8.6;Jan 23, 2006 +84;Hearthstone: Goblins Vs. Gnomes;6.6;Dec 8, 2014 +84;Space Rangers 2: Rise of the Dominators;9.0;Mar 27, 2006 +84;Tales From The Borderlands: Episode 1 - Zer0 Sum;8.4;Nov 25, 2014 +84;Puzzle Quest: Challenge of the Warlords;8.3;Oct 10, 2007 +84;Heroes of Might and Magic IV;7.6;Mar 29, 2002 +84;Command & Conquer: Red Alert 2;8.9;Oct 21, 2000 +84;Shogun: Total War;8.7;Jun 13, 2000 +84;DiRT;7.2;Jun 19, 2007 +84;Darkest Dungeon;8.0;Jan 19, 2016 +84;Super Street Fighter IV: Arcade Edition;7.8;Jul 13, 2011 +84;Football Manager 2012;8.0;Oct 20, 2011 +84;Guild Wars Factions;8.5;Apr 28, 2006 +84;80 Days (2015);6.1;Sep 29, 2015 +84;Spore;5.2;Sep 7, 2008 +84;Unity of Command;7.2;Nov 15, 2011 +84;Hearthstone: The Grand Tournament;4.0;Aug 24, 2015 +84;Metro Redux;8.0;Aug 26, 2014 +84;Time Gentlemen, Please!;7.6;Jul 2, 2009 +84;Europa Universalis IV: Wealth of Nations;8.4;May 29, 2014 +84;Mass Effect 3: Citadel;7.8;Mar 5, 2013 +84;Disciples II: Dark Prophecy;8.6;Jan 22, 2002 +84;Just Cause 2;7.7;Mar 23, 2010 +84;Crysis Warhead;7.9;Sep 16, 2008 +84;Assassin's Creed IV: Black Flag;7.7;Nov 19, 2013 +84;Age of Mythology: The Titans;8.7;Sep 30, 2003 +84;SimCity 4;8.7;Jan 12, 2003 +84;Microsoft Train Simulator;8.4;May 31, 2001 +84;Rise of Nations: Rise of Legends;8.5;May 9, 2006 +84;TOCA Race Driver 3;7.8;Feb 24, 2006 +84;FTL: Faster Than Light;8.4;Sep 14, 2012 +84;SOMA;8.2;Sep 22, 2015 +84;DEFCON: Everybody Dies;8.3;Mar 26, 2007 +84;Tron 2.0;8.3;Aug 26, 2003 +84;Brothers in Arms: Earned in Blood;7.3;Oct 6, 2005 +84;Grim Fandango Remastered;8.0;Jan 27, 2015 +84;The Lord of the Rings: The Battle for Middle-Earth II;7.5;Mar 2, 2006 +84;Battlefield Vietnam;7.4;Mar 16, 2004 +84;Medieval: Total War - Viking Invasion;8.8;May 7, 2003 +84;Fallout 4;5.4;Nov 10, 2015 +84;Guild Wars Nightfall;8.7;Oct 26, 2006 +84;The Binding of Isaac;8.3;Sep 28, 2011 +84;Enemy Territory: Quake Wars;8.3;Oct 2, 2007 +84;Trine 2;8.4;Dec 7, 2011 +84;Rift;7.3;Mar 1, 2011 +84;The Wolf Among Us: Episode 5 - Cry Wolf;8.8;Jul 8, 2014 +84;Shift 2: Unleashed;6.1;Mar 29, 2011 +84;Sid Meier's Civilization IV: Warlords;8.2;Jul 24, 2006 +84;Battlefield 1942: The Road to Rome;7.9;Feb 2, 2003 +84;Poseidon;8.4;Jun 25, 2001 +84;F1 2010;6.6;Sep 22, 2010 +84;Shatter;7.4;Mar 15, 2010 +84;Darwinia;7.9;Jun 12, 2006 +84;Ultimate General: Gettysburg;8.0;Oct 16, 2014 +83;Final Fantasy XI: Treasures of Aht Urhgan;7.6;Apr 18, 2006 +83;MDK2;8.4;May 31, 2000 +83;Gunpoint;8.4;Jun 3, 2013 +83;Beyond Good & Evil;8.7;Nov 19, 2003 +83;Anno 2070;7.0;Nov 17, 2011 +83;SMITE;8.3;Mar 25, 2014 +83;Halo: Combat Evolved;7.4;Sep 30, 2003 +83;Grim Dawn;8.9;Feb 25, 2016 +83;Silent Storm;8.9;Jan 20, 2004 +83;Command & Conquer: Generals - Zero Hour;9.0;Sep 22, 2003 +83;Homeworld 2;8.3;Sep 16, 2003 +83;Galactic Civilizations;8.1;Mar 26, 2003 +83;EverQuest: The Shadows of Luclin;7.2;Dec 2, 2001 +83;Orcs Must Die!;8.1;Oct 11, 2011 +83;Life is Strange;8.6;Jan 19, 2016 +83;Fable: The Lost Chapters;8.7;Sep 20, 2005 +83;Unreal Tournament III;8.0;Nov 19, 2007 +83;The Blackwell Epiphany;7.6;Apr 24, 2014 +83;The Lord of the Rings Online: Siege of Mirkwood;7.1;Dec 1, 2009 +83;Out of the Park Baseball 10;8.3;Jun 2, 2009 +83;Tomb Raider: Anniversary;8.0;Jun 5, 2007 +83;Need for Speed: Shift;5.7;Sep 15, 2009 +83;Hearts of Iron II;8.6;Jan 4, 2005 +83;FIFA Soccer 11;7.6;Sep 28, 2010 +83;Project CARS;7.0;May 6, 2015 +83;FIFA Soccer 2003;6.8;Nov 2, 2002 +83;Icewind Dale II;8.3;Aug 26, 2002 +83;Age of Empires;8.8;Sep 30, 1997 +83;EverQuest II: Echoes of Faydwer;8.4;Nov 13, 2006 +83;EverQuest II;7.3;Nov 8, 2004 +83;Terraria;8.5;May 16, 2011 +83;Final Fantasy XIV Online: A Realm Reborn;6.7;Aug 27, 2013 +83;Card Hunter (2013);7.9;Sep 12, 2013 +83;Sam & Max: The Devil's Playhouse - Episode 2: The Tomb of Sammun-Mak;7.9;May 18, 2010 +83;This War of Mine;8.4;Nov 14, 2014 +83;Darksiders;7.7;Sep 23, 2010 +83;Tom Clancy's Rainbow Six 3: Raven Shield;8.9;Mar 19, 2003 +83;World of Outlaws: Sprint Cars;7.9;Feb 11, 2003 +83;Colin McRae Rally 2.0;8.4;Feb 14, 2001 +83;Combat Flight Simulator 2: WWII Pacific Theater;8.1;Oct 13, 2000 +83;Orcs Must Die! 2;7.9;Jul 30, 2012 +83;Prey;7.9;Jul 11, 2006 +83;Metal Gear Rising: Revengeance;7.9;Jan 9, 2014 +83;Starseed Pilgrim;6.3;Apr 16, 2013 +83;Age of Conan: Rise of the Godslayer;8.4;May 11, 2010 +83;Alan Wake;8.0;Feb 16, 2012 +83;Tiger Woods PGA Tour 2002;5.0;Feb 24, 2002 +83;Monaco: What's Yours Is Mine;7.7;Apr 24, 2013 +83;Transistor;8.3;May 20, 2014 +83;Helldivers;6.9;Dec 7, 2015 +83;Worldwide Soccer Manager 2009;8.1;Nov 18, 2008 +83;Call of Duty: World at War;7.5;Nov 10, 2008 +83;Torchlight;8.0;Jan 5, 2010 +83;Prison Architect;8.3;Oct 6, 2015 +83;Valdis Story: Abyssal City;8.1;Oct 30, 2013 +83;Crimson Skies;8.2;Sep 17, 2000 +83;RACE 07: Official WTCC Game;9.0;Oct 9, 2007 +83;SUPERHOT;7.6;Feb 25, 2016 +83;EverQuest II: Rise of Kunark;7.9;Nov 13, 2007 +83;Dark Age of Camelot: Catacombs;8.6;Dec 7, 2004 +83;Spore Creature Creator;8.1;Jun 17, 2008 +83;Colin McRae Rally 2005;7.0;Oct 28, 2004 +83;Tom Clancy's Splinter Cell: Conviction;5.2;Apr 27, 2010 +83;Tribes: Vengeance;7.6;Oct 12, 2004 +83;L.A. Noire: The Complete Edition;7.9;Nov 8, 2011 +83;GTR Evolution;8.2;Sep 2, 2008 +83;Life is Strange: Episode 5 - Polarized;8.4;Oct 20, 2015 +83;BROFORCE;8.0;Oct 15, 2015 +83;Independence War 2: Edge of Chaos;8.4;Aug 22, 2001 +83;Myst III: Exile;8.2;May 8, 2001 +83;Superbrothers: Sword & Sworcery EP;6.4;Apr 16, 2012 +83;Sid Meier's Civilization IV: Colonization;6.7;Sep 22, 2008 +83;Europa Universalis III;8.4;Jan 23, 2007 +83;F1 2011;7.2;Sep 20, 2011 +83;Prince of Persia: Warrior Within;8.4;Nov 30, 2004 +83;Danganronpa: Trigger Happy Havoc;7.6;Feb 18, 2016 +83;Counter-Strike: Global Offensive;7.8;Aug 21, 2012 +83;Outland;7.1;Sep 29, 2014 +83;MechWarrior 4: Mercenaries;8.6;Nov 7, 2002 +83;Metal Gear Solid;9.0;Sep 24, 2000 +82;Invisible, Inc.;8.0;May 12, 2015 +82;Dark Souls II: Crown of the Ivory King;7.8;Sep 29, 2014 +82;Red Faction: Guerrilla;7.5;Sep 15, 2009 +82;The Book of Unwritten Tales;8.2;Oct 28, 2011 +82;Capitalism II;9.0;Dec 16, 2001 +82;Rally Trophy;8.5;Nov 20, 2001 +82;Dawn of Discovery;8.8;Jun 17, 2009 +82;City of Villains;8.1;Oct 31, 2005 +82;Kentucky Route Zero - Act II;8.0;May 31, 2013 +82;Tom Clancy's Splinter Cell: Blacklist;7.4;Aug 20, 2013 +82;Act of War: Direct Action;8.5;Mar 15, 2005 +82;Sokobond;7.8;Aug 27, 2013 +82;Sam & Max Episode 105: Reality 2.0;8.4;Mar 29, 2007 +82;Bejeweled 3;8.0;Dec 7, 2010 +82;Dangerous Waters;8.8;Feb 22, 2005 +82;Tomb Raider: Legend;7.8;Apr 11, 2006 +82;Asheron's Call 2: Fallen Kings;8.8;Nov 20, 2002 +82;Gemini Rue;8.4;Feb 24, 2011 +82;Antichamber;8.2;Jan 31, 2013 +82;Neverwinter Nights 2;6.5;Oct 31, 2006 +82;Dragon Age: Origins - Awakening;7.7;Mar 16, 2010 +82;Door Kickers;8.2;Oct 20, 2014 +82;Hearthstone: Blackrock Mountain;6.4;Apr 2, 2015 +82;Rome: Total War Barbarian Invasion;8.4;Sep 27, 2005 +82;Hacknet;7.3;Aug 12, 2015 +82;Tales of Monkey Island Chapter 3: Lair of the Leviathan;7.8;Sep 29, 2009 +82;Neverwinter Nights 2: Mask of The Betrayer;8.8;Oct 9, 2007 +82;Sins of a Solar Empire: Rebellion;7.8;Jun 12, 2012 +82;Broken Sword: The Sleeping Dragon;7.6;Nov 17, 2003 +82;Age of Wonders: Shadow Magic;8.5;Jul 25, 2003 +82;Tom Clancy's Ghost Recon: Desert Siege;8.4;Mar 27, 2002 +82;Warlords Battlecry II;8.5;Mar 11, 2002 +82;Football Manager Live;2.9;Jan 23, 2009 +82;Marvel: Ultimate Alliance;8.3;Oct 24, 2006 +82;The Talos Principle: Road To Gehenna;7.6;Jul 23, 2015 +82;Lara Croft and the Guardian of Light;8.2;Sep 28, 2010 +82;Aquaria;8.3;Dec 7, 2007 +82;Need for Speed: Underground;8.3;Nov 17, 2003 +82;TrackMania Sunrise;8.5;May 6, 2005 +82;King's Quest Chapter 1: A Knight to Remember;7.2;Jul 28, 2015 +82;Dragon Age II;4.4;Mar 8, 2011 +82;Endless Legend;7.9;Apr 24, 2014 +82;Tom Clancy's Ghost Recon: Island Thunder;8.3;Sep 25, 2002 +82;S.T.A.L.K.E.R.: Shadow of Chernobyl;8.4;Mar 20, 2007 +82;Kero Blaster;6.9;May 11, 2014 +82;Monday Night Combat;7.3;Jan 24, 2011 +82;The Wolf Among Us: Episode 3 - A Crooked Mile;8.6;Apr 8, 2014 +82;Airborne Assault: Red Devils Over Arnhem;7.4;Jun 17, 2002 +82;Fallout Tactics: Brotherhood of Steel;7.9;Mar 14, 2001 +82;Need for Speed: Underground 2;8.5;Nov 9, 2004 +82;NHL Eastside Hockey Manager 2005;6.6;Oct 5, 2005 +82;Legend of Grimrock;8.1;Apr 11, 2012 +82;Dominions 3: The Awakening;8.1;Sep 29, 2006 +82;Bulletstorm;7.7;Feb 22, 2011 +82;Borderlands 2: Mr. Torgue's Campaign of Carnage;7.3;Nov 20, 2012 +82;Desktop Dungeons;8.2;Oct 17, 2010 +82;Fallout: New Vegas - Old World Blues;7.8;Jul 19, 2011 +82;Crusader Kings II;8.7;Feb 14, 2012 +82;MVP Baseball 2004;7.9;Mar 9, 2004 +82;Europa 1400: The Guild;8.6;Nov 18, 2002 +82;Battle Realms;8.6;Nov 7, 2001 +82;Warlords Battlecry;8.2;Jul 9, 2000 +82;Sam & Max Episode 201: Ice Station Santa;8.6;Nov 8, 2007 +82;Technobabylon;7.8;May 21, 2015 +82;World of Warcraft: Mists of Pandaria;4.8;Sep 25, 2012 +82;FIFA 15;4.2;Sep 23, 2014 +82;Recettear: An Item Shop's Tale;8.6;Sep 10, 2010 +82;ETHER One;6.9;Mar 25, 2014 +82;The Vanishing of Ethan Carter;8.1;Sep 25, 2014 +82;Flight Simulator X: Acceleration;7.3;Oct 23, 2007 +82;Blood;9.0;May 31, 1997 +82;Command & Conquer: Red Alert 3;6.8;Oct 28, 2008 +82;The Walking Dead: Episode 1 - A New Day;8.4;Apr 24, 2012 +82;Links 2003;6.8;Sep 16, 2002 +82;Earth & Beyond;7.1;Sep 2, 2002 +82;Syberia;8.5;Sep 1, 2002 +82;Virtual Pool 3;7.3;Nov 14, 2000 +82;The Sims: Livin' Large;6.6;Aug 27, 2000 +82;DCS: Black Shark;8.5;Apr 13, 2009 +82;King's Bounty: Armored Princess;8.7;Sep 10, 2010 +82;Age of Wonders III - Golden Realms;8.5;Sep 18, 2014 +82;Strong Bad's Cool Game for Attractive People Episode 5: 8-Bit Is Enough;7.5;Dec 15, 2008 +82;Prince of Persia;7.2;Dec 2, 2008 +82;Joint Operations: Typhoon Rising;8.7;Jun 15, 2004 +82;Xpand Rally;7.4;Apr 20, 2006 +82;Dark Souls II: Crown of the Sunken King;7.3;Jul 22, 2014 +82;Resident Evil HD Remaster;8.2;Jan 20, 2015 +82;Celtic Kings: Rage of War;8.5;Aug 21, 2002 +82;B-17 Flying Fortress: The Mighty 8th;7.3;Dec 13, 2000 +82;EverQuest: The Scars of Velious;7.8;Dec 4, 2000 +82;Metro: Last Light;8.6;May 14, 2013 +82;Rising Storm;8.5;May 30, 2013 +82;Lethal League;7.4;Aug 27, 2014 +82;Botanicula;8.3;Apr 19, 2012 +82;Pro Evolution Soccer 2015;5.8;Nov 13, 2014 +82;Bookworm Adventures Deluxe;7.9;Dec 20, 2006 +82;The Lord of the Rings: The Battle for Middle-Earth;8.6;Dec 6, 2004 +82;Hitman: Blood Money;8.8;May 30, 2006 +82;Need for Speed: Most Wanted;8.5;Nov 15, 2005 +82;OlliOlli2: Welcome to Olliwood;5.2;Aug 11, 2015 +82;WildStar;7.4;Jun 3, 2014 +82;Broken Age: Act 1;7.7;Jan 28, 2014 +82;Divinity II: The Dragon Knight Saga;8.2;Nov 5, 2010 +82;Out of the Park Baseball 9;7.4;Jun 1, 2008 +82;The Simpsons: Hit & Run;8.0;Nov 13, 2003 +82;America's Army;6.1;Aug 28, 2002 +82;Star Trek Bridge Commander;8.1;Feb 27, 2002 +82;The Last Express;8.9;Mar 31, 1997 +81;Quake 4;7.5;Oct 11, 2005 +81;Nidhogg;7.0;Jan 13, 2014 +81;Battlefield 4;6.0;Oct 29, 2013 +81;To the Moon;8.9;Sep 7, 2012 +81;The Sims 3: World Adventures;8.0;Nov 16, 2009 +81;Painkiller;8.0;Apr 12, 2004 +81;Airborne Assault: Highway to the Reich;6.1;Dec 10, 2003 +81;Nancy Drew: Danger on Deception Island;7.7;Oct 1, 2003 +81;Shadowrun: Hong Kong;7.7;Aug 20, 2015 +81;Supreme Commander: Forged Alliance;8.9;Nov 6, 2007 +81;Sunless Sea;7.4;Jul 1, 2014 +81;The Walking Dead: Season Two Episode 3 - In Harm's Way;8.3;May 13, 2014 +81;Marvel Heroes 2015;7.9;Jun 4, 2014 +81;Football Manager 2016;6.4;Nov 13, 2015 +81;VVVVVV;8.1;Jan 11, 2010 +81;Darksiders II;7.9;Aug 14, 2012 +81;Wolfenstein: The New Order;8.2;May 20, 2014 +81;Lone Survivor;7.2;Apr 23, 2012 +81;Alien: Isolation;8.4;Oct 6, 2014 +81;The Witcher;8.8;Oct 30, 2007 +81;Kentucky Route Zero - Act I;7.5;Jan 7, 2013 +81;Jade Empire: Special Edition;8.3;Feb 26, 2007 +81;SWAT 3: Elite Edition;8.4;Oct 6, 2000 +81;Asheron's Call;8.8;Oct 31, 1999 +81;Unravel;8.1;Feb 9, 2016 +81;Midnight Club II;8.0;Jun 30, 2003 +81;Chessmaster 10th Edition;7.4;Aug 12, 2004 +81;Age of Empires III;7.7;Oct 18, 2005 +81;Tales of Monkey Island Chapter 5: Rise of the Pirate God;8.4;Dec 8, 2009 +81;Castlevania: Lords of Shadow Ultimate Edition;7.3;Aug 27, 2013 +81;Strong Bad's Cool Game for Attractive People Episode 2: Strong Badia the Free;8.2;Sep 15, 2008 +81;The Cat Lady;8.7;Dec 4, 2013 +81;Vessel;7.9;Mar 1, 2012 +81;Metro 2033;8.1;Mar 16, 2010 +81;OutRun 2006: Coast 2 Coast;7.8;Jun 27, 2006 +81;Blur;7.3;May 25, 2010 +81;Empires: Dawn of the Modern World;8.2;Oct 21, 2003 +81;Chessmaster 9000;7.7;Aug 31, 2002 +81;Gothic;8.6;Nov 23, 2001 +81;Arcanum: Of Steamworks and Magick Obscura;8.9;Aug 22, 2001 +81;NASCAR Heat;8.6;Sep 27, 2000 +81;Company of Heroes 2: Ardennes Assault;6.1;Nov 17, 2014 +81;PlanetSide;7.3;May 20, 2003 +81;Tales From The Borderlands: Episode 3 - Catch A Ride;8.4;Jun 23, 2015 +81;The Walking Dead: Season Two Episode 2 - A House Divided;8.6;Mar 4, 2014 +81;Kingdoms of Amalur: Reckoning;6.6;Feb 7, 2012 +81;Sam & Max: The Devil's Playhouse - Episode 1: The Penal Zone;8.5;Apr 15, 2010 +81;Borderlands;7.8;Oct 26, 2009 +81;DG2: Defense Grid 2;6.7;Sep 23, 2014 +81;Napoleon: Total War;7.9;Feb 23, 2010 +81;Overlord;8.1;Jun 26, 2007 +81;Firewatch;7.2;Feb 9, 2016 +81;Victoria II: Heart of Darkness;8.7;Apr 16, 2013 +81;Waveform;7.6;Jan 25, 2013 +81;The Elder Scrolls IV: Knights of the Nine;7.5;Nov 21, 2006 +81;Red Orchestra: Ostfront 41-45;8.6;Mar 14, 2006 +81;Stronghold;8.9;Oct 21, 2001 +81;Strong Bad's Cool Game for Attractive People Episode 4: Dangeresque 3: The Criminal Projective;8.5;Nov 17, 2008 +81;Rochard;8.0;Nov 15, 2011 +81;Fallout 3: Broken Steel;7.3;May 5, 2009 +81;Tiger Woods PGA Tour 06;8.1;Sep 20, 2005 +81;RollerCoaster Tycoon 3;4.9;Oct 26, 2004 +81;Dragon's Dogma: Dark Arisen;8.3;Jan 15, 2016 +81;Guild Wars 2: Heart of Thorns;7.3;Oct 23, 2015 +81;AaaaaAAaaaAAAaaAAAAaAAAAA!!! - A Reckless Disregard for Gravity;7.2;Sep 3, 2009 +81;The Sims 2 University;7.8;Feb 28, 2005 +81;Far Cry 3: Blood Dragon;8.1;May 1, 2013 +81;Sid Meier's Civilization: Beyond Earth;5.5;Oct 24, 2014 +81;Disney's Toontown Online;8.7;Oct 6, 2005 +81;Combat Mission 3: Afrika Korps;8.4;Dec 3, 2003 +81;EverQuest: The Planes of Power;8.2;Oct 28, 2002 +81;Rails Across America;8.0;Sep 18, 2001 +81;Wasteland 2;7.3;Sep 19, 2014 +81;Jamestown: Legend of the Lost Colony;7.5;Jun 8, 2011 +81;Call of Duty: Black Ops;5.1;Nov 9, 2010 +81;Kohan II: Kings of War;7.9;Sep 20, 2004 +81;The Age of Decadence;7.9;Oct 15, 2015 +81;Samorost 3;8.3;Mar 24, 2016 +81;Order of Battle: Pacific;6.4;Apr 30, 2015 +81;Empire Earth;8.3;Nov 12, 2001 +81;Star Trek: Deep Space Nine: The Fallen;7.9;Nov 15, 2000 +81;Sam & Max Episode 101: Culture Shock;8.7;Oct 18, 2006 +81;Mirror's Edge (2008);8.1;Jan 12, 2009 +81;TrackMania 2 Canyon;7.7;Sep 14, 2011 +81;Sleeping Dogs;8.2;Aug 14, 2012 +81;Star Wars Jedi Knight: Jedi Academy;8.6;Sep 17, 2003 +81;Mortal Kombat Komplete Edition;8.7;Aug 6, 2013 +81;Shadowrun: Dragonfall;8.3;Feb 27, 2014 +81;Eets;6.4;Mar 29, 2006 +81;World of Warships;6.6;Sep 17, 2015 +81;TOCA Race Driver 2: The Ultimate Racing Simulator;8.0;Apr 15, 2004 +81;Wargame: European Escalation;8.2;Feb 22, 2012 +81;Dungeon Defenders;7.3;Oct 18, 2011 +81;Sam & Max: The Devil's Playhouse - Episode 5: The City That Dares Not Sleep;7.9;Aug 30, 2010 +81;Age of Empires III: The Asian Dynasties;8.5;Oct 23, 2007 +81;Defense Grid: The Awakening;8.8;Jul 29, 2009 +81;Codename: Panzers, Phase One;8.8;Sep 30, 2004 +81;FIFA 16;4.4;Sep 22, 2015 +81;Europa Universalis IV: Conquest of Paradise;7.7;Jan 14, 2014 +81;Ghost Master;8.0;Aug 26, 2003 +81;Divine Divinity;8.5;Sep 22, 2002 +80;The Book of Unwritten Tales 2;7.7;Feb 20, 2015 +80;Galactic Civilizations III;6.6;May 14, 2015 +80;Lovers in a Dangerous Spacetime;7.2;Sep 9, 2015 +80;Age of Conan: Hyborian Adventures;7.3;May 20, 2008 +80;Company of Heroes 2: The Western Front Armies;6.8;Jun 23, 2014 +80;Sid Meier's Civilization V: Gods & Kings;7.7;Jun 19, 2012 +80;Age of Empires III: The WarChiefs;8.1;Oct 17, 2006 +80;Metal Gear Solid V: Ground Zeroes;7.7;Dec 18, 2014 +80;Trials Fusion;6.8;Apr 16, 2014 +80;Syberia II;8.3;Mar 30, 2004 +80;Tom Clancy's Ghost Recon;8.4;Nov 13, 2001 +80;Conquest: Frontier Wars;8.3;Aug 14, 2001 +80;Gabriel Knight 3: Blood of the Sacred, Blood of the Damned;8.8;Oct 5, 1999 +80;Westerado: Double Barreled;7.4;Apr 16, 2015 +80;Anomaly: Warzone Earth;7.3;Apr 8, 2011 +80;Volume;7.2;Aug 18, 2015 +80;GRID 2;5.7;May 27, 2013 +80;The Banner Saga;7.9;Jan 14, 2014 +80;Sam & Max Episode 202: Moai Better Blues;7.7;Jan 10, 2008 +80;Age of Wonders III - Eternal Lords;8.4;Apr 14, 2015 +80;Pro Evolution Soccer 2013;6.8;Sep 25, 2012 +80;Osmos;7.5;Aug 18, 2009 +80;Dungeon Siege II;7.9;Aug 16, 2005 +80;Dead Island;6.8;Sep 6, 2011 +80;Sam & Max Episode 104: Abe Lincoln Must Die!;7.8;Feb 22, 2007 +80;Deus Ex: Invisible War;6.3;Dec 2, 2003 +80;The Sims: Makin' Magic;8.6;Oct 28, 2003 +80;Tom Clancy's Splinter Cell: Double Agent;5.7;Nov 7, 2006 +80;Medal of Honor: Pacific Assault;7.4;Nov 4, 2004 +80;Assassin's Creed: Revelations;7.4;Nov 29, 2011 +80;Grandia II Anniversary Edition;7.6;Aug 24, 2015 +80;Assassin's Creed III;6.2;Nov 20, 2012 +80;Madden NFL 07;7.3;Aug 22, 2006 +80;Outlast;8.4;Sep 4, 2013 +80;The Chronicles of Riddick: Assault on Dark Athena;8.0;Apr 7, 2009 +80;Hearts of Iron II: Doomsday;8.8;Apr 7, 2006 +80;Dishonored: The Brigmore Witches;8.5;Aug 13, 2013 +80;Codename: Panzers, Phase Two;8.0;Jul 25, 2005 +80;Full Spectrum Warrior;7.0;Sep 21, 2004 +80;AI War: Fleet Command;8.4;May 14, 2009 +80;Freedom Fighters;8.3;Oct 1, 2003 +80;NBA Live 2003;8.3;Nov 14, 2002 +80;The Elder Scrolls III: Tribunal;8.2;Nov 6, 2002 +80;Elite: Dangerous;6.4;Dec 16, 2014 +80;Pure;6.9;Sep 16, 2008 +80;Goodbye Deponia;8.1;Oct 17, 2013 +80;SWAT 4: The Stetchkov Syndicate;8.3;Feb 28, 2006 +80;Dropsy;7.3;Sep 10, 2015 +80;Company of Heroes 2: The British Forces;5.9;Sep 3, 2015 +80;Ground Control II: Operation Exodus;8.8;Jun 23, 2004 +80;NBA Live 2004;9.0;Nov 11, 2003 +80;Brutal Legend;7.8;Feb 26, 2013 +80;Tomb Raider: Underworld;7.6;Nov 18, 2008 +80;Oxenfree;7.7;Jan 15, 2016 +80;Titan Quest: Immortal Throne;8.7;Mar 5, 2007 +80;La-Mulana (Remake);7.1;Jul 13, 2012 +80;X-Men Legends II: Rise of Apocalypse;8.4;Sep 20, 2005 +80;SpellForce 2: Shadow Wars;7.6;May 5, 2006 +80;Fritz 8 Deluxe;7.8;Dec 1, 2004 +80;Trine;8.2;Sep 11, 2009 +80;Dishonored: The Knife of Dunwall;8.1;Apr 16, 2013 +80;Company of Heroes 2;2.0;Jun 25, 2013 +80;Natural Selection 2;8.4;Oct 30, 2012 +80;Read Only Memories;7.2;Oct 5, 2015 +80;The Sims 3: Into the Future;5.4;Oct 22, 2013 +80;Borderlands 2: Captain Scarlett and Her Pirate's Booty;7.4;Oct 16, 2012 +80;FATE;8.3;Sep 19, 2006 +80;2002 FIFA World Cup;7.9;Apr 30, 2002 +80;Asheron's Call Dark Majesty;8.1;Nov 4, 2001 +80;The Bug Butcher;8.2;Jan 19, 2016 +80;Dragonshard;7.4;Oct 2, 2005 +80;Icewind Dale: Enhanced Edition;7.6;Oct 30, 2014 +80;The Magic Circle;7.3;Jul 9, 2015 +80;Far Cry 4;6.6;Nov 18, 2014 +80;Super Time Force Ultra;6.6;Aug 25, 2014 +80;Day of Defeat: Source;9.1;Feb 7, 2006 +80;Battlefield 2142;6.8;Oct 17, 2006 +80;World of Tanks;3.8;Sep 6, 2011 +80;Vampire: The Masquerade - Bloodlines;9.0;Nov 16, 2004 +80;Dark Souls II: Scholar of the First Sin;7.4;Apr 1, 2015 +80;Warhammer 40,000: Dawn of War II - Retribution;7.8;Mar 1, 2011 +80;Panzer Corps;7.5;Jul 11, 2011 +80;Men of War;8.1;Mar 16, 2009 +80;Fallen Enchantress: Legendary Heroes;7.7;May 22, 2013 +80;The Walking Dead: Episode 4 - Around Every Corner;8.5;Oct 10, 2012 +80;Tales of Monkey Island Chapter 4: The Trial and Execution of Guybrush Threepwood;8.4;Oct 30, 2009 +80;Penny Arcade Adventures: Episode Two;7.7;Nov 7, 2008 +80;Time Commando;8.9;Jul 31, 1996 +80;Sins of a Solar Empire: Entrenchment;8.1;Feb 25, 2009 +80;F1 2012;6.9;Sep 18, 2012 +80;Luftrausers;6.8;Mar 18, 2014 +80;Naruto Shippuden: Ultimate Ninja Storm 3 Full Burst;7.9;Oct 24, 2013 +80;Stealth Bastard Deluxe;8.3;Nov 28, 2012 +80;Tom Clancy's Ghost Recon Advanced Warfighter;7.7;May 3, 2006 +80;LEGO Batman: The Videogame;7.9;Sep 23, 2008 +80;Stacking;7.9;Mar 6, 2012 +80;Age of Wonders III;7.8;Mar 31, 2014 +80;Life is Strange: Episode 3 - Chaos Theory;9.0;May 19, 2015 +80;The Legend of Heroes: Trails in the Sky SC;8.4;Oct 29, 2015 +80;Proteus;5.6;Jan 30, 2013 +80;Robin Hood: The Legend of Sherwood;8.3;Nov 14, 2002 +80;Soldier of Fortune II: Double Helix;7.3;May 20, 2002 +80;RollerCoaster Tycoon: Loopy Landscapes;9.0;Sep 30, 2000 +80;Toki Tori;7.9;Jan 28, 2010 +80;RoboBlitz;8.3;Nov 7, 2006 +80;Wargame: AirLand Battle;8.1;May 29, 2013 +80;Football Manager 2015;6.0;Nov 7, 2014 +80;The Suffering;8.2;Jun 8, 2004 +80;Gish;7.2;Sep 17, 2004 +80;Axiom Verge;8.2;May 14, 2015 +80;Driver: San Francisco;7.0;Sep 27, 2011 +80;The Corporate Machine;7.5;Jul 14, 2001 +80;Dungeons & Dragons: Chronicles of Mystara;6.7;Jun 18, 2013 +80;Disciples II: Rise of the Elves;8.1;Nov 25, 2003 +80;MechCommander 2;8.3;Jul 18, 2001 +80;Waterloo: Napoleon's Last Battle;7.5;Mar 25, 2001 +80;Chessmaster 8000;6.4;Nov 14, 2000 +80;Circle of Blood;8.6;Sep 30, 1996 +80;BioShock Infinite: Burial at Sea - Episode Two;8.5;Mar 25, 2014 +80;S.T.A.L.K.E.R.: Call of Pripyat;8.7;Feb 2, 2010 +80;The Walking Dead: Season Two - A Telltale Games Series;8.3;Dec 17, 2013 +80;FLY'N;8.2;Nov 9, 2012 +80;Total War: Attila;7.3;Feb 17, 2015 +80;The Wolf Among Us;8.8;Oct 11, 2013 +80;Nancy Drew: Secret of the Old Clock;8.1;Jul 26, 2005 +80;ArcheAge;3.6;Sep 16, 2014 +80;CAPSIZED;7.1;Apr 29, 2011 +80;Microsoft Flight Simulator X;7.6;Oct 17, 2006 +80;Myst V: End of Ages;7.8;Sep 19, 2005 +80;Railroad Tycoon 3;7.7;Oct 23, 2003 +80;Hostile Waters: Antaeus Rising;8.1;Jun 13, 2001 +79;Dustforce;7.9;Jan 17, 2012 +79;Empire Earth II;7.0;Apr 26, 2005 +79;Fallout 3: Point Lookout;7.8;Jun 23, 2009 +79;Test Drive Unlimited;8.1;Mar 20, 2007 +79;Dying Light: The Following;8.3;Feb 9, 2016 +79;The Path;7.0;Mar 18, 2009 +79;Dungeon of the Endless;8.0;Oct 27, 2014 +79;Revenge of the Titans;7.6;May 24, 2010 +79;Bookworm Adventures: Volume 2;7.6;Jul 30, 2009 +79;F1 2001;7.5;Oct 14, 2001 +79;Brothers in Arms: Hell's Highway;7.9;Oct 7, 2008 +79;Star Wars: Empire at War;8.4;Feb 15, 2006 +79;Dariusburst: Chronicle Saviours;8.3;Dec 3, 2015 +79;Europa Universalis: Rome - Vae Victis;8.6;Nov 19, 2008 +79;Silent Hunter: Wolves of the Pacific;6.5;Mar 20, 2007 +79;Pillars of Eternity: The White March - Part 2;6.7;Feb 16, 2016 +79;1701 A.D.;8.3;Nov 6, 2006 +79;Stasis;7.6;Aug 31, 2015 +79;Pro Evolution Soccer 2009;7.4;Nov 12, 2008 +79;Return to Mysterious Island;8.5;Nov 2, 2004 +79;Jotun;7.0;Sep 29, 2015 +79;Else Heart.Break();7.5;Sep 24, 2015 +79;Kohan: Ahriman's Gift;8.7;Nov 5, 2001 +79;Emperor: Battle for Dune;8.3;Jun 12, 2001 +79;Trackmania Turbo;6.9;Mar 24, 2016 +79;Cart Life;5.9;Jul 29, 2010 +79;Sword of the Stars: Born of Blood;8.1;Jun 5, 2007 +79;Worms Reloaded;6.7;Aug 26, 2010 +79;Warhammer: End Times - Vermintide;7.9;Oct 23, 2015 +79;Euro Truck Simulator 2;8.7;Jan 16, 2013 +79;Tropico 3;8.2;Oct 20, 2009 +79;Cities: Skylines - After Dark;7.9;Sep 24, 2015 +79;Runaway: A Twist of Fate;8.5;Apr 21, 2011 +79;Tales of Monkey Island Chapter 1: Launch of the Screaming Narwhal;8.2;Jul 7, 2009 +79;Bloodline Champions;8.0;Jan 13, 2011 +79;The Sims: Superstar;8.2;May 12, 2003 +79;NBA Live 2005;8.5;Oct 26, 2004 +79;Valiant Hearts: The Great War;8.6;Jun 25, 2014 +79;Payday 2;3.4;Aug 13, 2013 +79;Dungeons of Dredmor;7.8;Jul 13, 2011 +79;Geometry Wars 3: Dimensions;6.2;Nov 25, 2014 +79;Assassin's Creed: Director's Cut Edition;7.5;Apr 8, 2008 +79;Puzzle Dimension;7.6;Jun 21, 2010 +79;Split/Second;8.2;May 18, 2010 +79;Sang-Froid: Tales of Werewolves;7.9;Apr 5, 2013 +79;The Incredible Adventures of Van Helsing: Final Cut;7.2;Oct 7, 2015 +79;Hitman: Absolution;7.0;Nov 19, 2012 +79;Call of Juarez: Gunslinger;8.2;May 22, 2013 +79;Rome: Total War Alexander;7.6;Jun 19, 2006 +79;Strong Bad's Cool Game for Attractive People Episode 3: Baddest of the Bands;8.1;Oct 27, 2008 +79;Sam & Max Episode 102: Situation: Comedy;7.9;Dec 20, 2006 +79;Tropico 3: Absolute Power;7.7;May 17, 2010 +79;Sam & Max Episode 106: Bright Side of the Moon;7.3;Apr 26, 2007 +79;Day of Defeat;9.3;May 6, 2003 +79;Space Empires: IV;8.3;Nov 6, 2000 +79;Resident Evil 4: Ultimate HD Edition;7.7;Feb 27, 2014 +79;Sam & Max Episode 203: Night of the Raving Dead;8.2;Feb 12, 2008 +79;FlatOut: Ultimate Carnage;7.6;Sep 2, 2008 +79;Guitar Hero III: Legends of Rock;7.2;Nov 13, 2007 +79;Sid Meier's Civilization: Beyond Earth - Rising Tide;5.9;Oct 9, 2015 +79;Memoria;8.5;Aug 29, 2013 +79;The Last Door;7.8;May 20, 2014 +79;Shadowgrounds Survivor;7.8;Dec 6, 2007 +79;Gothic II;8.8;Oct 28, 2003 +79;Port Royale;8.2;Jun 4, 2003 +79;Deadly Dozen: Pacific Theater;7.9;Oct 31, 2002 +79;Shattered Galaxy;8.3;Aug 21, 2001 +79;Close Combat: Invasion: Normandy;8.2;Oct 10, 2000 +79;King's Bounty: The Legend;8.6;Sep 23, 2008 +79;Rage;5.1;Oct 4, 2011 +79;The Misadventures of P.B. Winterbottom;8.3;Apr 20, 2010 +79;Uru: Ages Beyond Myst;7.4;Nov 11, 2003 +79;Guild Wars: Eye of the North;8.6;Aug 28, 2007 +79;Tales From The Borderlands: Episode 4 - Escape Plan Bravo;8.4;Aug 18, 2015 +79;EverQuest: Lost Dungeons of Norrath;7.0;Sep 8, 2003 +79;Battlefield 1942: Secret Weapons of WWII;8.5;Sep 4, 2003 +79;The Sims: Unleashed;8.0;Sep 23, 2002 +79;Race the Sun;7.5;Aug 19, 2013 +79;The Sims 3: Pets;6.1;Oct 18, 2011 +79;Prototype;7.9;Jun 10, 2009 +79;Stick it to the Man!;7.2;Dec 13, 2013 +79;Street Fighter X Tekken;6.4;May 11, 2012 +79;Frozen Cortex;6.5;Feb 19, 2015 +79;Free Realms;6.4;Apr 29, 2009 +79;Homeworld: Deserts of Kharak;8.0;Jan 20, 2016 +79;Don't Starve;8.3;Apr 23, 2013 +79;Assault Android Cactus;7.0;Sep 23, 2015 +79;Trainz;7.2;Feb 10, 2002 +79;King Arthur: The Role-Playing Wargame;7.9;Nov 24, 2009 +79;Chivalry: Medieval Warfare;7.8;Oct 16, 2012 +79;Overlord II;8.1;Jun 23, 2009 +79;F.E.A.R. 2: Project Origin;7.8;Feb 10, 2009 +79;Tom Clancy's Rainbow Six Siege;6.9;Dec 1, 2015 +79;The Settlers 7: Paths to a Kingdom;5.2;Mar 23, 2010 +79;RollerCoaster Tycoon 3: Soaked!;2.9;Jun 23, 2005 +79;Dark Souls II: Crown of the Old Iron King;7.6;Aug 26, 2014 +79;TrackMania 2 Valley;8.3;Jul 4, 2013 +79;State of Decay;6.8;Nov 5, 2013 +79;LEGO Harry Potter: Years 1-4;7.8;Jun 29, 2010 +79;Rift: Storm Legion;7.8;Nov 13, 2012 +79;Crayon Physics Deluxe;7.6;Jan 7, 2009 +79;Nancy Drew: Legend of the Crystal Skull;8.5;Oct 8, 2007 +79;EverQuest II: Desert of Flames;7.8;Sep 12, 2005 +79;SimCity 4: Rush Hour;8.6;Sep 22, 2003 +79;Uncommon Valor: Campaign for the South Pacific;7.6;Dec 2, 2002 +79;Global Operations;8.3;Mar 25, 2002 +78;Apotheon;7.8;Feb 3, 2015 +78;Need for Speed: Most Wanted - A Criterion Game;4.4;Oct 30, 2012 +78;Star Wars: Battlefront II;8.8;Oct 31, 2005 +78;The Walking Dead: Season Two Episode 1 - All That Remains;8.5;Dec 17, 2013 +78;The Journey Down: Chapter Two;7.1;Aug 25, 2014 +78;Star Trek: Elite Force II;7.6;Jun 25, 2003 +78;Zuma's Revenge!;7.9;Sep 15, 2009 +78;Baldur's Gate: Enhanced Edition;7.0;Nov 28, 2012 +78;Doom 3: Resurrection of Evil;6.0;Apr 4, 2005 +78;LEGO Indiana Jones: The Original Adventures;7.7;Jun 3, 2008 +78;NASCAR Thunder 2004;7.5;Sep 16, 2003 +78;Transformers: Fall of Cybertron;7.8;Aug 21, 2012 +78;FIFA Soccer 06;6.7;Oct 4, 2005 +78;DeadCore;6.8;Oct 17, 2014 +78;The Walking Dead: Season Two Episode 5 - No Going Back;8.5;Aug 26, 2014 \ No newline at end of file diff --git a/_005/readme.md b/_005/readme.md new file mode 100644 index 0000000..b0892d6 --- /dev/null +++ b/_005/readme.md @@ -0,0 +1,32 @@ +# Race-Condition finden und beheben +## Lernziel + + + +In einem gegebenen Programm Race-Conditions finden und durch den Einsatz von kritischen Abschnitten beheben. + +## Aufgabe + +Gehen Sie in das Paket [pr2.threads.race_condition](../sources/src/main/java/pr2/threads/race_condition/). + +In dieser Aufgabe haben Sie ein defektes Programm vor sich, das aufgrund von Race-Conditions nicht richtig funktionieren kann. + +Schauen Sie sich den Quelltext des Programms genau an und versuchen Sie die Funktionsweise zu verstehen. Lassen Sie das Programm laufen und betrachten Sie die Fehlermeldungen und Ausgaben. Mit großer Wahrscheinlichkeit wird das Programm abstürzen. Wenn nicht, starten Sie es mehrmals, bis ein Fehler auftritt. + +Versuchen Sie die Ursache des Fehlers zu verstehen und überlegen Sie sich, wo genau die Race-Condition vorliegt. Wahrscheinlich wird der erste Fehler aus der Klasse `ArrayList` stammen. Dies ist aber nicht die einzige Race-Condition im Programm, es gibt noch eine zweite. + +Beheben Sie die Race-Condition durch die Verwendung von kritischen Abschnitten und lassen Sie das Programm danach erneut mehrfach laufen. Wenn bei keinem der Durchläufe ein Fehler auftritt, gilt die Aufgabe als gelöst. + + + \ No newline at end of file diff --git a/_006/games.txt b/_006/games.txt new file mode 100644 index 0000000..3390355 --- /dev/null +++ b/_006/games.txt @@ -0,0 +1,994 @@ +96;Half-Life 2;9.2;Nov 16, 2004 +96;Grand Theft Auto V;7.8;Apr 14, 2015 +96;The Orange Box;9.3;Oct 10, 2007 +96;Half-Life;9.1;Oct 31, 1998 +96;BioShock;8.4;Aug 21, 2007 +95;Baldur's Gate II: Shadows of Amn;9.2;Sep 24, 2000 +95;Portal 2;8.8;Apr 19, 2011 +94;The Elder Scrolls V: Skyrim;8.1;Nov 11, 2011 +94;Mass Effect 2;8.7;Jan 26, 2010 +94;Grand Theft Auto: Vice City;8.8;May 12, 2003 +94;Civilization II;9.0;Feb 29, 1996 +94;Quake;8.8;Jun 22, 1996 +94;BioShock Infinite;8.5;Mar 26, 2013 +94;The Elder Scrolls IV: Oblivion;8.0;Mar 20, 2006 +94;Grim Fandango;9.1;Sep 30, 1998 +94;Diablo;8.7;Nov 30, 1996 +94;Sid Meier's Civilization IV;8.2;Oct 25, 2005 +93;The Witcher 3: Wild Hunt;9.1;May 19, 2015 +93;Company of Heroes;8.8;Sep 13, 2006 +93;Unreal Tournament 2004;8.9;Mar 16, 2004 +93;Starcraft II: Wings of Liberty;8.2;Jul 27, 2010 +93;Minecraft;7.4;May 10, 2009 +93;Grand Theft Auto III;8.4;May 20, 2002 +93;Homeworld;8.9;Aug 31, 1999 +93;Star Wars: Knights of the Old Republic;9.0;Nov 18, 2003 +93;World of Warcraft;7.2;Nov 23, 2004 +93;Grand Theft Auto: San Andreas;8.8;Jun 7, 2005 +92;Call of Duty 4: Modern Warfare;8.5;Nov 5, 2007 +92;Warcraft III: Reign of Chaos;9.1;Jul 3, 2002 +92;The Sims;7.9;Jan 31, 2000 +92;Sid Meier's Gettysburg!;7.7;Sep 30, 1997 +92;World Soccer Winning Eleven 7 International;7.9;Apr 9, 2004 +92;Team Fortress 2;9.2;Apr 8, 2008 +92;System Shock 2;9.1;Aug 11, 1999 +92;Tom Clancy's Splinter Cell: Chaos Theory;8.8;Mar 28, 2005 +92;Undertale;8.2;Sep 15, 2015 +92;Rome: Total War;9.1;Sep 22, 2004 +92;Thief: The Dark Project;9.1;Nov 30, 1998 +92;Age of Empires II: The Age of Kings;9.0;Sep 30, 1999 +92;Unreal Tournament (1999);9.1;Nov 30, 1999 +92;Sid Meier's Alpha Centauri;9.1;Feb 12, 1999 +92;Galactic Civilizations II: Twilight of the Arnor;8.4;Apr 30, 2008 +92;Tiger Woods PGA Tour 2003;6.0;Oct 31, 2002 +91;Dishonored;8.4;Oct 9, 2012 +91;Medal of Honor: Allied Assault;8.6;Jan 20, 2002 +91;Myth: The Fallen Lords;8.8;Oct 31, 1997 +91;World of Warcraft: Wrath of the Lich King;7.4;Nov 13, 2008 +91;F1 Challenge '99-'02;8.3;Jun 24, 2003 +91;Baldur's Gate;9.0;Nov 30, 1998 +91;IL-2 Sturmovik;8.7;Nov 18, 2001 +91;FreeSpace 2;8.8;Sep 30, 1999 +91;Metal Gear Solid V: The Phantom Pain;7.7;Sep 1, 2015 +91;Tom Clancy's Splinter Cell;8.6;Feb 19, 2003 +91;Crysis;8.0;Nov 13, 2007 +91;World of Warcraft: The Burning Crusade;7.9;Jan 16, 2007 +91;Tiger Woods PGA Tour 2005;4.6;Sep 20, 2004 +91;The Longest Journey;8.9;Nov 16, 2000 +91;Tony Hawk's Pro Skater 2;8.5;Oct 31, 2000 +91;Star Wars Jedi Knight: Dark Forces II;8.5;Sep 30, 1997 +91;Batman: Arkham Asylum;8.7;Sep 15, 2009 +91;Galactic Civilizations II: Dark Avatar;8.2;Feb 14, 2007 +91;The Operative: No One Lives Forever;8.9;Nov 9, 2000 +91;Battlefield 2;8.4;Jun 21, 2005 +91;Street Fighter IV;8.0;Jul 1, 2009 +91;Fallout 3;7.9;Oct 28, 2008 +91;Batman: Arkham City;8.6;Nov 22, 2011 +91;Fez;6.5;May 1, 2013 +91;Planescape: Torment;9.3;Nov 30, 1999 +91;Neverwinter Nights;8.1;Jun 16, 2002 +91;No One Lives Forever 2: A Spy in H.A.R.M.'s Way;8.7;Sep 30, 2002 +91;Dragon Age: Origins;8.6;Nov 3, 2009 +91;Mark of the Ninja;8.0;Oct 16, 2012 +91;Dark Souls II;7.1;Apr 25, 2014 +91;Call of Duty;8.5;Oct 29, 2003 +91;Madden NFL 2004;8.2;Aug 12, 2003 +90;The Sims 2;8.8;Sep 14, 2004 +90;World of Warcraft: Cataclysm;5.5;Dec 7, 2010 +90;World of Goo;8.5;Oct 21, 2008 +90;Spelunky;7.2;Aug 8, 2013 +90;Black & White;7.6;Mar 26, 2001 +90;Portal;9.3;Apr 8, 2008 +90;NHL 2001;6.9;Sep 28, 2000 +90;Tony Hawk's Pro Skater 3;8.6;Mar 28, 2002 +90;Deus Ex;9.3;Jun 26, 2000 +90;Half-Life 2: Episode Two;9.2;Oct 10, 2007 +90;Braid;8.6;Jan 26, 2010 +90;The Chronicles of Riddick: Escape From Butcher Bay - Developer's Cut;8.7;Dec 8, 2004 +90;Sid Meier's Civilization III;8.4;Oct 30, 2001 +90;Silent Hunter III;7.8;Mar 15, 2005 +90;Sid Meier's Civilization V;7.8;Sep 21, 2010 +90;Falcon 4.0: Allied Force;8.6;Jun 28, 2005 +90;Deus Ex: Human Revolution;8.5;Aug 23, 2011 +90;Dark Souls III;8.2;Apr 12, 2016 +90;Flight Simulator 2002;8.4;Oct 19, 2001 +90;Brothers: A Tale of Two Sons;8.5;Sep 3, 2013 +90;Dota 2;6.2;Jul 9, 2013 +90;Guild Wars 2;7.9;Aug 28, 2012 +90;Freedom Force;8.0;Mar 24, 2002 +90;GTR 2;8.7;Sep 29, 2006 +90;Grand Theft Auto IV;6.5;Dec 2, 2008 +90;Total War: Shogun 2;8.3;Mar 15, 2011 +90;Empire: Total War;6.9;Mar 3, 2009 +90;Command & Conquer: Red Alert;8.9;Oct 31, 1996 +89;Star Wars Jedi Knight II: Jedi Outcast;8.6;Mar 26, 2002 +89;The Walking Dead: A Telltale Games Series;8.7;Dec 11, 2012 +89;Age of Mythology;8.9;Nov 1, 2002 +89;Sacrifice;8.8;Nov 5, 2000 +89;The Witcher 3: Wild Hunt - Hearts of Stone;8.4;Oct 13, 2015 +89;Pillars of Eternity;8.3;Mar 26, 2015 +89;The Elder Scrolls III: Morrowind;9.0;May 1, 2002 +89;Rocksmith 2014 Edition;7.9;Oct 22, 2013 +89;Fallout;8.9;Sep 30, 1997 +89;World Soccer Winning Eleven 9;8.4;Apr 28, 2006 +89;Worldwide Soccer Manager 2005;8.7;Dec 7, 2004 +89;Left 4 Dead;9.2;Nov 18, 2008 +89;Left 4 Dead 2;8.5;Nov 17, 2009 +89;NASCAR Racing 2002 Season;5.8;Feb 14, 2002 +89;Mass Effect;8.6;May 28, 2008 +89;Combat Mission: Barbarossa to Berlin;8.3;Oct 29, 2002 +89;Homeworld: Cataclysm;8.9;Sep 7, 2000 +89;The Walking Dead: Episode 5 - No Time Left;8.9;Nov 21, 2012 +89;Guild Wars;8.4;Apr 26, 2005 +89;Borderlands 2;8.2;Sep 18, 2012 +89;Max Payne;9.1;Jul 23, 2001 +89;Out of the Park Baseball 15;7.2;Apr 21, 2014 +89;World in Conflict;8.1;Sep 18, 2007 +89;NASCAR Racing 4;8.2;Feb 6, 2001 +89;Duke Nukem 3D;8.8;Jan 31, 1996 +89;Far Cry;8.0;Mar 23, 2004 +89;FIFA Soccer 12;7.1;Sep 27, 2011 +89;XCOM: Enemy Unknown;8.2;Oct 9, 2012 +89;Mass Effect 3;5.4;Mar 6, 2012 +89;Rise of Nations;9.0;May 20, 2003 +89;NASCAR Racing 2003 Season;8.6;Feb 14, 2003 +89;Descent 3;8.3;Jun 14, 2000 +89;The Curse of Monkey Island;9.1;Oct 31, 1997 +89;Battlefield 3;7.5;Oct 25, 2011 +89;Battlefield 1942;8.6;Sep 10, 2002 +89;Madden NFL 2003;8.4;Aug 12, 2002 +89;DiRT 2;8.3;Dec 10, 2009 +89;Stardew Valley;8.5;Feb 26, 2016 +89;Prince of Persia: The Sands of Time;8.6;Nov 30, 2003 +89;Railroad Tycoon II;8.4;Oct 31, 1998 +88;Microsoft Flight Simulator 2004: A Century of Flight;8.2;Jul 29, 2003 +88;Medieval: Total War;8.8;Aug 19, 2002 +88;Mafia;9.1;Aug 27, 2002 +88;LIMBO;8.1;Aug 2, 2011 +88;Nuclear Throne;7.4;Dec 5, 2015 +88;Crusader Kings II: The Old Gods;8.8;May 28, 2013 +88;Assassin's Creed: Brotherhood;8.2;Mar 22, 2011 +88;Superbike 2001;6.5;Oct 9, 2000 +88;F.E.A.R.;8.3;Oct 17, 2005 +88;Kerbal Space Program;8.1;Apr 27, 2015 +88;Tribes 2;8.5;Mar 28, 2001 +88;Age of Empires II: The Conquerors Expansion;9.0;Aug 24, 2000 +88;Tiger Woods PGA Tour 2004;8.8;Sep 22, 2003 +88;Warcraft III: The Frozen Throne;9.0;Jul 1, 2003 +88;Starcraft;9.1;Apr 1, 1998 +88;Far Cry 3;8.2;Dec 4, 2012 +88;XCOM 2;7.0;Feb 5, 2016 +88;World Soccer Winning Eleven 8 International;8.5;Feb 16, 2005 +88;Torchlight II;8.6;Sep 20, 2012 +88;Myth II: Soulblighter;9.0;Nov 30, 1998 +88;Return to Castle Wolfenstein;8.7;Nov 19, 2001 +88;Shogo: Mobile Armor Division;8.9;Sep 30, 1998 +88;Thirty Flights of Loving;5.0;Aug 20, 2012 +88;Hearthstone: Heroes of Warcraft;6.3;Mar 11, 2014 +88;Medieval II: Total War;8.9;Nov 13, 2006 +88;F1 2002;7.6;Jun 13, 2002 +88;The Stanley Parable;8.0;Oct 17, 2013 +88;BioShock 2;8.0;Feb 9, 2010 +88;Counter-Strike: Source;8.9;Sep 26, 2005 +88;Starcraft II: Legacy of the Void;8.3;Nov 10, 2015 +88;Diablo III;4.0;May 15, 2012 +88;Rise of Nations: Thrones & Patriots;8.8;Apr 27, 2004 +88;Sid Meier's Pirates!;8.3;Nov 22, 2004 +88;EVE Online: Special Edition;7.8;Mar 10, 2009 +88;Guacamelee! Gold Edition;7.3;Aug 8, 2013 +88;Armadillo Run;8.2;Apr 22, 2006 +88;Dark Age of Camelot;8.9;Sep 1, 2001 +88;Baldur's Gate II: Throne of Bhaal;8.9;Jun 21, 2001 +88;Counter-Strike;9.3;Nov 8, 2000 +88;Tony Hawk's Pro Skater 4;8.4;Aug 27, 2003 +88;Ori and the Blind Forest;8.7;Mar 11, 2015 +88;Diablo II;8.8;Jun 29, 2000 +88;The Witcher 2: Assassins of Kings;8.5;May 17, 2011 +87;Plants vs. Zombies;8.9;Aug 18, 2009 +87;Doom 3;7.5;Aug 3, 2004 +87;Super Meat Boy;8.3;Apr 5, 2011 +87;Football Manager 2010;9.1;Nov 3, 2009 +87;Oddworld: Abe's Oddysee - New 'n' Tasty;7.8;Feb 25, 2015 +87;Tom Clancy's Splinter Cell: Pandora Tomorrow;8.0;Mar 23, 2004 +87;Europa Universalis II;8.8;Nov 12, 2001 +87;Burnout Paradise: The Ultimate Box;7.5;Feb 5, 2009 +87;Battlefield: Bad Company 2;8.3;Mar 2, 2010 +87;GRID;7.9;Jun 3, 2008 +87;Crypt of the NecroDancer;7.7;Apr 23, 2015 +87;Sins of a Solar Empire;8.2;Feb 4, 2008 +87;MechWarrior 4: Vengeance;8.2;Nov 23, 2000 +87;Thief II: The Metal Age;9.1;Feb 29, 2000 +87;Diablo II: Lord of Destruction;9.1;Jun 27, 2001 +87;Monkey Island 2 Special Edition: LeChuck's Revenge;9.0;Jul 7, 2010 +87;Half-Life 2: Episode One;8.6;Jun 1, 2006 +87;The Swapper;8.7;May 30, 2013 +87;Hitman 2: Silent Assassin;8.2;Oct 1, 2002 +87;Year Walk;7.0;Mar 6, 2014 +87;Max Payne 3;7.6;Jun 1, 2012 +87;TowerFall Ascension;6.6;Mar 11, 2014 +87;Battlefield 3: Armored Kill;7.0;Sep 11, 2012 +87;NHL 2002;8.7;Sep 17, 2001 +87;Icewind Dale;8.3;Jun 29, 2000 +87;The Witness;6.6;Jan 26, 2016 +87;Brothers in Arms: Road to Hill 30;7.1;Mar 15, 2005 +87;Kohan: Immortal Sovereigns;8.6;Mar 14, 2001 +87;Day of the Tentacle Remastered;7.9;Mar 21, 2016 +87;Dead Space 2;8.3;Jan 25, 2011 +87;Diablo III: Reaper of Souls;6.6;Mar 25, 2014 +87;Shogun: Total War Warlord Edition;8.7;Aug 13, 2001 +87;Serious Sam: The First Encounter;8.4;Mar 21, 2001 +87;Grand Prix 3;8.3;Aug 24, 2000 +87;Call of Duty: United Offensive;8.3;Sep 14, 2004 +87;Divinity: Original Sin;8.7;Jan 17, 2014 +87;Company of Heroes: Opposing Fronts;8.6;Sep 24, 2007 +87;Psychonauts;8.9;Apr 19, 2005 +87;Gears of War;7.8;Nov 6, 2007 +87;Out of the Park Baseball 4;7.8;Feb 28, 2002 +87;Europa Universalis IV;8.7;Aug 13, 2013 +87;NHL 2004;8.2;Sep 22, 2003 +87;Zeus: Master of Olympus;9.0;Oct 22, 2000 +87;World of Warcraft: Warlords of Draenor;6.0;Nov 13, 2014 +87;Warhammer 40,000: Dawn of War - Dark Crusade;8.9;Oct 9, 2006 +87;Commandos 2: Men of Courage;8.8;Sep 20, 2001 +86;Tales From The Borderlands: Episode 5 - The Vault of the Traveler;8.7;Oct 20, 2015 +86;Bastion;8.6;Aug 16, 2011 +86;Gone Home;5.4;Aug 15, 2013 +86;Pac-Man Championship Edition DX +;7.3;Sep 24, 2013 +86;Supreme Commander;8.3;Feb 20, 2007 +86;Total War: Shogun 2 - Fall of the Samurai;8.4;Mar 23, 2012 +86;Startopia;8.7;Jun 19, 2001 +86;Enemy Engaged: RAH-66 Comanche Versus Ka-52 Hokum;8.3;Jul 31, 2000 +86;Fallout 2;9.2;Sep 30, 1998 +86;Final Fantasy XIV: Heavensward;7.7;Jun 23, 2015 +86;Football Manager 2013;6.7;Nov 1, 2012 +86;Out of the Park Baseball 14;8.6;Apr 15, 2013 +86;The Witcher: Enhanced Edition;8.5;Sep 16, 2008 +86;Borderlands: The Secret Armory of General Knoxx;7.6;Feb 25, 2010 +86;Call of Duty 2;8.3;Oct 25, 2005 +86;Astebreed;7.3;May 30, 2014 +86;Ground Control;7.8;May 31, 2000 +86;Rise of the Tomb Raider;8.0;Jan 28, 2016 +86;Resident Evil 5;7.1;Sep 18, 2009 +86;Saints Row IV;7.4;Aug 20, 2013 +86;Black Mesa;9.0;Sep 14, 2012 +86;EverQuest: Omens of War;7.7;Sep 13, 2004 +86;Steel Beasts;8.4;Sep 24, 2000 +86;Total Annihilation;8.9;Sep 30, 1997 +86;Need for Speed: Hot Pursuit;6.7;Nov 16, 2010 +86;FIFA Soccer 13;6.6;Sep 25, 2012 +86;Sid Meier's Civilization IV: Beyond the Sword;8.6;Jul 23, 2007 +86;The Sims 3;7.6;Jun 2, 2009 +86;Freedom Force vs The 3rd Reich;7.7;Mar 8, 2005 +86;The Binding of Isaac: Rebirth;8.3;Nov 4, 2014 +86;Tribes: Ascend;7.7;Apr 12, 2012 +86;Titanfall;6.1;Mar 11, 2014 +86;Rayman Origins;8.4;Mar 29, 2012 +86;Her Story;5.7;Jun 24, 2015 +86;Starcraft II: Heart of the Swarm;7.9;Mar 12, 2013 +86;Mass Effect 2: Lair of the Shadow Broker;8.5;Sep 7, 2010 +86;LEGO Star Wars II: The Original Trilogy;8.3;Sep 12, 2006 +86;Dungeon Siege;7.9;Mar 31, 2002 +86;Crysis 2;6.7;Mar 22, 2011 +86;Call of Duty: Modern Warfare 2;4.1;Nov 10, 2009 +86;The Secret of Monkey Island: Special Edition;9.1;Jul 15, 2009 +86;Max Payne 2: The Fall of Max Payne;9.0;Oct 14, 2003 +86;Homeworld Remastered Collection;8.2;Feb 25, 2015 +86;Galactic Civilizations II: Dread Lords;8.0;Feb 21, 2006 +86;Tomb Raider;8.5;Mar 5, 2013 +86;Star Trek: Voyager Elite Force;8.2;Sep 20, 2000 +86;Worldwide Soccer Manager 2008;8.4;Oct 23, 2007 +86;IL-2 Sturmovik: Forgotten Battles;8.6;Mar 2, 2003 +86;Hyper Light Drifter;8.1;Mar 31, 2016 +86;DiRT 3;6.9;May 24, 2011 +86;Unreal Tournament 2003;8.1;Sep 30, 2002 +86;Age of Wonders II: The Wizard's Throne;8.4;Jun 12, 2002 +86;Links 2001;6.8;Oct 24, 2000 +86;EverQuest: The Ruins of Kunark;8.8;Mar 31, 2000 +86;Full Throttle;8.8;Apr 30, 1995 +86;The Lord of the Rings Online: Shadows of Angmar;8.1;Apr 24, 2007 +86;Pony Island;6.8;Jan 4, 2016 +86;Warhammer 40,000: Dawn of War;8.8;Sep 20, 2004 +86;Warhammer Online: Age of Reckoning;7.9;Sep 16, 2008 +86;Dead Space;8.0;Oct 20, 2008 +86;Bionic Commando Rearmed;7.0;Aug 13, 2008 +86;Command & Conquer: Red Alert 2 - Yuri's Revenge;9.0;Oct 10, 2001 +86;Europa Universalis;8.1;Feb 2, 2001 +86;Escape from Monkey Island;8.2;Nov 8, 2000 +86;IL-2 Sturmovik: 1946;8.8;Mar 13, 2007 +86;XCOM: Enemy Within;7.9;Nov 12, 2013 +86;Battlefield 3: Back to Karkand;7.2;Dec 13, 2011 +86;Heroes of the Storm;6.7;Jun 2, 2015 +86;Civilization III: Conquests;8.4;Nov 4, 2003 +86;Path of Exile;8.0;Jan 25, 2013 +86;Battlefield: Bad Company 2 Vietnam;8.1;Dec 18, 2010 +86;Assassin's Creed II;6.8;Mar 9, 2010 +86;The Elder Scrolls IV: Shivering Isles;8.4;Mar 26, 2007 +86;DiRT Rally;8.8;Dec 7, 2015 +86;Rocket League;8.1;Jul 7, 2015 +86;Allegiance;8.2;Mar 31, 2000 +85;The Talos Principle;8.5;Dec 11, 2014 +85;Cities: Skylines;8.9;Mar 10, 2015 +85;Falcon 4.0;8.0;Nov 30, 1998 +85;Tom Clancy's Rainbow Six;8.6;Jul 31, 1998 +85;Madden NFL 2005;6.4;Sep 14, 2004 +85;Legend of Grimrock II;8.0;Oct 15, 2014 +85;Sam & Max Episode 205: What's New, Beelzebub?;8.6;Apr 10, 2008 +85;Dragon Age: Inquisition;5.8;Nov 18, 2014 +85;Tales from the Borderlands: A Telltale Game Series;8.7;Apr 26, 2016 +85;Tom Clancy's Rainbow Six: Vegas;7.7;Dec 12, 2006 +85;City of Heroes;8.5;Apr 27, 2004 +85;SWAT 4;8.6;Apr 5, 2005 +85;Clive Barker's Undying;8.7;Feb 21, 2001 +85;EverQuest;8.2;Mar 16, 1999 +85;Warhammer 40,000: Dawn of War II;8.1;Feb 18, 2009 +85;Command & Conquer 3: Tiberium Wars;8.0;Mar 26, 2007 +85;Bit.Trip Presents...Runner2: Future Legend of Rhythm Alien;8.2;Feb 26, 2013 +85;Hotline Miami;8.5;Oct 23, 2012 +85;Out of the Park Baseball 13;8.2;Apr 9, 2012 +85;Wizardry 8;8.6;Nov 14, 2001 +85;Aliens Versus Predator 2;8.7;Oct 31, 2001 +85;Operation Flashpoint: Cold War Crisis;9.0;Aug 30, 2001 +85;Tropico;8.4;Apr 5, 2001 +85;Giants: Citizen Kabuto;8.9;Dec 6, 2000 +85;NASCAR SimRacing;4.9;Feb 15, 2005 +85;The Lord of the Rings Online: Mines of Moria;8.3;Nov 17, 2008 +85;The Binding of Isaac: Afterbirth;8.1;Oct 30, 2015 +85;Amnesia: The Dark Descent;8.6;Feb 17, 2011 +85;GTR FIA Racing;8.6;May 3, 2005 +85;Football Manager 2011;8.4;Nov 23, 2010 +85;Dust: An Elysian Tail;8.5;May 24, 2013 +85;South Park: The Stick of Truth;8.6;Mar 4, 2014 +85;Dark Souls: Prepare to Die Edition;7.4;Aug 24, 2012 +85;Medieval II: Total War Kingdoms;8.8;Aug 28, 2007 +85;Shovel Knight;7.9;Jun 26, 2014 +85;DmC: Devil May Cry;6.7;Jan 24, 2013 +85;Peggle Deluxe;8.1;Feb 19, 2008 +85;Monopoly Tycoon;8.0;Sep 24, 2001 +85;Indigo Prophecy;8.3;Oct 2, 2005 +85;Prince of Persia: The Two Thrones;8.0;Dec 1, 2005 +85;Sam & Max Episode 204: Chariots of the Dogs;8.1;Mar 13, 2008 +85;Assetto Corsa;8.4;Dec 19, 2014 +85;Machinarium;8.8;Oct 16, 2009 +85;Frozen Synapse;7.7;May 26, 2011 +85;Valkyria Chronicles;8.3;Nov 11, 2014 +85;Freelancer;8.9;Mar 3, 2003 +85;Zenzizenzic;5.9;Jul 23, 2015 +85;The Wolf Among Us: Episode 1 - Faith;9.0;Oct 11, 2013 +85;Mega Man Legacy Collection;7.3;Aug 25, 2015 +85;Warhammer 40,000: Dawn of War II - Chaos Rising;8.7;Mar 11, 2010 +85;Far Cry 2;5.8;Oct 21, 2008 +85;The Walking Dead: Episode 3 - Long Road Ahead;8.4;Aug 29, 2012 +85;AudioSurf;8.8;Feb 15, 2008 +85;BattleBlock Theater;8.0;May 15, 2014 +85;Star Wars: Knights of the Old Republic II - The Sith Lords;8.4;Feb 8, 2005 +85;MVP Baseball 2005;8.1;Feb 22, 2005 +85;The Elder Scrolls III: Bloodmoon;8.5;Jun 3, 2003 +85;Rogue Legacy;7.9;Jun 27, 2013 +85;Chaos Reborn;8.4;Oct 26, 2015 +85;Thief: Deadly Shadows;8.4;May 25, 2004 +85;Football Manager 2014;5.4;Oct 30, 2013 +85;System Shock: Enhanced Edition;7.9;Sep 22, 2015 +85;EverQuest: Gates of Discord;6.8;Feb 9, 2004 +85;FIFA 2001 Major League Soccer;7.3;Oct 30, 2000 +85;Sid Meier's Civilization V: Brave New World;8.6;Jul 9, 2013 +85;Final Fantasy XI;7.5;Oct 28, 2003 +85;Serious Sam: The Second Encounter;8.5;Feb 4, 2002 +85;The Sims: Hot Date;7.9;Nov 12, 2001 +85;American McGee's Alice;8.2;Dec 6, 2000 +85;Trials Evolution: Gold Edition;6.7;Mar 21, 2013 +85;Warhammer 40,000: Dawn of War - Winter Assault;8.3;Sep 21, 2005 +85;Tony Hawk's Underground 2;7.9;Oct 4, 2004 +85;Papers, Please;8.5;Aug 8, 2013 +85;Star Wars: The Old Republic;5.9;Dec 20, 2011 +85;Anarchy Online: Shadowlands;8.7;Sep 8, 2003 +85;Dark Age of Camelot: Shrouded Isles;8.8;Dec 2, 2002 +85;Obsidian;8.3;Dec 31, 1996 +84;The Walking Dead: Episode 2 - Starved for Help;8.6;Jun 29, 2012 +84;Saints Row: The Third;8.1;Nov 15, 2011 +84;Fallout: New Vegas;8.5;Oct 19, 2010 +84;The Movies;8.3;Nov 8, 2005 +84;Neverwinter Nights: Hordes of the Underdark;8.6;Dec 2, 2003 +84;Command & Conquer: Generals;8.3;Feb 10, 2003 +84;Sid Meier's SimGolf;8.2;Jan 23, 2002 +84;Middle-earth: Shadow of Mordor;8.0;Sep 30, 2014 +84;SpaceChem;8.4;Mar 2, 2011 +84;Downwell;6.2;Oct 15, 2015 +84;Pinball FX 2;8.0;Oct 27, 2012 +84;Devil Daggers;6.7;Feb 18, 2016 +84;PlanetSide 2;7.0;Nov 20, 2012 +84;Enter the Gungeon;7.4;Apr 5, 2016 +84;GT Legends;8.6;Jan 23, 2006 +84;Hearthstone: Goblins Vs. Gnomes;6.6;Dec 8, 2014 +84;Space Rangers 2: Rise of the Dominators;9.0;Mar 27, 2006 +84;Tales From The Borderlands: Episode 1 - Zer0 Sum;8.4;Nov 25, 2014 +84;Puzzle Quest: Challenge of the Warlords;8.3;Oct 10, 2007 +84;Heroes of Might and Magic IV;7.6;Mar 29, 2002 +84;Command & Conquer: Red Alert 2;8.9;Oct 21, 2000 +84;Shogun: Total War;8.7;Jun 13, 2000 +84;DiRT;7.2;Jun 19, 2007 +84;Darkest Dungeon;8.0;Jan 19, 2016 +84;Super Street Fighter IV: Arcade Edition;7.8;Jul 13, 2011 +84;Football Manager 2012;8.0;Oct 20, 2011 +84;Guild Wars Factions;8.5;Apr 28, 2006 +84;80 Days (2015);6.1;Sep 29, 2015 +84;Spore;5.2;Sep 7, 2008 +84;Unity of Command;7.2;Nov 15, 2011 +84;Hearthstone: The Grand Tournament;4.0;Aug 24, 2015 +84;Metro Redux;8.0;Aug 26, 2014 +84;Time Gentlemen, Please!;7.6;Jul 2, 2009 +84;Europa Universalis IV: Wealth of Nations;8.4;May 29, 2014 +84;Mass Effect 3: Citadel;7.8;Mar 5, 2013 +84;Disciples II: Dark Prophecy;8.6;Jan 22, 2002 +84;Just Cause 2;7.7;Mar 23, 2010 +84;Crysis Warhead;7.9;Sep 16, 2008 +84;Assassin's Creed IV: Black Flag;7.7;Nov 19, 2013 +84;Age of Mythology: The Titans;8.7;Sep 30, 2003 +84;SimCity 4;8.7;Jan 12, 2003 +84;Microsoft Train Simulator;8.4;May 31, 2001 +84;Rise of Nations: Rise of Legends;8.5;May 9, 2006 +84;TOCA Race Driver 3;7.8;Feb 24, 2006 +84;FTL: Faster Than Light;8.4;Sep 14, 2012 +84;SOMA;8.2;Sep 22, 2015 +84;DEFCON: Everybody Dies;8.3;Mar 26, 2007 +84;Tron 2.0;8.3;Aug 26, 2003 +84;Brothers in Arms: Earned in Blood;7.3;Oct 6, 2005 +84;Grim Fandango Remastered;8.0;Jan 27, 2015 +84;The Lord of the Rings: The Battle for Middle-Earth II;7.5;Mar 2, 2006 +84;Battlefield Vietnam;7.4;Mar 16, 2004 +84;Medieval: Total War - Viking Invasion;8.8;May 7, 2003 +84;Fallout 4;5.4;Nov 10, 2015 +84;Guild Wars Nightfall;8.7;Oct 26, 2006 +84;The Binding of Isaac;8.3;Sep 28, 2011 +84;Enemy Territory: Quake Wars;8.3;Oct 2, 2007 +84;Trine 2;8.4;Dec 7, 2011 +84;Rift;7.3;Mar 1, 2011 +84;The Wolf Among Us: Episode 5 - Cry Wolf;8.8;Jul 8, 2014 +84;Shift 2: Unleashed;6.1;Mar 29, 2011 +84;Sid Meier's Civilization IV: Warlords;8.2;Jul 24, 2006 +84;Battlefield 1942: The Road to Rome;7.9;Feb 2, 2003 +84;Poseidon;8.4;Jun 25, 2001 +84;F1 2010;6.6;Sep 22, 2010 +84;Shatter;7.4;Mar 15, 2010 +84;Darwinia;7.9;Jun 12, 2006 +84;Ultimate General: Gettysburg;8.0;Oct 16, 2014 +83;Final Fantasy XI: Treasures of Aht Urhgan;7.6;Apr 18, 2006 +83;MDK2;8.4;May 31, 2000 +83;Gunpoint;8.4;Jun 3, 2013 +83;Beyond Good & Evil;8.7;Nov 19, 2003 +83;Anno 2070;7.0;Nov 17, 2011 +83;SMITE;8.3;Mar 25, 2014 +83;Halo: Combat Evolved;7.4;Sep 30, 2003 +83;Grim Dawn;8.9;Feb 25, 2016 +83;Silent Storm;8.9;Jan 20, 2004 +83;Command & Conquer: Generals - Zero Hour;9.0;Sep 22, 2003 +83;Homeworld 2;8.3;Sep 16, 2003 +83;Galactic Civilizations;8.1;Mar 26, 2003 +83;EverQuest: The Shadows of Luclin;7.2;Dec 2, 2001 +83;Orcs Must Die!;8.1;Oct 11, 2011 +83;Life is Strange;8.6;Jan 19, 2016 +83;Fable: The Lost Chapters;8.7;Sep 20, 2005 +83;Unreal Tournament III;8.0;Nov 19, 2007 +83;The Blackwell Epiphany;7.6;Apr 24, 2014 +83;The Lord of the Rings Online: Siege of Mirkwood;7.1;Dec 1, 2009 +83;Out of the Park Baseball 10;8.3;Jun 2, 2009 +83;Tomb Raider: Anniversary;8.0;Jun 5, 2007 +83;Need for Speed: Shift;5.7;Sep 15, 2009 +83;Hearts of Iron II;8.6;Jan 4, 2005 +83;FIFA Soccer 11;7.6;Sep 28, 2010 +83;Project CARS;7.0;May 6, 2015 +83;FIFA Soccer 2003;6.8;Nov 2, 2002 +83;Icewind Dale II;8.3;Aug 26, 2002 +83;Age of Empires;8.8;Sep 30, 1997 +83;EverQuest II: Echoes of Faydwer;8.4;Nov 13, 2006 +83;EverQuest II;7.3;Nov 8, 2004 +83;Terraria;8.5;May 16, 2011 +83;Final Fantasy XIV Online: A Realm Reborn;6.7;Aug 27, 2013 +83;Card Hunter (2013);7.9;Sep 12, 2013 +83;Sam & Max: The Devil's Playhouse - Episode 2: The Tomb of Sammun-Mak;7.9;May 18, 2010 +83;This War of Mine;8.4;Nov 14, 2014 +83;Darksiders;7.7;Sep 23, 2010 +83;Tom Clancy's Rainbow Six 3: Raven Shield;8.9;Mar 19, 2003 +83;World of Outlaws: Sprint Cars;7.9;Feb 11, 2003 +83;Colin McRae Rally 2.0;8.4;Feb 14, 2001 +83;Combat Flight Simulator 2: WWII Pacific Theater;8.1;Oct 13, 2000 +83;Orcs Must Die! 2;7.9;Jul 30, 2012 +83;Prey;7.9;Jul 11, 2006 +83;Metal Gear Rising: Revengeance;7.9;Jan 9, 2014 +83;Starseed Pilgrim;6.3;Apr 16, 2013 +83;Age of Conan: Rise of the Godslayer;8.4;May 11, 2010 +83;Alan Wake;8.0;Feb 16, 2012 +83;Tiger Woods PGA Tour 2002;5.0;Feb 24, 2002 +83;Monaco: What's Yours Is Mine;7.7;Apr 24, 2013 +83;Transistor;8.3;May 20, 2014 +83;Helldivers;6.9;Dec 7, 2015 +83;Worldwide Soccer Manager 2009;8.1;Nov 18, 2008 +83;Call of Duty: World at War;7.5;Nov 10, 2008 +83;Torchlight;8.0;Jan 5, 2010 +83;Prison Architect;8.3;Oct 6, 2015 +83;Valdis Story: Abyssal City;8.1;Oct 30, 2013 +83;Crimson Skies;8.2;Sep 17, 2000 +83;RACE 07: Official WTCC Game;9.0;Oct 9, 2007 +83;SUPERHOT;7.6;Feb 25, 2016 +83;EverQuest II: Rise of Kunark;7.9;Nov 13, 2007 +83;Dark Age of Camelot: Catacombs;8.6;Dec 7, 2004 +83;Spore Creature Creator;8.1;Jun 17, 2008 +83;Colin McRae Rally 2005;7.0;Oct 28, 2004 +83;Tom Clancy's Splinter Cell: Conviction;5.2;Apr 27, 2010 +83;Tribes: Vengeance;7.6;Oct 12, 2004 +83;L.A. Noire: The Complete Edition;7.9;Nov 8, 2011 +83;GTR Evolution;8.2;Sep 2, 2008 +83;Life is Strange: Episode 5 - Polarized;8.4;Oct 20, 2015 +83;BROFORCE;8.0;Oct 15, 2015 +83;Independence War 2: Edge of Chaos;8.4;Aug 22, 2001 +83;Myst III: Exile;8.2;May 8, 2001 +83;Superbrothers: Sword & Sworcery EP;6.4;Apr 16, 2012 +83;Sid Meier's Civilization IV: Colonization;6.7;Sep 22, 2008 +83;Europa Universalis III;8.4;Jan 23, 2007 +83;F1 2011;7.2;Sep 20, 2011 +83;Prince of Persia: Warrior Within;8.4;Nov 30, 2004 +83;Danganronpa: Trigger Happy Havoc;7.6;Feb 18, 2016 +83;Counter-Strike: Global Offensive;7.8;Aug 21, 2012 +83;Outland;7.1;Sep 29, 2014 +83;MechWarrior 4: Mercenaries;8.6;Nov 7, 2002 +83;Metal Gear Solid;9.0;Sep 24, 2000 +82;Invisible, Inc.;8.0;May 12, 2015 +82;Dark Souls II: Crown of the Ivory King;7.8;Sep 29, 2014 +82;Red Faction: Guerrilla;7.5;Sep 15, 2009 +82;The Book of Unwritten Tales;8.2;Oct 28, 2011 +82;Capitalism II;9.0;Dec 16, 2001 +82;Rally Trophy;8.5;Nov 20, 2001 +82;Dawn of Discovery;8.8;Jun 17, 2009 +82;City of Villains;8.1;Oct 31, 2005 +82;Kentucky Route Zero - Act II;8.0;May 31, 2013 +82;Tom Clancy's Splinter Cell: Blacklist;7.4;Aug 20, 2013 +82;Act of War: Direct Action;8.5;Mar 15, 2005 +82;Sokobond;7.8;Aug 27, 2013 +82;Sam & Max Episode 105: Reality 2.0;8.4;Mar 29, 2007 +82;Bejeweled 3;8.0;Dec 7, 2010 +82;Dangerous Waters;8.8;Feb 22, 2005 +82;Tomb Raider: Legend;7.8;Apr 11, 2006 +82;Asheron's Call 2: Fallen Kings;8.8;Nov 20, 2002 +82;Gemini Rue;8.4;Feb 24, 2011 +82;Antichamber;8.2;Jan 31, 2013 +82;Neverwinter Nights 2;6.5;Oct 31, 2006 +82;Dragon Age: Origins - Awakening;7.7;Mar 16, 2010 +82;Door Kickers;8.2;Oct 20, 2014 +82;Hearthstone: Blackrock Mountain;6.4;Apr 2, 2015 +82;Rome: Total War Barbarian Invasion;8.4;Sep 27, 2005 +82;Hacknet;7.3;Aug 12, 2015 +82;Tales of Monkey Island Chapter 3: Lair of the Leviathan;7.8;Sep 29, 2009 +82;Neverwinter Nights 2: Mask of The Betrayer;8.8;Oct 9, 2007 +82;Sins of a Solar Empire: Rebellion;7.8;Jun 12, 2012 +82;Broken Sword: The Sleeping Dragon;7.6;Nov 17, 2003 +82;Age of Wonders: Shadow Magic;8.5;Jul 25, 2003 +82;Tom Clancy's Ghost Recon: Desert Siege;8.4;Mar 27, 2002 +82;Warlords Battlecry II;8.5;Mar 11, 2002 +82;Football Manager Live;2.9;Jan 23, 2009 +82;Marvel: Ultimate Alliance;8.3;Oct 24, 2006 +82;The Talos Principle: Road To Gehenna;7.6;Jul 23, 2015 +82;Lara Croft and the Guardian of Light;8.2;Sep 28, 2010 +82;Aquaria;8.3;Dec 7, 2007 +82;Need for Speed: Underground;8.3;Nov 17, 2003 +82;TrackMania Sunrise;8.5;May 6, 2005 +82;King's Quest Chapter 1: A Knight to Remember;7.2;Jul 28, 2015 +82;Dragon Age II;4.4;Mar 8, 2011 +82;Endless Legend;7.9;Apr 24, 2014 +82;Tom Clancy's Ghost Recon: Island Thunder;8.3;Sep 25, 2002 +82;S.T.A.L.K.E.R.: Shadow of Chernobyl;8.4;Mar 20, 2007 +82;Kero Blaster;6.9;May 11, 2014 +82;Monday Night Combat;7.3;Jan 24, 2011 +82;The Wolf Among Us: Episode 3 - A Crooked Mile;8.6;Apr 8, 2014 +82;Airborne Assault: Red Devils Over Arnhem;7.4;Jun 17, 2002 +82;Fallout Tactics: Brotherhood of Steel;7.9;Mar 14, 2001 +82;Need for Speed: Underground 2;8.5;Nov 9, 2004 +82;NHL Eastside Hockey Manager 2005;6.6;Oct 5, 2005 +82;Legend of Grimrock;8.1;Apr 11, 2012 +82;Dominions 3: The Awakening;8.1;Sep 29, 2006 +82;Bulletstorm;7.7;Feb 22, 2011 +82;Borderlands 2: Mr. Torgue's Campaign of Carnage;7.3;Nov 20, 2012 +82;Desktop Dungeons;8.2;Oct 17, 2010 +82;Fallout: New Vegas - Old World Blues;7.8;Jul 19, 2011 +82;Crusader Kings II;8.7;Feb 14, 2012 +82;MVP Baseball 2004;7.9;Mar 9, 2004 +82;Europa 1400: The Guild;8.6;Nov 18, 2002 +82;Battle Realms;8.6;Nov 7, 2001 +82;Warlords Battlecry;8.2;Jul 9, 2000 +82;Sam & Max Episode 201: Ice Station Santa;8.6;Nov 8, 2007 +82;Technobabylon;7.8;May 21, 2015 +82;World of Warcraft: Mists of Pandaria;4.8;Sep 25, 2012 +82;FIFA 15;4.2;Sep 23, 2014 +82;Recettear: An Item Shop's Tale;8.6;Sep 10, 2010 +82;ETHER One;6.9;Mar 25, 2014 +82;The Vanishing of Ethan Carter;8.1;Sep 25, 2014 +82;Flight Simulator X: Acceleration;7.3;Oct 23, 2007 +82;Blood;9.0;May 31, 1997 +82;Command & Conquer: Red Alert 3;6.8;Oct 28, 2008 +82;The Walking Dead: Episode 1 - A New Day;8.4;Apr 24, 2012 +82;Links 2003;6.8;Sep 16, 2002 +82;Earth & Beyond;7.1;Sep 2, 2002 +82;Syberia;8.5;Sep 1, 2002 +82;Virtual Pool 3;7.3;Nov 14, 2000 +82;The Sims: Livin' Large;6.6;Aug 27, 2000 +82;DCS: Black Shark;8.5;Apr 13, 2009 +82;King's Bounty: Armored Princess;8.7;Sep 10, 2010 +82;Age of Wonders III - Golden Realms;8.5;Sep 18, 2014 +82;Strong Bad's Cool Game for Attractive People Episode 5: 8-Bit Is Enough;7.5;Dec 15, 2008 +82;Prince of Persia;7.2;Dec 2, 2008 +82;Joint Operations: Typhoon Rising;8.7;Jun 15, 2004 +82;Xpand Rally;7.4;Apr 20, 2006 +82;Dark Souls II: Crown of the Sunken King;7.3;Jul 22, 2014 +82;Resident Evil HD Remaster;8.2;Jan 20, 2015 +82;Celtic Kings: Rage of War;8.5;Aug 21, 2002 +82;B-17 Flying Fortress: The Mighty 8th;7.3;Dec 13, 2000 +82;EverQuest: The Scars of Velious;7.8;Dec 4, 2000 +82;Metro: Last Light;8.6;May 14, 2013 +82;Rising Storm;8.5;May 30, 2013 +82;Lethal League;7.4;Aug 27, 2014 +82;Botanicula;8.3;Apr 19, 2012 +82;Pro Evolution Soccer 2015;5.8;Nov 13, 2014 +82;Bookworm Adventures Deluxe;7.9;Dec 20, 2006 +82;The Lord of the Rings: The Battle for Middle-Earth;8.6;Dec 6, 2004 +82;Hitman: Blood Money;8.8;May 30, 2006 +82;Need for Speed: Most Wanted;8.5;Nov 15, 2005 +82;OlliOlli2: Welcome to Olliwood;5.2;Aug 11, 2015 +82;WildStar;7.4;Jun 3, 2014 +82;Broken Age: Act 1;7.7;Jan 28, 2014 +82;Divinity II: The Dragon Knight Saga;8.2;Nov 5, 2010 +82;Out of the Park Baseball 9;7.4;Jun 1, 2008 +82;The Simpsons: Hit & Run;8.0;Nov 13, 2003 +82;America's Army;6.1;Aug 28, 2002 +82;Star Trek Bridge Commander;8.1;Feb 27, 2002 +82;The Last Express;8.9;Mar 31, 1997 +81;Quake 4;7.5;Oct 11, 2005 +81;Nidhogg;7.0;Jan 13, 2014 +81;Battlefield 4;6.0;Oct 29, 2013 +81;To the Moon;8.9;Sep 7, 2012 +81;The Sims 3: World Adventures;8.0;Nov 16, 2009 +81;Painkiller;8.0;Apr 12, 2004 +81;Airborne Assault: Highway to the Reich;6.1;Dec 10, 2003 +81;Nancy Drew: Danger on Deception Island;7.7;Oct 1, 2003 +81;Shadowrun: Hong Kong;7.7;Aug 20, 2015 +81;Supreme Commander: Forged Alliance;8.9;Nov 6, 2007 +81;Sunless Sea;7.4;Jul 1, 2014 +81;The Walking Dead: Season Two Episode 3 - In Harm's Way;8.3;May 13, 2014 +81;Marvel Heroes 2015;7.9;Jun 4, 2014 +81;Football Manager 2016;6.4;Nov 13, 2015 +81;VVVVVV;8.1;Jan 11, 2010 +81;Darksiders II;7.9;Aug 14, 2012 +81;Wolfenstein: The New Order;8.2;May 20, 2014 +81;Lone Survivor;7.2;Apr 23, 2012 +81;Alien: Isolation;8.4;Oct 6, 2014 +81;The Witcher;8.8;Oct 30, 2007 +81;Kentucky Route Zero - Act I;7.5;Jan 7, 2013 +81;Jade Empire: Special Edition;8.3;Feb 26, 2007 +81;SWAT 3: Elite Edition;8.4;Oct 6, 2000 +81;Asheron's Call;8.8;Oct 31, 1999 +81;Unravel;8.1;Feb 9, 2016 +81;Midnight Club II;8.0;Jun 30, 2003 +81;Chessmaster 10th Edition;7.4;Aug 12, 2004 +81;Age of Empires III;7.7;Oct 18, 2005 +81;Tales of Monkey Island Chapter 5: Rise of the Pirate God;8.4;Dec 8, 2009 +81;Castlevania: Lords of Shadow Ultimate Edition;7.3;Aug 27, 2013 +81;Strong Bad's Cool Game for Attractive People Episode 2: Strong Badia the Free;8.2;Sep 15, 2008 +81;The Cat Lady;8.7;Dec 4, 2013 +81;Vessel;7.9;Mar 1, 2012 +81;Metro 2033;8.1;Mar 16, 2010 +81;OutRun 2006: Coast 2 Coast;7.8;Jun 27, 2006 +81;Blur;7.3;May 25, 2010 +81;Empires: Dawn of the Modern World;8.2;Oct 21, 2003 +81;Chessmaster 9000;7.7;Aug 31, 2002 +81;Gothic;8.6;Nov 23, 2001 +81;Arcanum: Of Steamworks and Magick Obscura;8.9;Aug 22, 2001 +81;NASCAR Heat;8.6;Sep 27, 2000 +81;Company of Heroes 2: Ardennes Assault;6.1;Nov 17, 2014 +81;PlanetSide;7.3;May 20, 2003 +81;Tales From The Borderlands: Episode 3 - Catch A Ride;8.4;Jun 23, 2015 +81;The Walking Dead: Season Two Episode 2 - A House Divided;8.6;Mar 4, 2014 +81;Kingdoms of Amalur: Reckoning;6.6;Feb 7, 2012 +81;Sam & Max: The Devil's Playhouse - Episode 1: The Penal Zone;8.5;Apr 15, 2010 +81;Borderlands;7.8;Oct 26, 2009 +81;DG2: Defense Grid 2;6.7;Sep 23, 2014 +81;Napoleon: Total War;7.9;Feb 23, 2010 +81;Overlord;8.1;Jun 26, 2007 +81;Firewatch;7.2;Feb 9, 2016 +81;Victoria II: Heart of Darkness;8.7;Apr 16, 2013 +81;Waveform;7.6;Jan 25, 2013 +81;The Elder Scrolls IV: Knights of the Nine;7.5;Nov 21, 2006 +81;Red Orchestra: Ostfront 41-45;8.6;Mar 14, 2006 +81;Stronghold;8.9;Oct 21, 2001 +81;Strong Bad's Cool Game for Attractive People Episode 4: Dangeresque 3: The Criminal Projective;8.5;Nov 17, 2008 +81;Rochard;8.0;Nov 15, 2011 +81;Fallout 3: Broken Steel;7.3;May 5, 2009 +81;Tiger Woods PGA Tour 06;8.1;Sep 20, 2005 +81;RollerCoaster Tycoon 3;4.9;Oct 26, 2004 +81;Dragon's Dogma: Dark Arisen;8.3;Jan 15, 2016 +81;Guild Wars 2: Heart of Thorns;7.3;Oct 23, 2015 +81;AaaaaAAaaaAAAaaAAAAaAAAAA!!! - A Reckless Disregard for Gravity;7.2;Sep 3, 2009 +81;The Sims 2 University;7.8;Feb 28, 2005 +81;Far Cry 3: Blood Dragon;8.1;May 1, 2013 +81;Sid Meier's Civilization: Beyond Earth;5.5;Oct 24, 2014 +81;Disney's Toontown Online;8.7;Oct 6, 2005 +81;Combat Mission 3: Afrika Korps;8.4;Dec 3, 2003 +81;EverQuest: The Planes of Power;8.2;Oct 28, 2002 +81;Rails Across America;8.0;Sep 18, 2001 +81;Wasteland 2;7.3;Sep 19, 2014 +81;Jamestown: Legend of the Lost Colony;7.5;Jun 8, 2011 +81;Call of Duty: Black Ops;5.1;Nov 9, 2010 +81;Kohan II: Kings of War;7.9;Sep 20, 2004 +81;The Age of Decadence;7.9;Oct 15, 2015 +81;Samorost 3;8.3;Mar 24, 2016 +81;Order of Battle: Pacific;6.4;Apr 30, 2015 +81;Empire Earth;8.3;Nov 12, 2001 +81;Star Trek: Deep Space Nine: The Fallen;7.9;Nov 15, 2000 +81;Sam & Max Episode 101: Culture Shock;8.7;Oct 18, 2006 +81;Mirror's Edge (2008);8.1;Jan 12, 2009 +81;TrackMania 2 Canyon;7.7;Sep 14, 2011 +81;Sleeping Dogs;8.2;Aug 14, 2012 +81;Star Wars Jedi Knight: Jedi Academy;8.6;Sep 17, 2003 +81;Mortal Kombat Komplete Edition;8.7;Aug 6, 2013 +81;Shadowrun: Dragonfall;8.3;Feb 27, 2014 +81;Eets;6.4;Mar 29, 2006 +81;World of Warships;6.6;Sep 17, 2015 +81;TOCA Race Driver 2: The Ultimate Racing Simulator;8.0;Apr 15, 2004 +81;Wargame: European Escalation;8.2;Feb 22, 2012 +81;Dungeon Defenders;7.3;Oct 18, 2011 +81;Sam & Max: The Devil's Playhouse - Episode 5: The City That Dares Not Sleep;7.9;Aug 30, 2010 +81;Age of Empires III: The Asian Dynasties;8.5;Oct 23, 2007 +81;Defense Grid: The Awakening;8.8;Jul 29, 2009 +81;Codename: Panzers, Phase One;8.8;Sep 30, 2004 +81;FIFA 16;4.4;Sep 22, 2015 +81;Europa Universalis IV: Conquest of Paradise;7.7;Jan 14, 2014 +81;Ghost Master;8.0;Aug 26, 2003 +81;Divine Divinity;8.5;Sep 22, 2002 +80;The Book of Unwritten Tales 2;7.7;Feb 20, 2015 +80;Galactic Civilizations III;6.6;May 14, 2015 +80;Lovers in a Dangerous Spacetime;7.2;Sep 9, 2015 +80;Age of Conan: Hyborian Adventures;7.3;May 20, 2008 +80;Company of Heroes 2: The Western Front Armies;6.8;Jun 23, 2014 +80;Sid Meier's Civilization V: Gods & Kings;7.7;Jun 19, 2012 +80;Age of Empires III: The WarChiefs;8.1;Oct 17, 2006 +80;Metal Gear Solid V: Ground Zeroes;7.7;Dec 18, 2014 +80;Trials Fusion;6.8;Apr 16, 2014 +80;Syberia II;8.3;Mar 30, 2004 +80;Tom Clancy's Ghost Recon;8.4;Nov 13, 2001 +80;Conquest: Frontier Wars;8.3;Aug 14, 2001 +80;Gabriel Knight 3: Blood of the Sacred, Blood of the Damned;8.8;Oct 5, 1999 +80;Westerado: Double Barreled;7.4;Apr 16, 2015 +80;Anomaly: Warzone Earth;7.3;Apr 8, 2011 +80;Volume;7.2;Aug 18, 2015 +80;GRID 2;5.7;May 27, 2013 +80;The Banner Saga;7.9;Jan 14, 2014 +80;Sam & Max Episode 202: Moai Better Blues;7.7;Jan 10, 2008 +80;Age of Wonders III - Eternal Lords;8.4;Apr 14, 2015 +80;Pro Evolution Soccer 2013;6.8;Sep 25, 2012 +80;Osmos;7.5;Aug 18, 2009 +80;Dungeon Siege II;7.9;Aug 16, 2005 +80;Dead Island;6.8;Sep 6, 2011 +80;Sam & Max Episode 104: Abe Lincoln Must Die!;7.8;Feb 22, 2007 +80;Deus Ex: Invisible War;6.3;Dec 2, 2003 +80;The Sims: Makin' Magic;8.6;Oct 28, 2003 +80;Tom Clancy's Splinter Cell: Double Agent;5.7;Nov 7, 2006 +80;Medal of Honor: Pacific Assault;7.4;Nov 4, 2004 +80;Assassin's Creed: Revelations;7.4;Nov 29, 2011 +80;Grandia II Anniversary Edition;7.6;Aug 24, 2015 +80;Assassin's Creed III;6.2;Nov 20, 2012 +80;Madden NFL 07;7.3;Aug 22, 2006 +80;Outlast;8.4;Sep 4, 2013 +80;The Chronicles of Riddick: Assault on Dark Athena;8.0;Apr 7, 2009 +80;Hearts of Iron II: Doomsday;8.8;Apr 7, 2006 +80;Dishonored: The Brigmore Witches;8.5;Aug 13, 2013 +80;Codename: Panzers, Phase Two;8.0;Jul 25, 2005 +80;Full Spectrum Warrior;7.0;Sep 21, 2004 +80;AI War: Fleet Command;8.4;May 14, 2009 +80;Freedom Fighters;8.3;Oct 1, 2003 +80;NBA Live 2003;8.3;Nov 14, 2002 +80;The Elder Scrolls III: Tribunal;8.2;Nov 6, 2002 +80;Elite: Dangerous;6.4;Dec 16, 2014 +80;Pure;6.9;Sep 16, 2008 +80;Goodbye Deponia;8.1;Oct 17, 2013 +80;SWAT 4: The Stetchkov Syndicate;8.3;Feb 28, 2006 +80;Dropsy;7.3;Sep 10, 2015 +80;Company of Heroes 2: The British Forces;5.9;Sep 3, 2015 +80;Ground Control II: Operation Exodus;8.8;Jun 23, 2004 +80;NBA Live 2004;9.0;Nov 11, 2003 +80;Brutal Legend;7.8;Feb 26, 2013 +80;Tomb Raider: Underworld;7.6;Nov 18, 2008 +80;Oxenfree;7.7;Jan 15, 2016 +80;Titan Quest: Immortal Throne;8.7;Mar 5, 2007 +80;La-Mulana (Remake);7.1;Jul 13, 2012 +80;X-Men Legends II: Rise of Apocalypse;8.4;Sep 20, 2005 +80;SpellForce 2: Shadow Wars;7.6;May 5, 2006 +80;Fritz 8 Deluxe;7.8;Dec 1, 2004 +80;Trine;8.2;Sep 11, 2009 +80;Dishonored: The Knife of Dunwall;8.1;Apr 16, 2013 +80;Company of Heroes 2;2.0;Jun 25, 2013 +80;Natural Selection 2;8.4;Oct 30, 2012 +80;Read Only Memories;7.2;Oct 5, 2015 +80;The Sims 3: Into the Future;5.4;Oct 22, 2013 +80;Borderlands 2: Captain Scarlett and Her Pirate's Booty;7.4;Oct 16, 2012 +80;FATE;8.3;Sep 19, 2006 +80;2002 FIFA World Cup;7.9;Apr 30, 2002 +80;Asheron's Call Dark Majesty;8.1;Nov 4, 2001 +80;The Bug Butcher;8.2;Jan 19, 2016 +80;Dragonshard;7.4;Oct 2, 2005 +80;Icewind Dale: Enhanced Edition;7.6;Oct 30, 2014 +80;The Magic Circle;7.3;Jul 9, 2015 +80;Far Cry 4;6.6;Nov 18, 2014 +80;Super Time Force Ultra;6.6;Aug 25, 2014 +80;Day of Defeat: Source;9.1;Feb 7, 2006 +80;Battlefield 2142;6.8;Oct 17, 2006 +80;World of Tanks;3.8;Sep 6, 2011 +80;Vampire: The Masquerade - Bloodlines;9.0;Nov 16, 2004 +80;Dark Souls II: Scholar of the First Sin;7.4;Apr 1, 2015 +80;Warhammer 40,000: Dawn of War II - Retribution;7.8;Mar 1, 2011 +80;Panzer Corps;7.5;Jul 11, 2011 +80;Men of War;8.1;Mar 16, 2009 +80;Fallen Enchantress: Legendary Heroes;7.7;May 22, 2013 +80;The Walking Dead: Episode 4 - Around Every Corner;8.5;Oct 10, 2012 +80;Tales of Monkey Island Chapter 4: The Trial and Execution of Guybrush Threepwood;8.4;Oct 30, 2009 +80;Penny Arcade Adventures: Episode Two;7.7;Nov 7, 2008 +80;Time Commando;8.9;Jul 31, 1996 +80;Sins of a Solar Empire: Entrenchment;8.1;Feb 25, 2009 +80;F1 2012;6.9;Sep 18, 2012 +80;Luftrausers;6.8;Mar 18, 2014 +80;Naruto Shippuden: Ultimate Ninja Storm 3 Full Burst;7.9;Oct 24, 2013 +80;Stealth Bastard Deluxe;8.3;Nov 28, 2012 +80;Tom Clancy's Ghost Recon Advanced Warfighter;7.7;May 3, 2006 +80;LEGO Batman: The Videogame;7.9;Sep 23, 2008 +80;Stacking;7.9;Mar 6, 2012 +80;Age of Wonders III;7.8;Mar 31, 2014 +80;Life is Strange: Episode 3 - Chaos Theory;9.0;May 19, 2015 +80;The Legend of Heroes: Trails in the Sky SC;8.4;Oct 29, 2015 +80;Proteus;5.6;Jan 30, 2013 +80;Robin Hood: The Legend of Sherwood;8.3;Nov 14, 2002 +80;Soldier of Fortune II: Double Helix;7.3;May 20, 2002 +80;RollerCoaster Tycoon: Loopy Landscapes;9.0;Sep 30, 2000 +80;Toki Tori;7.9;Jan 28, 2010 +80;RoboBlitz;8.3;Nov 7, 2006 +80;Wargame: AirLand Battle;8.1;May 29, 2013 +80;Football Manager 2015;6.0;Nov 7, 2014 +80;The Suffering;8.2;Jun 8, 2004 +80;Gish;7.2;Sep 17, 2004 +80;Axiom Verge;8.2;May 14, 2015 +80;Driver: San Francisco;7.0;Sep 27, 2011 +80;The Corporate Machine;7.5;Jul 14, 2001 +80;Dungeons & Dragons: Chronicles of Mystara;6.7;Jun 18, 2013 +80;Disciples II: Rise of the Elves;8.1;Nov 25, 2003 +80;MechCommander 2;8.3;Jul 18, 2001 +80;Waterloo: Napoleon's Last Battle;7.5;Mar 25, 2001 +80;Chessmaster 8000;6.4;Nov 14, 2000 +80;Circle of Blood;8.6;Sep 30, 1996 +80;BioShock Infinite: Burial at Sea - Episode Two;8.5;Mar 25, 2014 +80;S.T.A.L.K.E.R.: Call of Pripyat;8.7;Feb 2, 2010 +80;The Walking Dead: Season Two - A Telltale Games Series;8.3;Dec 17, 2013 +80;FLY'N;8.2;Nov 9, 2012 +80;Total War: Attila;7.3;Feb 17, 2015 +80;The Wolf Among Us;8.8;Oct 11, 2013 +80;Nancy Drew: Secret of the Old Clock;8.1;Jul 26, 2005 +80;ArcheAge;3.6;Sep 16, 2014 +80;CAPSIZED;7.1;Apr 29, 2011 +80;Microsoft Flight Simulator X;7.6;Oct 17, 2006 +80;Myst V: End of Ages;7.8;Sep 19, 2005 +80;Railroad Tycoon 3;7.7;Oct 23, 2003 +80;Hostile Waters: Antaeus Rising;8.1;Jun 13, 2001 +79;Dustforce;7.9;Jan 17, 2012 +79;Empire Earth II;7.0;Apr 26, 2005 +79;Fallout 3: Point Lookout;7.8;Jun 23, 2009 +79;Test Drive Unlimited;8.1;Mar 20, 2007 +79;Dying Light: The Following;8.3;Feb 9, 2016 +79;The Path;7.0;Mar 18, 2009 +79;Dungeon of the Endless;8.0;Oct 27, 2014 +79;Revenge of the Titans;7.6;May 24, 2010 +79;Bookworm Adventures: Volume 2;7.6;Jul 30, 2009 +79;F1 2001;7.5;Oct 14, 2001 +79;Brothers in Arms: Hell's Highway;7.9;Oct 7, 2008 +79;Star Wars: Empire at War;8.4;Feb 15, 2006 +79;Dariusburst: Chronicle Saviours;8.3;Dec 3, 2015 +79;Europa Universalis: Rome - Vae Victis;8.6;Nov 19, 2008 +79;Silent Hunter: Wolves of the Pacific;6.5;Mar 20, 2007 +79;Pillars of Eternity: The White March - Part 2;6.7;Feb 16, 2016 +79;1701 A.D.;8.3;Nov 6, 2006 +79;Stasis;7.6;Aug 31, 2015 +79;Pro Evolution Soccer 2009;7.4;Nov 12, 2008 +79;Return to Mysterious Island;8.5;Nov 2, 2004 +79;Jotun;7.0;Sep 29, 2015 +79;Else Heart.Break();7.5;Sep 24, 2015 +79;Kohan: Ahriman's Gift;8.7;Nov 5, 2001 +79;Emperor: Battle for Dune;8.3;Jun 12, 2001 +79;Trackmania Turbo;6.9;Mar 24, 2016 +79;Cart Life;5.9;Jul 29, 2010 +79;Sword of the Stars: Born of Blood;8.1;Jun 5, 2007 +79;Worms Reloaded;6.7;Aug 26, 2010 +79;Warhammer: End Times - Vermintide;7.9;Oct 23, 2015 +79;Euro Truck Simulator 2;8.7;Jan 16, 2013 +79;Tropico 3;8.2;Oct 20, 2009 +79;Cities: Skylines - After Dark;7.9;Sep 24, 2015 +79;Runaway: A Twist of Fate;8.5;Apr 21, 2011 +79;Tales of Monkey Island Chapter 1: Launch of the Screaming Narwhal;8.2;Jul 7, 2009 +79;Bloodline Champions;8.0;Jan 13, 2011 +79;The Sims: Superstar;8.2;May 12, 2003 +79;NBA Live 2005;8.5;Oct 26, 2004 +79;Valiant Hearts: The Great War;8.6;Jun 25, 2014 +79;Payday 2;3.4;Aug 13, 2013 +79;Dungeons of Dredmor;7.8;Jul 13, 2011 +79;Geometry Wars 3: Dimensions;6.2;Nov 25, 2014 +79;Assassin's Creed: Director's Cut Edition;7.5;Apr 8, 2008 +79;Puzzle Dimension;7.6;Jun 21, 2010 +79;Split/Second;8.2;May 18, 2010 +79;Sang-Froid: Tales of Werewolves;7.9;Apr 5, 2013 +79;The Incredible Adventures of Van Helsing: Final Cut;7.2;Oct 7, 2015 +79;Hitman: Absolution;7.0;Nov 19, 2012 +79;Call of Juarez: Gunslinger;8.2;May 22, 2013 +79;Rome: Total War Alexander;7.6;Jun 19, 2006 +79;Strong Bad's Cool Game for Attractive People Episode 3: Baddest of the Bands;8.1;Oct 27, 2008 +79;Sam & Max Episode 102: Situation: Comedy;7.9;Dec 20, 2006 +79;Tropico 3: Absolute Power;7.7;May 17, 2010 +79;Sam & Max Episode 106: Bright Side of the Moon;7.3;Apr 26, 2007 +79;Day of Defeat;9.3;May 6, 2003 +79;Space Empires: IV;8.3;Nov 6, 2000 +79;Resident Evil 4: Ultimate HD Edition;7.7;Feb 27, 2014 +79;Sam & Max Episode 203: Night of the Raving Dead;8.2;Feb 12, 2008 +79;FlatOut: Ultimate Carnage;7.6;Sep 2, 2008 +79;Guitar Hero III: Legends of Rock;7.2;Nov 13, 2007 +79;Sid Meier's Civilization: Beyond Earth - Rising Tide;5.9;Oct 9, 2015 +79;Memoria;8.5;Aug 29, 2013 +79;The Last Door;7.8;May 20, 2014 +79;Shadowgrounds Survivor;7.8;Dec 6, 2007 +79;Gothic II;8.8;Oct 28, 2003 +79;Port Royale;8.2;Jun 4, 2003 +79;Deadly Dozen: Pacific Theater;7.9;Oct 31, 2002 +79;Shattered Galaxy;8.3;Aug 21, 2001 +79;Close Combat: Invasion: Normandy;8.2;Oct 10, 2000 +79;King's Bounty: The Legend;8.6;Sep 23, 2008 +79;Rage;5.1;Oct 4, 2011 +79;The Misadventures of P.B. Winterbottom;8.3;Apr 20, 2010 +79;Uru: Ages Beyond Myst;7.4;Nov 11, 2003 +79;Guild Wars: Eye of the North;8.6;Aug 28, 2007 +79;Tales From The Borderlands: Episode 4 - Escape Plan Bravo;8.4;Aug 18, 2015 +79;EverQuest: Lost Dungeons of Norrath;7.0;Sep 8, 2003 +79;Battlefield 1942: Secret Weapons of WWII;8.5;Sep 4, 2003 +79;The Sims: Unleashed;8.0;Sep 23, 2002 +79;Race the Sun;7.5;Aug 19, 2013 +79;The Sims 3: Pets;6.1;Oct 18, 2011 +79;Prototype;7.9;Jun 10, 2009 +79;Stick it to the Man!;7.2;Dec 13, 2013 +79;Street Fighter X Tekken;6.4;May 11, 2012 +79;Frozen Cortex;6.5;Feb 19, 2015 +79;Free Realms;6.4;Apr 29, 2009 +79;Homeworld: Deserts of Kharak;8.0;Jan 20, 2016 +79;Don't Starve;8.3;Apr 23, 2013 +79;Assault Android Cactus;7.0;Sep 23, 2015 +79;Trainz;7.2;Feb 10, 2002 +79;King Arthur: The Role-Playing Wargame;7.9;Nov 24, 2009 +79;Chivalry: Medieval Warfare;7.8;Oct 16, 2012 +79;Overlord II;8.1;Jun 23, 2009 +79;F.E.A.R. 2: Project Origin;7.8;Feb 10, 2009 +79;Tom Clancy's Rainbow Six Siege;6.9;Dec 1, 2015 +79;The Settlers 7: Paths to a Kingdom;5.2;Mar 23, 2010 +79;RollerCoaster Tycoon 3: Soaked!;2.9;Jun 23, 2005 +79;Dark Souls II: Crown of the Old Iron King;7.6;Aug 26, 2014 +79;TrackMania 2 Valley;8.3;Jul 4, 2013 +79;State of Decay;6.8;Nov 5, 2013 +79;LEGO Harry Potter: Years 1-4;7.8;Jun 29, 2010 +79;Rift: Storm Legion;7.8;Nov 13, 2012 +79;Crayon Physics Deluxe;7.6;Jan 7, 2009 +79;Nancy Drew: Legend of the Crystal Skull;8.5;Oct 8, 2007 +79;EverQuest II: Desert of Flames;7.8;Sep 12, 2005 +79;SimCity 4: Rush Hour;8.6;Sep 22, 2003 +79;Uncommon Valor: Campaign for the South Pacific;7.6;Dec 2, 2002 +79;Global Operations;8.3;Mar 25, 2002 +78;Apotheon;7.8;Feb 3, 2015 +78;Need for Speed: Most Wanted - A Criterion Game;4.4;Oct 30, 2012 +78;Star Wars: Battlefront II;8.8;Oct 31, 2005 +78;The Walking Dead: Season Two Episode 1 - All That Remains;8.5;Dec 17, 2013 +78;The Journey Down: Chapter Two;7.1;Aug 25, 2014 +78;Star Trek: Elite Force II;7.6;Jun 25, 2003 +78;Zuma's Revenge!;7.9;Sep 15, 2009 +78;Baldur's Gate: Enhanced Edition;7.0;Nov 28, 2012 +78;Doom 3: Resurrection of Evil;6.0;Apr 4, 2005 +78;LEGO Indiana Jones: The Original Adventures;7.7;Jun 3, 2008 +78;NASCAR Thunder 2004;7.5;Sep 16, 2003 +78;Transformers: Fall of Cybertron;7.8;Aug 21, 2012 +78;FIFA Soccer 06;6.7;Oct 4, 2005 +78;DeadCore;6.8;Oct 17, 2014 +78;The Walking Dead: Season Two Episode 5 - No Going Back;8.5;Aug 26, 2014 \ No newline at end of file diff --git a/_006/readme.md b/_006/readme.md new file mode 100644 index 0000000..47d08ab --- /dev/null +++ b/_006/readme.md @@ -0,0 +1,26 @@ +# Stack und Heap unterscheiden +## Lernziel + + + +Unterschied zwischen Stack und Heap bei parallelen Programmen verstehen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.threads.stack_heap](../sources/src/main/java/pr2/threads/stack_heap/). + +Schreiben Sie ein kurzes Java-Programm `ThreadProblem`, das den Unterschied zwischen Variablen auf dem Stack und Variablen auf dem Heap bezüglich des gleichzeitigen Zugriffs durch Threads demonstriert. + + + \ No newline at end of file diff --git a/_007/games.txt b/_007/games.txt new file mode 100644 index 0000000..3390355 --- /dev/null +++ b/_007/games.txt @@ -0,0 +1,994 @@ +96;Half-Life 2;9.2;Nov 16, 2004 +96;Grand Theft Auto V;7.8;Apr 14, 2015 +96;The Orange Box;9.3;Oct 10, 2007 +96;Half-Life;9.1;Oct 31, 1998 +96;BioShock;8.4;Aug 21, 2007 +95;Baldur's Gate II: Shadows of Amn;9.2;Sep 24, 2000 +95;Portal 2;8.8;Apr 19, 2011 +94;The Elder Scrolls V: Skyrim;8.1;Nov 11, 2011 +94;Mass Effect 2;8.7;Jan 26, 2010 +94;Grand Theft Auto: Vice City;8.8;May 12, 2003 +94;Civilization II;9.0;Feb 29, 1996 +94;Quake;8.8;Jun 22, 1996 +94;BioShock Infinite;8.5;Mar 26, 2013 +94;The Elder Scrolls IV: Oblivion;8.0;Mar 20, 2006 +94;Grim Fandango;9.1;Sep 30, 1998 +94;Diablo;8.7;Nov 30, 1996 +94;Sid Meier's Civilization IV;8.2;Oct 25, 2005 +93;The Witcher 3: Wild Hunt;9.1;May 19, 2015 +93;Company of Heroes;8.8;Sep 13, 2006 +93;Unreal Tournament 2004;8.9;Mar 16, 2004 +93;Starcraft II: Wings of Liberty;8.2;Jul 27, 2010 +93;Minecraft;7.4;May 10, 2009 +93;Grand Theft Auto III;8.4;May 20, 2002 +93;Homeworld;8.9;Aug 31, 1999 +93;Star Wars: Knights of the Old Republic;9.0;Nov 18, 2003 +93;World of Warcraft;7.2;Nov 23, 2004 +93;Grand Theft Auto: San Andreas;8.8;Jun 7, 2005 +92;Call of Duty 4: Modern Warfare;8.5;Nov 5, 2007 +92;Warcraft III: Reign of Chaos;9.1;Jul 3, 2002 +92;The Sims;7.9;Jan 31, 2000 +92;Sid Meier's Gettysburg!;7.7;Sep 30, 1997 +92;World Soccer Winning Eleven 7 International;7.9;Apr 9, 2004 +92;Team Fortress 2;9.2;Apr 8, 2008 +92;System Shock 2;9.1;Aug 11, 1999 +92;Tom Clancy's Splinter Cell: Chaos Theory;8.8;Mar 28, 2005 +92;Undertale;8.2;Sep 15, 2015 +92;Rome: Total War;9.1;Sep 22, 2004 +92;Thief: The Dark Project;9.1;Nov 30, 1998 +92;Age of Empires II: The Age of Kings;9.0;Sep 30, 1999 +92;Unreal Tournament (1999);9.1;Nov 30, 1999 +92;Sid Meier's Alpha Centauri;9.1;Feb 12, 1999 +92;Galactic Civilizations II: Twilight of the Arnor;8.4;Apr 30, 2008 +92;Tiger Woods PGA Tour 2003;6.0;Oct 31, 2002 +91;Dishonored;8.4;Oct 9, 2012 +91;Medal of Honor: Allied Assault;8.6;Jan 20, 2002 +91;Myth: The Fallen Lords;8.8;Oct 31, 1997 +91;World of Warcraft: Wrath of the Lich King;7.4;Nov 13, 2008 +91;F1 Challenge '99-'02;8.3;Jun 24, 2003 +91;Baldur's Gate;9.0;Nov 30, 1998 +91;IL-2 Sturmovik;8.7;Nov 18, 2001 +91;FreeSpace 2;8.8;Sep 30, 1999 +91;Metal Gear Solid V: The Phantom Pain;7.7;Sep 1, 2015 +91;Tom Clancy's Splinter Cell;8.6;Feb 19, 2003 +91;Crysis;8.0;Nov 13, 2007 +91;World of Warcraft: The Burning Crusade;7.9;Jan 16, 2007 +91;Tiger Woods PGA Tour 2005;4.6;Sep 20, 2004 +91;The Longest Journey;8.9;Nov 16, 2000 +91;Tony Hawk's Pro Skater 2;8.5;Oct 31, 2000 +91;Star Wars Jedi Knight: Dark Forces II;8.5;Sep 30, 1997 +91;Batman: Arkham Asylum;8.7;Sep 15, 2009 +91;Galactic Civilizations II: Dark Avatar;8.2;Feb 14, 2007 +91;The Operative: No One Lives Forever;8.9;Nov 9, 2000 +91;Battlefield 2;8.4;Jun 21, 2005 +91;Street Fighter IV;8.0;Jul 1, 2009 +91;Fallout 3;7.9;Oct 28, 2008 +91;Batman: Arkham City;8.6;Nov 22, 2011 +91;Fez;6.5;May 1, 2013 +91;Planescape: Torment;9.3;Nov 30, 1999 +91;Neverwinter Nights;8.1;Jun 16, 2002 +91;No One Lives Forever 2: A Spy in H.A.R.M.'s Way;8.7;Sep 30, 2002 +91;Dragon Age: Origins;8.6;Nov 3, 2009 +91;Mark of the Ninja;8.0;Oct 16, 2012 +91;Dark Souls II;7.1;Apr 25, 2014 +91;Call of Duty;8.5;Oct 29, 2003 +91;Madden NFL 2004;8.2;Aug 12, 2003 +90;The Sims 2;8.8;Sep 14, 2004 +90;World of Warcraft: Cataclysm;5.5;Dec 7, 2010 +90;World of Goo;8.5;Oct 21, 2008 +90;Spelunky;7.2;Aug 8, 2013 +90;Black & White;7.6;Mar 26, 2001 +90;Portal;9.3;Apr 8, 2008 +90;NHL 2001;6.9;Sep 28, 2000 +90;Tony Hawk's Pro Skater 3;8.6;Mar 28, 2002 +90;Deus Ex;9.3;Jun 26, 2000 +90;Half-Life 2: Episode Two;9.2;Oct 10, 2007 +90;Braid;8.6;Jan 26, 2010 +90;The Chronicles of Riddick: Escape From Butcher Bay - Developer's Cut;8.7;Dec 8, 2004 +90;Sid Meier's Civilization III;8.4;Oct 30, 2001 +90;Silent Hunter III;7.8;Mar 15, 2005 +90;Sid Meier's Civilization V;7.8;Sep 21, 2010 +90;Falcon 4.0: Allied Force;8.6;Jun 28, 2005 +90;Deus Ex: Human Revolution;8.5;Aug 23, 2011 +90;Dark Souls III;8.2;Apr 12, 2016 +90;Flight Simulator 2002;8.4;Oct 19, 2001 +90;Brothers: A Tale of Two Sons;8.5;Sep 3, 2013 +90;Dota 2;6.2;Jul 9, 2013 +90;Guild Wars 2;7.9;Aug 28, 2012 +90;Freedom Force;8.0;Mar 24, 2002 +90;GTR 2;8.7;Sep 29, 2006 +90;Grand Theft Auto IV;6.5;Dec 2, 2008 +90;Total War: Shogun 2;8.3;Mar 15, 2011 +90;Empire: Total War;6.9;Mar 3, 2009 +90;Command & Conquer: Red Alert;8.9;Oct 31, 1996 +89;Star Wars Jedi Knight II: Jedi Outcast;8.6;Mar 26, 2002 +89;The Walking Dead: A Telltale Games Series;8.7;Dec 11, 2012 +89;Age of Mythology;8.9;Nov 1, 2002 +89;Sacrifice;8.8;Nov 5, 2000 +89;The Witcher 3: Wild Hunt - Hearts of Stone;8.4;Oct 13, 2015 +89;Pillars of Eternity;8.3;Mar 26, 2015 +89;The Elder Scrolls III: Morrowind;9.0;May 1, 2002 +89;Rocksmith 2014 Edition;7.9;Oct 22, 2013 +89;Fallout;8.9;Sep 30, 1997 +89;World Soccer Winning Eleven 9;8.4;Apr 28, 2006 +89;Worldwide Soccer Manager 2005;8.7;Dec 7, 2004 +89;Left 4 Dead;9.2;Nov 18, 2008 +89;Left 4 Dead 2;8.5;Nov 17, 2009 +89;NASCAR Racing 2002 Season;5.8;Feb 14, 2002 +89;Mass Effect;8.6;May 28, 2008 +89;Combat Mission: Barbarossa to Berlin;8.3;Oct 29, 2002 +89;Homeworld: Cataclysm;8.9;Sep 7, 2000 +89;The Walking Dead: Episode 5 - No Time Left;8.9;Nov 21, 2012 +89;Guild Wars;8.4;Apr 26, 2005 +89;Borderlands 2;8.2;Sep 18, 2012 +89;Max Payne;9.1;Jul 23, 2001 +89;Out of the Park Baseball 15;7.2;Apr 21, 2014 +89;World in Conflict;8.1;Sep 18, 2007 +89;NASCAR Racing 4;8.2;Feb 6, 2001 +89;Duke Nukem 3D;8.8;Jan 31, 1996 +89;Far Cry;8.0;Mar 23, 2004 +89;FIFA Soccer 12;7.1;Sep 27, 2011 +89;XCOM: Enemy Unknown;8.2;Oct 9, 2012 +89;Mass Effect 3;5.4;Mar 6, 2012 +89;Rise of Nations;9.0;May 20, 2003 +89;NASCAR Racing 2003 Season;8.6;Feb 14, 2003 +89;Descent 3;8.3;Jun 14, 2000 +89;The Curse of Monkey Island;9.1;Oct 31, 1997 +89;Battlefield 3;7.5;Oct 25, 2011 +89;Battlefield 1942;8.6;Sep 10, 2002 +89;Madden NFL 2003;8.4;Aug 12, 2002 +89;DiRT 2;8.3;Dec 10, 2009 +89;Stardew Valley;8.5;Feb 26, 2016 +89;Prince of Persia: The Sands of Time;8.6;Nov 30, 2003 +89;Railroad Tycoon II;8.4;Oct 31, 1998 +88;Microsoft Flight Simulator 2004: A Century of Flight;8.2;Jul 29, 2003 +88;Medieval: Total War;8.8;Aug 19, 2002 +88;Mafia;9.1;Aug 27, 2002 +88;LIMBO;8.1;Aug 2, 2011 +88;Nuclear Throne;7.4;Dec 5, 2015 +88;Crusader Kings II: The Old Gods;8.8;May 28, 2013 +88;Assassin's Creed: Brotherhood;8.2;Mar 22, 2011 +88;Superbike 2001;6.5;Oct 9, 2000 +88;F.E.A.R.;8.3;Oct 17, 2005 +88;Kerbal Space Program;8.1;Apr 27, 2015 +88;Tribes 2;8.5;Mar 28, 2001 +88;Age of Empires II: The Conquerors Expansion;9.0;Aug 24, 2000 +88;Tiger Woods PGA Tour 2004;8.8;Sep 22, 2003 +88;Warcraft III: The Frozen Throne;9.0;Jul 1, 2003 +88;Starcraft;9.1;Apr 1, 1998 +88;Far Cry 3;8.2;Dec 4, 2012 +88;XCOM 2;7.0;Feb 5, 2016 +88;World Soccer Winning Eleven 8 International;8.5;Feb 16, 2005 +88;Torchlight II;8.6;Sep 20, 2012 +88;Myth II: Soulblighter;9.0;Nov 30, 1998 +88;Return to Castle Wolfenstein;8.7;Nov 19, 2001 +88;Shogo: Mobile Armor Division;8.9;Sep 30, 1998 +88;Thirty Flights of Loving;5.0;Aug 20, 2012 +88;Hearthstone: Heroes of Warcraft;6.3;Mar 11, 2014 +88;Medieval II: Total War;8.9;Nov 13, 2006 +88;F1 2002;7.6;Jun 13, 2002 +88;The Stanley Parable;8.0;Oct 17, 2013 +88;BioShock 2;8.0;Feb 9, 2010 +88;Counter-Strike: Source;8.9;Sep 26, 2005 +88;Starcraft II: Legacy of the Void;8.3;Nov 10, 2015 +88;Diablo III;4.0;May 15, 2012 +88;Rise of Nations: Thrones & Patriots;8.8;Apr 27, 2004 +88;Sid Meier's Pirates!;8.3;Nov 22, 2004 +88;EVE Online: Special Edition;7.8;Mar 10, 2009 +88;Guacamelee! Gold Edition;7.3;Aug 8, 2013 +88;Armadillo Run;8.2;Apr 22, 2006 +88;Dark Age of Camelot;8.9;Sep 1, 2001 +88;Baldur's Gate II: Throne of Bhaal;8.9;Jun 21, 2001 +88;Counter-Strike;9.3;Nov 8, 2000 +88;Tony Hawk's Pro Skater 4;8.4;Aug 27, 2003 +88;Ori and the Blind Forest;8.7;Mar 11, 2015 +88;Diablo II;8.8;Jun 29, 2000 +88;The Witcher 2: Assassins of Kings;8.5;May 17, 2011 +87;Plants vs. Zombies;8.9;Aug 18, 2009 +87;Doom 3;7.5;Aug 3, 2004 +87;Super Meat Boy;8.3;Apr 5, 2011 +87;Football Manager 2010;9.1;Nov 3, 2009 +87;Oddworld: Abe's Oddysee - New 'n' Tasty;7.8;Feb 25, 2015 +87;Tom Clancy's Splinter Cell: Pandora Tomorrow;8.0;Mar 23, 2004 +87;Europa Universalis II;8.8;Nov 12, 2001 +87;Burnout Paradise: The Ultimate Box;7.5;Feb 5, 2009 +87;Battlefield: Bad Company 2;8.3;Mar 2, 2010 +87;GRID;7.9;Jun 3, 2008 +87;Crypt of the NecroDancer;7.7;Apr 23, 2015 +87;Sins of a Solar Empire;8.2;Feb 4, 2008 +87;MechWarrior 4: Vengeance;8.2;Nov 23, 2000 +87;Thief II: The Metal Age;9.1;Feb 29, 2000 +87;Diablo II: Lord of Destruction;9.1;Jun 27, 2001 +87;Monkey Island 2 Special Edition: LeChuck's Revenge;9.0;Jul 7, 2010 +87;Half-Life 2: Episode One;8.6;Jun 1, 2006 +87;The Swapper;8.7;May 30, 2013 +87;Hitman 2: Silent Assassin;8.2;Oct 1, 2002 +87;Year Walk;7.0;Mar 6, 2014 +87;Max Payne 3;7.6;Jun 1, 2012 +87;TowerFall Ascension;6.6;Mar 11, 2014 +87;Battlefield 3: Armored Kill;7.0;Sep 11, 2012 +87;NHL 2002;8.7;Sep 17, 2001 +87;Icewind Dale;8.3;Jun 29, 2000 +87;The Witness;6.6;Jan 26, 2016 +87;Brothers in Arms: Road to Hill 30;7.1;Mar 15, 2005 +87;Kohan: Immortal Sovereigns;8.6;Mar 14, 2001 +87;Day of the Tentacle Remastered;7.9;Mar 21, 2016 +87;Dead Space 2;8.3;Jan 25, 2011 +87;Diablo III: Reaper of Souls;6.6;Mar 25, 2014 +87;Shogun: Total War Warlord Edition;8.7;Aug 13, 2001 +87;Serious Sam: The First Encounter;8.4;Mar 21, 2001 +87;Grand Prix 3;8.3;Aug 24, 2000 +87;Call of Duty: United Offensive;8.3;Sep 14, 2004 +87;Divinity: Original Sin;8.7;Jan 17, 2014 +87;Company of Heroes: Opposing Fronts;8.6;Sep 24, 2007 +87;Psychonauts;8.9;Apr 19, 2005 +87;Gears of War;7.8;Nov 6, 2007 +87;Out of the Park Baseball 4;7.8;Feb 28, 2002 +87;Europa Universalis IV;8.7;Aug 13, 2013 +87;NHL 2004;8.2;Sep 22, 2003 +87;Zeus: Master of Olympus;9.0;Oct 22, 2000 +87;World of Warcraft: Warlords of Draenor;6.0;Nov 13, 2014 +87;Warhammer 40,000: Dawn of War - Dark Crusade;8.9;Oct 9, 2006 +87;Commandos 2: Men of Courage;8.8;Sep 20, 2001 +86;Tales From The Borderlands: Episode 5 - The Vault of the Traveler;8.7;Oct 20, 2015 +86;Bastion;8.6;Aug 16, 2011 +86;Gone Home;5.4;Aug 15, 2013 +86;Pac-Man Championship Edition DX +;7.3;Sep 24, 2013 +86;Supreme Commander;8.3;Feb 20, 2007 +86;Total War: Shogun 2 - Fall of the Samurai;8.4;Mar 23, 2012 +86;Startopia;8.7;Jun 19, 2001 +86;Enemy Engaged: RAH-66 Comanche Versus Ka-52 Hokum;8.3;Jul 31, 2000 +86;Fallout 2;9.2;Sep 30, 1998 +86;Final Fantasy XIV: Heavensward;7.7;Jun 23, 2015 +86;Football Manager 2013;6.7;Nov 1, 2012 +86;Out of the Park Baseball 14;8.6;Apr 15, 2013 +86;The Witcher: Enhanced Edition;8.5;Sep 16, 2008 +86;Borderlands: The Secret Armory of General Knoxx;7.6;Feb 25, 2010 +86;Call of Duty 2;8.3;Oct 25, 2005 +86;Astebreed;7.3;May 30, 2014 +86;Ground Control;7.8;May 31, 2000 +86;Rise of the Tomb Raider;8.0;Jan 28, 2016 +86;Resident Evil 5;7.1;Sep 18, 2009 +86;Saints Row IV;7.4;Aug 20, 2013 +86;Black Mesa;9.0;Sep 14, 2012 +86;EverQuest: Omens of War;7.7;Sep 13, 2004 +86;Steel Beasts;8.4;Sep 24, 2000 +86;Total Annihilation;8.9;Sep 30, 1997 +86;Need for Speed: Hot Pursuit;6.7;Nov 16, 2010 +86;FIFA Soccer 13;6.6;Sep 25, 2012 +86;Sid Meier's Civilization IV: Beyond the Sword;8.6;Jul 23, 2007 +86;The Sims 3;7.6;Jun 2, 2009 +86;Freedom Force vs The 3rd Reich;7.7;Mar 8, 2005 +86;The Binding of Isaac: Rebirth;8.3;Nov 4, 2014 +86;Tribes: Ascend;7.7;Apr 12, 2012 +86;Titanfall;6.1;Mar 11, 2014 +86;Rayman Origins;8.4;Mar 29, 2012 +86;Her Story;5.7;Jun 24, 2015 +86;Starcraft II: Heart of the Swarm;7.9;Mar 12, 2013 +86;Mass Effect 2: Lair of the Shadow Broker;8.5;Sep 7, 2010 +86;LEGO Star Wars II: The Original Trilogy;8.3;Sep 12, 2006 +86;Dungeon Siege;7.9;Mar 31, 2002 +86;Crysis 2;6.7;Mar 22, 2011 +86;Call of Duty: Modern Warfare 2;4.1;Nov 10, 2009 +86;The Secret of Monkey Island: Special Edition;9.1;Jul 15, 2009 +86;Max Payne 2: The Fall of Max Payne;9.0;Oct 14, 2003 +86;Homeworld Remastered Collection;8.2;Feb 25, 2015 +86;Galactic Civilizations II: Dread Lords;8.0;Feb 21, 2006 +86;Tomb Raider;8.5;Mar 5, 2013 +86;Star Trek: Voyager Elite Force;8.2;Sep 20, 2000 +86;Worldwide Soccer Manager 2008;8.4;Oct 23, 2007 +86;IL-2 Sturmovik: Forgotten Battles;8.6;Mar 2, 2003 +86;Hyper Light Drifter;8.1;Mar 31, 2016 +86;DiRT 3;6.9;May 24, 2011 +86;Unreal Tournament 2003;8.1;Sep 30, 2002 +86;Age of Wonders II: The Wizard's Throne;8.4;Jun 12, 2002 +86;Links 2001;6.8;Oct 24, 2000 +86;EverQuest: The Ruins of Kunark;8.8;Mar 31, 2000 +86;Full Throttle;8.8;Apr 30, 1995 +86;The Lord of the Rings Online: Shadows of Angmar;8.1;Apr 24, 2007 +86;Pony Island;6.8;Jan 4, 2016 +86;Warhammer 40,000: Dawn of War;8.8;Sep 20, 2004 +86;Warhammer Online: Age of Reckoning;7.9;Sep 16, 2008 +86;Dead Space;8.0;Oct 20, 2008 +86;Bionic Commando Rearmed;7.0;Aug 13, 2008 +86;Command & Conquer: Red Alert 2 - Yuri's Revenge;9.0;Oct 10, 2001 +86;Europa Universalis;8.1;Feb 2, 2001 +86;Escape from Monkey Island;8.2;Nov 8, 2000 +86;IL-2 Sturmovik: 1946;8.8;Mar 13, 2007 +86;XCOM: Enemy Within;7.9;Nov 12, 2013 +86;Battlefield 3: Back to Karkand;7.2;Dec 13, 2011 +86;Heroes of the Storm;6.7;Jun 2, 2015 +86;Civilization III: Conquests;8.4;Nov 4, 2003 +86;Path of Exile;8.0;Jan 25, 2013 +86;Battlefield: Bad Company 2 Vietnam;8.1;Dec 18, 2010 +86;Assassin's Creed II;6.8;Mar 9, 2010 +86;The Elder Scrolls IV: Shivering Isles;8.4;Mar 26, 2007 +86;DiRT Rally;8.8;Dec 7, 2015 +86;Rocket League;8.1;Jul 7, 2015 +86;Allegiance;8.2;Mar 31, 2000 +85;The Talos Principle;8.5;Dec 11, 2014 +85;Cities: Skylines;8.9;Mar 10, 2015 +85;Falcon 4.0;8.0;Nov 30, 1998 +85;Tom Clancy's Rainbow Six;8.6;Jul 31, 1998 +85;Madden NFL 2005;6.4;Sep 14, 2004 +85;Legend of Grimrock II;8.0;Oct 15, 2014 +85;Sam & Max Episode 205: What's New, Beelzebub?;8.6;Apr 10, 2008 +85;Dragon Age: Inquisition;5.8;Nov 18, 2014 +85;Tales from the Borderlands: A Telltale Game Series;8.7;Apr 26, 2016 +85;Tom Clancy's Rainbow Six: Vegas;7.7;Dec 12, 2006 +85;City of Heroes;8.5;Apr 27, 2004 +85;SWAT 4;8.6;Apr 5, 2005 +85;Clive Barker's Undying;8.7;Feb 21, 2001 +85;EverQuest;8.2;Mar 16, 1999 +85;Warhammer 40,000: Dawn of War II;8.1;Feb 18, 2009 +85;Command & Conquer 3: Tiberium Wars;8.0;Mar 26, 2007 +85;Bit.Trip Presents...Runner2: Future Legend of Rhythm Alien;8.2;Feb 26, 2013 +85;Hotline Miami;8.5;Oct 23, 2012 +85;Out of the Park Baseball 13;8.2;Apr 9, 2012 +85;Wizardry 8;8.6;Nov 14, 2001 +85;Aliens Versus Predator 2;8.7;Oct 31, 2001 +85;Operation Flashpoint: Cold War Crisis;9.0;Aug 30, 2001 +85;Tropico;8.4;Apr 5, 2001 +85;Giants: Citizen Kabuto;8.9;Dec 6, 2000 +85;NASCAR SimRacing;4.9;Feb 15, 2005 +85;The Lord of the Rings Online: Mines of Moria;8.3;Nov 17, 2008 +85;The Binding of Isaac: Afterbirth;8.1;Oct 30, 2015 +85;Amnesia: The Dark Descent;8.6;Feb 17, 2011 +85;GTR FIA Racing;8.6;May 3, 2005 +85;Football Manager 2011;8.4;Nov 23, 2010 +85;Dust: An Elysian Tail;8.5;May 24, 2013 +85;South Park: The Stick of Truth;8.6;Mar 4, 2014 +85;Dark Souls: Prepare to Die Edition;7.4;Aug 24, 2012 +85;Medieval II: Total War Kingdoms;8.8;Aug 28, 2007 +85;Shovel Knight;7.9;Jun 26, 2014 +85;DmC: Devil May Cry;6.7;Jan 24, 2013 +85;Peggle Deluxe;8.1;Feb 19, 2008 +85;Monopoly Tycoon;8.0;Sep 24, 2001 +85;Indigo Prophecy;8.3;Oct 2, 2005 +85;Prince of Persia: The Two Thrones;8.0;Dec 1, 2005 +85;Sam & Max Episode 204: Chariots of the Dogs;8.1;Mar 13, 2008 +85;Assetto Corsa;8.4;Dec 19, 2014 +85;Machinarium;8.8;Oct 16, 2009 +85;Frozen Synapse;7.7;May 26, 2011 +85;Valkyria Chronicles;8.3;Nov 11, 2014 +85;Freelancer;8.9;Mar 3, 2003 +85;Zenzizenzic;5.9;Jul 23, 2015 +85;The Wolf Among Us: Episode 1 - Faith;9.0;Oct 11, 2013 +85;Mega Man Legacy Collection;7.3;Aug 25, 2015 +85;Warhammer 40,000: Dawn of War II - Chaos Rising;8.7;Mar 11, 2010 +85;Far Cry 2;5.8;Oct 21, 2008 +85;The Walking Dead: Episode 3 - Long Road Ahead;8.4;Aug 29, 2012 +85;AudioSurf;8.8;Feb 15, 2008 +85;BattleBlock Theater;8.0;May 15, 2014 +85;Star Wars: Knights of the Old Republic II - The Sith Lords;8.4;Feb 8, 2005 +85;MVP Baseball 2005;8.1;Feb 22, 2005 +85;The Elder Scrolls III: Bloodmoon;8.5;Jun 3, 2003 +85;Rogue Legacy;7.9;Jun 27, 2013 +85;Chaos Reborn;8.4;Oct 26, 2015 +85;Thief: Deadly Shadows;8.4;May 25, 2004 +85;Football Manager 2014;5.4;Oct 30, 2013 +85;System Shock: Enhanced Edition;7.9;Sep 22, 2015 +85;EverQuest: Gates of Discord;6.8;Feb 9, 2004 +85;FIFA 2001 Major League Soccer;7.3;Oct 30, 2000 +85;Sid Meier's Civilization V: Brave New World;8.6;Jul 9, 2013 +85;Final Fantasy XI;7.5;Oct 28, 2003 +85;Serious Sam: The Second Encounter;8.5;Feb 4, 2002 +85;The Sims: Hot Date;7.9;Nov 12, 2001 +85;American McGee's Alice;8.2;Dec 6, 2000 +85;Trials Evolution: Gold Edition;6.7;Mar 21, 2013 +85;Warhammer 40,000: Dawn of War - Winter Assault;8.3;Sep 21, 2005 +85;Tony Hawk's Underground 2;7.9;Oct 4, 2004 +85;Papers, Please;8.5;Aug 8, 2013 +85;Star Wars: The Old Republic;5.9;Dec 20, 2011 +85;Anarchy Online: Shadowlands;8.7;Sep 8, 2003 +85;Dark Age of Camelot: Shrouded Isles;8.8;Dec 2, 2002 +85;Obsidian;8.3;Dec 31, 1996 +84;The Walking Dead: Episode 2 - Starved for Help;8.6;Jun 29, 2012 +84;Saints Row: The Third;8.1;Nov 15, 2011 +84;Fallout: New Vegas;8.5;Oct 19, 2010 +84;The Movies;8.3;Nov 8, 2005 +84;Neverwinter Nights: Hordes of the Underdark;8.6;Dec 2, 2003 +84;Command & Conquer: Generals;8.3;Feb 10, 2003 +84;Sid Meier's SimGolf;8.2;Jan 23, 2002 +84;Middle-earth: Shadow of Mordor;8.0;Sep 30, 2014 +84;SpaceChem;8.4;Mar 2, 2011 +84;Downwell;6.2;Oct 15, 2015 +84;Pinball FX 2;8.0;Oct 27, 2012 +84;Devil Daggers;6.7;Feb 18, 2016 +84;PlanetSide 2;7.0;Nov 20, 2012 +84;Enter the Gungeon;7.4;Apr 5, 2016 +84;GT Legends;8.6;Jan 23, 2006 +84;Hearthstone: Goblins Vs. Gnomes;6.6;Dec 8, 2014 +84;Space Rangers 2: Rise of the Dominators;9.0;Mar 27, 2006 +84;Tales From The Borderlands: Episode 1 - Zer0 Sum;8.4;Nov 25, 2014 +84;Puzzle Quest: Challenge of the Warlords;8.3;Oct 10, 2007 +84;Heroes of Might and Magic IV;7.6;Mar 29, 2002 +84;Command & Conquer: Red Alert 2;8.9;Oct 21, 2000 +84;Shogun: Total War;8.7;Jun 13, 2000 +84;DiRT;7.2;Jun 19, 2007 +84;Darkest Dungeon;8.0;Jan 19, 2016 +84;Super Street Fighter IV: Arcade Edition;7.8;Jul 13, 2011 +84;Football Manager 2012;8.0;Oct 20, 2011 +84;Guild Wars Factions;8.5;Apr 28, 2006 +84;80 Days (2015);6.1;Sep 29, 2015 +84;Spore;5.2;Sep 7, 2008 +84;Unity of Command;7.2;Nov 15, 2011 +84;Hearthstone: The Grand Tournament;4.0;Aug 24, 2015 +84;Metro Redux;8.0;Aug 26, 2014 +84;Time Gentlemen, Please!;7.6;Jul 2, 2009 +84;Europa Universalis IV: Wealth of Nations;8.4;May 29, 2014 +84;Mass Effect 3: Citadel;7.8;Mar 5, 2013 +84;Disciples II: Dark Prophecy;8.6;Jan 22, 2002 +84;Just Cause 2;7.7;Mar 23, 2010 +84;Crysis Warhead;7.9;Sep 16, 2008 +84;Assassin's Creed IV: Black Flag;7.7;Nov 19, 2013 +84;Age of Mythology: The Titans;8.7;Sep 30, 2003 +84;SimCity 4;8.7;Jan 12, 2003 +84;Microsoft Train Simulator;8.4;May 31, 2001 +84;Rise of Nations: Rise of Legends;8.5;May 9, 2006 +84;TOCA Race Driver 3;7.8;Feb 24, 2006 +84;FTL: Faster Than Light;8.4;Sep 14, 2012 +84;SOMA;8.2;Sep 22, 2015 +84;DEFCON: Everybody Dies;8.3;Mar 26, 2007 +84;Tron 2.0;8.3;Aug 26, 2003 +84;Brothers in Arms: Earned in Blood;7.3;Oct 6, 2005 +84;Grim Fandango Remastered;8.0;Jan 27, 2015 +84;The Lord of the Rings: The Battle for Middle-Earth II;7.5;Mar 2, 2006 +84;Battlefield Vietnam;7.4;Mar 16, 2004 +84;Medieval: Total War - Viking Invasion;8.8;May 7, 2003 +84;Fallout 4;5.4;Nov 10, 2015 +84;Guild Wars Nightfall;8.7;Oct 26, 2006 +84;The Binding of Isaac;8.3;Sep 28, 2011 +84;Enemy Territory: Quake Wars;8.3;Oct 2, 2007 +84;Trine 2;8.4;Dec 7, 2011 +84;Rift;7.3;Mar 1, 2011 +84;The Wolf Among Us: Episode 5 - Cry Wolf;8.8;Jul 8, 2014 +84;Shift 2: Unleashed;6.1;Mar 29, 2011 +84;Sid Meier's Civilization IV: Warlords;8.2;Jul 24, 2006 +84;Battlefield 1942: The Road to Rome;7.9;Feb 2, 2003 +84;Poseidon;8.4;Jun 25, 2001 +84;F1 2010;6.6;Sep 22, 2010 +84;Shatter;7.4;Mar 15, 2010 +84;Darwinia;7.9;Jun 12, 2006 +84;Ultimate General: Gettysburg;8.0;Oct 16, 2014 +83;Final Fantasy XI: Treasures of Aht Urhgan;7.6;Apr 18, 2006 +83;MDK2;8.4;May 31, 2000 +83;Gunpoint;8.4;Jun 3, 2013 +83;Beyond Good & Evil;8.7;Nov 19, 2003 +83;Anno 2070;7.0;Nov 17, 2011 +83;SMITE;8.3;Mar 25, 2014 +83;Halo: Combat Evolved;7.4;Sep 30, 2003 +83;Grim Dawn;8.9;Feb 25, 2016 +83;Silent Storm;8.9;Jan 20, 2004 +83;Command & Conquer: Generals - Zero Hour;9.0;Sep 22, 2003 +83;Homeworld 2;8.3;Sep 16, 2003 +83;Galactic Civilizations;8.1;Mar 26, 2003 +83;EverQuest: The Shadows of Luclin;7.2;Dec 2, 2001 +83;Orcs Must Die!;8.1;Oct 11, 2011 +83;Life is Strange;8.6;Jan 19, 2016 +83;Fable: The Lost Chapters;8.7;Sep 20, 2005 +83;Unreal Tournament III;8.0;Nov 19, 2007 +83;The Blackwell Epiphany;7.6;Apr 24, 2014 +83;The Lord of the Rings Online: Siege of Mirkwood;7.1;Dec 1, 2009 +83;Out of the Park Baseball 10;8.3;Jun 2, 2009 +83;Tomb Raider: Anniversary;8.0;Jun 5, 2007 +83;Need for Speed: Shift;5.7;Sep 15, 2009 +83;Hearts of Iron II;8.6;Jan 4, 2005 +83;FIFA Soccer 11;7.6;Sep 28, 2010 +83;Project CARS;7.0;May 6, 2015 +83;FIFA Soccer 2003;6.8;Nov 2, 2002 +83;Icewind Dale II;8.3;Aug 26, 2002 +83;Age of Empires;8.8;Sep 30, 1997 +83;EverQuest II: Echoes of Faydwer;8.4;Nov 13, 2006 +83;EverQuest II;7.3;Nov 8, 2004 +83;Terraria;8.5;May 16, 2011 +83;Final Fantasy XIV Online: A Realm Reborn;6.7;Aug 27, 2013 +83;Card Hunter (2013);7.9;Sep 12, 2013 +83;Sam & Max: The Devil's Playhouse - Episode 2: The Tomb of Sammun-Mak;7.9;May 18, 2010 +83;This War of Mine;8.4;Nov 14, 2014 +83;Darksiders;7.7;Sep 23, 2010 +83;Tom Clancy's Rainbow Six 3: Raven Shield;8.9;Mar 19, 2003 +83;World of Outlaws: Sprint Cars;7.9;Feb 11, 2003 +83;Colin McRae Rally 2.0;8.4;Feb 14, 2001 +83;Combat Flight Simulator 2: WWII Pacific Theater;8.1;Oct 13, 2000 +83;Orcs Must Die! 2;7.9;Jul 30, 2012 +83;Prey;7.9;Jul 11, 2006 +83;Metal Gear Rising: Revengeance;7.9;Jan 9, 2014 +83;Starseed Pilgrim;6.3;Apr 16, 2013 +83;Age of Conan: Rise of the Godslayer;8.4;May 11, 2010 +83;Alan Wake;8.0;Feb 16, 2012 +83;Tiger Woods PGA Tour 2002;5.0;Feb 24, 2002 +83;Monaco: What's Yours Is Mine;7.7;Apr 24, 2013 +83;Transistor;8.3;May 20, 2014 +83;Helldivers;6.9;Dec 7, 2015 +83;Worldwide Soccer Manager 2009;8.1;Nov 18, 2008 +83;Call of Duty: World at War;7.5;Nov 10, 2008 +83;Torchlight;8.0;Jan 5, 2010 +83;Prison Architect;8.3;Oct 6, 2015 +83;Valdis Story: Abyssal City;8.1;Oct 30, 2013 +83;Crimson Skies;8.2;Sep 17, 2000 +83;RACE 07: Official WTCC Game;9.0;Oct 9, 2007 +83;SUPERHOT;7.6;Feb 25, 2016 +83;EverQuest II: Rise of Kunark;7.9;Nov 13, 2007 +83;Dark Age of Camelot: Catacombs;8.6;Dec 7, 2004 +83;Spore Creature Creator;8.1;Jun 17, 2008 +83;Colin McRae Rally 2005;7.0;Oct 28, 2004 +83;Tom Clancy's Splinter Cell: Conviction;5.2;Apr 27, 2010 +83;Tribes: Vengeance;7.6;Oct 12, 2004 +83;L.A. Noire: The Complete Edition;7.9;Nov 8, 2011 +83;GTR Evolution;8.2;Sep 2, 2008 +83;Life is Strange: Episode 5 - Polarized;8.4;Oct 20, 2015 +83;BROFORCE;8.0;Oct 15, 2015 +83;Independence War 2: Edge of Chaos;8.4;Aug 22, 2001 +83;Myst III: Exile;8.2;May 8, 2001 +83;Superbrothers: Sword & Sworcery EP;6.4;Apr 16, 2012 +83;Sid Meier's Civilization IV: Colonization;6.7;Sep 22, 2008 +83;Europa Universalis III;8.4;Jan 23, 2007 +83;F1 2011;7.2;Sep 20, 2011 +83;Prince of Persia: Warrior Within;8.4;Nov 30, 2004 +83;Danganronpa: Trigger Happy Havoc;7.6;Feb 18, 2016 +83;Counter-Strike: Global Offensive;7.8;Aug 21, 2012 +83;Outland;7.1;Sep 29, 2014 +83;MechWarrior 4: Mercenaries;8.6;Nov 7, 2002 +83;Metal Gear Solid;9.0;Sep 24, 2000 +82;Invisible, Inc.;8.0;May 12, 2015 +82;Dark Souls II: Crown of the Ivory King;7.8;Sep 29, 2014 +82;Red Faction: Guerrilla;7.5;Sep 15, 2009 +82;The Book of Unwritten Tales;8.2;Oct 28, 2011 +82;Capitalism II;9.0;Dec 16, 2001 +82;Rally Trophy;8.5;Nov 20, 2001 +82;Dawn of Discovery;8.8;Jun 17, 2009 +82;City of Villains;8.1;Oct 31, 2005 +82;Kentucky Route Zero - Act II;8.0;May 31, 2013 +82;Tom Clancy's Splinter Cell: Blacklist;7.4;Aug 20, 2013 +82;Act of War: Direct Action;8.5;Mar 15, 2005 +82;Sokobond;7.8;Aug 27, 2013 +82;Sam & Max Episode 105: Reality 2.0;8.4;Mar 29, 2007 +82;Bejeweled 3;8.0;Dec 7, 2010 +82;Dangerous Waters;8.8;Feb 22, 2005 +82;Tomb Raider: Legend;7.8;Apr 11, 2006 +82;Asheron's Call 2: Fallen Kings;8.8;Nov 20, 2002 +82;Gemini Rue;8.4;Feb 24, 2011 +82;Antichamber;8.2;Jan 31, 2013 +82;Neverwinter Nights 2;6.5;Oct 31, 2006 +82;Dragon Age: Origins - Awakening;7.7;Mar 16, 2010 +82;Door Kickers;8.2;Oct 20, 2014 +82;Hearthstone: Blackrock Mountain;6.4;Apr 2, 2015 +82;Rome: Total War Barbarian Invasion;8.4;Sep 27, 2005 +82;Hacknet;7.3;Aug 12, 2015 +82;Tales of Monkey Island Chapter 3: Lair of the Leviathan;7.8;Sep 29, 2009 +82;Neverwinter Nights 2: Mask of The Betrayer;8.8;Oct 9, 2007 +82;Sins of a Solar Empire: Rebellion;7.8;Jun 12, 2012 +82;Broken Sword: The Sleeping Dragon;7.6;Nov 17, 2003 +82;Age of Wonders: Shadow Magic;8.5;Jul 25, 2003 +82;Tom Clancy's Ghost Recon: Desert Siege;8.4;Mar 27, 2002 +82;Warlords Battlecry II;8.5;Mar 11, 2002 +82;Football Manager Live;2.9;Jan 23, 2009 +82;Marvel: Ultimate Alliance;8.3;Oct 24, 2006 +82;The Talos Principle: Road To Gehenna;7.6;Jul 23, 2015 +82;Lara Croft and the Guardian of Light;8.2;Sep 28, 2010 +82;Aquaria;8.3;Dec 7, 2007 +82;Need for Speed: Underground;8.3;Nov 17, 2003 +82;TrackMania Sunrise;8.5;May 6, 2005 +82;King's Quest Chapter 1: A Knight to Remember;7.2;Jul 28, 2015 +82;Dragon Age II;4.4;Mar 8, 2011 +82;Endless Legend;7.9;Apr 24, 2014 +82;Tom Clancy's Ghost Recon: Island Thunder;8.3;Sep 25, 2002 +82;S.T.A.L.K.E.R.: Shadow of Chernobyl;8.4;Mar 20, 2007 +82;Kero Blaster;6.9;May 11, 2014 +82;Monday Night Combat;7.3;Jan 24, 2011 +82;The Wolf Among Us: Episode 3 - A Crooked Mile;8.6;Apr 8, 2014 +82;Airborne Assault: Red Devils Over Arnhem;7.4;Jun 17, 2002 +82;Fallout Tactics: Brotherhood of Steel;7.9;Mar 14, 2001 +82;Need for Speed: Underground 2;8.5;Nov 9, 2004 +82;NHL Eastside Hockey Manager 2005;6.6;Oct 5, 2005 +82;Legend of Grimrock;8.1;Apr 11, 2012 +82;Dominions 3: The Awakening;8.1;Sep 29, 2006 +82;Bulletstorm;7.7;Feb 22, 2011 +82;Borderlands 2: Mr. Torgue's Campaign of Carnage;7.3;Nov 20, 2012 +82;Desktop Dungeons;8.2;Oct 17, 2010 +82;Fallout: New Vegas - Old World Blues;7.8;Jul 19, 2011 +82;Crusader Kings II;8.7;Feb 14, 2012 +82;MVP Baseball 2004;7.9;Mar 9, 2004 +82;Europa 1400: The Guild;8.6;Nov 18, 2002 +82;Battle Realms;8.6;Nov 7, 2001 +82;Warlords Battlecry;8.2;Jul 9, 2000 +82;Sam & Max Episode 201: Ice Station Santa;8.6;Nov 8, 2007 +82;Technobabylon;7.8;May 21, 2015 +82;World of Warcraft: Mists of Pandaria;4.8;Sep 25, 2012 +82;FIFA 15;4.2;Sep 23, 2014 +82;Recettear: An Item Shop's Tale;8.6;Sep 10, 2010 +82;ETHER One;6.9;Mar 25, 2014 +82;The Vanishing of Ethan Carter;8.1;Sep 25, 2014 +82;Flight Simulator X: Acceleration;7.3;Oct 23, 2007 +82;Blood;9.0;May 31, 1997 +82;Command & Conquer: Red Alert 3;6.8;Oct 28, 2008 +82;The Walking Dead: Episode 1 - A New Day;8.4;Apr 24, 2012 +82;Links 2003;6.8;Sep 16, 2002 +82;Earth & Beyond;7.1;Sep 2, 2002 +82;Syberia;8.5;Sep 1, 2002 +82;Virtual Pool 3;7.3;Nov 14, 2000 +82;The Sims: Livin' Large;6.6;Aug 27, 2000 +82;DCS: Black Shark;8.5;Apr 13, 2009 +82;King's Bounty: Armored Princess;8.7;Sep 10, 2010 +82;Age of Wonders III - Golden Realms;8.5;Sep 18, 2014 +82;Strong Bad's Cool Game for Attractive People Episode 5: 8-Bit Is Enough;7.5;Dec 15, 2008 +82;Prince of Persia;7.2;Dec 2, 2008 +82;Joint Operations: Typhoon Rising;8.7;Jun 15, 2004 +82;Xpand Rally;7.4;Apr 20, 2006 +82;Dark Souls II: Crown of the Sunken King;7.3;Jul 22, 2014 +82;Resident Evil HD Remaster;8.2;Jan 20, 2015 +82;Celtic Kings: Rage of War;8.5;Aug 21, 2002 +82;B-17 Flying Fortress: The Mighty 8th;7.3;Dec 13, 2000 +82;EverQuest: The Scars of Velious;7.8;Dec 4, 2000 +82;Metro: Last Light;8.6;May 14, 2013 +82;Rising Storm;8.5;May 30, 2013 +82;Lethal League;7.4;Aug 27, 2014 +82;Botanicula;8.3;Apr 19, 2012 +82;Pro Evolution Soccer 2015;5.8;Nov 13, 2014 +82;Bookworm Adventures Deluxe;7.9;Dec 20, 2006 +82;The Lord of the Rings: The Battle for Middle-Earth;8.6;Dec 6, 2004 +82;Hitman: Blood Money;8.8;May 30, 2006 +82;Need for Speed: Most Wanted;8.5;Nov 15, 2005 +82;OlliOlli2: Welcome to Olliwood;5.2;Aug 11, 2015 +82;WildStar;7.4;Jun 3, 2014 +82;Broken Age: Act 1;7.7;Jan 28, 2014 +82;Divinity II: The Dragon Knight Saga;8.2;Nov 5, 2010 +82;Out of the Park Baseball 9;7.4;Jun 1, 2008 +82;The Simpsons: Hit & Run;8.0;Nov 13, 2003 +82;America's Army;6.1;Aug 28, 2002 +82;Star Trek Bridge Commander;8.1;Feb 27, 2002 +82;The Last Express;8.9;Mar 31, 1997 +81;Quake 4;7.5;Oct 11, 2005 +81;Nidhogg;7.0;Jan 13, 2014 +81;Battlefield 4;6.0;Oct 29, 2013 +81;To the Moon;8.9;Sep 7, 2012 +81;The Sims 3: World Adventures;8.0;Nov 16, 2009 +81;Painkiller;8.0;Apr 12, 2004 +81;Airborne Assault: Highway to the Reich;6.1;Dec 10, 2003 +81;Nancy Drew: Danger on Deception Island;7.7;Oct 1, 2003 +81;Shadowrun: Hong Kong;7.7;Aug 20, 2015 +81;Supreme Commander: Forged Alliance;8.9;Nov 6, 2007 +81;Sunless Sea;7.4;Jul 1, 2014 +81;The Walking Dead: Season Two Episode 3 - In Harm's Way;8.3;May 13, 2014 +81;Marvel Heroes 2015;7.9;Jun 4, 2014 +81;Football Manager 2016;6.4;Nov 13, 2015 +81;VVVVVV;8.1;Jan 11, 2010 +81;Darksiders II;7.9;Aug 14, 2012 +81;Wolfenstein: The New Order;8.2;May 20, 2014 +81;Lone Survivor;7.2;Apr 23, 2012 +81;Alien: Isolation;8.4;Oct 6, 2014 +81;The Witcher;8.8;Oct 30, 2007 +81;Kentucky Route Zero - Act I;7.5;Jan 7, 2013 +81;Jade Empire: Special Edition;8.3;Feb 26, 2007 +81;SWAT 3: Elite Edition;8.4;Oct 6, 2000 +81;Asheron's Call;8.8;Oct 31, 1999 +81;Unravel;8.1;Feb 9, 2016 +81;Midnight Club II;8.0;Jun 30, 2003 +81;Chessmaster 10th Edition;7.4;Aug 12, 2004 +81;Age of Empires III;7.7;Oct 18, 2005 +81;Tales of Monkey Island Chapter 5: Rise of the Pirate God;8.4;Dec 8, 2009 +81;Castlevania: Lords of Shadow Ultimate Edition;7.3;Aug 27, 2013 +81;Strong Bad's Cool Game for Attractive People Episode 2: Strong Badia the Free;8.2;Sep 15, 2008 +81;The Cat Lady;8.7;Dec 4, 2013 +81;Vessel;7.9;Mar 1, 2012 +81;Metro 2033;8.1;Mar 16, 2010 +81;OutRun 2006: Coast 2 Coast;7.8;Jun 27, 2006 +81;Blur;7.3;May 25, 2010 +81;Empires: Dawn of the Modern World;8.2;Oct 21, 2003 +81;Chessmaster 9000;7.7;Aug 31, 2002 +81;Gothic;8.6;Nov 23, 2001 +81;Arcanum: Of Steamworks and Magick Obscura;8.9;Aug 22, 2001 +81;NASCAR Heat;8.6;Sep 27, 2000 +81;Company of Heroes 2: Ardennes Assault;6.1;Nov 17, 2014 +81;PlanetSide;7.3;May 20, 2003 +81;Tales From The Borderlands: Episode 3 - Catch A Ride;8.4;Jun 23, 2015 +81;The Walking Dead: Season Two Episode 2 - A House Divided;8.6;Mar 4, 2014 +81;Kingdoms of Amalur: Reckoning;6.6;Feb 7, 2012 +81;Sam & Max: The Devil's Playhouse - Episode 1: The Penal Zone;8.5;Apr 15, 2010 +81;Borderlands;7.8;Oct 26, 2009 +81;DG2: Defense Grid 2;6.7;Sep 23, 2014 +81;Napoleon: Total War;7.9;Feb 23, 2010 +81;Overlord;8.1;Jun 26, 2007 +81;Firewatch;7.2;Feb 9, 2016 +81;Victoria II: Heart of Darkness;8.7;Apr 16, 2013 +81;Waveform;7.6;Jan 25, 2013 +81;The Elder Scrolls IV: Knights of the Nine;7.5;Nov 21, 2006 +81;Red Orchestra: Ostfront 41-45;8.6;Mar 14, 2006 +81;Stronghold;8.9;Oct 21, 2001 +81;Strong Bad's Cool Game for Attractive People Episode 4: Dangeresque 3: The Criminal Projective;8.5;Nov 17, 2008 +81;Rochard;8.0;Nov 15, 2011 +81;Fallout 3: Broken Steel;7.3;May 5, 2009 +81;Tiger Woods PGA Tour 06;8.1;Sep 20, 2005 +81;RollerCoaster Tycoon 3;4.9;Oct 26, 2004 +81;Dragon's Dogma: Dark Arisen;8.3;Jan 15, 2016 +81;Guild Wars 2: Heart of Thorns;7.3;Oct 23, 2015 +81;AaaaaAAaaaAAAaaAAAAaAAAAA!!! - A Reckless Disregard for Gravity;7.2;Sep 3, 2009 +81;The Sims 2 University;7.8;Feb 28, 2005 +81;Far Cry 3: Blood Dragon;8.1;May 1, 2013 +81;Sid Meier's Civilization: Beyond Earth;5.5;Oct 24, 2014 +81;Disney's Toontown Online;8.7;Oct 6, 2005 +81;Combat Mission 3: Afrika Korps;8.4;Dec 3, 2003 +81;EverQuest: The Planes of Power;8.2;Oct 28, 2002 +81;Rails Across America;8.0;Sep 18, 2001 +81;Wasteland 2;7.3;Sep 19, 2014 +81;Jamestown: Legend of the Lost Colony;7.5;Jun 8, 2011 +81;Call of Duty: Black Ops;5.1;Nov 9, 2010 +81;Kohan II: Kings of War;7.9;Sep 20, 2004 +81;The Age of Decadence;7.9;Oct 15, 2015 +81;Samorost 3;8.3;Mar 24, 2016 +81;Order of Battle: Pacific;6.4;Apr 30, 2015 +81;Empire Earth;8.3;Nov 12, 2001 +81;Star Trek: Deep Space Nine: The Fallen;7.9;Nov 15, 2000 +81;Sam & Max Episode 101: Culture Shock;8.7;Oct 18, 2006 +81;Mirror's Edge (2008);8.1;Jan 12, 2009 +81;TrackMania 2 Canyon;7.7;Sep 14, 2011 +81;Sleeping Dogs;8.2;Aug 14, 2012 +81;Star Wars Jedi Knight: Jedi Academy;8.6;Sep 17, 2003 +81;Mortal Kombat Komplete Edition;8.7;Aug 6, 2013 +81;Shadowrun: Dragonfall;8.3;Feb 27, 2014 +81;Eets;6.4;Mar 29, 2006 +81;World of Warships;6.6;Sep 17, 2015 +81;TOCA Race Driver 2: The Ultimate Racing Simulator;8.0;Apr 15, 2004 +81;Wargame: European Escalation;8.2;Feb 22, 2012 +81;Dungeon Defenders;7.3;Oct 18, 2011 +81;Sam & Max: The Devil's Playhouse - Episode 5: The City That Dares Not Sleep;7.9;Aug 30, 2010 +81;Age of Empires III: The Asian Dynasties;8.5;Oct 23, 2007 +81;Defense Grid: The Awakening;8.8;Jul 29, 2009 +81;Codename: Panzers, Phase One;8.8;Sep 30, 2004 +81;FIFA 16;4.4;Sep 22, 2015 +81;Europa Universalis IV: Conquest of Paradise;7.7;Jan 14, 2014 +81;Ghost Master;8.0;Aug 26, 2003 +81;Divine Divinity;8.5;Sep 22, 2002 +80;The Book of Unwritten Tales 2;7.7;Feb 20, 2015 +80;Galactic Civilizations III;6.6;May 14, 2015 +80;Lovers in a Dangerous Spacetime;7.2;Sep 9, 2015 +80;Age of Conan: Hyborian Adventures;7.3;May 20, 2008 +80;Company of Heroes 2: The Western Front Armies;6.8;Jun 23, 2014 +80;Sid Meier's Civilization V: Gods & Kings;7.7;Jun 19, 2012 +80;Age of Empires III: The WarChiefs;8.1;Oct 17, 2006 +80;Metal Gear Solid V: Ground Zeroes;7.7;Dec 18, 2014 +80;Trials Fusion;6.8;Apr 16, 2014 +80;Syberia II;8.3;Mar 30, 2004 +80;Tom Clancy's Ghost Recon;8.4;Nov 13, 2001 +80;Conquest: Frontier Wars;8.3;Aug 14, 2001 +80;Gabriel Knight 3: Blood of the Sacred, Blood of the Damned;8.8;Oct 5, 1999 +80;Westerado: Double Barreled;7.4;Apr 16, 2015 +80;Anomaly: Warzone Earth;7.3;Apr 8, 2011 +80;Volume;7.2;Aug 18, 2015 +80;GRID 2;5.7;May 27, 2013 +80;The Banner Saga;7.9;Jan 14, 2014 +80;Sam & Max Episode 202: Moai Better Blues;7.7;Jan 10, 2008 +80;Age of Wonders III - Eternal Lords;8.4;Apr 14, 2015 +80;Pro Evolution Soccer 2013;6.8;Sep 25, 2012 +80;Osmos;7.5;Aug 18, 2009 +80;Dungeon Siege II;7.9;Aug 16, 2005 +80;Dead Island;6.8;Sep 6, 2011 +80;Sam & Max Episode 104: Abe Lincoln Must Die!;7.8;Feb 22, 2007 +80;Deus Ex: Invisible War;6.3;Dec 2, 2003 +80;The Sims: Makin' Magic;8.6;Oct 28, 2003 +80;Tom Clancy's Splinter Cell: Double Agent;5.7;Nov 7, 2006 +80;Medal of Honor: Pacific Assault;7.4;Nov 4, 2004 +80;Assassin's Creed: Revelations;7.4;Nov 29, 2011 +80;Grandia II Anniversary Edition;7.6;Aug 24, 2015 +80;Assassin's Creed III;6.2;Nov 20, 2012 +80;Madden NFL 07;7.3;Aug 22, 2006 +80;Outlast;8.4;Sep 4, 2013 +80;The Chronicles of Riddick: Assault on Dark Athena;8.0;Apr 7, 2009 +80;Hearts of Iron II: Doomsday;8.8;Apr 7, 2006 +80;Dishonored: The Brigmore Witches;8.5;Aug 13, 2013 +80;Codename: Panzers, Phase Two;8.0;Jul 25, 2005 +80;Full Spectrum Warrior;7.0;Sep 21, 2004 +80;AI War: Fleet Command;8.4;May 14, 2009 +80;Freedom Fighters;8.3;Oct 1, 2003 +80;NBA Live 2003;8.3;Nov 14, 2002 +80;The Elder Scrolls III: Tribunal;8.2;Nov 6, 2002 +80;Elite: Dangerous;6.4;Dec 16, 2014 +80;Pure;6.9;Sep 16, 2008 +80;Goodbye Deponia;8.1;Oct 17, 2013 +80;SWAT 4: The Stetchkov Syndicate;8.3;Feb 28, 2006 +80;Dropsy;7.3;Sep 10, 2015 +80;Company of Heroes 2: The British Forces;5.9;Sep 3, 2015 +80;Ground Control II: Operation Exodus;8.8;Jun 23, 2004 +80;NBA Live 2004;9.0;Nov 11, 2003 +80;Brutal Legend;7.8;Feb 26, 2013 +80;Tomb Raider: Underworld;7.6;Nov 18, 2008 +80;Oxenfree;7.7;Jan 15, 2016 +80;Titan Quest: Immortal Throne;8.7;Mar 5, 2007 +80;La-Mulana (Remake);7.1;Jul 13, 2012 +80;X-Men Legends II: Rise of Apocalypse;8.4;Sep 20, 2005 +80;SpellForce 2: Shadow Wars;7.6;May 5, 2006 +80;Fritz 8 Deluxe;7.8;Dec 1, 2004 +80;Trine;8.2;Sep 11, 2009 +80;Dishonored: The Knife of Dunwall;8.1;Apr 16, 2013 +80;Company of Heroes 2;2.0;Jun 25, 2013 +80;Natural Selection 2;8.4;Oct 30, 2012 +80;Read Only Memories;7.2;Oct 5, 2015 +80;The Sims 3: Into the Future;5.4;Oct 22, 2013 +80;Borderlands 2: Captain Scarlett and Her Pirate's Booty;7.4;Oct 16, 2012 +80;FATE;8.3;Sep 19, 2006 +80;2002 FIFA World Cup;7.9;Apr 30, 2002 +80;Asheron's Call Dark Majesty;8.1;Nov 4, 2001 +80;The Bug Butcher;8.2;Jan 19, 2016 +80;Dragonshard;7.4;Oct 2, 2005 +80;Icewind Dale: Enhanced Edition;7.6;Oct 30, 2014 +80;The Magic Circle;7.3;Jul 9, 2015 +80;Far Cry 4;6.6;Nov 18, 2014 +80;Super Time Force Ultra;6.6;Aug 25, 2014 +80;Day of Defeat: Source;9.1;Feb 7, 2006 +80;Battlefield 2142;6.8;Oct 17, 2006 +80;World of Tanks;3.8;Sep 6, 2011 +80;Vampire: The Masquerade - Bloodlines;9.0;Nov 16, 2004 +80;Dark Souls II: Scholar of the First Sin;7.4;Apr 1, 2015 +80;Warhammer 40,000: Dawn of War II - Retribution;7.8;Mar 1, 2011 +80;Panzer Corps;7.5;Jul 11, 2011 +80;Men of War;8.1;Mar 16, 2009 +80;Fallen Enchantress: Legendary Heroes;7.7;May 22, 2013 +80;The Walking Dead: Episode 4 - Around Every Corner;8.5;Oct 10, 2012 +80;Tales of Monkey Island Chapter 4: The Trial and Execution of Guybrush Threepwood;8.4;Oct 30, 2009 +80;Penny Arcade Adventures: Episode Two;7.7;Nov 7, 2008 +80;Time Commando;8.9;Jul 31, 1996 +80;Sins of a Solar Empire: Entrenchment;8.1;Feb 25, 2009 +80;F1 2012;6.9;Sep 18, 2012 +80;Luftrausers;6.8;Mar 18, 2014 +80;Naruto Shippuden: Ultimate Ninja Storm 3 Full Burst;7.9;Oct 24, 2013 +80;Stealth Bastard Deluxe;8.3;Nov 28, 2012 +80;Tom Clancy's Ghost Recon Advanced Warfighter;7.7;May 3, 2006 +80;LEGO Batman: The Videogame;7.9;Sep 23, 2008 +80;Stacking;7.9;Mar 6, 2012 +80;Age of Wonders III;7.8;Mar 31, 2014 +80;Life is Strange: Episode 3 - Chaos Theory;9.0;May 19, 2015 +80;The Legend of Heroes: Trails in the Sky SC;8.4;Oct 29, 2015 +80;Proteus;5.6;Jan 30, 2013 +80;Robin Hood: The Legend of Sherwood;8.3;Nov 14, 2002 +80;Soldier of Fortune II: Double Helix;7.3;May 20, 2002 +80;RollerCoaster Tycoon: Loopy Landscapes;9.0;Sep 30, 2000 +80;Toki Tori;7.9;Jan 28, 2010 +80;RoboBlitz;8.3;Nov 7, 2006 +80;Wargame: AirLand Battle;8.1;May 29, 2013 +80;Football Manager 2015;6.0;Nov 7, 2014 +80;The Suffering;8.2;Jun 8, 2004 +80;Gish;7.2;Sep 17, 2004 +80;Axiom Verge;8.2;May 14, 2015 +80;Driver: San Francisco;7.0;Sep 27, 2011 +80;The Corporate Machine;7.5;Jul 14, 2001 +80;Dungeons & Dragons: Chronicles of Mystara;6.7;Jun 18, 2013 +80;Disciples II: Rise of the Elves;8.1;Nov 25, 2003 +80;MechCommander 2;8.3;Jul 18, 2001 +80;Waterloo: Napoleon's Last Battle;7.5;Mar 25, 2001 +80;Chessmaster 8000;6.4;Nov 14, 2000 +80;Circle of Blood;8.6;Sep 30, 1996 +80;BioShock Infinite: Burial at Sea - Episode Two;8.5;Mar 25, 2014 +80;S.T.A.L.K.E.R.: Call of Pripyat;8.7;Feb 2, 2010 +80;The Walking Dead: Season Two - A Telltale Games Series;8.3;Dec 17, 2013 +80;FLY'N;8.2;Nov 9, 2012 +80;Total War: Attila;7.3;Feb 17, 2015 +80;The Wolf Among Us;8.8;Oct 11, 2013 +80;Nancy Drew: Secret of the Old Clock;8.1;Jul 26, 2005 +80;ArcheAge;3.6;Sep 16, 2014 +80;CAPSIZED;7.1;Apr 29, 2011 +80;Microsoft Flight Simulator X;7.6;Oct 17, 2006 +80;Myst V: End of Ages;7.8;Sep 19, 2005 +80;Railroad Tycoon 3;7.7;Oct 23, 2003 +80;Hostile Waters: Antaeus Rising;8.1;Jun 13, 2001 +79;Dustforce;7.9;Jan 17, 2012 +79;Empire Earth II;7.0;Apr 26, 2005 +79;Fallout 3: Point Lookout;7.8;Jun 23, 2009 +79;Test Drive Unlimited;8.1;Mar 20, 2007 +79;Dying Light: The Following;8.3;Feb 9, 2016 +79;The Path;7.0;Mar 18, 2009 +79;Dungeon of the Endless;8.0;Oct 27, 2014 +79;Revenge of the Titans;7.6;May 24, 2010 +79;Bookworm Adventures: Volume 2;7.6;Jul 30, 2009 +79;F1 2001;7.5;Oct 14, 2001 +79;Brothers in Arms: Hell's Highway;7.9;Oct 7, 2008 +79;Star Wars: Empire at War;8.4;Feb 15, 2006 +79;Dariusburst: Chronicle Saviours;8.3;Dec 3, 2015 +79;Europa Universalis: Rome - Vae Victis;8.6;Nov 19, 2008 +79;Silent Hunter: Wolves of the Pacific;6.5;Mar 20, 2007 +79;Pillars of Eternity: The White March - Part 2;6.7;Feb 16, 2016 +79;1701 A.D.;8.3;Nov 6, 2006 +79;Stasis;7.6;Aug 31, 2015 +79;Pro Evolution Soccer 2009;7.4;Nov 12, 2008 +79;Return to Mysterious Island;8.5;Nov 2, 2004 +79;Jotun;7.0;Sep 29, 2015 +79;Else Heart.Break();7.5;Sep 24, 2015 +79;Kohan: Ahriman's Gift;8.7;Nov 5, 2001 +79;Emperor: Battle for Dune;8.3;Jun 12, 2001 +79;Trackmania Turbo;6.9;Mar 24, 2016 +79;Cart Life;5.9;Jul 29, 2010 +79;Sword of the Stars: Born of Blood;8.1;Jun 5, 2007 +79;Worms Reloaded;6.7;Aug 26, 2010 +79;Warhammer: End Times - Vermintide;7.9;Oct 23, 2015 +79;Euro Truck Simulator 2;8.7;Jan 16, 2013 +79;Tropico 3;8.2;Oct 20, 2009 +79;Cities: Skylines - After Dark;7.9;Sep 24, 2015 +79;Runaway: A Twist of Fate;8.5;Apr 21, 2011 +79;Tales of Monkey Island Chapter 1: Launch of the Screaming Narwhal;8.2;Jul 7, 2009 +79;Bloodline Champions;8.0;Jan 13, 2011 +79;The Sims: Superstar;8.2;May 12, 2003 +79;NBA Live 2005;8.5;Oct 26, 2004 +79;Valiant Hearts: The Great War;8.6;Jun 25, 2014 +79;Payday 2;3.4;Aug 13, 2013 +79;Dungeons of Dredmor;7.8;Jul 13, 2011 +79;Geometry Wars 3: Dimensions;6.2;Nov 25, 2014 +79;Assassin's Creed: Director's Cut Edition;7.5;Apr 8, 2008 +79;Puzzle Dimension;7.6;Jun 21, 2010 +79;Split/Second;8.2;May 18, 2010 +79;Sang-Froid: Tales of Werewolves;7.9;Apr 5, 2013 +79;The Incredible Adventures of Van Helsing: Final Cut;7.2;Oct 7, 2015 +79;Hitman: Absolution;7.0;Nov 19, 2012 +79;Call of Juarez: Gunslinger;8.2;May 22, 2013 +79;Rome: Total War Alexander;7.6;Jun 19, 2006 +79;Strong Bad's Cool Game for Attractive People Episode 3: Baddest of the Bands;8.1;Oct 27, 2008 +79;Sam & Max Episode 102: Situation: Comedy;7.9;Dec 20, 2006 +79;Tropico 3: Absolute Power;7.7;May 17, 2010 +79;Sam & Max Episode 106: Bright Side of the Moon;7.3;Apr 26, 2007 +79;Day of Defeat;9.3;May 6, 2003 +79;Space Empires: IV;8.3;Nov 6, 2000 +79;Resident Evil 4: Ultimate HD Edition;7.7;Feb 27, 2014 +79;Sam & Max Episode 203: Night of the Raving Dead;8.2;Feb 12, 2008 +79;FlatOut: Ultimate Carnage;7.6;Sep 2, 2008 +79;Guitar Hero III: Legends of Rock;7.2;Nov 13, 2007 +79;Sid Meier's Civilization: Beyond Earth - Rising Tide;5.9;Oct 9, 2015 +79;Memoria;8.5;Aug 29, 2013 +79;The Last Door;7.8;May 20, 2014 +79;Shadowgrounds Survivor;7.8;Dec 6, 2007 +79;Gothic II;8.8;Oct 28, 2003 +79;Port Royale;8.2;Jun 4, 2003 +79;Deadly Dozen: Pacific Theater;7.9;Oct 31, 2002 +79;Shattered Galaxy;8.3;Aug 21, 2001 +79;Close Combat: Invasion: Normandy;8.2;Oct 10, 2000 +79;King's Bounty: The Legend;8.6;Sep 23, 2008 +79;Rage;5.1;Oct 4, 2011 +79;The Misadventures of P.B. Winterbottom;8.3;Apr 20, 2010 +79;Uru: Ages Beyond Myst;7.4;Nov 11, 2003 +79;Guild Wars: Eye of the North;8.6;Aug 28, 2007 +79;Tales From The Borderlands: Episode 4 - Escape Plan Bravo;8.4;Aug 18, 2015 +79;EverQuest: Lost Dungeons of Norrath;7.0;Sep 8, 2003 +79;Battlefield 1942: Secret Weapons of WWII;8.5;Sep 4, 2003 +79;The Sims: Unleashed;8.0;Sep 23, 2002 +79;Race the Sun;7.5;Aug 19, 2013 +79;The Sims 3: Pets;6.1;Oct 18, 2011 +79;Prototype;7.9;Jun 10, 2009 +79;Stick it to the Man!;7.2;Dec 13, 2013 +79;Street Fighter X Tekken;6.4;May 11, 2012 +79;Frozen Cortex;6.5;Feb 19, 2015 +79;Free Realms;6.4;Apr 29, 2009 +79;Homeworld: Deserts of Kharak;8.0;Jan 20, 2016 +79;Don't Starve;8.3;Apr 23, 2013 +79;Assault Android Cactus;7.0;Sep 23, 2015 +79;Trainz;7.2;Feb 10, 2002 +79;King Arthur: The Role-Playing Wargame;7.9;Nov 24, 2009 +79;Chivalry: Medieval Warfare;7.8;Oct 16, 2012 +79;Overlord II;8.1;Jun 23, 2009 +79;F.E.A.R. 2: Project Origin;7.8;Feb 10, 2009 +79;Tom Clancy's Rainbow Six Siege;6.9;Dec 1, 2015 +79;The Settlers 7: Paths to a Kingdom;5.2;Mar 23, 2010 +79;RollerCoaster Tycoon 3: Soaked!;2.9;Jun 23, 2005 +79;Dark Souls II: Crown of the Old Iron King;7.6;Aug 26, 2014 +79;TrackMania 2 Valley;8.3;Jul 4, 2013 +79;State of Decay;6.8;Nov 5, 2013 +79;LEGO Harry Potter: Years 1-4;7.8;Jun 29, 2010 +79;Rift: Storm Legion;7.8;Nov 13, 2012 +79;Crayon Physics Deluxe;7.6;Jan 7, 2009 +79;Nancy Drew: Legend of the Crystal Skull;8.5;Oct 8, 2007 +79;EverQuest II: Desert of Flames;7.8;Sep 12, 2005 +79;SimCity 4: Rush Hour;8.6;Sep 22, 2003 +79;Uncommon Valor: Campaign for the South Pacific;7.6;Dec 2, 2002 +79;Global Operations;8.3;Mar 25, 2002 +78;Apotheon;7.8;Feb 3, 2015 +78;Need for Speed: Most Wanted - A Criterion Game;4.4;Oct 30, 2012 +78;Star Wars: Battlefront II;8.8;Oct 31, 2005 +78;The Walking Dead: Season Two Episode 1 - All That Remains;8.5;Dec 17, 2013 +78;The Journey Down: Chapter Two;7.1;Aug 25, 2014 +78;Star Trek: Elite Force II;7.6;Jun 25, 2003 +78;Zuma's Revenge!;7.9;Sep 15, 2009 +78;Baldur's Gate: Enhanced Edition;7.0;Nov 28, 2012 +78;Doom 3: Resurrection of Evil;6.0;Apr 4, 2005 +78;LEGO Indiana Jones: The Original Adventures;7.7;Jun 3, 2008 +78;NASCAR Thunder 2004;7.5;Sep 16, 2003 +78;Transformers: Fall of Cybertron;7.8;Aug 21, 2012 +78;FIFA Soccer 06;6.7;Oct 4, 2005 +78;DeadCore;6.8;Oct 17, 2014 +78;The Walking Dead: Season Two Episode 5 - No Going Back;8.5;Aug 26, 2014 \ No newline at end of file diff --git a/_007/kafka.txt b/_007/kafka.txt new file mode 100644 index 0000000..b5695c5 --- /dev/null +++ b/_007/kafka.txt @@ -0,0 +1,11 @@ +Verhaftung - Gespräch mit Frau Grubach - Dann Fräulein Bürstner + +Jemand mußte Josef K. verleumdet haben, denn ohne daß er etwas Böses getan hätte, wurde er eines Morgens verhaftet. Die Köchin der Frau Grubach, seiner Zimmervermieterin, die ihm jeden Tag gegen acht Uhr früh das Frühstück brachte, kam diesmal nicht. Das war noch niemals geschehen. K. wartete noch ein Weilchen, sah von seinem Kopfkissen aus die alte Frau, die ihm gegenüber wohnte und die ihn mit einer an ihr ganz ungewöhnlichen Neugierde beobachtete, dann aber, gleichzeitig befremdet und hungrig, läutete er. Sofort klopfte es und ein Mann, den er in dieser Wohnung noch niemals gesehen hatte, trat ein. Er war schlank und doch fest gebaut, er trug ein anliegendes schwarzes Kleid, das, ähnlich den Reiseanzügen, mit verschiedenen Falten, Taschen, Schnallen, Knöpfen und einem Gürtel versehen war und infolgedessen, ohne daß man sich darüber klar wurde, wozu es dienen sollte, besonders praktisch erschien. "Wer sind Sie?" fragte K. und saß gleich halb aufrecht im Bett. Der Mann aber ging über die Frage hinweg, als müsse man seine Erscheinung hinnehmen, und sagte bloß seinerseits: "Sie haben geläutet?" "Anna soll mir das Frühstück bringen", sagte K. und versuchte, zunächst stillschweigend, durch Aufmerksamkeit und Überlegung festzustellen, wer der Mann eigentlich war. Aber dieser setzte sich nicht allzulange seinen Blicken aus, sondern wandte sich zur Tür, die er ein wenig öffnete, um jemandem, der offenbar knapp hinter der Tür stand, zu sagen: "Er will, daß Anna ihm das Frühstück bringt." Ein kleines Gelächter im Nebenzimmer folgte, es war nach dem Klang nicht sicher, ob nicht mehrere Personen daran beteiligt waren. Obwohl der fremde Mann dadurch nichts erfahren haben konnte, was er nicht schon früher gewußt hätte, sagte er nun doch zu K. im Tone einer Meldung: "Es ist unmöglich." "Das wäre neu", sagte K., sprang aus dem Bett und zog rasch seine Hosen an. "Ich will doch sehen, was für Leute im Nebenzimmer sind und wie Frau Grubach diese Störung mir gegenüber verantworten wird." Es fiel ihm zwar gleich ein, daß er das nicht hätte laut sagen müssen und daß er dadurch gewissermaßen ein Beaufsichtigungsrecht des Fremden anerkannte, aber es schien ihm jetzt nicht wichtig. Immerhin faßte es der Fremde so auf, denn er sagte: "Wollen Sie nicht lieber hierbleiben?" "Ich will weder hierbleiben, noch von Ihnen angesprochen werden, solange Sie sich mir nicht vorstellen." "Es war gut gemeint", sagte der Fremde und öffnete nun freiwillig die Tür. Im Nebenzimmer, in das K. langsamer eintrat, als er wollte, sah es auf den ersten Blick fast genau so aus wie am Abend vorher. Es war das Wohnzimmer der Frau Grubach, vielleicht war in diesem mit Möbeln, Decken, Porzellan und Photographien überfüllten Zimmer heute ein wenig mehr Raum als sonst, man erkannte das nicht gleich, um so weniger, als die Hauptveränderung in der Anwesenheit eines Mannes bestand, der beim offenen Fenster mit einem Buch saß, von dem er jetzt aufblickte. "Sie hätten in Ihrem Zimmer bleiben sollen! Hat es Ihnen denn Franz nicht gesagt?" "Ja, was wollen Sie denn?" sagte K. und sah von der neuen Bekanntschaft zu dem mit Franz Benannten, der in der Tür stehengeblieben war, und dann wieder zurück. Durch das offene Fenster erblickte man wieder die alte Frau, die mit wahrhaft greisenhafter Neugierde zu dem jetzt gegenüberliegenden Fenster getreten war, um auch weiterhin alles zu sehen. "Ich will doch Frau Grubach -", sagte K., machte eine Bewegung, als reiße er sich von den zwei Männern los, die aber weit von ihm entfernt standen, und wollte weitergehen. "Nein", sagte der Mann beim Fenster, warf das Buch auf ein Tischchen und stand auf. "Sie dürfen nicht weggehen, Sie sind ja verhaftet." "Es sieht so aus", sagte K. "Und warum denn?" fragte er dann. "Wir sind nicht dazu bestellt, Ihnen das zu sagen. Gehen Sie in Ihr Zimmer und warten Sie. Das Verfahren ist nun einmal eingeleitet, und Sie werden alles zur richtigen Zeit erfahren. Ich gehe über meinen Auftrag hinaus, wenn ich Ihnen so freundschaftlich zurede. Aber ich hoffe, es hört es niemand sonst als Franz, und der ist selbst gegen alle Vorschrift freundlich zu Ihnen. Wenn Sie auch weiterhin so viel Glück haben wie bei der Bestimmung Ihrer Wächter, dann können Sie zuversichtlich sein." K. wollte sich setzen, aber nun sah er, daß im ganzen Zimmer keine Sitzgelegenheit war, außer dem Sessel beim Fenster. "Sie werden noch einsehen, wie wahr das alles ist", sagte Franz und ging gleichzeitig mit dem andern Mann auf ihn zu. Besonders der letztere überragte K. bedeutend und klopfte ihm öfters auf die Schulter. Beide prüften K.s Nachthemd und sagten, daß er jetzt ein viel schlechteres Hemd werde anziehen müssen, daß sie aber dieses Hemd wie auch seine übrige Wäsche aufbewahren und, wenn seine Sache günstig ausfallen sollte, ihm wieder zurückgeben würden. "Es ist besser, Sie geben die Sachen uns als ins Depot", sagten sie, "denn im Depot kommen öfters Unterschleife vor und außerdem verkauft man dort alle Sachen nach einer gewissen Zeit, ohne Rücksicht, ob das betreffende Verfahren zu Ende ist oder nicht. Und wie lange dauern doch derartige Prozesse, besonders in letzter Zeit! Sie bekämen dann schließlich allerdings vom Depot den Erlös, aber dieser Erlös ist erstens an sich schon gering, denn beim Verkauf entscheidet nicht die Höhe des Angebotes, sondern die Höhe der Bestechung, und weiter verringern sich solche Erlöse erfahrungsgemäß, wenn sie von Hand zu Hand und von Jahr zu Jahr weitergegeben werden." K. achtete auf diese Reden kaum, das Verfügungsrecht über seine Sachen, das er vielleicht noch besaß, schätzte er nicht hoch ein, viel wichtiger war es ihm, Klarheit über seine Lage zu bekommen; in Gegenwart dieser Leute konnte er aber nicht einmal nachdenken, immer wieder stieß der Bauch des zweiten Wächters - es konnten ja nur Wächter sein - förmlich freundschaftlich an ihn, sah er aber auf, dann erblickte er ein zu diesem dicken Körper gar nicht passendes trockenes, knochiges Gesicht mit starker, seitlich gedrehter Nase, das sich über ihn hinweg mit dem anderen Wächter verständigte. Was waren denn das für Menschen? Wovon sprachen sie? Welcher Behörde gehörten sie an? K. lebte doch in einem Rechtsstaat, überall herrschte Friede, alle Gesetze bestanden aufrecht, wer wagte, ihn in seiner Wohnung zu überfallen? Er neigte stets dazu, alles möglichst leicht zu nehmen, das Schlimmste erst beim Eintritt des Schlimmsten zu glauben, keine Vorsorge für die Zukunft zu treffen, selbst wenn alles drohte. Hier schien ihm das aber nicht richtig, man konnte zwar das Ganze als Spaß ansehen, als einen groben Spaß, den ihm aus unbekannten Gründen, vielleicht weil heute sein dreißigster Geburtstag war, die Kollegen in der Bank veranstaltet hatten, es war natürlich möglich, vielleicht brauchte er nur auf irgendeine Weise den Wächtern ins Gesicht zu lachen, und sie würden mitlachen, vielleicht waren es Dienstmänner von der Straßenecke, sie sahen ihnen nicht unähnlich - trotzdem war er diesmal, förmlich schon seit dem ersten Anblick des Wächters Franz, entschlossen, nicht den geringsten Vorteil, den er vielleicht gegenüber diesen Leuten besaß, aus der Hand zu geben. Darin, daß man später sagen würde, er habe keinen Spaß verstanden, sah K. eine ganz geringe Gefahr, wohl aber erinnerte er sich - ohne daß es sonst seine Gewohnheit gewesen wäre, aus Erfahrungen zu lernen - an einige, an sich unbedeutende Fälle, in denen er zum Unterschied von seinen Freunden mit Bewußtsein, ohne das geringste Gefühl für die möglichen Folgen, sich unvorsichtig benommen hatte und dafür durch das Ergebnis gestraft worden war. Es sollte nicht wieder geschehen, zumindest nicht diesmal; war es eine Komödie, so wollte er mitspielen. + +Noch war er frei. "Erlauben Sie", sagte er und ging eilig zwischen den Wächtern durch in sein Zimmer. "Er scheint vernünftig zu sein", hörte er hinter sich sagen. In seinem Zimmer riß er gleich die Schubladen des Schreibtischs auf, es lag dort alles in großer Ordnung, aber gerade die Legitimationspapiere, die er suchte, konnte er in der Aufregung nicht gleich finden. Schließlich fand er seine Radfahrlegitimation und wollte schon mit ihr zu den Wächtern gehen, dann aber schien ihm das Papier zu geringfügig und er suchte weiter, bis er den Geburtsschein fand. Als er wieder in das Nebenzimmer zurückkam, öffnete sich gerade die gegenüberliegende Tür und Frau Grubach wollte dort eintreten. Man sah sie nur einen Augenblick, denn kaum hatte sie K. erkannt, als sie offenbar verlegen wurde, um Verzeihung bat, verschwand und äußerst vorsichtig die Tür schloß. "Kommen Sie doch herein", hatte K. gerade noch sagen können. Nun aber stand er mit seinen Papieren in der Mitte des Zimmers, sah noch auf die Tür hin, die sich nicht wieder öffnete, und wurde erst durch einen Anruf der Wächter aufgeschreckt, die bei dem Tischchen am offenen Fenster saßen und, wie K. jetzt erkannte, sein Frühstück verzehrten. "Warum ist sie nicht eingetreten?" fragte er. "Sie darf nicht", sagte der große Wächter. "Sie sind doch verhaftet." "Wie kann ich denn verhaftet sein? Und gar auf diese Weise?" "Nun fangen Sie also wieder an", sagte der Wächter und tauchte ein Butterbrot ins Honigfäßchen. "Solche Fragen beantworten wir nicht." "Sie werden sie beantworten müssen", sagte K. "Hier sind meine Legitimationspapiere, zeigen Sie mir jetzt die Ihrigen und vor allem den Verhaftbefehl." "Du lieber Himmel!" sagte der Wächter. "Daß Sie sich in Ihre Lage nicht fügen können und daß Sie es darauf angelegt zu haben scheinen, uns, die wir Ihnen jetzt wahrscheinlich von allen Ihren Mitmenschen am nächsten stehen, nutzlos zu reizen!" "Es ist so, glauben Sie es doch", sagte Franz, führte die Kaffeetasse, die er in der Hand hielt, nicht zum Mund, sondern sah K. mit einem langen, wahrscheinlich bedeutungsvollen, aber unverständlichen Blick an. K. ließ sich, ohne es zu wollen, in ein Zwiegespräch der Blicke mit Franz ein, schlug dann aber doch auf seine Papiere und sagte: "Hier sind meine Legitimationspapiere." "Was kümmern uns denn die?" rief nun schon der große Wächter. "Sie führen sich ärger auf als ein Kind. Was wollen Sie denn? Wollen Sie Ihren großen, verfluchten Prozeß dadurch zu einem raschen Ende bringen, daß Sie mit uns, den Wächtern, über Legitimation und Verhaftbefehl diskutieren? Wir sind niedrige Angestellte, die sich in einem Legitimationspapier kaum auskennen und die mit Ihrer Sache nichts anderes zu tun haben, als daß sie zehn Stunden täglich bei Ihnen Wache halten und dafür bezahlt werden. Das ist alles, was wir sind, trotzdem aber sind wir fähig, einzusehen, daß die hohen Behörden, in deren Dienst wir stehen, ehe sie eine solche Verhaftung verfügen, sich sehr genau über die Gründe der Verhaftung und die Person des Verhafteten unterrichten. Es gibt darin keinen Irrtum. Unsere Behörde, soweit ich sie kenne, und ich kenne nur die niedrigsten Grade, sucht doch nicht etwa die Schuld in der Bevölkerung, sondern wird, wie es im Gesetz heißt, von der Schuld angezogen und muß uns Wächter ausschicken. Das ist Gesetz. Wo gäbe es da einen Irrtum?" "Dieses Gesetz kenne ich nicht", sagte K. "Desto schlimmer für Sie", sagte der Wächter. "Es besteht wohl auch nur in Ihren Köpfen", sagte K., er wollte sich irgendwie in die Gedanken der Wächter einschleichen, sie zu seinen Gunsten wenden oder sich dort einbürgern. Aber der Wächter sagte nur abweisend: "Sie werden es zu fühlen bekommen." Franz mischte sich ein und sagte: "Sieh, Willem, er gibt zu, er kenne das Gesetz nicht, und behauptet gleichzeitig, schuldlos zu sein." "Du hast ganz recht, aber ihm kann man nichts begreiflich machen", sagte der andere. K. antwortete nichts mehr; muß ich, dachte er, durch das Geschwätz dieser niedrigsten Organe - sie geben selbst zu, es zu sein - mich noch mehr verwirren lassen? Sie reden doch jedenfalls von Dingen, die sie gar nicht verstehen. Ihre Sicherheit ist nur durch ihre Dummheit möglich. Ein paar Worte, die ich mit einem mir ebenbürtigen Menschen sprechen werde, werden alles unvergleichlich klarer machen als die längsten Reden mit diesen. Er ging einige Male in dem freien Raum des Zimmers auf und ab, drüben sah er die alte Frau, die einen noch viel älteren Greis zum Fenster gezerrt hatte, den sie umschlungen hielt. K. mußte dieser Schaustellung ein Ende machen: "Führen Sie mich zu Ihrem Vorgesetzten", sagte er. "Wenn er es wünscht; nicht früher", sagte der Wächter, der Willem genannt worden war. "Und nun rate ich Ihnen", fügte er hinzu, "in Ihr Zimmer zu gehen, sich ruhig zu verhalten und darauf zu warten, was über Sie verfügt werden wird. Wir raten Ihnen, zerstreuen Sie sich nicht durch nutzlose Gedanken, sondern sammeln Sie sich, es werden große Anforderungen an Sie gestellt werden. Sie haben uns nicht so behandelt, wie es unser Entgegenkommen verdient hätte, Sie haben vergessen, daß wir, mögen wir auch sein was immer, zumindest jetzt Ihnen gegenüber freie Männer sind, das ist kein kleines Übergewicht. Trotzdem sind wir bereit, falls Sie Geld haben, Ihnen ein kleines Frühstück aus dem Kaffeehaus drüben zu bringen." + +Ohne auf dieses Angebot zu antworten, stand K. ein Weilchen lang still. Vielleicht würden ihn die beiden, wenn er die Tür des folgenden Zimmers oder gar die Tür des Vorzimmers öffnete, gar nicht zu hindern wagen, vielleicht wäre es die einfachste Lösung des Ganzen, daß er es auf die Spitze trieb. Aber vielleicht würden sie ihn doch packen und, war er einmal niedergeworfen, so war auch alle Überlegenheit verloren, die er jetzt ihnen gegenüber in gewisser Hinsicht doch wahrte. Deshalb zog er die Sicherheit der Lösung vor, wie sie der natürliche Verlauf bringen mußte, und ging in sein Zimmer zurück, ohne daß von seiner Seite oder von Seite der Wächter ein weiteres Wort gefallen wäre. + +Er warf sich auf sein Bett und nahm vom Waschtisch einen schönen Apfel, den er sich gestern abend für das Frühstück vorbereitet hatte. Jetzt war er sein einziges Frühstück und jedenfalls, wie er sich beim ersten großen Bissen versicherte, viel besser, als das Frühstück aus dem schmutzigen Nachtcafé gewesen wäre, das er durch die Gnade der Wächter hätte bekommen können. Er fühlte sich wohl und zuversichtlich, in der Bank versäumte er zwar heute vormittag seinen Dienst, aber das war bei der verhältnismäßig hohen Stellung, die er dort einnahm, leicht entschuldigt. Sollte er die wirkliche Entschuldigung anführen? Er gedachte es zu tun, Würde man ihm nicht glauben, was in diesem Fall begreiflich war, so konnte er Frau Grubach als Zeugin führen oder auch die beiden Alten von drüben, die wohl jetzt auf dem Marsch zum gegenüberliegenden Fenster waren. Es wunderte K., wenigstens aus dem Gedankengang der Wächter wunderte es ihn, daß sie ihn in das Zimmer getrieben und ihn hier allein gelassen hatten, wo er doch zehnfache Möglichkeit hatte, sich umzubringen. Gleichzeitig allerdings fragte er sich, diesmal aus seinem Gedankengang, was für einen Grund er haben könnte, es zu tun. Etwa weil die zwei nebenan saßen und sein Frühstück abgefangen hatten? Es wäre so sinnlos gewesen, sich umzubringen, daß er, selbst wenn er es hätte tun wollen, infolge der Sinnlosigkeit dazu nicht imstande gewesen wäre. Wäre die geistige Beschränktheit der Wächter nicht so auffallend gewesen, so hätte man annehmen können, daß auch sie, infolge der gleichen Überzeugung, keine Gefahr darin gesehen hätten, ihn allein zu lassen. Sie mochten jetzt, wenn sie wollten, zusehen, wie er zu einem Wandschränkchen ging, in dem er einen guten Schnaps aufbewahrte, wie er ein Gläschen zuerst zum Ersatz des Frühstücks leerte und wie er ein zweites Gläschen dazu bestimmte, sich Mut zu machen, das letztere nur aus Vorsicht für den unwahrscheinlichen Fall, daß es nötig sein sollte. + + diff --git a/_007/readme.md b/_007/readme.md new file mode 100644 index 0000000..a157f4b --- /dev/null +++ b/_007/readme.md @@ -0,0 +1,26 @@ +# synchronized verwenden +## Lernziel + + + +Schlüsselwort `synchronized` verwenden. + +## Aufgabe + +Gehen Sie in das Paket [pr2.threads.synchronize](../sources/src/main/java/pr2/threads/synchronize/). + +Schreiben Sie eine Klasse `Synchronizer`, die ein einziges `int`-Attribut und zusätzlich noch eine Methode `addAndPrint` enthält. Bei jedem Aufruf der Methode soll das Attribut um eins hochgezählt werden. Starten Sie zwei Threads, die diese Method konkurrierend aufrufen und sorgen Sie durch korrekte Synchronisation bei der `addAndPrint` dafür, dass keine Zahl zweimal ausgegeben wird und die Folge der Zahlen wirklich ohne Lücken ist. + + + \ No newline at end of file diff --git a/_008/readme.md b/_008/readme.md new file mode 100644 index 0000000..c600122 --- /dev/null +++ b/_008/readme.md @@ -0,0 +1,28 @@ +# Timer und TimerTask verwenden +## Lernziel + + + +Klassen aus `java.util.concurrent` verwenden. + +## Aufgabe + +Gehen Sie in das Paket [pr2.threads.timer](../sources/src/main/java/pr2/threads/timer/). + +Schreiben Sie eine Klasse `FakultaetTimer`, die in der Lage ist, die Fakultäten für alle Zahlen zwischen 0 und 20 zu berechnen. Der Berechnung dient eine Methode `calculate` die ein `long`-Array mit den Ergebnissen zurückgibt. Verwenden Sie zur Implementierung der Berechnung die Klasse `Timer` und `TimerTask`, wobei Sie für jede zu berechnende Zahl einen eigenen `TimerTask` verwenden sollen. + +Schreiben Sie eine `main`-Methode in der Klasse `Main`, welche die Klasse `FakultaetTimer` verwendet, um die Fakultäten von 0 bis 20 zu berechnen. Danach soll sie das Ergebnis der Berechnung ausgeben. + + + \ No newline at end of file diff --git a/_009/readme.md b/_009/readme.md new file mode 100644 index 0000000..21c21d2 --- /dev/null +++ b/_009/readme.md @@ -0,0 +1,26 @@ +# Summe über reduce bestimmen +## Lernziel + + + +Daten in Streams mit `reduce` aggregieren. + +## Aufgabe + +Gehen Sie in das Paket [pr2.streams.summieren](../sources/src/main/java/pr2/streams/summieren/). + +Schreiben Sie in der Klasse `SumUp` eine Methode `int sumUp(Stream numbers)`, die die Elemente eines Streams von `Integer`-Objekten addiert. + + + \ No newline at end of file diff --git a/_010/readme.md b/_010/readme.md new file mode 100644 index 0000000..4b1e108 --- /dev/null +++ b/_010/readme.md @@ -0,0 +1,28 @@ +# Wörter zählen +## Lernziel + + + +Daten in Streams mit `reduce` aggregieren. + +## Aufgabe + +Gehen Sie in das Paket [pr2.streams.word_count](../sources/src/main/java/pr2/streams/word_count/). + +Gegeben sei eine Liste von Strings (`List`), die die Wörter eines Textes enthält. Erzeugen Sie eine neue Liste, die zu jedem Wort die Häufigkeit im Text in der Form Wort->Häufigkeit also z.B. `die->32` angibt. + +Testen Sie Ihre Implementierung mit der Testklasse `WordCountTest`. + + + \ No newline at end of file diff --git a/_011/readme.md b/_011/readme.md new file mode 100644 index 0000000..415810d --- /dev/null +++ b/_011/readme.md @@ -0,0 +1,41 @@ +# Wörterbuchprogramm +## Lernziel + + + +Interface `Map` und seine Implementierungen einsetzen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.collections.woerterbuch](../sources/src/main/java/pr2/collections/woerterbuch/). + +Schreiben Sie ein einfaches Wörterbuchprogramm, dem man auf der Kommandozeile eine beliebige Anzahl von Wörtern übergeben kann und das dann die entsprechende Übersetzung ausgibt. Die Wörter des Wörterbuchs sollen fest im Programm einprogrammiert sein. Es reicht, wenn Sie einige wenige Wörter vorsehen. + +Berücksichtigen Sie bitte den Fall, dass der Benutzer kein Wort auf der Kommandozeile angibt bzw. dass ein Wort nicht im Wörterbuch vorhanden ist. + +```console +> java Woerterbuch +Bitte mindestens ein Wort angeben! +``` + +```console +>java Woerterbuch gehen schlafen tanzen hopsen +gehen => go +schlafen => sleep +tanzen => dance +hopsen => +``` + + + \ No newline at end of file diff --git a/_012/data.dat b/_012/data.dat new file mode 100644 index 0000000..33a6855 Binary files /dev/null and b/_012/data.dat differ diff --git a/_012/readme.md b/_012/readme.md new file mode 100644 index 0000000..a02cae2 --- /dev/null +++ b/_012/readme.md @@ -0,0 +1,32 @@ +# `RandomAccessFile` +## Lernziel + + + +`RandomAccessFile` sowohl zum Lesen, als auch zum Schreiben von Daten einsetzen. Verstehen, dass man sich wahlfrei durch die Datei bewegen kann. + +## Aufgabe + +Gehen Sie in das Paket [pr2.io.random_access](../sources/src/main/java/pr2/io/random_access/). + +Bei dieser Aufgabe werden Sie ein Verfahren anwenden, das bei sehr großen Datenmengen zum Einsatz kommt: das Sortieren der Daten direkt auf der Festplatte, ohne sie vollständig in den Hauptspeicher zu laden. + +Implementieren Sie einen [Bubblesort](https://de.wikipedia.org/wiki/Bubblesort) mithilfe von `RandomAccessFile` direkt auf einer Datei. Bubblesort ist ein ausgesprochen ineffizienter Algorithmus (O(n*n)), er ist aber sehr einfach zu implementieren. Da die zu sortierende Datei klein ist, können wir hier mit den Nachteilen von Bubblesort leben. + +Implementieren Sie die bereits vorhandene Methode `sortFile` der Klasse `FileSort`. Öffnen Sie zuerst die Datei mithilfe von `RandomAccessFile` im Modus `"rw"`. Wandern Sie nun - entsprechend dem Bubblesort-Algorithmus - über die Daten und sortieren Sie die Bytes der Datei. Halten Sie nie mehr als zwei `byte` und die Position als `long` im Speicher. Weitere Variablen können auch noch nötig sein, um den Algorithmus zu implementieren. + +Testen Sie Ihre Implementierung mit den JUnit-Tests. Die Testdatei für den Unit-Test ist [data.dat](../sources/src/main/resources/pr2/io/random_access/data.dat) + + + \ No newline at end of file diff --git a/_013/kafka.txt b/_013/kafka.txt new file mode 100644 index 0000000..b5695c5 --- /dev/null +++ b/_013/kafka.txt @@ -0,0 +1,11 @@ +Verhaftung - Gespräch mit Frau Grubach - Dann Fräulein Bürstner + +Jemand mußte Josef K. verleumdet haben, denn ohne daß er etwas Böses getan hätte, wurde er eines Morgens verhaftet. Die Köchin der Frau Grubach, seiner Zimmervermieterin, die ihm jeden Tag gegen acht Uhr früh das Frühstück brachte, kam diesmal nicht. Das war noch niemals geschehen. K. wartete noch ein Weilchen, sah von seinem Kopfkissen aus die alte Frau, die ihm gegenüber wohnte und die ihn mit einer an ihr ganz ungewöhnlichen Neugierde beobachtete, dann aber, gleichzeitig befremdet und hungrig, läutete er. Sofort klopfte es und ein Mann, den er in dieser Wohnung noch niemals gesehen hatte, trat ein. Er war schlank und doch fest gebaut, er trug ein anliegendes schwarzes Kleid, das, ähnlich den Reiseanzügen, mit verschiedenen Falten, Taschen, Schnallen, Knöpfen und einem Gürtel versehen war und infolgedessen, ohne daß man sich darüber klar wurde, wozu es dienen sollte, besonders praktisch erschien. "Wer sind Sie?" fragte K. und saß gleich halb aufrecht im Bett. Der Mann aber ging über die Frage hinweg, als müsse man seine Erscheinung hinnehmen, und sagte bloß seinerseits: "Sie haben geläutet?" "Anna soll mir das Frühstück bringen", sagte K. und versuchte, zunächst stillschweigend, durch Aufmerksamkeit und Überlegung festzustellen, wer der Mann eigentlich war. Aber dieser setzte sich nicht allzulange seinen Blicken aus, sondern wandte sich zur Tür, die er ein wenig öffnete, um jemandem, der offenbar knapp hinter der Tür stand, zu sagen: "Er will, daß Anna ihm das Frühstück bringt." Ein kleines Gelächter im Nebenzimmer folgte, es war nach dem Klang nicht sicher, ob nicht mehrere Personen daran beteiligt waren. Obwohl der fremde Mann dadurch nichts erfahren haben konnte, was er nicht schon früher gewußt hätte, sagte er nun doch zu K. im Tone einer Meldung: "Es ist unmöglich." "Das wäre neu", sagte K., sprang aus dem Bett und zog rasch seine Hosen an. "Ich will doch sehen, was für Leute im Nebenzimmer sind und wie Frau Grubach diese Störung mir gegenüber verantworten wird." Es fiel ihm zwar gleich ein, daß er das nicht hätte laut sagen müssen und daß er dadurch gewissermaßen ein Beaufsichtigungsrecht des Fremden anerkannte, aber es schien ihm jetzt nicht wichtig. Immerhin faßte es der Fremde so auf, denn er sagte: "Wollen Sie nicht lieber hierbleiben?" "Ich will weder hierbleiben, noch von Ihnen angesprochen werden, solange Sie sich mir nicht vorstellen." "Es war gut gemeint", sagte der Fremde und öffnete nun freiwillig die Tür. Im Nebenzimmer, in das K. langsamer eintrat, als er wollte, sah es auf den ersten Blick fast genau so aus wie am Abend vorher. Es war das Wohnzimmer der Frau Grubach, vielleicht war in diesem mit Möbeln, Decken, Porzellan und Photographien überfüllten Zimmer heute ein wenig mehr Raum als sonst, man erkannte das nicht gleich, um so weniger, als die Hauptveränderung in der Anwesenheit eines Mannes bestand, der beim offenen Fenster mit einem Buch saß, von dem er jetzt aufblickte. "Sie hätten in Ihrem Zimmer bleiben sollen! Hat es Ihnen denn Franz nicht gesagt?" "Ja, was wollen Sie denn?" sagte K. und sah von der neuen Bekanntschaft zu dem mit Franz Benannten, der in der Tür stehengeblieben war, und dann wieder zurück. Durch das offene Fenster erblickte man wieder die alte Frau, die mit wahrhaft greisenhafter Neugierde zu dem jetzt gegenüberliegenden Fenster getreten war, um auch weiterhin alles zu sehen. "Ich will doch Frau Grubach -", sagte K., machte eine Bewegung, als reiße er sich von den zwei Männern los, die aber weit von ihm entfernt standen, und wollte weitergehen. "Nein", sagte der Mann beim Fenster, warf das Buch auf ein Tischchen und stand auf. "Sie dürfen nicht weggehen, Sie sind ja verhaftet." "Es sieht so aus", sagte K. "Und warum denn?" fragte er dann. "Wir sind nicht dazu bestellt, Ihnen das zu sagen. Gehen Sie in Ihr Zimmer und warten Sie. Das Verfahren ist nun einmal eingeleitet, und Sie werden alles zur richtigen Zeit erfahren. Ich gehe über meinen Auftrag hinaus, wenn ich Ihnen so freundschaftlich zurede. Aber ich hoffe, es hört es niemand sonst als Franz, und der ist selbst gegen alle Vorschrift freundlich zu Ihnen. Wenn Sie auch weiterhin so viel Glück haben wie bei der Bestimmung Ihrer Wächter, dann können Sie zuversichtlich sein." K. wollte sich setzen, aber nun sah er, daß im ganzen Zimmer keine Sitzgelegenheit war, außer dem Sessel beim Fenster. "Sie werden noch einsehen, wie wahr das alles ist", sagte Franz und ging gleichzeitig mit dem andern Mann auf ihn zu. Besonders der letztere überragte K. bedeutend und klopfte ihm öfters auf die Schulter. Beide prüften K.s Nachthemd und sagten, daß er jetzt ein viel schlechteres Hemd werde anziehen müssen, daß sie aber dieses Hemd wie auch seine übrige Wäsche aufbewahren und, wenn seine Sache günstig ausfallen sollte, ihm wieder zurückgeben würden. "Es ist besser, Sie geben die Sachen uns als ins Depot", sagten sie, "denn im Depot kommen öfters Unterschleife vor und außerdem verkauft man dort alle Sachen nach einer gewissen Zeit, ohne Rücksicht, ob das betreffende Verfahren zu Ende ist oder nicht. Und wie lange dauern doch derartige Prozesse, besonders in letzter Zeit! Sie bekämen dann schließlich allerdings vom Depot den Erlös, aber dieser Erlös ist erstens an sich schon gering, denn beim Verkauf entscheidet nicht die Höhe des Angebotes, sondern die Höhe der Bestechung, und weiter verringern sich solche Erlöse erfahrungsgemäß, wenn sie von Hand zu Hand und von Jahr zu Jahr weitergegeben werden." K. achtete auf diese Reden kaum, das Verfügungsrecht über seine Sachen, das er vielleicht noch besaß, schätzte er nicht hoch ein, viel wichtiger war es ihm, Klarheit über seine Lage zu bekommen; in Gegenwart dieser Leute konnte er aber nicht einmal nachdenken, immer wieder stieß der Bauch des zweiten Wächters - es konnten ja nur Wächter sein - förmlich freundschaftlich an ihn, sah er aber auf, dann erblickte er ein zu diesem dicken Körper gar nicht passendes trockenes, knochiges Gesicht mit starker, seitlich gedrehter Nase, das sich über ihn hinweg mit dem anderen Wächter verständigte. Was waren denn das für Menschen? Wovon sprachen sie? Welcher Behörde gehörten sie an? K. lebte doch in einem Rechtsstaat, überall herrschte Friede, alle Gesetze bestanden aufrecht, wer wagte, ihn in seiner Wohnung zu überfallen? Er neigte stets dazu, alles möglichst leicht zu nehmen, das Schlimmste erst beim Eintritt des Schlimmsten zu glauben, keine Vorsorge für die Zukunft zu treffen, selbst wenn alles drohte. Hier schien ihm das aber nicht richtig, man konnte zwar das Ganze als Spaß ansehen, als einen groben Spaß, den ihm aus unbekannten Gründen, vielleicht weil heute sein dreißigster Geburtstag war, die Kollegen in der Bank veranstaltet hatten, es war natürlich möglich, vielleicht brauchte er nur auf irgendeine Weise den Wächtern ins Gesicht zu lachen, und sie würden mitlachen, vielleicht waren es Dienstmänner von der Straßenecke, sie sahen ihnen nicht unähnlich - trotzdem war er diesmal, förmlich schon seit dem ersten Anblick des Wächters Franz, entschlossen, nicht den geringsten Vorteil, den er vielleicht gegenüber diesen Leuten besaß, aus der Hand zu geben. Darin, daß man später sagen würde, er habe keinen Spaß verstanden, sah K. eine ganz geringe Gefahr, wohl aber erinnerte er sich - ohne daß es sonst seine Gewohnheit gewesen wäre, aus Erfahrungen zu lernen - an einige, an sich unbedeutende Fälle, in denen er zum Unterschied von seinen Freunden mit Bewußtsein, ohne das geringste Gefühl für die möglichen Folgen, sich unvorsichtig benommen hatte und dafür durch das Ergebnis gestraft worden war. Es sollte nicht wieder geschehen, zumindest nicht diesmal; war es eine Komödie, so wollte er mitspielen. + +Noch war er frei. "Erlauben Sie", sagte er und ging eilig zwischen den Wächtern durch in sein Zimmer. "Er scheint vernünftig zu sein", hörte er hinter sich sagen. In seinem Zimmer riß er gleich die Schubladen des Schreibtischs auf, es lag dort alles in großer Ordnung, aber gerade die Legitimationspapiere, die er suchte, konnte er in der Aufregung nicht gleich finden. Schließlich fand er seine Radfahrlegitimation und wollte schon mit ihr zu den Wächtern gehen, dann aber schien ihm das Papier zu geringfügig und er suchte weiter, bis er den Geburtsschein fand. Als er wieder in das Nebenzimmer zurückkam, öffnete sich gerade die gegenüberliegende Tür und Frau Grubach wollte dort eintreten. Man sah sie nur einen Augenblick, denn kaum hatte sie K. erkannt, als sie offenbar verlegen wurde, um Verzeihung bat, verschwand und äußerst vorsichtig die Tür schloß. "Kommen Sie doch herein", hatte K. gerade noch sagen können. Nun aber stand er mit seinen Papieren in der Mitte des Zimmers, sah noch auf die Tür hin, die sich nicht wieder öffnete, und wurde erst durch einen Anruf der Wächter aufgeschreckt, die bei dem Tischchen am offenen Fenster saßen und, wie K. jetzt erkannte, sein Frühstück verzehrten. "Warum ist sie nicht eingetreten?" fragte er. "Sie darf nicht", sagte der große Wächter. "Sie sind doch verhaftet." "Wie kann ich denn verhaftet sein? Und gar auf diese Weise?" "Nun fangen Sie also wieder an", sagte der Wächter und tauchte ein Butterbrot ins Honigfäßchen. "Solche Fragen beantworten wir nicht." "Sie werden sie beantworten müssen", sagte K. "Hier sind meine Legitimationspapiere, zeigen Sie mir jetzt die Ihrigen und vor allem den Verhaftbefehl." "Du lieber Himmel!" sagte der Wächter. "Daß Sie sich in Ihre Lage nicht fügen können und daß Sie es darauf angelegt zu haben scheinen, uns, die wir Ihnen jetzt wahrscheinlich von allen Ihren Mitmenschen am nächsten stehen, nutzlos zu reizen!" "Es ist so, glauben Sie es doch", sagte Franz, führte die Kaffeetasse, die er in der Hand hielt, nicht zum Mund, sondern sah K. mit einem langen, wahrscheinlich bedeutungsvollen, aber unverständlichen Blick an. K. ließ sich, ohne es zu wollen, in ein Zwiegespräch der Blicke mit Franz ein, schlug dann aber doch auf seine Papiere und sagte: "Hier sind meine Legitimationspapiere." "Was kümmern uns denn die?" rief nun schon der große Wächter. "Sie führen sich ärger auf als ein Kind. Was wollen Sie denn? Wollen Sie Ihren großen, verfluchten Prozeß dadurch zu einem raschen Ende bringen, daß Sie mit uns, den Wächtern, über Legitimation und Verhaftbefehl diskutieren? Wir sind niedrige Angestellte, die sich in einem Legitimationspapier kaum auskennen und die mit Ihrer Sache nichts anderes zu tun haben, als daß sie zehn Stunden täglich bei Ihnen Wache halten und dafür bezahlt werden. Das ist alles, was wir sind, trotzdem aber sind wir fähig, einzusehen, daß die hohen Behörden, in deren Dienst wir stehen, ehe sie eine solche Verhaftung verfügen, sich sehr genau über die Gründe der Verhaftung und die Person des Verhafteten unterrichten. Es gibt darin keinen Irrtum. Unsere Behörde, soweit ich sie kenne, und ich kenne nur die niedrigsten Grade, sucht doch nicht etwa die Schuld in der Bevölkerung, sondern wird, wie es im Gesetz heißt, von der Schuld angezogen und muß uns Wächter ausschicken. Das ist Gesetz. Wo gäbe es da einen Irrtum?" "Dieses Gesetz kenne ich nicht", sagte K. "Desto schlimmer für Sie", sagte der Wächter. "Es besteht wohl auch nur in Ihren Köpfen", sagte K., er wollte sich irgendwie in die Gedanken der Wächter einschleichen, sie zu seinen Gunsten wenden oder sich dort einbürgern. Aber der Wächter sagte nur abweisend: "Sie werden es zu fühlen bekommen." Franz mischte sich ein und sagte: "Sieh, Willem, er gibt zu, er kenne das Gesetz nicht, und behauptet gleichzeitig, schuldlos zu sein." "Du hast ganz recht, aber ihm kann man nichts begreiflich machen", sagte der andere. K. antwortete nichts mehr; muß ich, dachte er, durch das Geschwätz dieser niedrigsten Organe - sie geben selbst zu, es zu sein - mich noch mehr verwirren lassen? Sie reden doch jedenfalls von Dingen, die sie gar nicht verstehen. Ihre Sicherheit ist nur durch ihre Dummheit möglich. Ein paar Worte, die ich mit einem mir ebenbürtigen Menschen sprechen werde, werden alles unvergleichlich klarer machen als die längsten Reden mit diesen. Er ging einige Male in dem freien Raum des Zimmers auf und ab, drüben sah er die alte Frau, die einen noch viel älteren Greis zum Fenster gezerrt hatte, den sie umschlungen hielt. K. mußte dieser Schaustellung ein Ende machen: "Führen Sie mich zu Ihrem Vorgesetzten", sagte er. "Wenn er es wünscht; nicht früher", sagte der Wächter, der Willem genannt worden war. "Und nun rate ich Ihnen", fügte er hinzu, "in Ihr Zimmer zu gehen, sich ruhig zu verhalten und darauf zu warten, was über Sie verfügt werden wird. Wir raten Ihnen, zerstreuen Sie sich nicht durch nutzlose Gedanken, sondern sammeln Sie sich, es werden große Anforderungen an Sie gestellt werden. Sie haben uns nicht so behandelt, wie es unser Entgegenkommen verdient hätte, Sie haben vergessen, daß wir, mögen wir auch sein was immer, zumindest jetzt Ihnen gegenüber freie Männer sind, das ist kein kleines Übergewicht. Trotzdem sind wir bereit, falls Sie Geld haben, Ihnen ein kleines Frühstück aus dem Kaffeehaus drüben zu bringen." + +Ohne auf dieses Angebot zu antworten, stand K. ein Weilchen lang still. Vielleicht würden ihn die beiden, wenn er die Tür des folgenden Zimmers oder gar die Tür des Vorzimmers öffnete, gar nicht zu hindern wagen, vielleicht wäre es die einfachste Lösung des Ganzen, daß er es auf die Spitze trieb. Aber vielleicht würden sie ihn doch packen und, war er einmal niedergeworfen, so war auch alle Überlegenheit verloren, die er jetzt ihnen gegenüber in gewisser Hinsicht doch wahrte. Deshalb zog er die Sicherheit der Lösung vor, wie sie der natürliche Verlauf bringen mußte, und ging in sein Zimmer zurück, ohne daß von seiner Seite oder von Seite der Wächter ein weiteres Wort gefallen wäre. + +Er warf sich auf sein Bett und nahm vom Waschtisch einen schönen Apfel, den er sich gestern abend für das Frühstück vorbereitet hatte. Jetzt war er sein einziges Frühstück und jedenfalls, wie er sich beim ersten großen Bissen versicherte, viel besser, als das Frühstück aus dem schmutzigen Nachtcafé gewesen wäre, das er durch die Gnade der Wächter hätte bekommen können. Er fühlte sich wohl und zuversichtlich, in der Bank versäumte er zwar heute vormittag seinen Dienst, aber das war bei der verhältnismäßig hohen Stellung, die er dort einnahm, leicht entschuldigt. Sollte er die wirkliche Entschuldigung anführen? Er gedachte es zu tun, Würde man ihm nicht glauben, was in diesem Fall begreiflich war, so konnte er Frau Grubach als Zeugin führen oder auch die beiden Alten von drüben, die wohl jetzt auf dem Marsch zum gegenüberliegenden Fenster waren. Es wunderte K., wenigstens aus dem Gedankengang der Wächter wunderte es ihn, daß sie ihn in das Zimmer getrieben und ihn hier allein gelassen hatten, wo er doch zehnfache Möglichkeit hatte, sich umzubringen. Gleichzeitig allerdings fragte er sich, diesmal aus seinem Gedankengang, was für einen Grund er haben könnte, es zu tun. Etwa weil die zwei nebenan saßen und sein Frühstück abgefangen hatten? Es wäre so sinnlos gewesen, sich umzubringen, daß er, selbst wenn er es hätte tun wollen, infolge der Sinnlosigkeit dazu nicht imstande gewesen wäre. Wäre die geistige Beschränktheit der Wächter nicht so auffallend gewesen, so hätte man annehmen können, daß auch sie, infolge der gleichen Überzeugung, keine Gefahr darin gesehen hätten, ihn allein zu lassen. Sie mochten jetzt, wenn sie wollten, zusehen, wie er zu einem Wandschränkchen ging, in dem er einen guten Schnaps aufbewahrte, wie er ein Gläschen zuerst zum Ersatz des Frühstücks leerte und wie er ein zweites Gläschen dazu bestimmte, sich Mut zu machen, das letztere nur aus Vorsicht für den unwahrscheinlichen Fall, daß es nötig sein sollte. + + diff --git a/_013/readme.md b/_013/readme.md new file mode 100644 index 0000000..457c146 --- /dev/null +++ b/_013/readme.md @@ -0,0 +1,26 @@ +# `Reader` verwenden +## Lernziel + + + +Textdaten mithilfe von `Reader` verarbeiten. + +## Aufgabe + +Gehen Sie in das Paket [pr2.io.reader_writer](../sources/src/main/java/pr2/io/reader_writer/). + +Lesen Sie die Datei [kafka.txt](../sources/src/main/resources/pr2/io/reader_writer/kafka.txt) mit einem passenden `Reader` ein und geben Sie sie auf der Konsole aus. Verwenden Sie nicht die `read()`-Methode, die einzelne Zeichen verarbeitet, sondern arbeiten Sie mit einem `char[]`-Buffer. + + + \ No newline at end of file diff --git a/_014/readme.md b/_014/readme.md new file mode 100644 index 0000000..4b37ead --- /dev/null +++ b/_014/readme.md @@ -0,0 +1,36 @@ +# Rot13-Verschlüsselung +## Lernziel + + + +Funktionsweise und Einsatz von Filtern. + +## Aufgabe + +Gehen Sie in das Paket [pr2.io.rot13](../sources/src/main/java/pr2/io/rot13/). + +Schreiben Sie eine Klasse `Rot13Reader`, die als Filter-Reader implementiert ist und jedes eingelesene Zeichen durch ein Zeichen ersetzt, dessen numerischer Wert um 13 höher ist (d.h. um 13 Schritte im Alphabet verschoben ist). + +Schreiben Sie eine Klasse `Rot13`, die einen Dateinamen von der Kommandozeile nimmt und diese Text-Datei mithilfe von `Rot13Reader` liest und auf der Konsole ausgibt. + +```console +> cat /tmp/test +DIES IST EIN TEXT, DER GLEICH ROT13 VERSCHLUESSELT WIRD. + +> java Rot13 /tmp/test +QVR`-V`a-RV[-aRea9-QR_-TYRVPU-_\a>@-cR_`PUYbR``RYa-dV_Q; +``` + + + \ No newline at end of file diff --git a/_015/readme.md b/_015/readme.md new file mode 100644 index 0000000..c21c74a --- /dev/null +++ b/_015/readme.md @@ -0,0 +1,39 @@ +# Datei zerhacken +## Lernziel + + + +Daten byteweise aus einem Stream lesen. + +## Aufgabe + +Gehen Sie in das Paket [pr2.io.scrambler](../sources/src/main/java/pr2/io/scrambler/). + +Schreiben Sie eine Klasse `Scrambler`, die einen Dateinamen von der Kommandozeile entgegennimmt, die Datei einliest und dann wieder auf der Konsole ausgibt. Allerdings soll bei der Ausgabe nur jedes zweite Byte berücksichtigt werden. + +```console +> java Scrambler ../src/Scrambler.java +motjv.oFlIpttem +motjv.oFlNtonEcpin +motjv.oIEcpin +pbi ls cabe + pbi ttcvi anSrn[ rs hosIEcpin{ i ag.egh! ){ Sse.r.rnl( + Bteen ae nee"; Sse.xt1; } + ienuSra i; + r + i e ienuSra(rs0) +``` + + + \ No newline at end of file diff --git a/_016/readme.md b/_016/readme.md new file mode 100644 index 0000000..3c38348 --- /dev/null +++ b/_016/readme.md @@ -0,0 +1,34 @@ +# Serialisierung +## Lernziel + + + +Serialisierung einsetzen können, um Objekte zu persistieren und wieder zu laden. + +## Aufgabe + +Gehen Sie in das Paket [pr2.io.serialisierung](../sources/src/main/java/pr2/io/serialisierung/). + +In dieser Aufgabe finden Sie bereits eine fertig implementierte Klasse `Board` vor, die ein Schachbrett repräsentiert. Allerdings wird dieses nicht für Schach benutzt, sondern für ein Spiel, bei dem man nur schwarze und weiße Steine auf das Brett stellen kann (z.B. Dame). Die Farbe der Steine wird durch die Enumeration `Color` dargestellt. + +Was bei dem Schachbrett allerdings noch fehlt, ist eine Möglichkeit den Spielstand zu speichern und später wieder einzulesen. + +Schauen Sie sich die Klassen `Board` und `Color` genau an und versuchen Sie diese zu verstehen. Sie können auch testweise ein Brett anlegen und mit Daten befüllen. (Wie dies geht, sehen Sie im JUnit-Test). Die `toString()`-Methode liefert eine anschauliche Darstellung des Spielfeldes. + +Implementieren Sie nun die Methoden `writeToFile` und `loadFromFile` unter Zuhilfenahme von Serialisierung. D.h. anders als in der Aufgabe zu `DataOutputStream`, sollen Sie hier kein eigenes Datenformat implementieren. Verwenden Sie stattdessen einen `ObjectOutputStream` bzw. `ObjectInputStream`. + +Lassen Sie den JUnit-Test laufen, um zu sehen, ob die Daten korrekt verarbeitet werden. Die Test-Datei für den Unit-Test ist [testdata.dat](../sources/src/main/resources/pr2/io/serialisierung/testdata.dat) + + + \ No newline at end of file diff --git a/_016/testdata.dat b/_016/testdata.dat new file mode 100644 index 0000000..34b842b Binary files /dev/null and b/_016/testdata.dat differ diff --git a/help/softwareausstattung.md b/help/softwareausstattung.md new file mode 100644 index 0000000..6f299d3 --- /dev/null +++ b/help/softwareausstattung.md @@ -0,0 +1,9 @@ +## Softwareausstattung + + * **Ubuntu Linux** als Installation oder VM + * **Java JDK 18**
`sudo apt install openjdk-18-jdk openjdk-18-source openjdk-18-doc` + * **Git** und Git-Frontends
`sudo apt install git meld git-cola` + * **Maven 3.6 oder neuer**
`sudo apt install maven` + * **Eclipse**
Von der [Webseite](https://www.eclipse.org/downloads/) herunterladen und installieren. Bitte verwenden Sie die Version **Eclipse IDE for Java Developers** + +Eine Anleitung zur Installation von Ubuntu Linux finden Sie [hier](https://github.com/informatik-mannheim/linux-hsma/blob/master/doc/readme.md). Diese Anleitung bezieht sich auf Ubuntu 21.04, funktioniert so aber auch mit einer neueren Version. diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..79b2033 --- /dev/null +++ b/readme.md @@ -0,0 +1,123 @@ +# Programmieren 2 (Wintersemester 2024/2025) + +## 👋 Willkommen zum Kurs Programmieren 2 + +In Programmieren 2 lernen Sie die Programmierung in Java auf einem fortgeschrittenen Niveau. Sie werden alle wichtigen Konzepte von Java kennenlernen und diese in praktischen Übungen anwenden. Hierbei werden Sie in kleinen Teams arbeiten und komplexere, objektorientierte Programme in Java entwickeln. Die dazu nötigen objektorientierten Konzepte (Polymorphie, Vererbung, Interfaces, etc.) werden Sie ebenso im Kurs anwenden, wie die dazu grundlegenden Algorithmen und Datenstrukturen. + +## 🎓 Freiwillige Übungen + +Hier finden Sie die **freiwilligen Übungen** zur Vorlesung Programmieren 2 (PR2). Die Übungen sind unten aufgelistet. Die Spalte **Ausgabe** hat keine Bedeutung. + +Hinweise zur nötigen Softwareausstattung finden Sie [hier](help/softwareausstattung.md). + +| # | Kapitel | Thema | +|-----|-----------------------|-----------------------------------------------------------------------------------| +| 1. | Auffrischung | [String in Großbuchstaben umwandeln](_001/readme.md) | +| 2. | Auffrischung | [Labeled Break](_002/readme.md) | +| 3. | Auffrischung | [Passwortbewertung](_003/readme.md) | +| 4. | Auffrischung | [printf mit Formatstring](_004/readme.md) | +| 5. | Auffrischung | [Maximum in einem Array suchen](_005/readme.md) | +| 6. | Auffrischung | [Taschenrechner](_006/readme.md) | +| 7. | Einführung | [Java-Coding-Standard anwenden](_001/readme.md) | +| 8. | Einführung | [JavaDoc schreiben](_002/readme.md) | +| 9. | Einführung | [Klasse mit JUnit testen](_003/readme.md) | +| 10. | Strukturierung | [Information-Hiding einer Klasse verbessern](_001/readme.md) | +| 11. | Strukturierung | [Vorhandene Bibliotheken als JAR einbinden](_002/readme.md) | +| 12. | Vererbung | [Final anwenden](_001/readme.md) | +| 13. | Vererbung | [Figur und Rechteck](_002/readme.md) | +| 14. | Vererbung | [Figur erweitern](_003/readme.md) | +| 15. | Vererbung | [Figur noch einmal erweitern](_004/readme.md) | +| 16. | Vererbung | [Konstruktoren schreiben](_005/readme.md) | +| 17. | Vererbung | [Polymorphie einsetzen](_006/readme.md) | +| 18. | Vererbung | [Singleton](_007/readme.md) | +| 19. | Vererbung | [Statische Methoden und Attribute](_008/readme.md) | +| 20. | Vererbung | [Methode überladen](_009/readme.md) | +| 21. | Vererbung | [Methoden überschreiben](_010/readme.md) | +| 22. | Vererbung | [Varag-Methode schreiben](_011/readme.md) | +| 23. | Vererbung | [Vererbung von Figuren](_012/readme.md) | +| 24. | Abstrakte Klassen | [Abstrakte Klassen](_001/readme.md) | +| 25. | Abstrakte Klassen | [Abstrakte Klasse](_002/readme.md) | +| 26. | Interfaces | [Comparable implementieren](_001/readme.md) | +| 27. | Interfaces | [Interface Stack entwerfen](_002/readme.md) | +| 28. | Interfaces | [Interface: Uebersetzer](_003/readme.md) | +| 29. | Interfaces | [Interfaces anwenden und entwerfen](_004/readme.md) | +| 30. | Object und Wrapper | [Deep-Copy mit `clone()`](_001/readme.md) | +| 31. | Object und Wrapper | [Clone](_002/readme.md) | +| 32. | Object und Wrapper | [`equals()` und `hashCode()` implementieren und nutzen](_003/readme.md) | +| 33. | Object und Wrapper | [equals und hashCode](_004/readme.md) | +| 34. | Object und Wrapper | [`toString()`-Methode implementieren](_005/readme.md) | +| 35. | Object und Wrapper | [Optimierung bei Integer](_006/readme.md) | +| 36. | Object und Wrapper | [Methoden der Wrapper-Klassen](_007/readme.md) | +| 37. | Enumerationen | [Eigene Enumeration schreiben und verwenden](_001/readme.md) | +| 38. | Enumerationen | [Enumeration schreiben](_002/readme.md) | +| 39. | Enumerationen | [Singleton-Eigenschaft von Enumerationen](_003/readme.md) | +| 40. | Enumerationen | [Stein, Papier, Schere, Echse, Spock](_004/readme.md) | +| 41. | Ausnahmen | [Ausnahmen testen](_001/readme.md) | +| 42. | Ausnahmen | [Eigene Ausnahmen schreiben und an entsprechender Stelle werfen](_002/readme.md) | +| 43. | Ausnahmen | [Eigene Exception schreiben](_003/readme.md) | +| 44. | Ausnahmen | [Handle-or-Declare-Regel anwenden](_004/readme.md) | +| 45. | Ausnahmen | [Ausnahmen mit `try` und `catch` behandeln.](_005/readme.md) | +| 46. | Input und Output | [`BufferedReader` zum zeilenweisen Lesen einsetzen](_001/readme.md) | +| 47. | Input und Output | [DataOutputStream](_002/readme.md) | +| 48. | Input und Output | [DataOutputStream durch Serialisierung ersetzen](_003/readme.md) | +| 49. | Input und Output | [Daten mit `DataOutputStream` und `DataInputStream` verarbeiten](_004/readme.md) | +| 50. | Input und Output | [Daten mit einem `InputStream` lesen](_005/readme.md) | +| 51. | Input und Output | [Daten mit einem `OutputStream` schreiben](_006/readme.md) | +| 52. | Input und Output | [Filesystem-Abstraktion mit `File`](_007/readme.md) | +| 53. | Input und Output | [Fileattribute lesen](_008/readme.md) | +| 54. | Input und Output | [`FilterReader`](_009/readme.md) | +| 55. | Input und Output | [Konsolen Input/Output](_010/readme.md) | +| 56. | Input und Output | [Zeilen einer Textdatei zählen](_011/readme.md) | +| 57. | Input und Output | [`RandomAccessFile`](_012/readme.md) | +| 58. | Input und Output | [`Reader` verwenden](_013/readme.md) | +| 59. | Input und Output | [Rot13-Verschlüsselung](_014/readme.md) | +| 60. | Input und Output | [Datei zerhacken](_015/readme.md) | +| 61. | Input und Output | [Serialisierung](_016/readme.md) | +| 62. | Generische Typen | [Einen generischen Typ schreiben](_001/readme.md) | +| 63. | Generische Typen | [Generische Klasse Pair schreiben](_002/readme.md) | +| 64. | Generische Typen | [Generische Klasse Pair erweitern: NumberPair](_003/readme.md) | +| 65. | Generische Typen | [Generische Klasse Pair erweitern: SamePair](_004/readme.md) | +| 66. | Generische Typen | [PairList](_005/readme.md) | +| 67. | Generische Typen | [Wildcard benutzen](_006/readme.md) | +| 68. | Generische Typen | [Generische Queue](_007/readme.md) | +| 69. | Generische Typen | [`super` und `extends` einsetzen](_008/readme.md) | +| 70. | Generische Typen | [Generische Typen zusammen mit Wildcards einsetzen](_009/readme.md) | +| 71. | Geschachtelte Klassen | [Eigene compare-Methode schreiben](_001/readme.md) | +| 72. | Geschachtelte Klassen | [Innere Klasse Beobachter](_002/readme.md) | +| 73. | Geschachtelte Klassen | [Callback mit anonymer Klasse realisieren](_003/readme.md) | +| 74. | Lambdas | [Comparator als Lambda](_001/readme.md) | +| 75. | Lambdas | [Callback mit Lambda realisieren](_002/readme.md) | +| 76. | Geschachtelte Klassen | [MatrixSuche](_001/readme.md) | +| 77. | Lambdas | [StringTransmogrifier](_001/readme.md) | +| 78. | Lambdas | [StringTransmogrifier erweitern](_002/readme.md) | +| 79. | Collections | [Iterator schreiben](_001/readme.md) | +| 80. | Collections | [Iterator programmieren](_002/readme.md) | +| 81. | Collections | [`List` und dessen Implementierungen](_003/readme.md) | +| 82. | Collections | [`Map` verwenden](_004/readme.md) | +| 83. | Collections | [ReverserGeneric](_005/readme.md) | +| 84. | Collections | [Strings umgekehrt sortieren: Reverser](_006/readme.md) | +| 85. | Collections | [`Set` und dessen Implementierungen](_007/readme.md) | +| 86. | Collections | [CommandLineSorter](_008/readme.md) | +| 87. | Collections | [CommandLineSorter -- Version 2](_009/readme.md) | +| 88. | Collections | [`Comparator` verwenden und Objekte sortieren](_010/readme.md) | +| 89. | Collections | [Wörterbuchprogramm](_011/readme.md) | +| 90. | Streams | [Kleinbuchstaben in einem String zählen](_001/readme.md) | +| 91. | Streams | [Buchstaben in einer Liste von Strings zählen](_002/readme.md) | +| 92. | Streams | [Kleinbuchstaben in einem String zählen](_003/readme.md) | +| 93. | Streams | [Liste filtern](_004/readme.md) | +| 94. | Streams | [Streams mit interner Iteration](_005/readme.md) | +| 95. | Streams | [Map und Filter auf Streams](_006/readme.md) | +| 96. | Streams | [Map und Reduce auf Streams](_007/readme.md) | +| 97. | Streams | [Reduce](_008/readme.md) | +| 98. | Streams | [Summe über reduce bestimmen](_009/readme.md) | +| 99. | Streams | [Wörter zählen](_010/readme.md) | +| 100. | Threads | [Fakultät parallel berechnen](_001/readme.md) | +| 101. | Threads | [Thread per interrupt beenden](_002/readme.md) | +| 102. | Threads | [wait und notify benutzen](_003/readme.md) | +| 103. | Threads | [Parallele Ausgaben erzeugen](_004/readme.md) | +| 104. | Threads | [Race-Condition finden und beheben](_005/readme.md) | +| 105. | Threads | [Stack und Heap unterscheiden](_006/readme.md) | +| 106. | Threads | [synchronized verwenden](_007/readme.md) | +| 107. | Threads | [Timer und TimerTask verwenden](_008/readme.md) | +| 108. | Reflection | [Klasse per Reflection analysieren](_001/readme.md) | +| 109. | Reflection | [Objekte per Reflection erzeugen](_002/readme.md) | diff --git a/solutions/checkstyle.xml b/solutions/checkstyle.xml new file mode 100644 index 0000000..2a9d4aa --- /dev/null +++ b/solutions/checkstyle.xml @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/solutions/pmd.xml b/solutions/pmd.xml new file mode 100644 index 0000000..97e1b5f --- /dev/null +++ b/solutions/pmd.xml @@ -0,0 +1,2253 @@ + + + + + +Rules which enforce generally accepted best practices. + + + + + + +Instantiation by way of private constructors from outside the constructor's class often causes the +generation of an accessor. A factory method, or non-privatization of the constructor can eliminate this +situation. The generated class file is actually an interface. It gives the accessing class the ability +to invoke a new hidden package scope constructor that takes the interface as a supplementary parameter. +This turns a private constructor effectively into one with package scope, and is challenging to discern. + +_Note:_ This rule is only executed for Java 10 or lower. +Since Java 11, [JEP 181: Nest-Based Access Control](https://openjdk.org/jeps/181) has been implemented. This +means that in Java 11 and above accessor classes are not generated anymore. + + 3 + + + + + + + + + + Declaring a MessageDigest instance as a field make this instance directly available to multiple threads. + Such sharing of MessageDigest instances should be avoided if possible since it leads to wrong results + if the access is not synchronized correctly. + Just create a new instance and use it locally, where you need it. + Creating a new instance is easier than synchronizing access to a shared instance. + + 3 + + + + + + + + + + + + + + + +Reassigning exception variables caught in a catch statement should be avoided because of: + +1) If it is needed, multi catch can be easily added and code will still compile. + +2) Following the principle of least surprise we want to make sure that a variable caught in a catch statement +is always the one thrown in a try block. + + 3 + + + + + +Reassigning loop variables can lead to hard-to-find bugs. Prevent or limit how these variables can be changed. + +In foreach-loops, configured by the `foreachReassign` property: +- `deny`: Report any reassignment of the loop variable in the loop body. _This is the default._ +- `allow`: Don't check the loop variable. +- `firstOnly`: Report any reassignments of the loop variable, except as the first statement in the loop body. + _This is useful if some kind of normalization or clean-up of the value before using is permitted, but any other change of the variable is not._ + +In for-loops, configured by the `forReassign` property: +- `deny`: Report any reassignment of the control variable in the loop body. _This is the default._ +- `allow`: Don't check the control variable. +- `skip`: Report any reassignments of the control variable, except conditional increments/decrements (`++`, `--`, `+=`, `-=`). + _This prevents accidental reassignments or unconditional increments of the control variable._ + + 3 + + + + + + + + + + + +Reassigning values to incoming parameters of a method or constructor is not recommended, as this can +make the code more difficult to understand. The code is often read with the assumption that parameter values +don't change and an assignment violates therefore the principle of least astonishment. This is especially a +problem if the parameter is documented e.g. in the method's javadoc and the new content differs from the original +documented content. + +Use temporary local variables instead. This allows you to assign a new name, which makes the code better +understandable. + +Note that this rule considers both methods and constructors. If there are multiple assignments for a formal +parameter, then only the first assignment is reported. + + 2 + + + + + + + +StringBuffers/StringBuilders can grow considerably, and so may become a source of memory leaks +if held within objects with long lifetimes. + + 3 + + + + + + + + + + + + + + + +Application with hard-coded IP addresses can become impossible to deploy in some cases. +Externalizing IP adresses is preferable. + + 3 + + + + + + + +Always check the return values of navigation methods (next, previous, first, last) of a ResultSet. +If the value return is 'false', it should be handled properly. + + 3 + + + + + + + +Avoid constants in interfaces. Interfaces should define types, constants are implementation details +better placed in classes or enums. See Effective Java, item 19. + + 3 + + + + + + + + + + + + + + + + +By convention, the default label should be the last label in a switch statement. + + 3 + + + + + + + + + + + + + + + + Double brace initialisation is a pattern to initialise eg collections concisely. But it implicitly + generates a new .class file, and the object holds a strong reference to the enclosing object. For those + reasons, it is preferable to initialize the object normally, even though it's verbose. + + This rule counts any anonymous class which only has a single initializer as an instance of double-brace + initialization. There is currently no way to find out whether a method called in the initializer is not + accessible from outside the anonymous class, and those legit cases should be suppressed for the time being. + + 3 + + + + + + + + + (){{ + add("a"); + add("b"); + add("c"); +}}; + +// the better way is to not create an anonymous class: +List a = new ArrayList<>(); +a.add("a"); +a.add("b"); +a.add("c"); +return a; +]]> + + + + + +Reports loops that can be safely replaced with the foreach syntax. The rule considers loops over +lists, arrays and iterators. A loop is safe to replace if it only uses the index variable to +access an element of the list or array, only has one update statement, and loops through *every* +element of the list or array left to right. + + 3 + + l) { + for (int i = 0; i < l.size(); i++) { // pre Java 1.5 + System.out.println(l.get(i)); + } + + for (String s : l) { // post Java 1.5 + System.out.println(s); + } + } +} +]]> + + + + + +Whenever using a log level, one should check if the loglevel is actually enabled, or +otherwise skip the associate String creation and manipulation. + +An alternative to checking the log level are substituting parameters, formatters or lazy logging +with lambdas. The available alternatives depend on the actual logging framework. + + 2 + + calculateExpensiveLoggingText()); +]]> + + + + + +In JUnit 3, test suites are indicated by the suite() method. In JUnit 4, suites are indicated +through the @RunWith(Suite.class) annotation. + + 3 + + + + + + + + + + + + + + + +In JUnit 3, the tearDown method was used to clean up all data entities required in running tests. +JUnit 4 skips the tearDown method and executes all methods annotated with @After after running each test. +JUnit 5 introduced @AfterEach and @AfterAll annotations to execute methods after each test or after all tests in the class, respectively. + + 3 + + + + + + + + + + + + + + + +In JUnit 3, the setUp method was used to set up all data entities required in running tests. +JUnit 4 skips the setUp method and executes all methods annotated with @Before before all tests. +JUnit 5 introduced @BeforeEach and @BeforeAll annotations to execute methods before each test or before all tests in the class, respectively. + + 3 + + + + + + + + + + + + + + + +In JUnit 3, the framework executed all methods which started with the word test as a unit test. +In JUnit 4, only methods annotated with the @Test annotation are executed. +In JUnit 5, one of the following annotations should be used for tests: @Test, @RepeatedTest, @TestFactory, @TestTemplate or @ParameterizedTest. + + 3 + + + + + + + + + + + + + + + + + + + + +In JUnit4, use the @Test(expected) annotation to denote tests that should throw exceptions. + + 3 + + + + + + + + Position literals first in all String comparisons, if the second argument is null then NullPointerExceptions + can be avoided, they will just return false. Note that switching literal positions for compareTo and + compareToIgnoreCase may change the result, see examples. + + 3 + + 0); // should be: "bar".compareTo(x) < 0 + } + boolean bar(String x) { + return (x.compareToIgnoreCase("bar") > 0); // should be: "bar".compareToIgnoreCase(x) < 0 + } + boolean bar(String x) { + return x.contentEquals("bar"); // should be "bar".contentEquals(x) + } +} +]]> + + + + + +The use of implementation types (i.e., HashSet) as object references limits your ability to use alternate +implementations in the future as requirements change. Whenever available, referencing objects +by their interface types (i.e, Set) provides much more flexibility. + + 3 + + list = new ArrayList<>(); + + public HashSet getFoo() { + return new HashSet(); + } + + // preferred approach + private List list = new ArrayList<>(); + + public Set getFoo() { + return new HashSet(); + } +} +]]> + + + + + +Exposing internal arrays to the caller violates object encapsulation since elements can be +removed or replaced outside of the object that owns it. It is safer to return a copy of the array. + + 3 + + + + + + + + + Annotating overridden methods with @Override ensures at compile time that + the method really overrides one, which helps refactoring and clarifies intent. + + 3 + + + + + + + +Java allows the use of several variables declaration of the same type on one line. However, it +can lead to quite messy code. This rule looks for several declarations on the same line. + + 4 + + + + + 1] + [$strictMode or count(distinct-values(VariableDeclarator/@BeginLine)) != count(VariableDeclarator)] +| +//FieldDeclaration + [count(VariableDeclarator) > 1] + [$strictMode or count(distinct-values(VariableDeclarator/@BeginLine)) != count(VariableDeclarator)] +]]> + + + + + + + + + + + + +Position literals first in comparisons, if the second argument is null then NullPointerExceptions +can be avoided, they will just return false. + +This rule is replaced by the more general rule {% rule "LiteralsFirstInComparisons" %}. + + 3 + + + + + + + +Position literals first in comparisons, if the second argument is null then NullPointerExceptions +can be avoided, they will just return false. + +This rule is replaced by the more general rule {% rule "LiteralsFirstInComparisons" %}. + + 3 + + + + + + + + Reports usages of primitive wrapper constructors. They are deprecated + since Java 9 and should not be used. Even before Java 9, they can + be replaced with usage of the corresponding static `valueOf` factory method + (which may be automatically inserted by the compiler since Java 1.5). + This has the advantage that it may reuse common instances instead of creating + a new instance each time. + + Note that for `Boolean`, the named constants `Boolean.TRUE` and `Boolean.FALSE` + are preferred instead of `Boolean.valueOf`. + + 3 + + + + + + + + +Consider replacing Enumeration usages with the newer java.util.Iterator + + 3 + + + + + + + + + + + + + + + +Consider replacing Hashtable usage with the newer java.util.Map if thread safety is not required. + + 3 + + + + //Type/ReferenceType/ClassOrInterfaceType[@Image='Hashtable'] + + + + + + + + + +Consider replacing Vector usages with the newer java.util.ArrayList if expensive thread-safe operations are not required. + + 3 + + + + //Type/ReferenceType/ClassOrInterfaceType[@Image='Vector'] + + + + + + + + + + + Switch statements should be exhaustive, to make their control flow + easier to follow. This can be achieved by adding a `default` case, or, + if the switch is on an enum type, by ensuring there is one switch branch + for each enum constant. + + 3 + + + + + + + + + + + + + + + Reports assignments to variables that are never used before the variable is overwritten, + or goes out of scope. Unused assignments are those for which + 1. The variable is never read after the assignment, or + 2. The assigned value is always overwritten by other assignments before the next read of + the variable. + + The rule doesn't consider assignments to fields except for those of `this` in a constructor, + or static fields of the current class in static initializers. + + The rule may be suppressed with the standard `@SuppressWarnings("unused")` tag. + + The rule subsumes {% rule "UnusedLocalVariable" %}, and {% rule "UnusedFormalParameter" %}. + Those violations are filtered + out by default, in case you already have enabled those rules, but may be enabled with the property + `reportUnusedVariables`. Variables whose name starts with `ignored` or `unused` are filtered out, as + is standard practice for exceptions. + + Limitations: + * The rule currently cannot know which method calls throw exceptions, or which exceptions they throw. + In the body of a try block, every method or constructor call is assumed to throw. This may cause false-negatives. + The only other language construct that is assumed to throw is the `throw` statement, in particular, + things like `assert` statements, or NullPointerExceptions on dereference are ignored. + * The rule cannot resolve assignments across constructors, when they're called with the special + `this(...)` syntax. This may cause false-negatives. + + Both of those limitations may be partly relaxed in PMD 7. + + 3 + + + + + + + + + + + + + + + + +Reports parameters of methods and constructors that are not referenced them in the method body. +Parameters whose name starts with `ignored` or `unused` are filtered out. + +Removing unused formal parameters from public methods could cause a ripple effect through the code base. +Hence, by default, this rule only considers private methods. To include non-private methods, set the +`checkAll` property to `true`. + + + 3 + + + + + + + +Reports import statements that are not used within the file. This also reports +duplicate imports, and imports from the same package. The simplest fix is just +to delete those imports. + +This rule is deprecated since PMD 6.34.0. Use the rule {% rule "java/codestyle/UnnecessaryImport" %} +from category codestyle instead. + + 4 + + + + + + + +Detects when a local variable is declared and/or assigned, but not used. +Variables whose name starts with `ignored` or `unused` are filtered out. + + 3 + + + + + + + +Detects when a private field is declared and/or assigned a value, but not used. + +Since PMD 6.50.0 private fields are ignored, if the fields are annotated with any annotation or the +enclosing class has any annotation. Annotations often enable a framework (such as dependency injection, mocking +or e.g. Lombok) which use the fields by reflection or other means. This usage can't be detected by static code analysis. +Previously these frameworks where explicitly allowed by listing their annotations in the property +"ignoredAnnotations", but that turned out to be prone of false positive for any not explicitly considered framework. + + 3 + + + + + + + +Unused Private Method detects when a private method is declared but is unused. + + 3 + + + + + + + +This rule detects JUnit assertions in object references equality. These assertions should be made by +more specific methods, like assertNull, assertNotNull. + +Deprecated since PMD 6.37.0, use {% rule SimplifiableTestAssertion %} instead. + + 3 + + + + + + + + + + + + + + + +When asserting a value is the same as a literal or Boxed boolean, use assertTrue/assertFalse, instead of assertEquals. + +Deprecated since PMD 6.37.0, use {% rule SimplifiableTestAssertion %} instead. + + 3 + + + + + + + + + + + + + + + +The isEmpty() method on java.util.Collection is provided to determine if a collection has any elements. +Comparing the value of size() to 0 does not convey intent as well as the isEmpty() method. + + 3 + + + + + + + +Starting with Java 7, StandardCharsets provides constants for common Charset objects, such as UTF-8. +Using the constants is less error prone, and can provide a small performance advantage compared to `Charset.forName(...)` +since no scan across the internal `Charset` caches is needed. + + 3 + + + + + + + + + + + + + + + + + +`do {} while (true);` requires reading the end of the statement before it is +apparent that it loops forever, whereas `while (true) {}` is easier to understand. + +`do {} while (false);` is redundant, and if an inner variable scope is required, +a block `{}` is sufficient. + +`while (false) {}` will never execute the block and can be removed in its entirety. + + 3 + + + += 1]] +| +(: while loops with conditional and'ed boolean literals, maybe parenthesized :) +//WhileStatement[Expression/(AndExpression|ConditionalAndExpression|(PrimaryExpression/PrimaryPrefix/Expression/(AndExpression|ConditionalAndExpression))) + (: at least one false literal :) + [count(PrimaryExpression/PrimaryPrefix/Literal/BooleanLiteral[@True = false()]) >= 1]] +| +(: do-while loops with conditional or'ed boolean literals, maybe parenthesized :) +//DoStatement[Expression/(InclusiveOrExpression|ConditionalOrExpression|(PrimaryExpression/PrimaryPrefix/Expression/(InclusiveOrExpression|ConditionalOrExpression))) + [count(PrimaryExpression/PrimaryPrefix/Literal/BooleanLiteral) = 2]] +| +(: do-while loops with conditional and'ed boolean literals, maybe parenthesized :) +//DoStatement[Expression/(AndExpression|ConditionalAndExpression|(PrimaryExpression/PrimaryPrefix/Expression/(AndExpression|ConditionalAndExpression))) + (: at least one false literal :) + [count(PrimaryExpression/PrimaryPrefix/Literal/BooleanLiteral[@True = false()]) >= 1 + (: or two true literals (e.g. true & true) :) + or count(PrimaryExpression/PrimaryPrefix/Literal/BooleanLiteral[@True = true()]) = 2]] +]]> + + + + + + + + + + diff --git a/solutions/pom.xml b/solutions/pom.xml new file mode 100644 index 0000000..7d56871 --- /dev/null +++ b/solutions/pom.xml @@ -0,0 +1,132 @@ + + 4.0.0 + de.hs_mannheim.pr2 + solutions + 1.0-SNAPSHOT + jar + + PR2 Excercises + + + UTF-8 + 17 + 17 + 5.9.1 + 1.9.1 + + + + jitpack.io + https://jitpack.io + + + + install + ${basedir}/target + ${project.artifactId}-${project.version} + + + maven-compiler-plugin + 3.10.1 + + + maven-surefire-plugin + 3.0.0-M7 + + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.2.0 + + + com.puppycrawl.tools + checkstyle + 10.4 + + + + checkstyle.xml + true + true + false + + + + validate + validate + + check + + + + + + org.apache.maven.plugins + maven-pmd-plugin + 3.19.0 + + + ./pmd.xml + + true + true + + + + + check + + + + + + + + + + com.github.thomsmits + game-framework + v1.0 + + + org.junit.jupiter + junit-jupiter-engine + ${junit.jupiter.version} + + + org.junit.jupiter + junit-jupiter-api + ${junit.jupiter.version} + + + org.junit.jupiter + junit-jupiter-params + ${junit.jupiter.version} + + + org.junit.platform + junit-platform-suite + ${junit.platform.version} + + + org.junit.vintage + junit-vintage-engine + 4.12.0-M4 + + + org.jfree + jfreechart + 1.5.3 + + + + diff --git a/sources/.classpath b/sources/.classpath new file mode 100644 index 0000000..766838c --- /dev/null +++ b/sources/.classpath @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/sources/checkstyle.xml b/sources/checkstyle.xml new file mode 100644 index 0000000..2a9d4aa --- /dev/null +++ b/sources/checkstyle.xml @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sources/lib/game_framework.jar b/sources/lib/game_framework.jar new file mode 100644 index 0000000..92103c4 Binary files /dev/null and b/sources/lib/game_framework.jar differ diff --git a/sources/lib/jcommon-1.0.23.jar b/sources/lib/jcommon-1.0.23.jar new file mode 100644 index 0000000..4dbb094 Binary files /dev/null and b/sources/lib/jcommon-1.0.23.jar differ diff --git a/sources/lib/jfreechart-1.0.19.jar b/sources/lib/jfreechart-1.0.19.jar new file mode 100644 index 0000000..23bbbed Binary files /dev/null and b/sources/lib/jfreechart-1.0.19.jar differ diff --git a/sources/pmd.xml b/sources/pmd.xml new file mode 100644 index 0000000..97e1b5f --- /dev/null +++ b/sources/pmd.xml @@ -0,0 +1,2253 @@ + + + + + +Rules which enforce generally accepted best practices. + + + + + + +Instantiation by way of private constructors from outside the constructor's class often causes the +generation of an accessor. A factory method, or non-privatization of the constructor can eliminate this +situation. The generated class file is actually an interface. It gives the accessing class the ability +to invoke a new hidden package scope constructor that takes the interface as a supplementary parameter. +This turns a private constructor effectively into one with package scope, and is challenging to discern. + +_Note:_ This rule is only executed for Java 10 or lower. +Since Java 11, [JEP 181: Nest-Based Access Control](https://openjdk.org/jeps/181) has been implemented. This +means that in Java 11 and above accessor classes are not generated anymore. + + 3 + + + + + + + + + + Declaring a MessageDigest instance as a field make this instance directly available to multiple threads. + Such sharing of MessageDigest instances should be avoided if possible since it leads to wrong results + if the access is not synchronized correctly. + Just create a new instance and use it locally, where you need it. + Creating a new instance is easier than synchronizing access to a shared instance. + + 3 + + + + + + + + + + + + + + + +Reassigning exception variables caught in a catch statement should be avoided because of: + +1) If it is needed, multi catch can be easily added and code will still compile. + +2) Following the principle of least surprise we want to make sure that a variable caught in a catch statement +is always the one thrown in a try block. + + 3 + + + + + +Reassigning loop variables can lead to hard-to-find bugs. Prevent or limit how these variables can be changed. + +In foreach-loops, configured by the `foreachReassign` property: +- `deny`: Report any reassignment of the loop variable in the loop body. _This is the default._ +- `allow`: Don't check the loop variable. +- `firstOnly`: Report any reassignments of the loop variable, except as the first statement in the loop body. + _This is useful if some kind of normalization or clean-up of the value before using is permitted, but any other change of the variable is not._ + +In for-loops, configured by the `forReassign` property: +- `deny`: Report any reassignment of the control variable in the loop body. _This is the default._ +- `allow`: Don't check the control variable. +- `skip`: Report any reassignments of the control variable, except conditional increments/decrements (`++`, `--`, `+=`, `-=`). + _This prevents accidental reassignments or unconditional increments of the control variable._ + + 3 + + + + + + + + + + + +Reassigning values to incoming parameters of a method or constructor is not recommended, as this can +make the code more difficult to understand. The code is often read with the assumption that parameter values +don't change and an assignment violates therefore the principle of least astonishment. This is especially a +problem if the parameter is documented e.g. in the method's javadoc and the new content differs from the original +documented content. + +Use temporary local variables instead. This allows you to assign a new name, which makes the code better +understandable. + +Note that this rule considers both methods and constructors. If there are multiple assignments for a formal +parameter, then only the first assignment is reported. + + 2 + + + + + + + +StringBuffers/StringBuilders can grow considerably, and so may become a source of memory leaks +if held within objects with long lifetimes. + + 3 + + + + + + + + + + + + + + + +Application with hard-coded IP addresses can become impossible to deploy in some cases. +Externalizing IP adresses is preferable. + + 3 + + + + + + + +Always check the return values of navigation methods (next, previous, first, last) of a ResultSet. +If the value return is 'false', it should be handled properly. + + 3 + + + + + + + +Avoid constants in interfaces. Interfaces should define types, constants are implementation details +better placed in classes or enums. See Effective Java, item 19. + + 3 + + + + + + + + + + + + + + + + +By convention, the default label should be the last label in a switch statement. + + 3 + + + + + + + + + + + + + + + + Double brace initialisation is a pattern to initialise eg collections concisely. But it implicitly + generates a new .class file, and the object holds a strong reference to the enclosing object. For those + reasons, it is preferable to initialize the object normally, even though it's verbose. + + This rule counts any anonymous class which only has a single initializer as an instance of double-brace + initialization. There is currently no way to find out whether a method called in the initializer is not + accessible from outside the anonymous class, and those legit cases should be suppressed for the time being. + + 3 + + + + + + + + + (){{ + add("a"); + add("b"); + add("c"); +}}; + +// the better way is to not create an anonymous class: +List a = new ArrayList<>(); +a.add("a"); +a.add("b"); +a.add("c"); +return a; +]]> + + + + + +Reports loops that can be safely replaced with the foreach syntax. The rule considers loops over +lists, arrays and iterators. A loop is safe to replace if it only uses the index variable to +access an element of the list or array, only has one update statement, and loops through *every* +element of the list or array left to right. + + 3 + + l) { + for (int i = 0; i < l.size(); i++) { // pre Java 1.5 + System.out.println(l.get(i)); + } + + for (String s : l) { // post Java 1.5 + System.out.println(s); + } + } +} +]]> + + + + + +Whenever using a log level, one should check if the loglevel is actually enabled, or +otherwise skip the associate String creation and manipulation. + +An alternative to checking the log level are substituting parameters, formatters or lazy logging +with lambdas. The available alternatives depend on the actual logging framework. + + 2 + + calculateExpensiveLoggingText()); +]]> + + + + + +In JUnit 3, test suites are indicated by the suite() method. In JUnit 4, suites are indicated +through the @RunWith(Suite.class) annotation. + + 3 + + + + + + + + + + + + + + + +In JUnit 3, the tearDown method was used to clean up all data entities required in running tests. +JUnit 4 skips the tearDown method and executes all methods annotated with @After after running each test. +JUnit 5 introduced @AfterEach and @AfterAll annotations to execute methods after each test or after all tests in the class, respectively. + + 3 + + + + + + + + + + + + + + + +In JUnit 3, the setUp method was used to set up all data entities required in running tests. +JUnit 4 skips the setUp method and executes all methods annotated with @Before before all tests. +JUnit 5 introduced @BeforeEach and @BeforeAll annotations to execute methods before each test or before all tests in the class, respectively. + + 3 + + + + + + + + + + + + + + + +In JUnit 3, the framework executed all methods which started with the word test as a unit test. +In JUnit 4, only methods annotated with the @Test annotation are executed. +In JUnit 5, one of the following annotations should be used for tests: @Test, @RepeatedTest, @TestFactory, @TestTemplate or @ParameterizedTest. + + 3 + + + + + + + + + + + + + + + + + + + + +In JUnit4, use the @Test(expected) annotation to denote tests that should throw exceptions. + + 3 + + + + + + + + Position literals first in all String comparisons, if the second argument is null then NullPointerExceptions + can be avoided, they will just return false. Note that switching literal positions for compareTo and + compareToIgnoreCase may change the result, see examples. + + 3 + + 0); // should be: "bar".compareTo(x) < 0 + } + boolean bar(String x) { + return (x.compareToIgnoreCase("bar") > 0); // should be: "bar".compareToIgnoreCase(x) < 0 + } + boolean bar(String x) { + return x.contentEquals("bar"); // should be "bar".contentEquals(x) + } +} +]]> + + + + + +The use of implementation types (i.e., HashSet) as object references limits your ability to use alternate +implementations in the future as requirements change. Whenever available, referencing objects +by their interface types (i.e, Set) provides much more flexibility. + + 3 + + list = new ArrayList<>(); + + public HashSet getFoo() { + return new HashSet(); + } + + // preferred approach + private List list = new ArrayList<>(); + + public Set getFoo() { + return new HashSet(); + } +} +]]> + + + + + +Exposing internal arrays to the caller violates object encapsulation since elements can be +removed or replaced outside of the object that owns it. It is safer to return a copy of the array. + + 3 + + + + + + + + + Annotating overridden methods with @Override ensures at compile time that + the method really overrides one, which helps refactoring and clarifies intent. + + 3 + + + + + + + +Java allows the use of several variables declaration of the same type on one line. However, it +can lead to quite messy code. This rule looks for several declarations on the same line. + + 4 + + + + + 1] + [$strictMode or count(distinct-values(VariableDeclarator/@BeginLine)) != count(VariableDeclarator)] +| +//FieldDeclaration + [count(VariableDeclarator) > 1] + [$strictMode or count(distinct-values(VariableDeclarator/@BeginLine)) != count(VariableDeclarator)] +]]> + + + + + + + + + + + + +Position literals first in comparisons, if the second argument is null then NullPointerExceptions +can be avoided, they will just return false. + +This rule is replaced by the more general rule {% rule "LiteralsFirstInComparisons" %}. + + 3 + + + + + + + +Position literals first in comparisons, if the second argument is null then NullPointerExceptions +can be avoided, they will just return false. + +This rule is replaced by the more general rule {% rule "LiteralsFirstInComparisons" %}. + + 3 + + + + + + + + Reports usages of primitive wrapper constructors. They are deprecated + since Java 9 and should not be used. Even before Java 9, they can + be replaced with usage of the corresponding static `valueOf` factory method + (which may be automatically inserted by the compiler since Java 1.5). + This has the advantage that it may reuse common instances instead of creating + a new instance each time. + + Note that for `Boolean`, the named constants `Boolean.TRUE` and `Boolean.FALSE` + are preferred instead of `Boolean.valueOf`. + + 3 + + + + + + + + +Consider replacing Enumeration usages with the newer java.util.Iterator + + 3 + + + + + + + + + + + + + + + +Consider replacing Hashtable usage with the newer java.util.Map if thread safety is not required. + + 3 + + + + //Type/ReferenceType/ClassOrInterfaceType[@Image='Hashtable'] + + + + + + + + + +Consider replacing Vector usages with the newer java.util.ArrayList if expensive thread-safe operations are not required. + + 3 + + + + //Type/ReferenceType/ClassOrInterfaceType[@Image='Vector'] + + + + + + + + + + + Switch statements should be exhaustive, to make their control flow + easier to follow. This can be achieved by adding a `default` case, or, + if the switch is on an enum type, by ensuring there is one switch branch + for each enum constant. + + 3 + + + + + + + + + + + + + + + Reports assignments to variables that are never used before the variable is overwritten, + or goes out of scope. Unused assignments are those for which + 1. The variable is never read after the assignment, or + 2. The assigned value is always overwritten by other assignments before the next read of + the variable. + + The rule doesn't consider assignments to fields except for those of `this` in a constructor, + or static fields of the current class in static initializers. + + The rule may be suppressed with the standard `@SuppressWarnings("unused")` tag. + + The rule subsumes {% rule "UnusedLocalVariable" %}, and {% rule "UnusedFormalParameter" %}. + Those violations are filtered + out by default, in case you already have enabled those rules, but may be enabled with the property + `reportUnusedVariables`. Variables whose name starts with `ignored` or `unused` are filtered out, as + is standard practice for exceptions. + + Limitations: + * The rule currently cannot know which method calls throw exceptions, or which exceptions they throw. + In the body of a try block, every method or constructor call is assumed to throw. This may cause false-negatives. + The only other language construct that is assumed to throw is the `throw` statement, in particular, + things like `assert` statements, or NullPointerExceptions on dereference are ignored. + * The rule cannot resolve assignments across constructors, when they're called with the special + `this(...)` syntax. This may cause false-negatives. + + Both of those limitations may be partly relaxed in PMD 7. + + 3 + + + + + + + + + + + + + + + + +Reports parameters of methods and constructors that are not referenced them in the method body. +Parameters whose name starts with `ignored` or `unused` are filtered out. + +Removing unused formal parameters from public methods could cause a ripple effect through the code base. +Hence, by default, this rule only considers private methods. To include non-private methods, set the +`checkAll` property to `true`. + + + 3 + + + + + + + +Reports import statements that are not used within the file. This also reports +duplicate imports, and imports from the same package. The simplest fix is just +to delete those imports. + +This rule is deprecated since PMD 6.34.0. Use the rule {% rule "java/codestyle/UnnecessaryImport" %} +from category codestyle instead. + + 4 + + + + + + + +Detects when a local variable is declared and/or assigned, but not used. +Variables whose name starts with `ignored` or `unused` are filtered out. + + 3 + + + + + + + +Detects when a private field is declared and/or assigned a value, but not used. + +Since PMD 6.50.0 private fields are ignored, if the fields are annotated with any annotation or the +enclosing class has any annotation. Annotations often enable a framework (such as dependency injection, mocking +or e.g. Lombok) which use the fields by reflection or other means. This usage can't be detected by static code analysis. +Previously these frameworks where explicitly allowed by listing their annotations in the property +"ignoredAnnotations", but that turned out to be prone of false positive for any not explicitly considered framework. + + 3 + + + + + + + +Unused Private Method detects when a private method is declared but is unused. + + 3 + + + + + + + +This rule detects JUnit assertions in object references equality. These assertions should be made by +more specific methods, like assertNull, assertNotNull. + +Deprecated since PMD 6.37.0, use {% rule SimplifiableTestAssertion %} instead. + + 3 + + + + + + + + + + + + + + + +When asserting a value is the same as a literal or Boxed boolean, use assertTrue/assertFalse, instead of assertEquals. + +Deprecated since PMD 6.37.0, use {% rule SimplifiableTestAssertion %} instead. + + 3 + + + + + + + + + + + + + + + +The isEmpty() method on java.util.Collection is provided to determine if a collection has any elements. +Comparing the value of size() to 0 does not convey intent as well as the isEmpty() method. + + 3 + + + + + + + +Starting with Java 7, StandardCharsets provides constants for common Charset objects, such as UTF-8. +Using the constants is less error prone, and can provide a small performance advantage compared to `Charset.forName(...)` +since no scan across the internal `Charset` caches is needed. + + 3 + + + + + + + + + + + + + + + + + +`do {} while (true);` requires reading the end of the statement before it is +apparent that it loops forever, whereas `while (true) {}` is easier to understand. + +`do {} while (false);` is redundant, and if an inner variable scope is required, +a block `{}` is sufficient. + +`while (false) {}` will never execute the block and can be removed in its entirety. + + 3 + + + += 1]] +| +(: while loops with conditional and'ed boolean literals, maybe parenthesized :) +//WhileStatement[Expression/(AndExpression|ConditionalAndExpression|(PrimaryExpression/PrimaryPrefix/Expression/(AndExpression|ConditionalAndExpression))) + (: at least one false literal :) + [count(PrimaryExpression/PrimaryPrefix/Literal/BooleanLiteral[@True = false()]) >= 1]] +| +(: do-while loops with conditional or'ed boolean literals, maybe parenthesized :) +//DoStatement[Expression/(InclusiveOrExpression|ConditionalOrExpression|(PrimaryExpression/PrimaryPrefix/Expression/(InclusiveOrExpression|ConditionalOrExpression))) + [count(PrimaryExpression/PrimaryPrefix/Literal/BooleanLiteral) = 2]] +| +(: do-while loops with conditional and'ed boolean literals, maybe parenthesized :) +//DoStatement[Expression/(AndExpression|ConditionalAndExpression|(PrimaryExpression/PrimaryPrefix/Expression/(AndExpression|ConditionalAndExpression))) + (: at least one false literal :) + [count(PrimaryExpression/PrimaryPrefix/Literal/BooleanLiteral[@True = false()]) >= 1 + (: or two true literals (e.g. true & true) :) + or count(PrimaryExpression/PrimaryPrefix/Literal/BooleanLiteral[@True = true()]) = 2]] +]]> + + + + + + + + + + diff --git a/sources/pom.xml b/sources/pom.xml new file mode 100644 index 0000000..7d56871 --- /dev/null +++ b/sources/pom.xml @@ -0,0 +1,132 @@ + + 4.0.0 + de.hs_mannheim.pr2 + solutions + 1.0-SNAPSHOT + jar + + PR2 Excercises + + + UTF-8 + 17 + 17 + 5.9.1 + 1.9.1 + + + + jitpack.io + https://jitpack.io + + + + install + ${basedir}/target + ${project.artifactId}-${project.version} + + + maven-compiler-plugin + 3.10.1 + + + maven-surefire-plugin + 3.0.0-M7 + + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.2.0 + + + com.puppycrawl.tools + checkstyle + 10.4 + + + + checkstyle.xml + true + true + false + + + + validate + validate + + check + + + + + + org.apache.maven.plugins + maven-pmd-plugin + 3.19.0 + + + ./pmd.xml + + true + true + + + + + check + + + + + + + + + + com.github.thomsmits + game-framework + v1.0 + + + org.junit.jupiter + junit-jupiter-engine + ${junit.jupiter.version} + + + org.junit.jupiter + junit-jupiter-api + ${junit.jupiter.version} + + + org.junit.jupiter + junit-jupiter-params + ${junit.jupiter.version} + + + org.junit.platform + junit-platform-suite + ${junit.platform.version} + + + org.junit.vintage + junit-vintage-engine + 4.12.0-M4 + + + org.jfree + jfreechart + 1.5.3 + + + + diff --git a/sources/src/main/java/pr2/auffrischung/grossmacher/Grossmacher.java b/sources/src/main/java/pr2/auffrischung/grossmacher/Grossmacher.java new file mode 100644 index 0000000..74e6b5c --- /dev/null +++ b/sources/src/main/java/pr2/auffrischung/grossmacher/Grossmacher.java @@ -0,0 +1,6 @@ +package pr2.auffrischung.grossmacher; + +public class Grossmacher { + + // TODO: main-Methode implementieren +} diff --git a/sources/src/main/java/pr2/auffrischung/labeled_break/ArraySucher.java b/sources/src/main/java/pr2/auffrischung/labeled_break/ArraySucher.java new file mode 100644 index 0000000..31770ea --- /dev/null +++ b/sources/src/main/java/pr2/auffrischung/labeled_break/ArraySucher.java @@ -0,0 +1,19 @@ +package pr2.auffrischung.labeled_break; + +public class ArraySucher { + + /** + * Sucht das erste Element, dass nicht 0 ist. + * + * @param array das Array in dem gesucht werden soll + * @return {@code true}, wenn ein Element gefunden wird, + * andernfalls {@code false}. + */ + public boolean suche(int[][] array) { + boolean found = false; + + // TODO: Methodenrumpf schreiben + + return found; + } +} diff --git a/sources/src/main/java/pr2/auffrischung/password/PasswortChecker.java b/sources/src/main/java/pr2/auffrischung/password/PasswortChecker.java new file mode 100644 index 0000000..a66f880 --- /dev/null +++ b/sources/src/main/java/pr2/auffrischung/password/PasswortChecker.java @@ -0,0 +1,22 @@ +package pr2.auffrischung.password; + +public class PasswortChecker { + + + public static int checkPassword(String password) { + int points = 0; + + // TODO: Methode implementieren + + return points; + } + + public static void main(String[] args) { + System.out.println(checkPassword("mutti")); + System.out.println(checkPassword("Mutti")); + System.out.println(checkPassword("mutti123")); + System.out.println(checkPassword("Mutti123")); + System.out.println(checkPassword("Mutti123!%")); + System.out.println(checkPassword("1234")); + } +} diff --git a/sources/src/main/java/pr2/auffrischung/printf/DoubleFormatter.java b/sources/src/main/java/pr2/auffrischung/printf/DoubleFormatter.java new file mode 100644 index 0000000..fc95fdf --- /dev/null +++ b/sources/src/main/java/pr2/auffrischung/printf/DoubleFormatter.java @@ -0,0 +1,18 @@ +package pr2.auffrischung.printf; + +public class DoubleFormatter { + + public static void printDouble(double d) { + // TODO: Wert ausgeben + } + + public static void main(String[] args) { + printDouble(1.0); + printDouble(10.1); + printDouble(2.01); + printDouble(2.001); + printDouble(2.0001); + printDouble(2.0004); + printDouble(2.0005); + } +} diff --git a/sources/src/main/java/pr2/auffrischung/suchemax/GroessteZahl.java b/sources/src/main/java/pr2/auffrischung/suchemax/GroessteZahl.java new file mode 100644 index 0000000..05954cd --- /dev/null +++ b/sources/src/main/java/pr2/auffrischung/suchemax/GroessteZahl.java @@ -0,0 +1,19 @@ +package pr2.auffrischung.suchemax; + +public class GroessteZahl { + + public int sucheMax(int[] zahlen) { + int max = 0; + + // TODO: Methode implementieren + + return max; + } + + public static void main(String[] args) { + GroessteZahl g = new GroessteZahl(); + System.out.println(g.sucheMax(new int[] {1, 5, 8, 2, 0})); + System.out.println(g.sucheMax(new int[] {-1, -5, -8, -2, -20})); + System.out.println(g.sucheMax(new int[] {10000, -10000, 1, 2, 33})); + } +} diff --git a/sources/src/main/java/pr2/auffrischung/taschenrechner/Taschenrechner.java b/sources/src/main/java/pr2/auffrischung/taschenrechner/Taschenrechner.java new file mode 100644 index 0000000..d0c6463 --- /dev/null +++ b/sources/src/main/java/pr2/auffrischung/taschenrechner/Taschenrechner.java @@ -0,0 +1,18 @@ +package pr2.auffrischung.taschenrechner; + +public class Taschenrechner { + + public double rechne(double o1, char op, double o2) { + // TODO: Implementieren + return 0.0; + } + + public static void main(String[] args) { + Taschenrechner t = new Taschenrechner(); + System.out.println(t.rechne(1, '+', 2)); + System.out.println(t.rechne(1, '-', 2)); + System.out.println(t.rechne(2, '*', 2)); + System.out.println(t.rechne(4, '/', 2)); + System.out.println(t.rechne(2, '^', 32)); + } +} diff --git a/sources/src/main/java/pr2/collections/iterator/SimpleStack.java b/sources/src/main/java/pr2/collections/iterator/SimpleStack.java new file mode 100644 index 0000000..377de82 --- /dev/null +++ b/sources/src/main/java/pr2/collections/iterator/SimpleStack.java @@ -0,0 +1,57 @@ +package pr2.collections.iterator; + +import java.util.Iterator; + +/** + * Eine einfache, naive Stack Implementierung. + * + * @param Typ, der gespeichert werden soll. + */ + public class SimpleStack { +// TODO: implements Iterable hinzufügen + + // Variablen sind nicht private wegen Zugriff durch den Iterator + T[] stack; + + int pos; + + /** + * Legt einen neuen Stack mit der gegebenen Größe an. + * + * @param size Größe des Stacks. + */ + @SuppressWarnings("unchecked") + public SimpleStack(int size) { + stack = (T[]) new Object[size]; + pos = 0; + } + + /** + * Fügt dem Stack ein neues Element hinzu. + * + * @param o Element, das hinzugefügt werden soll. + */ + public void push(T o) { + stack[pos++] = o; + } + + /** + * Holt das oberste Element und entfernt es. + * + * @return das oberste Element + */ + public T pop() { + return stack[--pos]; + } + + /** + * Gibt das oberste Element zurück, ohne es zu entfernen. + * + * @return das oberste Element + */ + public T peek() { + return stack[pos - 1]; + } + + // TODO: Interface Iterable implementieren +} diff --git a/sources/src/main/java/pr2/collections/iterator/test/SimpleStackTest.java b/sources/src/main/java/pr2/collections/iterator/test/SimpleStackTest.java new file mode 100644 index 0000000..7abca23 --- /dev/null +++ b/sources/src/main/java/pr2/collections/iterator/test/SimpleStackTest.java @@ -0,0 +1,87 @@ +package pr2.collections.iterator.test; + +import org.junit.jupiter.api.Test; +import pr2.collections.iterator.SimpleStack; + +import java.util.Iterator; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** + * Test für den Stack. + */ +public class SimpleStackTest { + + /** + * Testet den Stack an sich. + */ + @Test + void testStack() { + SimpleStack s = new SimpleStack<>(10); + s.push("A"); + s.push("B"); + s.push("C"); + s.push("D"); + assertEquals("D", s.peek()); + assertEquals("D", s.pop()); + assertEquals("C", s.pop()); + assertEquals("B", s.pop()); + s.push("A2"); + s.push("A3"); + assertEquals("A3", s.peek()); + assertEquals("A3", s.pop()); + assertEquals("A2", s.pop()); + assertEquals("A", s.pop()); + } + +// TODO: Einkommentieren +// +// /** +// * Testet den Iterator. +// */ +// @Test +// void testIterator() { +// SimpleStack s = new SimpleStack<>(10); +// s.push("A"); +// s.push("B"); +// s.push("C"); +// s.push("D"); +// +// String[] result = new String[5]; +// int count = 0; +// +// for (String string : s) { +// result[count++] = string; +// } +// +// assertEquals("D", s.peek()); +// +// assertEquals("D", result[0]); +// assertEquals("C", result[1]); +// assertEquals("B", result[2]); +// assertEquals("A", result[3]); +// +// s.push("E"); +// +// Iterator it = s.iterator(); +// +// count = 0; +// while (it.hasNext()) { +// result[count++] = it.next(); +// } +// +// assertEquals("E", result[0]); +// assertEquals("D", result[1]); +// assertEquals("C", result[2]); +// assertEquals("B", result[3]); +// assertEquals("A", result[4]); +// +// assertFalse(it.hasNext()); +// +// it = s.iterator(); +// +// assertTrue(it.hasNext()); +// } +} diff --git a/sources/src/main/java/pr2/collections/list/WordCollector.java b/sources/src/main/java/pr2/collections/list/WordCollector.java new file mode 100644 index 0000000..b5f1a69 --- /dev/null +++ b/sources/src/main/java/pr2/collections/list/WordCollector.java @@ -0,0 +1,159 @@ +package pr2.collections.list; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; + +/** + * Klassen, um die in einem Text vorkommenden Wörter zu sammeln. + */ +public class WordCollector { + + /** + * Listet alle Worte in der Datei alphabetisch auf. Duplikate werden + * entfernt. Die Wörter werden in Kleinbuchstaben umgewandelt. + * + * @param filename Dateiname + * @return die Liste der vorhandenen Wort + * @throws IOException Fehler beim Dateizugriff. + */ + public static String[] listWords(String filename) throws IOException { + String[] allWords = readFileAndSplitIntoWords(filename); + String[] result = removeDuplicates(allWords); + + return result; + } + + /** + * Listet alle Worte in der Datei auf. + * + * @param filename Dateiname + * @return die Liste der vorhandenen Wort + * @throws IOException Fehler beim Dateizugriff. + */ + private static String[] readFileAndSplitIntoWords(String filename) + throws IOException { + + // Datei zum Lesen öffnen + BufferedReader reader = new BufferedReader( + new FileReader(filename)); + + String line; // aktuelle Zeile + String[] wordBuffer = new String[100]; // Puffer für die Worte + int pos = 0; // Position im Word-Puffer + + // Über die Zeilen der Datei iterieren + while ((line = reader.readLine()) != null) { + + // Sonderzeichen entfernen und die Zeilen in Worte splitten + line = line.toLowerCase(); + line = line.replaceAll("[\",.:'\\-\\!?]", ""); + + String[] words = line.toLowerCase().split("[,. ]"); + + // Worte in den Puffer übertragen + for (String word : words) { + + if (pos >= wordBuffer.length) { + // Puffer ist voll, vergrößern + String[] newBuffer = + new String[wordBuffer.length * 2]; + System.arraycopy(wordBuffer, 0, newBuffer, + 0, wordBuffer.length); + wordBuffer = newBuffer; + } + + wordBuffer[pos++] = word; + } + } + + reader.close(); + + // Ergebnis-Array mit der richtigen Größe anlegen + String[] result = new String[pos]; + System.arraycopy(wordBuffer, 0, result, 0, pos); + + return result; + } + + /** + * Sortiert das übergebene Array alphabetisch und entfernt Duplikate. + * + * @param input Eingabe Array + * @return sortiertes und bereinigtes Array + */ + private static String[] removeDuplicates(String[] input) { + + // Eingabe Array clonen, da es verändert wird (Seiteneffekt) + String[] strings = input.clone(); + + // Array sortieren + Arrays.sort(strings); + + // Über die Einträge laufen + for (int i = 0; i < strings.length; i++) { + String word = strings[i]; + + if (word == null) { + // Bereits entfernter Eintrag + continue; + } + + // Über die Einträge laufen + for (int k = i + 1; k < strings.length; k++) { + String otherWord = strings[k]; + + if (otherWord == null) { + // Bereits entfernter Eintrag + continue; + } + else if (otherWord.compareTo(word) > 0) { + // Sind schon hinter der möglichen Position + break; + } + else if (otherWord.equals(word)) { + // Duplikat, ausnullen + strings[k] = null; + } + } + } + + // Ausgenullte Einträge entfernen + int pos = 0; + String[] temp = new String[strings.length]; + + for (int i = 0; i < strings.length; i++) { + if (strings[i] != null) { + temp[pos++] = strings[i]; + } + } + + // Ergebnis auf die richtige Länge bringen + String[] result = new String[pos]; + System.arraycopy(temp, 0, result, 0, pos); + + return result; + } + + /** + * Hauptmethode. + * + * @param args Kommandozeilen-Argumente. + */ + public static void main(String[] args) { + + try { + String[] words = listWords( + "kafka.txt"); + System.out.println(Arrays.toString(words)); + } + catch (IOException e) { + System.err.println("Probleme beim Dateizugriff: " + e); + } + } +} diff --git a/sources/src/main/java/pr2/collections/list_iterator/Liste.java b/sources/src/main/java/pr2/collections/list_iterator/Liste.java new file mode 100644 index 0000000..dee6cc5 --- /dev/null +++ b/sources/src/main/java/pr2/collections/list_iterator/Liste.java @@ -0,0 +1,39 @@ +package pr2.collections.list_iterator; + +import java.util.Iterator; +public class Liste implements Iterable { + + static class Item { + T element; + Item next; + + public Item(T element) { + this.element = element; + } + } + + Item first; + Item last; + + // TODO: Klasse ListenIterator implementieren + + public void add(T element) { + Item item = new Item(element); + + first = (first != null) ? first : item; + + if (last == null) { + last = item; + } else { + last.next = item; + last = item; + } + + } + + @Override + public Iterator iterator() { + return null; + // TODO: neuen ListenIterator zurück geben + } +} diff --git a/sources/src/main/java/pr2/collections/map/WordCount.java b/sources/src/main/java/pr2/collections/map/WordCount.java new file mode 100644 index 0000000..8436dd0 --- /dev/null +++ b/sources/src/main/java/pr2/collections/map/WordCount.java @@ -0,0 +1,76 @@ +package pr2.collections.map; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Zählen von Worthäufigkeiten. + */ +public class WordCount { + + /** + * Listet alle Worte in der Datei und deren Häufigkeit auf. + * Die zurückgegebene Liste ist bereits nach der Häufigkeit + * sortiert. + * + * @param filename Dateiname + * @return die Liste der vorhandenen Wörter + * @throws IOException Fehler beim Dateizugriff. + */ + private static List countWords(String filename) + throws IOException { + + // TODO: Map deklarieren + + // Datei zum Lesen öffnen + BufferedReader reader = new BufferedReader(new FileReader(filename)); + + String line; // aktuelle Zeile + + // Über die Zeilen der Datei iterieren + while ((line = reader.readLine()) != null) { + + // Sonderzeichen entfernen und die Zeilen in Worte splitten + line = line.toLowerCase(); + line = line.replaceAll("[\",.:;)'\\-!?]", ""); + + String[] words = line.toLowerCase().split("[,. ]"); + + for (String word : words) { + // TODO: Worthäufigkeiten in Map speichern + } + } + + reader.close(); + + // TODO: Worthäufigkeiten aus der Map extrahieren und sortieren + + // TODO: Ergebnis zurückgeben + return null; + } + + /** + * Hauptmethode. + * + * @param args Kommandozeilen-Argumente. + */ + public static void main(String[] args) { + + try { + List words = countWords( + "kafka.txt"); + + for (WordFrequency word : words) { + System.out.println(word); + } + } catch (IOException e) { + System.err.println("Probleme beim Dateizugriff: " + e); + } + } +} diff --git a/sources/src/main/java/pr2/collections/map/WordFrequency.java b/sources/src/main/java/pr2/collections/map/WordFrequency.java new file mode 100644 index 0000000..e66e6e7 --- /dev/null +++ b/sources/src/main/java/pr2/collections/map/WordFrequency.java @@ -0,0 +1,45 @@ +package pr2.collections.map; + +/** + * Klasse für die Verwaltung der Worthäufigkeiten. + */ + public class WordFrequency { + // TODO: Sortierbar machen [Comparable] + + /** + * Das Wort. + */ + String word; + + /** + * Seine Häufigkeit. + */ + int frequency; + + /** + * Legt ein neues Objekt an. + * + * @param word das gespeicherte Wort + * @param frequency die Häfigkeit + */ + WordFrequency(String word, int frequency) { + this.word = word; + this.frequency = frequency; + } + + + /** + * Erhöht die Häufigkeit des Wortes. + */ + public void incrementFrequency() { + frequency++; + } + + /** + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return String.format("%s: %d", word, frequency); + } +} diff --git a/sources/src/main/java/pr2/collections/reverser/Reverser.java b/sources/src/main/java/pr2/collections/reverser/Reverser.java new file mode 100644 index 0000000..4c51552 --- /dev/null +++ b/sources/src/main/java/pr2/collections/reverser/Reverser.java @@ -0,0 +1,12 @@ +package pr2.collections.reverser; + +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +public class Reverser { + public void reverse(List liste) { + + // TODO: Liste umgekehrt sortieren + } +} diff --git a/sources/src/main/java/pr2/collections/reverser/test/ReverserTest.java b/sources/src/main/java/pr2/collections/reverser/test/ReverserTest.java new file mode 100644 index 0000000..efc0c5e --- /dev/null +++ b/sources/src/main/java/pr2/collections/reverser/test/ReverserTest.java @@ -0,0 +1,18 @@ +package pr2.collections.reverser.test; + +import org.junit.jupiter.api.Test; +import pr2.collections.reverser.Reverser; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class ReverserTest { + + @Test + void testReverser() { + // TODO: Reverser testen + } + +} diff --git a/sources/src/main/java/pr2/collections/reverser_generic/Reverser.java b/sources/src/main/java/pr2/collections/reverser_generic/Reverser.java new file mode 100644 index 0000000..735b95d --- /dev/null +++ b/sources/src/main/java/pr2/collections/reverser_generic/Reverser.java @@ -0,0 +1,13 @@ +package pr2.collections.reverser_generic; + +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + + public class Reverser { + + public void reverse(List liste) { + + // TODO: Liste umgekehrt sortieren + } +} diff --git a/sources/src/main/java/pr2/collections/reverser_generic/test/ReverserTest.java b/sources/src/main/java/pr2/collections/reverser_generic/test/ReverserTest.java new file mode 100644 index 0000000..94f7da4 --- /dev/null +++ b/sources/src/main/java/pr2/collections/reverser_generic/test/ReverserTest.java @@ -0,0 +1,18 @@ +package pr2.collections.reverser_generic.test; + +import org.junit.jupiter.api.Test; +import pr2.collections.reverser_generic.Reverser; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class ReverserTest { + + @Test + void testReverser() { + // TODO: Reverser testen + } + +} diff --git a/sources/src/main/java/pr2/collections/set/WordCollector.java b/sources/src/main/java/pr2/collections/set/WordCollector.java new file mode 100644 index 0000000..91c07d4 --- /dev/null +++ b/sources/src/main/java/pr2/collections/set/WordCollector.java @@ -0,0 +1,158 @@ +package pr2.collections.set; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * Klassen, um die in einem Text vorkommenen Wörter zu sammeln. + */ +public class WordCollector { + + /** + * Listet alle Worte in der Datei alphabetisch auf. Duplikate werden + * entfernt. Die Wörter werden in Kleinbuchstaben umgewandelt. + * + * @param filename Dateiname + * @return die Liste der vorhandenen Wort + * @throws IOException Fehler beim Dateizugriff. + */ + public static String[] listWords(String filename) throws IOException { + String[] allWords = readFileAndSplitIntoWords(filename); + String[] result = removeDuplicates(allWords); + + return result; + } + + /** + * Listet alle Worte in der Datei auf. + * + * @param filename Dateiname + * @return die Liste der vorhandenen Wort + * @throws IOException Fehler beim Dateizugriff. + */ + private static String[] readFileAndSplitIntoWords(String filename) + throws IOException { + + // Datei zum Lesen öffnen + BufferedReader reader = new BufferedReader( + new FileReader(filename)); + + String line; // aktuelle Zeile + String[] wordBuffer = new String[100]; // Puffer für die Worte + int pos = 0; // Position im Word-Puffer + + // Über die Zeilen der Datei iterieren + while ((line = reader.readLine()) != null) { + + // Sonderzeichen entfernen und die Zeilen in Worte splitten + line = line.replaceAll("[\",.:'\\-!?]", ""); + + String[] words = line.toLowerCase().split("[,. ]"); + + // Worte in den Puffer übertragen + for (String word : words) { + + if (pos >= wordBuffer.length) { + // Puffer ist voll, vergrößern + String[] newBuffer = + new String[wordBuffer.length * 2]; + System.arraycopy(wordBuffer, 0, newBuffer, + 0, wordBuffer.length); + wordBuffer = newBuffer; + } + + wordBuffer[pos++] = word; + } + } + + reader.close(); + + // Ergebnis-Array mit der richtigen Größe anlegen + String[] result = new String[pos]; + System.arraycopy(wordBuffer, 0, result, 0, pos); + + return result; + } + + /** + * Sortiert das übergebene Array alphabetisch und entfernt Duplikate. + * + * @param input Eingabe Array + * @return sortiertes und bereinigtes Array + */ + private static String[] removeDuplicates(String[] input) { + + // Eingabe Array clonen, da es verändert wird (Seiteneffekt) + String[] strings = input.clone(); + + // Array sortieren + Arrays.sort(strings); + + // Über die Einträge laufen + for (int i = 0; i < strings.length; i++) { + String word = strings[i]; + + if (word == null) { + // Bereits entfernter Eintrag + continue; + } + + // Über die Einträge laufen + for (int k = i + 1; k < strings.length; k++) { + String otherWord = strings[k]; + + if (otherWord == null) { + // Bereits entfernter Eintrag + continue; + } + else if (otherWord.compareTo(word) > 0) { + // Sind schon hinter der möglichen Position + break; + } + else if (otherWord.equals(word)) { + // Duplikat, ausnullen + strings[k] = null; + } + } + } + + // Ausgenullte Einträge entfernen + int pos = 0; + String[] temp = new String[strings.length]; + + for (int i = 0; i < strings.length; i++) { + if (strings[i] != null) { + temp[pos++] = strings[i]; + } + } + + // Ergebnis auf die richtige Länge bringen + String[] result = new String[pos]; + System.arraycopy(temp, 0, result, 0, pos); + + return result; + } + + /** + * Hauptmethode. + * + * @param args Kommandozeilen-Argumente. + */ + public static void main(String[] args) { + + try { + String[] words = listWords("kafka.txt"); + System.out.println(Arrays.toString(words)); + } + catch (IOException e) { + System.err.println("Probleme beim Dateizugriff: " + e); + } + } +} diff --git a/sources/src/main/java/pr2/collections/sorter_1/CommandLineSorter.java b/sources/src/main/java/pr2/collections/sorter_1/CommandLineSorter.java new file mode 100644 index 0000000..9fc3e2f --- /dev/null +++ b/sources/src/main/java/pr2/collections/sorter_1/CommandLineSorter.java @@ -0,0 +1,12 @@ +package pr2.collections.sorter_1; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class CommandLineSorter { + + public static void main(String[] args) { + // TODO: Sortierung der Argumente durchführen + } +} diff --git a/sources/src/main/java/pr2/collections/sorter_2/CommandLineSorter.java b/sources/src/main/java/pr2/collections/sorter_2/CommandLineSorter.java new file mode 100644 index 0000000..8bbaa74 --- /dev/null +++ b/sources/src/main/java/pr2/collections/sorter_2/CommandLineSorter.java @@ -0,0 +1,12 @@ +package pr2.collections.sorter_2; + +import java.util.Arrays; +import java.util.Set; +import java.util.TreeSet; + +public class CommandLineSorter { + + public static void main(String[] args) { + // TODO: Sortierung der Argumente durchführen + } +} diff --git a/sources/src/main/java/pr2/collections/sortieren/Sorter.java b/sources/src/main/java/pr2/collections/sortieren/Sorter.java new file mode 100644 index 0000000..e6b0f44 --- /dev/null +++ b/sources/src/main/java/pr2/collections/sortieren/Sorter.java @@ -0,0 +1,58 @@ +package pr2.collections.sortieren; + +import java.util.Arrays; +import java.util.Comparator; + +/** + * Klasse zum Sortieren von Strings. + */ +public class Sorter { + + /** + * Liefert einen Comparator für Strings. + * + * @param order Sortierreihenfolge. + * @return Comparator, entsprechend der gewünschten Sortierreihenfolge. + */ + private static Comparator stringComparator(final SortOrder order) { + // TODO: Methode implementieren + + return null; + } + + /** + * Sortiert das übergebene Array entsprechend der gewünschten Reihenfolge. + * + * @param array das zu sortierende Array. + * @param order die Sortierreihenfolge. + */ + public static void sort(String[] array, SortOrder order) { + Arrays.sort(array, stringComparator(order)); + } + + /** + * Sortierreihenfolge für die Strings. + */ + public enum SortOrder { + + /** + * Aufsteigend. + */ + ASCENDING, + + /** + * Absteigend. + */ + DESCENDING, + + /** + * Aufsteigend, ohne Beachtung der Groß-/Kleinschreibung. + */ + ASCENDING_CASE_INSENSITIVE, + + /** + * Absteigend, ohne Beachtung der Groß-/Kleinschreibung. + */ + DESCENDING_CASE_INSENSITIVE + } +} diff --git a/sources/src/main/java/pr2/collections/sortieren/test/SorterTest.java b/sources/src/main/java/pr2/collections/sortieren/test/SorterTest.java new file mode 100644 index 0000000..a2c30f2 --- /dev/null +++ b/sources/src/main/java/pr2/collections/sortieren/test/SorterTest.java @@ -0,0 +1,75 @@ +package pr2.collections.sortieren.test; + +import org.junit.jupiter.api.Test; +import pr2.collections.sortieren.Sorter; +import pr2.collections.sortieren.Sorter.SortOrder; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; + + +/** + * Test für die Sortierung. + */ +public class SorterTest { + + private static final String[] DATA = + {"aaron", "ALFONS", "bond", "BerND", "henry", "Hugo"}; + + /** + * Testet die Sortierung: aufsteigend. + */ + @Test + void testAscendingSorting() { + + String[] asc = DATA.clone(); + + Sorter.sort(asc, SortOrder.ASCENDING); + + assertArrayEquals( + new String[] {"ALFONS", "BerND", "Hugo", "aaron", "bond", + "henry"}, asc); + } + + /** + * Testet die Sortierung: Absteigend. + */ + @Test + void testDescendingSorting() { + + String[] desc = DATA.clone(); + Sorter.sort(desc, SortOrder.DESCENDING); + + assertArrayEquals( + new String[] {"henry", "bond", "aaron", "Hugo", "BerND", + "ALFONS"}, desc); + } + + /** + * Testet die Sortierung: Aufsteigend, CI. + */ + @Test + void testAscendingCISorting() { + + String[] ascCI = DATA.clone(); + Sorter.sort(ascCI, SortOrder.ASCENDING_CASE_INSENSITIVE); + + assertArrayEquals( + new String[] {"aaron", "ALFONS", "BerND", "bond", "henry", + "Hugo"}, ascCI); + } + + /** + * Testet die Sortierung: Absteigend, CI. + */ + @Test + void testDescendingCISorting() { + + String[] descCI = DATA.clone(); + + Sorter.sort(descCI, SortOrder.DESCENDING_CASE_INSENSITIVE); + + assertArrayEquals( + new String[] {"Hugo", "henry", "bond", "BerND", "ALFONS", + "aaron"}, descCI); + } +} diff --git a/sources/src/main/java/pr2/collections/woerterbuch/Woerterbuch.java b/sources/src/main/java/pr2/collections/woerterbuch/Woerterbuch.java new file mode 100644 index 0000000..4dbc92a --- /dev/null +++ b/sources/src/main/java/pr2/collections/woerterbuch/Woerterbuch.java @@ -0,0 +1,12 @@ +package pr2.collections.woerterbuch; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +public class Woerterbuch { + + + public static void main(String[] args) { + } +} diff --git a/sources/src/main/java/pr2/enums/eigene/Wuerfel.java b/sources/src/main/java/pr2/enums/eigene/Wuerfel.java new file mode 100644 index 0000000..cfac715 --- /dev/null +++ b/sources/src/main/java/pr2/enums/eigene/Wuerfel.java @@ -0,0 +1,52 @@ +package pr2.enums.eigene; + +import java.util.Random; + +/** + * Ein einfacher Würfel. + */ +public class Wuerfel { + + /** 4-seitiger Würfel. */ + public static final int D4 = 4; + + /** 6-seitiger Würfel. */ + public static final int D6 = 6; + + /** 8-seitiger Würfel. */ + public static final int D8 = 8; + + /** 10-seitiger Würfel. */ + public static final int D10 = 10; + + /** 12-seitiger Würfel. */ + public static final int D12 = 13; + + /** + * Zufallszahlengenerator. + */ + private final Random rnd = new Random(); + + /** + * Anzahl der Seiten des Würfels. + */ + private final int numSides; + + /** + * Einen neuen Würfel anlegen. + * + * @param typ Anzahl der Seiten des Würfels. + */ + public Wuerfel(int numSides) { + this.numSides = numSides; + } + + /** + * Den Würfel werfen. + * + * @return Ergebnis des Wurfes. + */ + public int roll() { + return rnd.nextInt(numSides) + 1; + } +} diff --git a/sources/src/main/java/pr2/enums/eigene/test/WuerfelTest.java b/sources/src/main/java/pr2/enums/eigene/test/WuerfelTest.java new file mode 100644 index 0000000..5760910 --- /dev/null +++ b/sources/src/main/java/pr2/enums/eigene/test/WuerfelTest.java @@ -0,0 +1,59 @@ +package pr2.enums.eigene.test; + +import org.junit.jupiter.api.Test; +import pr2.enums.eigene.Wuerfel; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * Test für die Würfel. + */ +public class WuerfelTest { + + /** + * Anzahl der Durchläufe (Gesetz der großen Zahl!). + */ + private static final int RUNS = 10000000; + + + @Test + void testFairnessD4() { + internalTestFairness(new Wuerfel(Wuerfel.D4), 2.5); + } + + @Test + void testFairnessD6() { + internalTestFairness(new Wuerfel(Wuerfel.D6), 3.5); + } + + @Test + void testFairnessD8() { + internalTestFairness(new Wuerfel(Wuerfel.D8), 4.5); + } + + @Test + void testFairnessD10() { + internalTestFairness(new Wuerfel(Wuerfel.D10), 5.5); + } + + @Test + void testFairnessD12() { + internalTestFairness(new Wuerfel(Wuerfel.D12), 6.5); + } + + /** + * Interne Hilfsmethode, um die Fairness zu testen. + * + * @param w der zu testende Wuerfel. + * @param expected Erwartungswert. + */ + private void internalTestFairness(Wuerfel w, double expected) { + long sum = 0; + + for (int i = 0; i < RUNS; i++) { + sum += w.roll(); + } + double average = (double) sum / (double) RUNS; + assertEquals(expected, average, 0.1); + } +} diff --git a/sources/src/main/java/pr2/enums/filme/LieblingsFilme.java b/sources/src/main/java/pr2/enums/filme/LieblingsFilme.java new file mode 100644 index 0000000..9643002 --- /dev/null +++ b/sources/src/main/java/pr2/enums/filme/LieblingsFilme.java @@ -0,0 +1,5 @@ +package pr2.enums.filme; + +public enum LieblingsFilme { + +} diff --git a/sources/src/main/java/pr2/enums/filme/Main.java b/sources/src/main/java/pr2/enums/filme/Main.java new file mode 100644 index 0000000..50c23c8 --- /dev/null +++ b/sources/src/main/java/pr2/enums/filme/Main.java @@ -0,0 +1,7 @@ +package pr2.enums.filme; + +public class Main { + public static void main(String[] args) { + // TODO: Alle Filme ausgeben + } +} diff --git a/sources/src/main/java/pr2/enums/schnick/Move.java b/sources/src/main/java/pr2/enums/schnick/Move.java new file mode 100644 index 0000000..8f8180f --- /dev/null +++ b/sources/src/main/java/pr2/enums/schnick/Move.java @@ -0,0 +1,4 @@ +package pr2.enums.schnick; + +public enum Move { +} diff --git a/sources/src/main/java/pr2/enums/schnick/SchnickSchnackSchnuck.java b/sources/src/main/java/pr2/enums/schnick/SchnickSchnackSchnuck.java new file mode 100644 index 0000000..155464d --- /dev/null +++ b/sources/src/main/java/pr2/enums/schnick/SchnickSchnackSchnuck.java @@ -0,0 +1,11 @@ +package pr2.enums.schnick; + +import java.util.Random; +import java.util.Scanner; + +/** + * Schick - Schnack - Schnuck (Rock - Paper - Scissors). + */ +public class SchnickSchnackSchnuck { + +} diff --git a/sources/src/main/java/pr2/enums/singleton/MyEnum.java b/sources/src/main/java/pr2/enums/singleton/MyEnum.java new file mode 100644 index 0000000..be83cc0 --- /dev/null +++ b/sources/src/main/java/pr2/enums/singleton/MyEnum.java @@ -0,0 +1,7 @@ +package pr2.enums.singleton; + +enum MyEnum { + A, + B, + C; +} diff --git a/sources/src/main/java/pr2/enums/singleton/SingletonBeweis.java b/sources/src/main/java/pr2/enums/singleton/SingletonBeweis.java new file mode 100644 index 0000000..40972f7 --- /dev/null +++ b/sources/src/main/java/pr2/enums/singleton/SingletonBeweis.java @@ -0,0 +1,8 @@ +package pr2.enums.singleton; + +public class SingletonBeweis { + + public static void main(String[] args) { + // TODO: Singleton-Eigenschaft zeigen + } +} diff --git a/sources/src/main/java/pr2/exceptions/ausnahmen_testen/CrypterCaesar.java b/sources/src/main/java/pr2/exceptions/ausnahmen_testen/CrypterCaesar.java new file mode 100644 index 0000000..5b9f0ab --- /dev/null +++ b/sources/src/main/java/pr2/exceptions/ausnahmen_testen/CrypterCaesar.java @@ -0,0 +1,164 @@ +package pr2.exceptions.ausnahmen_testen; + +/** + * Implementierung einer Caesar-Verschlüsselung. + *

+ * Der Eingabetext ({@literal message}) darf nur aus den Groß-Buchstaben A-Z + * bestehen. Alle anderen Zeichen (einschließlich der Leerzeichen) führen zu + * einer entsprechenden Ausnahme. + *

+ * Dasselbe gilt für die Entschlüsselung. Auch hier dürfen nur gültige + * Zeichen auftauchen. Andernfalls kommt es zu einer Ausnahme. + *

+ * Der Schlüssel darf nur aus einem einzelnen Zeichen bestehen und muss + * ebenfalls aus dem Bereich A-Z stammen. Kleinbuchstaben oder andere + * Zeichen führen zu einer Ausnahme. + *

+ * Zwischen den beiden Methoden muss bei gleichem Schlüssel {@code key} + * folgendes gelten: + *

+ * {@code text.equals(decrypt(key, encrypt(key, text)) == true}. + */ +public class CrypterCaesar { + + /** + * Gültige Zeichen für Schlüssel und Text. + */ + protected static final String ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + + /** + * Verschlüsselt den gegebenen Text mit dem angegebenen Schlüssel. + * + * @param key Schlüssel, der verwendet werden soll. + * @param message Nachricht, die Verschlüsselt werden soll. + * @return verschlüsselter Text. + * @throws IllegalMessageException Wird geworfen, wenn die + * Nachricht ungültig ist. + * @throws IllegalKeyException Wird geworfen, wenn der Schlüssel + * ungültig ist. + */ + public String encrypt(String key, String message) + throws IllegalMessageException, IllegalKeyException { + + checkKeyAndMessage(key, message); + + int shift = key.charAt(0) - 'A' + 1; + return shift(message, shift); + } + + /** + * Entschlüsselt den gegebenen Text mit dem angegebenen Schlüssel. + * + * @param key Schlüssel, der verwendet werden soll. + * @param cypherText Nachricht, die entschlüsselt werden soll. + * @return entschlüsselter Text. + * @throws IllegalMessageException Wird geworfen, wenn die + * Nachricht ungültig ist. + * @throws IllegalKeyException Wird geworfen, wenn der Schlüssel + * ungültig ist. + */ + public String decrypt(String key, String cypherText) + throws IllegalKeyException, IllegalMessageException { + + checkKeyAndMessage(key, cypherText); + + int shift = key.charAt(0) - 'A' + 1; + return shift(cypherText, -shift); + } + + /** + * Verschiebt die Zeichen im Text um den gegebenen Faktor. + * + * @param text Nachricht + * @param shift Verschiebefaktor + * @return das Ergebnis als String + */ + private String shift(String text, int shift) { + + StringBuilder result = new StringBuilder(); + + for (char c : text.toCharArray()) { + char newChar = (char) (c + shift); + + if (newChar > 'Z') { + // Überlauf nach hinten + newChar = (char) (newChar - ('Z' - 'A' + 1)); + } + else if (newChar < 'A') { + // Überlauf nach vorne + newChar = (char) (newChar + ('Z' - 'A' + 1)); + } + + result.append(newChar); + } + + return result.toString(); + } + + /** + * Prüft Schlüssel und Nachricht. + * + * @param key der Schlüssel + * @param message die Nachricht + * @throws IllegalKeyException Schlüssel nicht OK + * @throws IllegalMessageException Nachricht nicht OK + */ + private void checkKeyAndMessage(String key, String message) + throws IllegalKeyException, IllegalMessageException { + + if (!checkKey(key)) { + throw new IllegalKeyException(key); + } + + if (!checkCharacters(message, ALPHABET)) { + throw new IllegalMessageException(key); + } + } + + /** + * Testet den Schlüssel auf Korrektheit: Er muss mindestens die Länge 1 + * haben und darf nur Zeichen von A-Z enthalten. + * + * @param key zu testender Schlüssel + * @return {@code true} if characters are ok, otherwise {@code false} + */ + protected boolean checkKey(String key) { + + if (key.length() != 1) { + return false; + } + + return checkCharacters(key, ALPHABET); + } + + /** + * Checks the given input to ensure that it only contains the given + * character set and no other characters. + * + * @param inputChars the string to be checked + * @param charSet a string containing all allowed characters + * @return {@code true} if characters are ok, otherwise {@code false} + */ + protected boolean checkCharacters(char[] inputChars, String charSet) { + + for (char c : inputChars) { + if (charSet.indexOf(c) == -1) { + return false; + } + } + + return true; + } + + /** + * Checks the given input to ensure that it only contains the given + * character set and no other characters. + * + * @param input the string to be checked + * @param charSet a string containing all allowed characters + * @return {@code true} if characters are ok, otherwise {@code false} + */ + protected boolean checkCharacters(String input, String charSet) { + return checkCharacters(input.toCharArray(), charSet); + } +} diff --git a/sources/src/main/java/pr2/exceptions/ausnahmen_testen/IllegalKeyException.java b/sources/src/main/java/pr2/exceptions/ausnahmen_testen/IllegalKeyException.java new file mode 100644 index 0000000..469e5bf --- /dev/null +++ b/sources/src/main/java/pr2/exceptions/ausnahmen_testen/IllegalKeyException.java @@ -0,0 +1,31 @@ +package pr2.exceptions.ausnahmen_testen; + +/** + * Ungültiger Schlüssel. + */ +public class IllegalKeyException extends Exception { + + /** + * Legt eine neue Ausnahme an. + */ + public IllegalKeyException() { + super(); + } + + /** + * Legt eine neue Ausnahme an. + * + * @param message die Nachricht. + */ + public IllegalKeyException(String message) { + super(message); + } + + /** + * @see java.lang.Throwable#toString() + */ + @Override + public String toString() { + return getMessage(); + } +} diff --git a/sources/src/main/java/pr2/exceptions/ausnahmen_testen/IllegalMessageException.java b/sources/src/main/java/pr2/exceptions/ausnahmen_testen/IllegalMessageException.java new file mode 100644 index 0000000..141a2b7 --- /dev/null +++ b/sources/src/main/java/pr2/exceptions/ausnahmen_testen/IllegalMessageException.java @@ -0,0 +1,31 @@ +package pr2.exceptions.ausnahmen_testen; + +/** + * Ungültige Nachricht. + */ +public class IllegalMessageException extends Exception { + + /** + * Legt eine neue Ausnahme an. + */ + public IllegalMessageException() { + super(); + } + + /** + * Legt eine neue Ausnahme an. + * + * @param message die Nachricht. + */ + public IllegalMessageException(String message) { + super(message); + } + + /** + * @see java.lang.Throwable#toString() + */ + @Override + public String toString() { + return getMessage(); + } +} diff --git a/sources/src/main/java/pr2/exceptions/ausnahmen_testen/test/CaesarTest.java b/sources/src/main/java/pr2/exceptions/ausnahmen_testen/test/CaesarTest.java new file mode 100644 index 0000000..a821a0b --- /dev/null +++ b/sources/src/main/java/pr2/exceptions/ausnahmen_testen/test/CaesarTest.java @@ -0,0 +1,36 @@ +package pr2.exceptions.ausnahmen_testen.test; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import pr2.exceptions.ausnahmen_testen.CrypterCaesar; +import pr2.exceptions.ausnahmen_testen.IllegalKeyException; +import pr2.exceptions.ausnahmen_testen.IllegalMessageException; + +import static org.junit.jupiter.api.Assertions.assertEquals; + + +/** + * Testklasse für die Verschlüsselung. + */ +public class CaesarTest { + + // TODO: Tests für die Ausnahmen hinzufügen + + /** + * Testet die Verschlüsselung an sich. + * + * @throws IllegalMessageException Wird geworfen, wenn die + * Nachricht ungültig ist. + * @throws IllegalKeyException Wird geworfen, wenn der Schlüssel + * ungültig ist. + */ + @Test + void testCaesar() + throws IllegalKeyException, IllegalMessageException { + String klarText = "KATHARGOMUSSFALLEN"; + CrypterCaesar c = new CrypterCaesar(); + assertEquals(klarText, c.decrypt("C", c.encrypt("C", klarText))); + assertEquals("FDHVDU", c.encrypt("C", "CAESAR")); + assertEquals(klarText, c.encrypt("Z", klarText)); + } +} diff --git a/sources/src/main/java/pr2/exceptions/eigene_ausnahme/Fuse.java b/sources/src/main/java/pr2/exceptions/eigene_ausnahme/Fuse.java new file mode 100644 index 0000000..7c2180f --- /dev/null +++ b/sources/src/main/java/pr2/exceptions/eigene_ausnahme/Fuse.java @@ -0,0 +1,49 @@ +package pr2.exceptions.eigene_ausnahme; + +/** + * Eine Sicherung im Stromkreis. + */ +public class Fuse { + + /** + * 16 Ampere-Sicherung. + */ + public static final int A16 = 16; + + /** + * 25 Ampere-Sicherung. + */ + public static final int A25 = 25; + + /** + * 32 Ampere-Sicherung. + */ + public static final int A32 = 32; + + /** + * Strom, bei dem die Sicherung auslöst. + */ + private final int tripCurrent; + + /** + * Legt eine neue Sicherung an. + * + * @param tripCurrent Strom, bei dem die Sicherung auslösen soll. + * @throws IllegalCurrentException Ausnahme bei einem + * ungültigen Spannungswert. + */ + public Fuse(int tripCurrent) { + // TODO: IllegalCurrentException werfen, wenn der Strom ungültig ist + this.tripCurrent = tripCurrent; + } + + /** + * Die Sicherung benutzen. + * + * @param current Strom, der durch die Sicherung fließt. + * @throws FuseTrippedException wird geworfen, wenn der Srom zu groß wird. + */ + public void use(int current) { + // TODO: FuseTrippedException werfen, wenn der Strom zu groß ist + } +} diff --git a/sources/src/main/java/pr2/exceptions/eigene_ausnahme/FuseTrippedException.java b/sources/src/main/java/pr2/exceptions/eigene_ausnahme/FuseTrippedException.java new file mode 100644 index 0000000..d806156 --- /dev/null +++ b/sources/src/main/java/pr2/exceptions/eigene_ausnahme/FuseTrippedException.java @@ -0,0 +1,9 @@ +package pr2.exceptions.eigene_ausnahme; + +/** + * Ausnahme, wenn die Sicherung auslöst. + */ + public class FuseTrippedException { + // TODO: zu einer Ausnahme machen + // TODO: Nennstrom und Auslösestrom speichern und in toString wieder ausgeben +} diff --git a/sources/src/main/java/pr2/exceptions/eigene_ausnahme/IllegalCurrentException.java b/sources/src/main/java/pr2/exceptions/eigene_ausnahme/IllegalCurrentException.java new file mode 100644 index 0000000..6c9d99f --- /dev/null +++ b/sources/src/main/java/pr2/exceptions/eigene_ausnahme/IllegalCurrentException.java @@ -0,0 +1,9 @@ +package pr2.exceptions.eigene_ausnahme; + +/** + * Ausnahme, wenn eine Sicherung angelegt werden soll, die es nicht gibt. + */ + public class IllegalCurrentException { + // TODO: zu einer Ausnahme machen + // TODO: Nennstrom speichern, mit dem die Sicherung angelegt werden sollte. +} diff --git a/sources/src/main/java/pr2/exceptions/eigene_ausnahme/test/FuseTest.java b/sources/src/main/java/pr2/exceptions/eigene_ausnahme/test/FuseTest.java new file mode 100644 index 0000000..66dd5e0 --- /dev/null +++ b/sources/src/main/java/pr2/exceptions/eigene_ausnahme/test/FuseTest.java @@ -0,0 +1,159 @@ +package pr2.exceptions.eigene_ausnahme.test; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import pr2.exceptions.eigene_ausnahme.Fuse; +import pr2.exceptions.eigene_ausnahme.FuseTrippedException; +import pr2.exceptions.eigene_ausnahme.IllegalCurrentException; + +/** + * Testet die Sicherung. + */ +public class FuseTest { + +// TODO: Quellcode wieder einkommentieren +// +// /** +// * Testet die Erzeugung von Sicherungen mit gültigen Werten. +// * +// * @throws IllegalCurrentException ungültiger Wert für die Sicherung. +// */ +// @Test +// void testCreationValid() throws IllegalCurrentException { +// new Fuse(Fuse.A16); +// new Fuse(Fuse.A25); +// new Fuse(Fuse.A32); +// } +// +// /** +// * Testet die Erzeugung von Sicherungen mit ungültigen Werten. +// * +// * @throws IllegalCurrentException ungültiger Wert für die Sicherung. +// */ +// @Test +// void testCreationValid1() throws IllegalCurrentException { +// Assertions.assertThrows(IllegalCurrentException.class, () -> { +// new Fuse(15); +// }); +// } +// +// /** +// * Testet die Erzeugung von Sicherungen mit ungültigen Werten. +// * +// * @throws IllegalCurrentException ungültiger Wert für die Sicherung. +// */ +// @Test +// void testCreationValid2() throws IllegalCurrentException { +// Assertions.assertThrows(IllegalCurrentException.class, () -> { +// new Fuse(-1); +// }); +// } +// +// /** +// * Testet die Erzeugung von Sicherungen mit ungültigen Werten. +// * +// * @throws IllegalCurrentException ungültiger Wert für die Sicherung. +// */ +// @Test +// void testCreationValid3() throws IllegalCurrentException { +// Assertions.assertThrows(IllegalCurrentException.class, () -> { +// new Fuse(0); +// }); +// } +// +// /** +// * Testet die Erzeugung von Sicherungen mit ungültigen Werten. +// * +// * @throws IllegalCurrentException ungültiger Wert für die Sicherung. +// */ +// @Test +// void testCreationValid4() throws IllegalCurrentException { +// Assertions.assertThrows(IllegalCurrentException.class, () -> { +// new Fuse(Integer.MAX_VALUE); +// }); +// } +// +// /** +// * Testet die Erzeugung von Sicherungen mit ungültigen Werten. +// * +// * @throws IllegalCurrentException ungültiger Wert für die Sicherung. +// */ +// @Test +// void testCreationValid5() throws IllegalCurrentException { +// Assertions.assertThrows(IllegalCurrentException.class, () -> { +// new Fuse(Integer.MIN_VALUE); +// }); +// } +// +// /** +// * Testet das Auslösen der Sicherung. +// * +// * @throws FuseTrippedException Sicherung hat ausgelöst. +// * @throws IllegalCurrentException ungültiger Wert für die Sicherung. +// */ +// @Test +// void testTripping1() +// throws FuseTrippedException, IllegalCurrentException { +// +// Fuse f = new Fuse(Fuse.A16); +// f.use(5); +// f.use(16); +// f.use(0); +// +// f = new Fuse(Fuse.A25); +// f.use(5); +// f.use(16); +// f.use(25); +// +// +// Assertions.assertThrows(FuseTrippedException.class, () -> { +// Fuse f2 = new Fuse(Fuse.A16); +// f2.use(0); +// f2.use(16); +// f2.use(25); +// }); +// } +// +// /** +// * Testet das Auslösen der Sicherung. +// * +// * @throws FuseTrippedException Sicherung hat ausgelöst. +// * @throws IllegalCurrentException ungültiger Wert für die Sicherung. +// */ +// @Test +// void testTripping2() +// throws FuseTrippedException, IllegalCurrentException { +// Assertions.assertThrows(FuseTrippedException.class, () -> { +// new Fuse(Fuse.A16).use(17); +// }); +// } +// +// /** +// * Testet das Auslösen der Sicherung. +// * +// * @throws FuseTrippedException Sicherung hat ausgelöst. +// * @throws IllegalCurrentException ungültiger Wert für die Sicherung. +// */ +// @Test +// void testTripping3() +// throws FuseTrippedException, IllegalCurrentException { +// +// Assertions.assertThrows(FuseTrippedException.class, () -> { +// new Fuse(Fuse.A16).use(Integer.MAX_VALUE); +// }); +// } +// +// /** +// * Testet das Auslösen der Sicherung. +// * +// * @throws FuseTrippedException Sicherung hat ausgelöst. +// * @throws IllegalCurrentException ungültiger Wert für die Sicherung. +// */ +// @Test +// void testTripping4() +// throws FuseTrippedException, IllegalCurrentException { +// Assertions.assertThrows(FuseTrippedException.class, () -> { +// new Fuse(Fuse.A32).use(40); +// }); +// } +} diff --git a/sources/src/main/java/pr2/exceptions/fakultaet/Fakultaet.java b/sources/src/main/java/pr2/exceptions/fakultaet/Fakultaet.java new file mode 100644 index 0000000..b711aea --- /dev/null +++ b/sources/src/main/java/pr2/exceptions/fakultaet/Fakultaet.java @@ -0,0 +1,12 @@ +package pr2.exceptions.fakultaet; + +public class Fakultaet { + + public int fact(int n) { + return factIntern(n); + } + + private int factIntern(int n) { + return 0; + } +} diff --git a/sources/src/main/java/pr2/exceptions/fakultaet/FakultaetException.java b/sources/src/main/java/pr2/exceptions/fakultaet/FakultaetException.java new file mode 100644 index 0000000..76819fe --- /dev/null +++ b/sources/src/main/java/pr2/exceptions/fakultaet/FakultaetException.java @@ -0,0 +1,5 @@ +package pr2.exceptions.fakultaet; + + public class FakultaetException { + +} diff --git a/sources/src/main/java/pr2/exceptions/fakultaet/test/FakultaetTest.java b/sources/src/main/java/pr2/exceptions/fakultaet/test/FakultaetTest.java new file mode 100644 index 0000000..a4745c3 --- /dev/null +++ b/sources/src/main/java/pr2/exceptions/fakultaet/test/FakultaetTest.java @@ -0,0 +1,31 @@ +package pr2.exceptions.fakultaet.test; + +import org.junit.jupiter.api.Test; +import pr2.exceptions.fakultaet.Fakultaet; +import pr2.exceptions.fakultaet.FakultaetException; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class FakultaetTest { + + @Test + void testFact() { + Fakultaet f = new Fakultaet(); + assertEquals(1, f.fact(0)); + assertEquals(1, f.fact(1)); + assertEquals(2, f.fact(2)); + assertEquals(6, f.fact(3)); + assertEquals(24, f.fact(4)); + assertEquals(3628800, f.fact(10)); + } + + @Test + void testFactEx1() { + // TODO: Auf Ausnahme testen + } + + @Test + void testFactEx2() { + // TODO: Auf Ausnahme testen + } +} diff --git a/sources/src/main/java/pr2/exceptions/handle_or_declare/Buchstabenzaehler.java b/sources/src/main/java/pr2/exceptions/handle_or_declare/Buchstabenzaehler.java new file mode 100644 index 0000000..c4f5ed3 --- /dev/null +++ b/sources/src/main/java/pr2/exceptions/handle_or_declare/Buchstabenzaehler.java @@ -0,0 +1,104 @@ +package pr2.exceptions.handle_or_declare; + +import java.io.BufferedReader; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.util.Scanner; + +/** + * Anwendung, die die Buchstabenhäufigkeit in einem Text analysiert. + */ +public class Buchstabenzaehler { + + /** + * Einstiegspunkt in das Programm. + * + * @param args Kommandozeilenargumente + */ + public static void main(String[] args) { + Buchstabenzaehler bs = new Buchstabenzaehler(); +// bs.run(); + } + + /** + * Startet den Buchstabenzaehler. + * + * @throws StatistikException Fehler bei der Berechnung der + * Buchstabenhäufigkeit. + */ + private void run() { + System.out.print("Bitte geben Sie den Dateinamen an: "); + Scanner scanner = new Scanner(System.in); + String dateiname = scanner.nextLine(); + + int[] statistik; + +// statistik = parseFile("assets/" + dateiname); +// printStatistik(statistik); +// scanner.close(); + } + + /** + * Druckt die Statistik aus. + * + * @param statistik Statistik + * @throws StatistikException Fehler bei den Eingabedaten + */ + private void printStatistik(int[] statistik) { + +// int summe = 0; +// +// for (int haeufigkeit : statistik) { +// summe += haeufigkeit; +// } +// +// double prozentSumme = 0.0; +// +// for (char c = 'a'; c <= 'z'; c++) { +// int anzahl = statistik[c - 'a']; +// double prozent = (double) anzahl / (double) summe * 100; +// System.out.printf("%s: %.2f%% %n", "" + c, prozent); +// +// prozentSumme += prozent; +// } +// +// if ((prozentSumme < 99.0) || (prozentSumme > 101.0)) { +// throw new StatistikException(Double.toString(prozentSumme)); +// } +// +// System.out.printf("Summe: %.2f%% %n", prozentSumme); + } + + /** + * Analysiert die übergebene Datei und berechnet die Buchstabenhäufigkeit. + * + * @param filename Dateiname + * @return die Buchstabenhäufigkeit. Das 'a' ist das erste Element, + * das 'b' das zweite etc. + * @throws IOException generelles IO-Problem + * @throws FileNotFoundException Datei gibt es nicht + */ + private int[] parseFile(String filename) { + + int[] statistik = new int['z' - 'a' + 1]; + +// BufferedReader br = new BufferedReader(new FileReader(filename)); +// +// String line; +// +// while ((line = br.readLine()) != null) { +// char[] chars = line.toLowerCase().toCharArray(); +// +// for (char c : chars) { +// if (('a' <= c) && (c <= 'z')) { +// statistik[c - 'a']++; +// } +// } +// } +// +// br.close(); + + return statistik; + } +} diff --git a/sources/src/main/java/pr2/exceptions/handle_or_declare/StatistikException.java b/sources/src/main/java/pr2/exceptions/handle_or_declare/StatistikException.java new file mode 100644 index 0000000..0d83170 --- /dev/null +++ b/sources/src/main/java/pr2/exceptions/handle_or_declare/StatistikException.java @@ -0,0 +1,31 @@ +package pr2.exceptions.handle_or_declare; + +/** + * Ausnahme, wenn die Statisitk nicht konsistent ist. + */ +public class StatistikException extends Exception { + + /** + * Legt eine neue Ausnahme an. + */ + public StatistikException() { + super(); + } + + /** + * Legt eine neue Ausnahme an. + * + * @param message die Nachricht. + */ + public StatistikException(String message) { + super(message); + } + + /** + * @see java.lang.Throwable#toString() + */ + @Override + public String toString() { + return getMessage(); + } +} diff --git a/sources/src/main/java/pr2/exceptions/try_catch/Zahlenraten.java b/sources/src/main/java/pr2/exceptions/try_catch/Zahlenraten.java new file mode 100644 index 0000000..be31207 --- /dev/null +++ b/sources/src/main/java/pr2/exceptions/try_catch/Zahlenraten.java @@ -0,0 +1,55 @@ +package pr2.exceptions.try_catch; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Random; + +/** + * Ein simples Zahlenraten-Spiel. + */ +public final class Zahlenraten { + + /** + * Liest einen String von der Tastatur. + * + * @return der gelesene String + * @throws IOException Probleme mit der Console + */ + private static String readNumber() throws IOException { + BufferedReader br = + new BufferedReader(new InputStreamReader(System.in)); + return br.readLine(); + } + + /** + * Hauptmethode. + * + * @param args Kommandozeilenargumente + */ + public static void main(String[] args) + throws NumberFormatException, IOException { + + // zu ratende Zahl bestimmen + int zahl = new Random().nextInt(100) + 1; + + int versuche = 0; + + while (true) { + System.out.print("Bitte geben Sie eine Zahl ein: "); + int geraten = Integer.parseInt(readNumber()); + versuche++; + + if (geraten < zahl) { + System.out.println("Zu niedrig"); + } + else if (geraten > zahl) { + System.out.println("Zu hoch."); + } + else { + System.out.printf("Richtig in %d Versuchen", versuche); + break; + } + } + } +} diff --git a/sources/src/main/java/pr2/generics/einfach/Liste.java b/sources/src/main/java/pr2/generics/einfach/Liste.java new file mode 100644 index 0000000..b4be384 --- /dev/null +++ b/sources/src/main/java/pr2/generics/einfach/Liste.java @@ -0,0 +1,87 @@ +package pr2.generics.einfach; + +/** + * Eine einfache, verkettete Liste. + * + * @param Typ der gespeicherten Objekte + */ +/** + * Eine einfache, verkettete Liste. + */ +public class Liste { + + /** Referenz auf den ersten Knoten. */ + private ListeNode first; + + /** Referenz auf den aktuellen Knoten. */ + private ListeNode current; + + /** + * Fügt ein neues Element an das Ende der Liste an. + * + * @param data das Element + */ + public void add(Object data) { + + ListeNode nextNode = new ListeNode(data); + + if (current == null) { + // Liste komplett leer + first = nextNode; + current = nextNode; + } + else { + current.next = nextNode; + current = nextNode; + } + } + + /** + * Liest das Element an der gegebenen Position. + * + * @param index Index, beginnend bei 0. + * @return Das Element oder {@code null}, wenn es nicht gefunden wurde. + */ + public Object get(int index) { + int count = 0; + ListeNode node = first; + + while ((node != null) && (count < index)) { + node = node.next; + count++; + } + + if ((count == index) && (node != null)) { + return node.data; + } + else { + // index does not exist + return null; + } + } + + /** + * Löscht die Liste und entfernt alle Elemente. + */ + public void clear() { + first = null; + current = null; + } + + /** + * Liefert die Anzahl der Elemente der Liste zurück. + * + * @return die Anzahl der Elemente. + */ + public int size() { + int count = 0; + ListeNode node = first; + + while (node != null) { + node = node.next; + count++; + } + + return count; + } +} diff --git a/sources/src/main/java/pr2/generics/einfach/ListeNode.java b/sources/src/main/java/pr2/generics/einfach/ListeNode.java new file mode 100644 index 0000000..bb1d1ca --- /dev/null +++ b/sources/src/main/java/pr2/generics/einfach/ListeNode.java @@ -0,0 +1,22 @@ +package pr2.generics.einfach; + +/** + * Interne Repräsentation der Knoten in der Liste. + */ +class ListeNode { + + /** Daten. */ + Object data; + + /** Referenz auf den nächsten Knoten. */ + ListeNode next; + + /** + * Legt einen neuen Knoten an. + * + * @param data daten, die gespeichert werden + */ + ListeNode(Object data) { + this.data = data; + } +} diff --git a/sources/src/main/java/pr2/generics/einfach/test/ListeTest.java b/sources/src/main/java/pr2/generics/einfach/test/ListeTest.java new file mode 100644 index 0000000..e680148 --- /dev/null +++ b/sources/src/main/java/pr2/generics/einfach/test/ListeTest.java @@ -0,0 +1,61 @@ +package pr2.generics.einfach.test; + +import org.junit.jupiter.api.Test; +import pr2.generics.einfach.Liste; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +/** + * Test für die Liste. + */ +public class ListeTest { + + /** + * Testet das Hinzufügen und Löschen der Liste. + */ + @Test + void testAddAndClear() { + Liste l = new Liste(); + + assertEquals(0, l.size()); + + l.add("Hallo"); + assertEquals(1, l.size()); + l.add("Hugo"); + assertEquals(2, l.size()); + l.add("Peter"); + l.add("Alfons"); + assertEquals(4, l.size()); + + l.clear(); + assertEquals(0, l.size()); + } + + /** + * Testet das Lesen von Elementen. + */ + @Test + void testGet() { + Liste l = new Liste(); + l.add("Hallo"); + l.add("Hugo"); + l.add("Peter"); + l.add("Alfons"); + + assertNull(l.get(-1)); + assertNull(l.get(4)); + assertEquals("Hallo", l.get(0)); + assertEquals("Hugo", l.get(1)); + assertEquals("Peter", l.get(2)); + assertEquals("Alfons", l.get(3)); + + assertEquals(4, l.size()); + l.clear(); + assertEquals(0, l.size()); + assertNull(l.get(0)); + assertNull(l.get(1)); + assertNull(l.get(2)); + assertNull(l.get(3)); + } +} diff --git a/sources/src/main/java/pr2/generics/number_pair/Main.java b/sources/src/main/java/pr2/generics/number_pair/Main.java new file mode 100644 index 0000000..92b3487 --- /dev/null +++ b/sources/src/main/java/pr2/generics/number_pair/Main.java @@ -0,0 +1,16 @@ +package pr2.generics.number_pair; + +public class Main { + public static void main(String[] args) { +// TODO: Einkommentieren +// var note = new Pair("Peter", 1); +// var name = new Pair("Peter", "Meier"); +// var tel = new NumberPair(621, 292122); +// +// System.out.printf("%s:%d\n", note.getFirst(), note.getSecond()); +// +// System.out.printf("%s %s\n", name.getFirst(), name.getSecond()); +// +// System.out.printf("%d %d\n", tel.getFirst(), tel.getSecond()); + } +} diff --git a/sources/src/main/java/pr2/generics/number_pair/NumberPair.java b/sources/src/main/java/pr2/generics/number_pair/NumberPair.java new file mode 100644 index 0000000..aa17d75 --- /dev/null +++ b/sources/src/main/java/pr2/generics/number_pair/NumberPair.java @@ -0,0 +1,5 @@ +package pr2.generics.number_pair; + + public class NumberPair { + +} diff --git a/sources/src/main/java/pr2/generics/number_pair/Pair.java b/sources/src/main/java/pr2/generics/number_pair/Pair.java new file mode 100644 index 0000000..63d841e --- /dev/null +++ b/sources/src/main/java/pr2/generics/number_pair/Pair.java @@ -0,0 +1,20 @@ +package pr2.generics.number_pair; + +public class Pair { + + private final T first; + private final V second; + + public Pair(T first, V second) { + this.first = first; + this.second = second; + } + + public T getFirst() { + return first; + } + + public V getSecond() { + return second; + } +} diff --git a/sources/src/main/java/pr2/generics/pair/Main.java b/sources/src/main/java/pr2/generics/pair/Main.java new file mode 100644 index 0000000..a60a01e --- /dev/null +++ b/sources/src/main/java/pr2/generics/pair/Main.java @@ -0,0 +1,18 @@ +package pr2.generics.pair; + +public class Main { + public static void main(String[] args) { +// TODO: Einkommentieren +// var note1 = new Pair("Peter", 1); +// var note2 = new Pair("Frank", 3); +// var note3 = new Pair("Sabine", 1); +// +// var name = new Pair("Peter", "Meier"); +// +// System.out.printf("%s:%d\n", note1.getFirst(), note1.getSecond()); +// System.out.printf("%s:%d\n", note2.getFirst(), note1.getSecond()); +// System.out.printf("%s:%d\n", note3.getFirst(), note1.getSecond()); +// +// System.out.printf("%s %s\n", name.getFirst(), name.getSecond()); + } +} diff --git a/sources/src/main/java/pr2/generics/pair/Pair.java b/sources/src/main/java/pr2/generics/pair/Pair.java new file mode 100644 index 0000000..6700e30 --- /dev/null +++ b/sources/src/main/java/pr2/generics/pair/Pair.java @@ -0,0 +1,5 @@ +package pr2.generics.pair; + + public class Pair { + +} diff --git a/sources/src/main/java/pr2/generics/pairlist/Main.java b/sources/src/main/java/pr2/generics/pairlist/Main.java new file mode 100644 index 0000000..eab1f3f --- /dev/null +++ b/sources/src/main/java/pr2/generics/pairlist/Main.java @@ -0,0 +1,20 @@ +package pr2.generics.pairlist; + +public class Main { + public static void main(String[] args) { +// TODO: Einkommentieren +// var note1 = new Pair("Peter", 1); +// var note2 = new Pair("Frank", 3); +// var note3 = new Pair("Sabine", 1); +// +// var pl = new PairList(3); +// pl.add(note1); +// pl.add(note2); +// pl.add(note3); +// +// for (int i = 0; i < 3; i++) { +// System.out.printf("%s:%d\n", pl.get(i).getFirst(), +// pl.get(i).getSecond()); +// } + } +} diff --git a/sources/src/main/java/pr2/generics/pairlist/Pair.java b/sources/src/main/java/pr2/generics/pairlist/Pair.java new file mode 100644 index 0000000..3fbbfdf --- /dev/null +++ b/sources/src/main/java/pr2/generics/pairlist/Pair.java @@ -0,0 +1,20 @@ +package pr2.generics.pairlist; + +public class Pair { + + private final T first; + private final V second; + + public Pair(T first, V second) { + this.first = first; + this.second = second; + } + + public T getFirst() { + return first; + } + + public V getSecond() { + return second; + } +} diff --git a/sources/src/main/java/pr2/generics/pairlist/PairList.java b/sources/src/main/java/pr2/generics/pairlist/PairList.java new file mode 100644 index 0000000..e234665 --- /dev/null +++ b/sources/src/main/java/pr2/generics/pairlist/PairList.java @@ -0,0 +1,5 @@ +package pr2.generics.pairlist; + + public class PairList { + +} diff --git a/sources/src/main/java/pr2/generics/printer/CollectionPrinter.java b/sources/src/main/java/pr2/generics/printer/CollectionPrinter.java new file mode 100644 index 0000000..1b85dbc --- /dev/null +++ b/sources/src/main/java/pr2/generics/printer/CollectionPrinter.java @@ -0,0 +1,6 @@ +package pr2.generics.printer; + +import java.util.Collection; + +public class CollectionPrinter { +} diff --git a/sources/src/main/java/pr2/generics/printer/Main.java b/sources/src/main/java/pr2/generics/printer/Main.java new file mode 100644 index 0000000..85506d0 --- /dev/null +++ b/sources/src/main/java/pr2/generics/printer/Main.java @@ -0,0 +1,24 @@ +package pr2.generics.printer; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class Main { + public static void main(String[] args) { +// TODO: Einkommentieren +// List ls = new ArrayList<>(); +// List li = new ArrayList<>(); +// ls.add("PR2"); +// ls.add("ist"); +// ls.add("cool"); +// Set s = new HashSet<>(ls); +// li.add(23); +// li.add(42); +// +// CollectionPrinter.print(ls); +// CollectionPrinter.print(li); +// CollectionPrinter.print(s); + } +} diff --git a/sources/src/main/java/pr2/generics/queue/Queue.java b/sources/src/main/java/pr2/generics/queue/Queue.java new file mode 100644 index 0000000..3ebef1f --- /dev/null +++ b/sources/src/main/java/pr2/generics/queue/Queue.java @@ -0,0 +1,6 @@ +package pr2.generics.queue; + + public class Queue { + + // TODO: Klasse gemäß der Aufgabenstellung implementieren +} diff --git a/sources/src/main/java/pr2/generics/same_pair/Main.java b/sources/src/main/java/pr2/generics/same_pair/Main.java new file mode 100644 index 0000000..a69767e --- /dev/null +++ b/sources/src/main/java/pr2/generics/same_pair/Main.java @@ -0,0 +1,16 @@ +package pr2.generics.same_pair; + +public class Main { + public static void main(String[] args) { +// TODO: Einkommentieren +// var note = new Pair("Peter", 1); +// var name = new SamePair("Peter", "Meier"); +// var tel = new SamePair(621, 2009992); +// +// System.out.printf("%s:%d\n", note.getFirst(), note.getSecond()); +// +// System.out.printf("%s %s\n", name.getFirst(), name.getSecond()); +// +// System.out.printf("%d %d\n", tel.getFirst(), tel.getSecond()); + } +} diff --git a/sources/src/main/java/pr2/generics/same_pair/Pair.java b/sources/src/main/java/pr2/generics/same_pair/Pair.java new file mode 100644 index 0000000..587225a --- /dev/null +++ b/sources/src/main/java/pr2/generics/same_pair/Pair.java @@ -0,0 +1,20 @@ +package pr2.generics.same_pair; + +public class Pair { + + private final T first; + private final V second; + + public Pair(T first, V second) { + this.first = first; + this.second = second; + } + + public T getFirst() { + return first; + } + + public V getSecond() { + return second; + } +} diff --git a/sources/src/main/java/pr2/generics/same_pair/SamePair.java b/sources/src/main/java/pr2/generics/same_pair/SamePair.java new file mode 100644 index 0000000..6b9a72e --- /dev/null +++ b/sources/src/main/java/pr2/generics/same_pair/SamePair.java @@ -0,0 +1,5 @@ +package pr2.generics.same_pair; + + public class SamePair { + +} diff --git a/sources/src/main/java/pr2/generics/super_extends/Liste.java b/sources/src/main/java/pr2/generics/super_extends/Liste.java new file mode 100644 index 0000000..d36534c --- /dev/null +++ b/sources/src/main/java/pr2/generics/super_extends/Liste.java @@ -0,0 +1,102 @@ +package pr2.generics.super_extends; + +/** + * Eine einfache, verkettete Liste. + * + * @param Typ der gespeicherten Objekte + */ +public class Liste { + + /** + * Referenz auf den ersten Knoten. + */ + private ListeNode first; + + /** + * Referenz auf den aktuellen Knoten. + */ + private ListeNode current; + + /** + * Fügt ein neues Element an das Ende der Liste an. + * + * @param data das Element + */ + public void add(T data) { + + ListeNode nextNode = new ListeNode<>(data); + + if (current == null) { + // Liste komplett leer + first = nextNode; + current = nextNode; + } + else { + current.next = nextNode; + current = nextNode; + } + } + + /** + * Liest das Element an der gegebenen Position. + * + * @param index Index, beginnend bei 0. + * @return Das Element oder {@code null}, wenn es nicht gefunden wurde. + */ + public T get(int index) { + int count = 0; + ListeNode node = first; + + while ((node != null) && (count < index)) { + node = node.next; + count++; + } + + if ((count == index) && (node != null)) { + return node.data; + } + else { + // index does not exist + return null; + } + } + + /** + * Löscht die Liste und entfernt alle Elemente. + */ + public void clear() { + first = null; + current = null; + } + + /** + * Liefert die Anzahl der Elemente der Liste zurück. + * + * @return die Anzahl der Elemente. + */ + public int size() { + int count = 0; + ListeNode node = first; + + while (node != null) { + node = node.next; + count++; + } + + return count; + } + + /** + * Kopiert alle Elemente dieser Liste in die andere Liste. + * + * @param other die andere Liste. + */ + // TODO: copyInto implementieren + + /** + * Füllt diese Liste mit dem Inhalt der übergebenen Liste. + * + * @param other die andere Liste. + */ + // TODO: fillFrom implementieren +} diff --git a/sources/src/main/java/pr2/generics/super_extends/ListeNode.java b/sources/src/main/java/pr2/generics/super_extends/ListeNode.java new file mode 100644 index 0000000..487f1b1 --- /dev/null +++ b/sources/src/main/java/pr2/generics/super_extends/ListeNode.java @@ -0,0 +1,28 @@ +package pr2.generics.super_extends; + +/** + * Interne Repräsentation der Knoten in der Liste. + * + * @param Typ der gespeicherten Daten. + */ +class ListeNode { + + /** + * Daten. + */ + T data; + + /** + * Referenz auf den nächsten Knoten. + */ + ListeNode next; + + /** + * Legt einen neuen Knoten an. + * + * @param data daten, die gespeichert werden + */ + ListeNode(T data) { + this.data = data; + } +} \ No newline at end of file diff --git a/sources/src/main/java/pr2/generics/super_extends/test/ListeTest.java b/sources/src/main/java/pr2/generics/super_extends/test/ListeTest.java new file mode 100644 index 0000000..91c7cb8 --- /dev/null +++ b/sources/src/main/java/pr2/generics/super_extends/test/ListeTest.java @@ -0,0 +1,43 @@ +package pr2.generics.super_extends.test; + +import org.junit.jupiter.api.Test; +import pr2.generics.super_extends.Liste; + +import static org.junit.jupiter.api.Assertions.assertEquals; + + +/** + * Test für die Liste. + */ +public class ListeTest { + + /** + * Testet das Umkopieren. + */ + @Test + void testAddAndClear() { +// TODO: Einkommentieren +// Liste ls = new Liste<>(); +// Liste lo = new Liste<>(); +// +// ls.add("Hallo"); +// ls.add("Hugo"); +// ls.add("Peter"); +// ls.add("Alfons"); +// +// ls.copyInto(lo); +// +// assertEquals("Hallo", lo.get(0)); +// assertEquals("Hugo", lo.get(1)); +// assertEquals("Peter", lo.get(2)); +// assertEquals("Alfons", lo.get(3)); +// +// lo = new Liste<>(); +// lo.fillFrom(ls); +// +// assertEquals("Hallo", lo.get(0)); +// assertEquals("Hugo", lo.get(1)); +// assertEquals("Peter", lo.get(2)); +// assertEquals("Alfons", lo.get(3)); + } +} diff --git a/sources/src/main/java/pr2/generics/wildcards/ListHelper.java b/sources/src/main/java/pr2/generics/wildcards/ListHelper.java new file mode 100644 index 0000000..f31f903 --- /dev/null +++ b/sources/src/main/java/pr2/generics/wildcards/ListHelper.java @@ -0,0 +1,23 @@ +package pr2.generics.wildcards; + +/** + * Klasse zum Ausdrucken von Listen. + */ +public class ListHelper { + + /** + * Druckt alle Elemente der Liste auf der Konsole aus. + * + * @param liste Die zu druckende Liste. + */ + // TODO: Methode schreiben + + /** + * Summiert die Elemente der Liste. Deswegen können nur Listen übergeben + * werden, deren Elemente mindestens vom Typ {@code Number} sind. + * + * @param liste Die Liste, deren Elemente summiert werden sollen. + * @return das Ergebnis + */ + // TODO: Methode schreiben +} diff --git a/sources/src/main/java/pr2/generics/wildcards/Main.java b/sources/src/main/java/pr2/generics/wildcards/Main.java new file mode 100644 index 0000000..448cb98 --- /dev/null +++ b/sources/src/main/java/pr2/generics/wildcards/Main.java @@ -0,0 +1,39 @@ +package pr2.generics.wildcards; + +/** + * Ausgabe der Liste. + */ +public final class Main { + + /** + * Constructor. + */ + private Main() { + // keine Instanzen + } + + /** + * Haupt-Methode. + * + * @param args Kommandozeilenargumente. + */ + public static void main(String[] args) { + SimpleList l1 = new SimpleList<>(); + l1.add("Dies"); + l1.add("ist"); + l1.add("ein"); + l1.add("Test"); + l1.add("."); + + SimpleList l2 = new SimpleList<>(); + l2.add(1); + l2.add(2); + l2.add(3); + l2.add(4); + l2.add(5); + +// ListHelper.printList(l1); +// ListHelper.printList(l2); +// System.out.println(ListHelper.sumList(l2)); + } +} diff --git a/sources/src/main/java/pr2/generics/wildcards/SimpleList.java b/sources/src/main/java/pr2/generics/wildcards/SimpleList.java new file mode 100644 index 0000000..b4241c1 --- /dev/null +++ b/sources/src/main/java/pr2/generics/wildcards/SimpleList.java @@ -0,0 +1,12 @@ +package pr2.generics.wildcards; + +import java.util.ArrayList; + +/** + * Listenklasse. + * + * @param Typ, der in der Liste gespeichert wird. + */ +public class SimpleList extends ArrayList { + // nothing here +} diff --git a/sources/src/main/java/pr2/interfaces/abstrakt_form/Form.java b/sources/src/main/java/pr2/interfaces/abstrakt_form/Form.java new file mode 100644 index 0000000..a73eca5 --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/abstrakt_form/Form.java @@ -0,0 +1,5 @@ +package pr2.interfaces.abstrakt_form; + + public class Form { + +} diff --git a/sources/src/main/java/pr2/interfaces/abstrakte_klassen_e/Dreieck.java b/sources/src/main/java/pr2/interfaces/abstrakte_klassen_e/Dreieck.java new file mode 100644 index 0000000..ec46aa8 --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/abstrakte_klassen_e/Dreieck.java @@ -0,0 +1,33 @@ +package pr2.interfaces.abstrakte_klassen_e; + +/** + * Ein Dreieck. + */ +public class Dreieck { + + /** Grundseite des Dreiecks. */ + private double grundseite; + + /** Höhe. */ + private double hoehe; + + /** + * Erzeugt ein neues Dreieck. + * + * @param grundseite Grundseite. + * @param hoehe Höhe. + */ + public Dreieck(double grundseite, double hoehe) { + this.grundseite = grundseite; + this.hoehe = hoehe; + } + + /** + * Berechnet die Fläche. + * + * @return die Fläche. + */ + public double flaeche() { + return grundseite * hoehe / 2; + } +} diff --git a/sources/src/main/java/pr2/interfaces/abstrakte_klassen_e/Geometer.java b/sources/src/main/java/pr2/interfaces/abstrakte_klassen_e/Geometer.java new file mode 100644 index 0000000..4ab8ff3 --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/abstrakte_klassen_e/Geometer.java @@ -0,0 +1,46 @@ +package pr2.interfaces.abstrakte_klassen_e; + +/** + * Flächenberechnung. + */ +public final class Geometer { + + /** Keine Instanzen. */ + private Geometer() { + // keine Objekte + } + + /** + * Hauptmethode. + * + * @param args Kommandozeilenargumente + */ + public static void main(String[] args) { + Kreis[] kreise = new Kreis[5]; + Dreieck[] dreiecke = new Dreieck[5]; + + kreise[0] = new Kreis(10.0); + kreise[1] = new Kreis(5.5); + kreise[2] = new Kreis(3.3); + kreise[3] = new Kreis(7.2); + kreise[4] = new Kreis(8.0); + + dreiecke[0] = new Dreieck(4.0, 3.0); + dreiecke[1] = new Dreieck(2.0, 1.0); + dreiecke[2] = new Dreieck(5.0, 8.0); + dreiecke[3] = new Dreieck(2.0, 7.2); + dreiecke[4] = new Dreieck(14.0, 3.8); + + double gesamtflaeche = 0.0; + + for (Kreis kreis : kreise) { + gesamtflaeche += kreis.flaeche(); + } + + for (Dreieck dreieck : dreiecke) { + gesamtflaeche += dreieck.flaeche(); + } + + System.out.printf("Die Fläche beträgt: %.2f", gesamtflaeche); + } +} diff --git a/sources/src/main/java/pr2/interfaces/abstrakte_klassen_e/Kreis.java b/sources/src/main/java/pr2/interfaces/abstrakte_klassen_e/Kreis.java new file mode 100644 index 0000000..1565721 --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/abstrakte_klassen_e/Kreis.java @@ -0,0 +1,28 @@ +package pr2.interfaces.abstrakte_klassen_e; + +/** + * Ein Kreis. + */ +public class Kreis { + + /** Radius des Kreises. */ + private double radius; + + /** + * Legt einen neuen Kreis an. + * + * @param radius Radius des Kreises. + */ + public Kreis(double radius) { + this.radius = radius; + } + + /** + * Berechnet die Fläche. + * + * @return die Fläche. + */ + public double flaeche() { + return Math.PI * radius * radius; + } +} diff --git a/sources/src/main/java/pr2/interfaces/comparable_student/Student.java b/sources/src/main/java/pr2/interfaces/comparable_student/Student.java new file mode 100644 index 0000000..b1816a3 --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/comparable_student/Student.java @@ -0,0 +1,22 @@ +package pr2.interfaces.comparable_student; + + public class Student { + + private final String vorname; + private final String nachname; + private final int matrikelNr; + + public Student(String vorname, String nachname, + int matrikelNr) { + this.vorname = vorname; + this.nachname = nachname; + this.matrikelNr = matrikelNr; + } + + @Override + public String toString() { + return String.format("%s, %s (%d)", nachname, vorname, + matrikelNr); + } + +} diff --git a/sources/src/main/java/pr2/interfaces/interfaces_e/api/DigitalController.java b/sources/src/main/java/pr2/interfaces/interfaces_e/api/DigitalController.java new file mode 100644 index 0000000..f53c737 --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/interfaces_e/api/DigitalController.java @@ -0,0 +1,36 @@ +package pr2.interfaces.interfaces_e.api; + +import java.awt.Point; + +/** + * Ein digitaler Joystick. + */ +public interface DigitalController { + + /** + * Nach oben bewegen. + */ + void up(); + + /** + * Nach unten bewegen. + */ + void down(); + + /** + * Nach links bewegen. + */ + void left(); + + /** + * Nach rechts bewegen. + */ + void right(); + + /** + * Liefert die aktuelle Position zurück. + * + * @return Die Position. + */ + Point getPosition(); +} diff --git a/sources/src/main/java/pr2/interfaces/interfaces_e/impl/DigitalControllerImpl.java b/sources/src/main/java/pr2/interfaces/interfaces_e/impl/DigitalControllerImpl.java new file mode 100644 index 0000000..852544a --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/interfaces_e/impl/DigitalControllerImpl.java @@ -0,0 +1,53 @@ +package pr2.interfaces.interfaces_e.impl; + +import java.awt.Point; + +import pr2.interfaces.interfaces_e.api.DigitalController; + +/** + * Implementierung eines digitalen Joysticks. + */ +public class DigitalControllerImpl implements DigitalController { + + private Point position = new Point(0, 0); + + /** + * @see DigitalController#up() + */ + @Override + public void up() { + position.translate(0, -1); + } + + /** + * @see DigitalController#down() + */ + @Override + public void down() { + position.translate(0, 1); + } + + /** + * @see DigitalController#left() + */ + @Override + public void left() { + position.translate(-1, 0); + } + + /** + * @see DigitalController#right() + */ + @Override + public void right() { + position.translate(1, 0); + } + + /** + * @see DigitalController#getPosition() + */ + @Override + public Point getPosition() { + return (Point) position.clone(); + } +} diff --git a/sources/src/main/java/pr2/interfaces/interfaces_e/test/AnalogControllerTest.java b/sources/src/main/java/pr2/interfaces/interfaces_e/test/AnalogControllerTest.java new file mode 100644 index 0000000..19a44ab --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/interfaces_e/test/AnalogControllerTest.java @@ -0,0 +1,53 @@ +package pr2.interfaces.interfaces_e.test; + +//import org.junit.jupiter.api.Test; + +//import tpe.vererbung.interfaces.api.AnalogController; +//import tpe.vererbung.interfaces.chinesen.AnalogControllerImpl; + +/** + * Tests für einen analogen Joystick. + */ +public class AnalogControllerTest extends DigitalControllerTest { +// +// /** +// * Testet einen anlogen Controller. +// */ +// @Test +// void testAnalogController() { +// AnalogController c = new AnalogControllerImpl(); +// testAnalogController(c); +// } +// +// /** +// * Interne Hilfsmethode zum Test von analogen Controllern. +// * +// * @param c Controller, der getestet wird +// */ +// protected void testAnalogController(AnalogController c) { +// c.up(0.5); +// assertPointEquals(0, 0, c.getPosition()); +// c.up(0.5); +// assertPointEquals(0, -1, c.getPosition()); +// +// c.left(0.3); +// c.left(0.3); +// c.left(0.3); +// assertPointEquals(0, -1, c.getPosition()); +// c.left(0.2); +// assertPointEquals(-1, -1, c.getPosition()); +// +// c.down(1.0); +// assertPointEquals(-1, 0, c.getPosition()); +// +// c.down(1.0); +// assertPointEquals(-1, 1, c.getPosition()); +// c.down(1.0); +// assertPointEquals(-1, 2, c.getPosition()); +// +// c.right(0.5); +// c.right(0.5); +// c.right(0.5); +// assertPointEquals(0, 2, c.getPosition()); +// } +} diff --git a/sources/src/main/java/pr2/interfaces/interfaces_e/test/DigitalControllerTest.java b/sources/src/main/java/pr2/interfaces/interfaces_e/test/DigitalControllerTest.java new file mode 100644 index 0000000..85ca8ec --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/interfaces_e/test/DigitalControllerTest.java @@ -0,0 +1,63 @@ +package pr2.interfaces.interfaces_e.test; + +import java.awt.Point; +import org.junit.jupiter.api.Test; +// +//import org.junit.jupiter.api.Test; +import pr2.interfaces.interfaces_e.impl.DigitalControllerImpl; +import pr2.interfaces.interfaces_e.api.DigitalController; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * Tests für einen digitalen Joystick. + */ +public class DigitalControllerTest { + + /** + * Testet einen digitalen Controller. + */ + @Test + void testDigitalController() { + DigitalController c = new DigitalControllerImpl(); + testDigitalController(c); + } + + /** + * Interne Hilfsmethode zum Test von digitalen Controllern. + * + * @param c Controller, der getestet wird + */ + protected void testDigitalController(DigitalController c) { + assertPointEquals(0, 0, c.getPosition()); + c.up(); + c.up(); + assertPointEquals(0, -2, c.getPosition()); + c.down(); + c.down(); + assertPointEquals(0, 0, c.getPosition()); + c.left(); + c.right(); + assertPointEquals(0, 0, c.getPosition()); + c.left(); + assertPointEquals(-1, 0, c.getPosition()); + c.left(); + assertPointEquals(-2, 0, c.getPosition()); + c.right(); + c.right(); + c.right(); + assertPointEquals(1, 0, c.getPosition()); + } + + /** + * Interne Hilfsmethode, um einen Punkt mit seinem x und + * y-Wert zu vergleichen. + * + * @param x x-Wert + * @param y y-Wert + * @param point Punkt, der verglichen werden soll + */ + protected void assertPointEquals(int x, int y, Point point) { + assertEquals(new Point(x, y), point); + } +} diff --git a/sources/src/main/java/pr2/interfaces/interfaces_e/test/DualShock4Test.java b/sources/src/main/java/pr2/interfaces/interfaces_e/test/DualShock4Test.java new file mode 100644 index 0000000..7024ab6 --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/interfaces_e/test/DualShock4Test.java @@ -0,0 +1,43 @@ +package pr2.interfaces.interfaces_e.test; + +//import org.junit.jupiter.api.Test; + +//import pr2.interfaces.interfaces_e.api.DigitalController; + +/** + * Tests für einen analogen Joystick. + */ +public class DualShock4Test extends AnalogControllerTest { +// +// /** +// * Testet einen DualShock4 Kombi-Controller. +// */ +// @Test +// void testDualShock4() { +// DigitalController cd = new DualShock4(); +// testDigitalController(cd); +// +// AnalogController ca = new DualShock4(); +// testAnalogController(ca); +// +// DualShock4 ds = new DualShock4(); +// +// ds.up(); +// ds.up(1.0); +// assertPointEquals(0, -2, ds.getPosition()); +// +// ds.left(); +// ds.right(); +// ds.right(0.5); +// ds.right(0.5); +// assertPointEquals(1, -2, ds.getPosition()); +// +// ds.down(); +// ds.down(); +// ds.down(0.3); +// ds.down(0.3); +// ds.down(0.3); +// ds.down(0.1); +// assertPointEquals(1, 1, ds.getPosition()); +// } +} diff --git a/sources/src/main/java/pr2/interfaces/stack/Stack.java b/sources/src/main/java/pr2/interfaces/stack/Stack.java new file mode 100644 index 0000000..5e66f27 --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/stack/Stack.java @@ -0,0 +1,5 @@ +package pr2.interfaces.stack; + +public interface Stack { + +} diff --git a/sources/src/main/java/pr2/interfaces/stack/StackImpl.java b/sources/src/main/java/pr2/interfaces/stack/StackImpl.java new file mode 100644 index 0000000..b49b742 --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/stack/StackImpl.java @@ -0,0 +1,5 @@ +package pr2.interfaces.stack; + + public class StackImpl { + +} diff --git a/sources/src/main/java/pr2/interfaces/stack/test/StackTest.java b/sources/src/main/java/pr2/interfaces/stack/test/StackTest.java new file mode 100644 index 0000000..2b12714 --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/stack/test/StackTest.java @@ -0,0 +1,36 @@ +package pr2.interfaces.stack.test; + +import org.junit.jupiter.api.Test; +import pr2.interfaces.stack.Stack; +import pr2.interfaces.stack.StackImpl; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +public class StackTest { + + @Test + void testStack() { +// TODO: Einkommentieren +// Stack s = new StackImpl(100); +// +// assertEquals(0, s.size()); +// +// s.push("Hallo"); +// s.push("wie"); +// s.push("gehts"); +// +// assertEquals(3, s.size()); +// +// assertEquals("gehts", s.peek()); +// assertEquals("gehts", s.pop()); +// +// assertEquals("wie", s.peek()); +// assertEquals("wie", s.pop()); +// +// assertEquals("Hallo", s.peek()); +// assertEquals("Hallo", s.pop()); +// +// assertNull(s.pop()); + } +} diff --git a/sources/src/main/java/pr2/interfaces/uebersetzer/Uebersetzer.java b/sources/src/main/java/pr2/interfaces/uebersetzer/Uebersetzer.java new file mode 100644 index 0000000..50cf30d --- /dev/null +++ b/sources/src/main/java/pr2/interfaces/uebersetzer/Uebersetzer.java @@ -0,0 +1,13 @@ +package pr2.interfaces.uebersetzer; + +public interface Uebersetzer { + + /** + * Übersetzt den gegebeben String. + * + * @param string String, der übersetzt werden soll + * @return die Übersetzung oder {@literal null}, wenn das Wort nicht + * bekannt ist + */ + public String uebersetze(String string); +} diff --git a/sources/src/main/java/pr2/intro/coding_standard/CodingStandard.java b/sources/src/main/java/pr2/intro/coding_standard/CodingStandard.java new file mode 100644 index 0000000..3210f25 --- /dev/null +++ b/sources/src/main/java/pr2/intro/coding_standard/CodingStandard.java @@ -0,0 +1,51 @@ +package pr2.intro.coding_standard; + +/** + * Klasse dient als Beispiel für den Coding-Standard und die Namenskonventionen + * bei Java-Programmen. + */ +public +class +CodingStandard { + + /* + * Konstante, die dem Rest der Welt etwas mitteilen soll. + */ + public final static int konstanteMitTOLLEMWert = 3; + + private int ERSTES_Feld; + private double ZWEITES_Feld; + + /* + * Legt eine neue Instanz an. + * + * Erstes_Feld: das erste Feld. + * ZweitesFeld: das zweite Feld. + */ + public CodingStandard(int Erstes_Feld, double ZweitesFeld) + { + this.ERSTES_Feld = Erstes_Feld; this.ZWEITES_Feld = ZweitesFeld; + } + + /* + * Methode, die etwas tut. + * + * parameter: Eingabewert für die Methode. + * gibt einen Wert abhängig von {@code parameter} zurück. + */ + public int + Methode_Die_Was_Tut(int Parameter) + { + int result; + + if (Parameter > konstanteMitTOLLEMWert) + result = 12; + else + { + result = 13; } + + ERSTES_Feld = result; ZWEITES_Feld = 2 * result; + + return result; + } +} diff --git a/sources/src/main/java/pr2/intro/javadoc/Waehrung.java b/sources/src/main/java/pr2/intro/javadoc/Waehrung.java new file mode 100644 index 0000000..5e5235f --- /dev/null +++ b/sources/src/main/java/pr2/intro/javadoc/Waehrung.java @@ -0,0 +1,90 @@ +package pr2.intro.javadoc; + +public class Waehrung { + + private static final long TEILER = 10000; + + private final int kurs; + + private final String name; + + private final String kuerzel; + + public Waehrung(String name, String kuerzel, double kurs) { + this.kurs = (int) (kurs * TEILER); + this.name = name; + this.kuerzel = kuerzel; + } + + public long umrechnen(long betrag, Waehrung toWaehrung) { + return betrag * kurs / toWaehrung.kurs; + } + + public int getKurs() { + return kurs; + } + + public String getName() { + return name; + } + + public String getKuerzel() { + return kuerzel; + } + + /** + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return String.format("%s [%s] 1 %s = %.4f %s", name, kuerzel, "$", + kurs / (double) TEILER, kuerzel); + } + + /** + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + kurs; + result = prime * result + ((kuerzel == null) ? 0 : kuerzel.hashCode()); + return result; + } + + /** + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + Waehrung other = (Waehrung) obj; + if (name == null) { + if (other.name != null) { + return false; + } + } + else if (!name.equals(other.name)) { + return false; + } + if (kurs != other.kurs) { + return false; + } + if (kuerzel == null) { + return other.kuerzel == null; + } + else { + return kuerzel.equals(other.kuerzel); + } + } +} diff --git a/sources/src/main/java/pr2/intro/junit_faculty/Fakultaet.java b/sources/src/main/java/pr2/intro/junit_faculty/Fakultaet.java new file mode 100644 index 0000000..2f31efa --- /dev/null +++ b/sources/src/main/java/pr2/intro/junit_faculty/Fakultaet.java @@ -0,0 +1,14 @@ +package pr2.intro.junit_faculty; + +public class Fakultaet { + + /** + * Berechnet die Fakultät fuer die gegebene Zahl. + * + * @param n Zahl für die die Fakultät berechnet werden soll. + * @return die Fakultät + */ + public int fact(int n) { + return (n == 0) ? 1 : n * fact(n - 1); + } +} diff --git a/sources/src/main/java/pr2/intro/junit_faculty/test/FakultaetTest.java b/sources/src/main/java/pr2/intro/junit_faculty/test/FakultaetTest.java new file mode 100644 index 0000000..c63a0d3 --- /dev/null +++ b/sources/src/main/java/pr2/intro/junit_faculty/test/FakultaetTest.java @@ -0,0 +1,13 @@ +package pr2.intro.junit_faculty.test; + +import org.junit.jupiter.api.Test; +import pr2.intro.junit_faculty.Fakultaet; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class FakultaetTest { + + @Test + void testFact() { + } +} diff --git a/sources/src/main/java/pr2/io/buffered_reader/LineNumberPrinter.java b/sources/src/main/java/pr2/io/buffered_reader/LineNumberPrinter.java new file mode 100644 index 0000000..31fc25f --- /dev/null +++ b/sources/src/main/java/pr2/io/buffered_reader/LineNumberPrinter.java @@ -0,0 +1,25 @@ +package pr2.io.buffered_reader; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; + +/** + * Liest eine Textdatei und gibt den Inhalt auf der Konsole aus. + */ +public class LineNumberPrinter { + + /** + * Hauptmethode. + * + * @param args Kommandozeilen-Argumente. + */ + public static void main(String[] args) { + + String filename = args.length == 1 + ? args[0] + : "pr2/io/reader_writer/kafka.txt"; + + // TODO: Datei lesen und mit Zeilennummern wieder ausgeben + } +} diff --git a/sources/src/main/java/pr2/io/data_output/Board.java b/sources/src/main/java/pr2/io/data_output/Board.java new file mode 100644 index 0000000..cd22de2 --- /dev/null +++ b/sources/src/main/java/pr2/io/data_output/Board.java @@ -0,0 +1,134 @@ +package pr2.io.data_output; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; + +/** + * Ein Dame-Brett. + */ +public class Board { + + /** + * Belegung des Brettes. + */ + private final Color[][] brett = new Color[8][8]; + + /** + * Liest den Inhalt aus einer Datei. + * + * @param file Dateipfad. + * @return das gelesene Spielfeld + * @throws IOException IO-Probleme + */ + public static Board loadFromFile(String file) throws IOException { + + Board result = new Board(); + + + // TODO: Daten aus Datei lesen + // TODO: Zuerst überprüfen, ob Datei mit "Schachbrett" anfängt, wenn nein, Ausnahme werfen + // TODO: Positionen und Farbe der Figuren einlesen + + return result; + } + + + /** + * Schreibt den Inhalt des Spielfeldes in eine Datei. + * + * @param file Dateiname. + * @throws IOException IO-Probleme + */ + public void writeToFile(String file) throws IOException { + + // TODO: Daten mit DataOutputStream persistieren + // TODO: String "Schachbrett" speichern, um das Datenformat zu definieren + // TODO: x- und y-Koordinate des Steins und seine Farbe (als Integer) speichern + // TODO: Dateiende mit 0xff 0xff -1 kennzeichnen + } + + /** + * Setzt einen Stein an die gegebene Koordinate. + * + * @param koordinate Koordinate in "a1"-Notation. + * @param farbe Fabe des Spielsteins. + */ + public void set(String koordinate, Color farbe) { + Tupel t = parseCoordinates(koordinate); + brett[t.x][t.y] = farbe; + } + + /** + * Wandelt textuelle Koordinaten in x- und y-Wert um. + * + * @param koordinate Koordinate als String. + * @return Koordinate als Integer-Tupel. + */ + private Tupel parseCoordinates(String koordinate) { + char buchstabe = koordinate.toLowerCase().charAt(0); + char zahl = koordinate.charAt(1); + + Tupel t = new Tupel(); + + t.y = buchstabe - 'a'; + t.x = zahl - '1'; + + if (t.x < 0 || t.x > 7) { + throw new IllegalArgumentException(); + } + + if (t.y < 0 || t.y > 7) { + throw new IllegalArgumentException(); + } + + return t; + } + + /** + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + + StringBuilder result = new StringBuilder(); + + char y = '1'; + + result.append(" "); + for (char c : "abcdefgh".toCharArray()) { + result.append(' ').append(c); + } + + result.append("\n"); + + for (Color[] figurs : brett) { + + result.append(y++); + + for (Color figur : figurs) { + if (figur != null) { + result.append(' ').append(figur); + } + else { + result.append(" "); + } + } + + result.append("\n"); + } + + return result.toString(); + } + + /** + * Tupel von zwei int-Werten. + */ + private static class Tupel { + int x; + + int y; + } +} diff --git a/sources/src/main/java/pr2/io/data_output/Color.java b/sources/src/main/java/pr2/io/data_output/Color.java new file mode 100644 index 0000000..63eb878 --- /dev/null +++ b/sources/src/main/java/pr2/io/data_output/Color.java @@ -0,0 +1,30 @@ +package pr2.io.data_output; + +/** + * Farben der Spielsteine. + */ +public enum Color { + + /** + * Schwarzer Stein. + */ + BLACK, + + /** + * Weißer Stein. + */ + WHITE; + + /** + * @see java.lang.Enum#toString() + */ + @Override + public String toString() { + if (this == Color.BLACK) { + return "B"; + } + else { + return "W"; + } + } +} diff --git a/sources/src/main/java/pr2/io/data_output/test/BoardTest.java b/sources/src/main/java/pr2/io/data_output/test/BoardTest.java new file mode 100644 index 0000000..8643548 --- /dev/null +++ b/sources/src/main/java/pr2/io/data_output/test/BoardTest.java @@ -0,0 +1,63 @@ +package pr2.io.data_output.test; + +import org.junit.jupiter.api.Test; +import pr2.io.data_output.Board; +import pr2.io.data_output.Color; + +import java.io.FileOutputStream; +import java.io.IOException; + +import static org.junit.jupiter.api.Assertions.assertEquals; + + +/** + * Test. + */ +public class BoardTest { + + private static final byte[] RESULT = new byte[] { + 0x00, 0x0B, 0x53, 0x63, 0x68, 0x61, 0x63, 0x68, 0x62, 0x72, 0x65, + 0x74, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, + 0x00, 0x00, 0x00, 0x01, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x04, 0x05, 0x00, 0x00, 0x00, 0x01, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, + 0x00, (byte) 0xff, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, + (byte) 0xFF, (byte) 0xFF + }; + + /** + * Test für die Implementierung des Spielbrettes. + * + * @throws IOException Datei-Probleme. + */ + @Test + void testDame() throws IOException { + Board s = new Board(); + s.set("a1", Color.BLACK); + s.set("b1", Color.WHITE); + s.set("h1", Color.BLACK); + s.set("h2", Color.BLACK); + s.set("a8", Color.BLACK); + s.set("f8", Color.BLACK); + s.set("f5", Color.WHITE); + s.set("e3", Color.WHITE); + s.set("g2", Color.WHITE); + + String stringRepresentation = s.toString(); + + s.writeToFile("/tmp/daten.dat"); + + s = Board.loadFromFile("/tmp/daten.dat"); + + assertEquals(stringRepresentation, s.toString()); + + FileOutputStream fos = new FileOutputStream("/tmp/testdata.dat"); + fos.write(RESULT); + fos.close(); + + s = Board.loadFromFile("/tmp/testdata.dat"); + + assertEquals(stringRepresentation, s.toString()); + } +} diff --git a/sources/src/main/java/pr2/io/datainputoutput_1/DateReader.java b/sources/src/main/java/pr2/io/datainputoutput_1/DateReader.java new file mode 100644 index 0000000..04a794a --- /dev/null +++ b/sources/src/main/java/pr2/io/datainputoutput_1/DateReader.java @@ -0,0 +1,16 @@ +package pr2.io.datainputoutput_1; + +import java.io.DataInputStream; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; + +public class DateReader { + public static void main(String[] args) { + + // TODO: Implementieren + } +} diff --git a/sources/src/main/java/pr2/io/datainputoutput_1/DateWriter.java b/sources/src/main/java/pr2/io/datainputoutput_1/DateWriter.java new file mode 100644 index 0000000..2f96591 --- /dev/null +++ b/sources/src/main/java/pr2/io/datainputoutput_1/DateWriter.java @@ -0,0 +1,28 @@ +package pr2.io.datainputoutput_1; + +import java.io.DataOutputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +public class DateWriter { + + /** + * Dateiname mit den Testdaten. + */ + public static final String DATEINAME = "/tmp/test.data"; + + /** + * Datumsformat. + */ + public static final String FORMAT = "yyyy-MM-dd"; + + public static void main(String[] args) { + + // TODO: Implementieren + } +} diff --git a/sources/src/main/java/pr2/io/datainputoutput_2/DateReader.java b/sources/src/main/java/pr2/io/datainputoutput_2/DateReader.java new file mode 100644 index 0000000..2ad156a --- /dev/null +++ b/sources/src/main/java/pr2/io/datainputoutput_2/DateReader.java @@ -0,0 +1,17 @@ +package pr2.io.datainputoutput_2; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; + +public class DateReader { + + public static void main(String[] args) { + + // TODO: Implementieren + } +} diff --git a/sources/src/main/java/pr2/io/datainputoutput_2/DateWriter.java b/sources/src/main/java/pr2/io/datainputoutput_2/DateWriter.java new file mode 100644 index 0000000..377ccf9 --- /dev/null +++ b/sources/src/main/java/pr2/io/datainputoutput_2/DateWriter.java @@ -0,0 +1,28 @@ +package pr2.io.datainputoutput_2; + +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectOutputStream; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +public class DateWriter { + + /** + * Dateiname mit den Testdaten. + */ + public static final String DATEINAME = "/tmp/test.ser"; + + /** + * Datumsformat. + */ + public static final String FORMAT = "yyyy-MM-dd"; + + public static void main(String[] args) { + + // TODO: Implementieren + } +} diff --git a/sources/src/main/java/pr2/io/datei_lesen/ReadData.java b/sources/src/main/java/pr2/io/datei_lesen/ReadData.java new file mode 100644 index 0000000..abb85e5 --- /dev/null +++ b/sources/src/main/java/pr2/io/datei_lesen/ReadData.java @@ -0,0 +1,29 @@ +package pr2.io.datei_lesen; + +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; + +/** + * Daten aus einer Datei lesen. + */ +public class ReadData { + + /** + * Datei. + */ + private static final String FILE = "pr2/io/datei_lesen/daten.dat"; + + /** + * Hauptmethode. + * + * @param args Kommandozeilenargumente. + */ + public static void main(String[] args) { + + // TODO: Datei `FILE` öffnen + // TODO: Bytes aus der Datei lesen + // TODO: Bytes in Strings umwandeln (siehe Klasse `Integer`) + // TODO: Bytes ausgeben + } +} diff --git a/sources/src/main/java/pr2/io/datei_schreiben/WriteData.java b/sources/src/main/java/pr2/io/datei_schreiben/WriteData.java new file mode 100644 index 0000000..1d58d48 --- /dev/null +++ b/sources/src/main/java/pr2/io/datei_schreiben/WriteData.java @@ -0,0 +1,28 @@ +package pr2.io.datei_schreiben; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +/** + * Daten aus einer Datei lesen. + */ +public class WriteData { + + /** + * Datei. + */ + public static final String FILE = "pr2/io/datei_schreiben/daten.dat"; + + /** + * Hauptmethode. + * + * @param args Kommandozeilenargumente. + */ + public static void main(String[] args) { + + // TODO: OutputStream für Datei `File` öffnen + // TODO: 0xca 0xff 0xfe 0xba 0xbe 0x0 0xde 0xad 0xbe 0xef schreiben + // TODO: OutputStream schließen + } +} diff --git a/sources/src/main/java/pr2/io/datei_schreiben/test/DataTest.java b/sources/src/main/java/pr2/io/datei_schreiben/test/DataTest.java new file mode 100644 index 0000000..c4fc9fd --- /dev/null +++ b/sources/src/main/java/pr2/io/datei_schreiben/test/DataTest.java @@ -0,0 +1,39 @@ +package pr2.io.datei_schreiben.test; + +import org.junit.jupiter.api.Test; +import pr2.io.datei_schreiben.WriteData; + +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static pr2.io.datei_schreiben.WriteData.FILE; + +/** + * Test für die geschriebenen Daten. + */ +public class DataTest { + + /** + * Geschriebene Daten testen. + * + * @throws IOException Datei-Probleme. + */ + @Test + void testData() throws IOException { + + WriteData.main(new String[0]); + + InputStream is = new FileInputStream(FILE); + + byte[] buffer = new byte[10]; + is.read(buffer); + assertArrayEquals( + new byte[] {(byte) 0xca, (byte) 0xff, (byte) 0xfe, (byte) 0xba, + (byte) 0xbe, (byte) 0x00, (byte) 0xde, (byte) 0xad, + (byte) 0xbe, (byte) 0xef}, buffer); + + is.close(); + } +} diff --git a/sources/src/main/java/pr2/io/file/FilesystemWalker.java b/sources/src/main/java/pr2/io/file/FilesystemWalker.java new file mode 100644 index 0000000..605b68f --- /dev/null +++ b/sources/src/main/java/pr2/io/file/FilesystemWalker.java @@ -0,0 +1,66 @@ +package pr2.io.file; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.stream.Stream; + +/** + * Klasse, die das Dateisystem durchläuft und Informationen ausgibt. + */ +public class FilesystemWalker { + + /** + * Haupt-Methode. + * + * @param args Kommandozeilen-Argumente. + * @throws IOException IO-Probleme + */ + public static void main(String[] args) throws IOException { + + String path = args.length > 0 ? args[0] : "."; + + Path root = Path.of(path).normalize().toAbsolutePath(); + + System.out.println("Untersuche: " + root); + System.out.println(); + + long total = walk(root); + + System.out.println(); + System.out.println("Gesamtgröße: " + niceSize(total)); + } + + /** + * Rekursive Methode, um den Baum zu durchlaufen. + * + * @param startDir Verzeichnis, bei dem gestartet werden + * soll. + * @return die Größe des Verzeichnisses. + */ + private static long walk(Path startDir) { + + // TODO: Methode implementieren + return 0; + } + + /** + * Wandelt die Größe in eine schönere Darstellung um. + * + * @param size Die Größe. + * @return Schönere Darstellung. + */ + private static String niceSize(long size) { + + if (size > 1000_000L) { + return String.format("%.1f MByte", size / 1024.0 / 1024.0); + } + else if (size > 1000L) { + return String.format("%.1f kByte", size / 1024.0); + } + else { + return String.format("%d Byte", size); + } + } +} diff --git a/sources/src/main/java/pr2/io/filetest/FileInfo.java b/sources/src/main/java/pr2/io/filetest/FileInfo.java new file mode 100644 index 0000000..abcb64a --- /dev/null +++ b/sources/src/main/java/pr2/io/filetest/FileInfo.java @@ -0,0 +1,13 @@ +package pr2.io.filetest; + +import java.nio.file.Files; +import java.io.IOException; +import java.nio.file.Path; + +public class FileInfo { + + public static void main(String[] args) throws IOException { + + // TODO: Implementieren + } +} diff --git a/sources/src/main/java/pr2/io/filter/UCaseReader.java b/sources/src/main/java/pr2/io/filter/UCaseReader.java new file mode 100644 index 0000000..dee5bcf --- /dev/null +++ b/sources/src/main/java/pr2/io/filter/UCaseReader.java @@ -0,0 +1,13 @@ +package pr2.io.filter; + +import java.io.FilterReader; +import java.io.IOException; +import java.io.Reader; + +/** + * Filter-Reader, der den Inhalt in Großbuchstaben umwandelt. + */ + public class UCaseReader { + + // TODO: FilterReader gemäß Aufgabenbeschreibung anlegen +} diff --git a/sources/src/main/java/pr2/io/filter/test/UCaseReaderTest.java b/sources/src/main/java/pr2/io/filter/test/UCaseReaderTest.java new file mode 100644 index 0000000..7c96175 --- /dev/null +++ b/sources/src/main/java/pr2/io/filter/test/UCaseReaderTest.java @@ -0,0 +1,35 @@ +package pr2.io.filter.test; + +import org.junit.jupiter.api.Test; +import pr2.io.filter.UCaseReader; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.StringReader; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * Test für die Rot13 "Verschlüsselung". + */ +public class UCaseReaderTest { + + /** + * Testmethode. + * + * @throws IOException IO-Probleme + */ + @Test + void testReader() throws IOException { + +// TODO: Einkommentieren +// BufferedReader br = new BufferedReader( +// new UCaseReader(new StringReader( +// "Dies ist" + " ein Test für den UCASE-Reader."))); +// +// String line = br.readLine(); +// assertEquals("DIES IST EIN TEST FÜR DEN UCASE-READER.", line); +// +// br.close(); + } +} diff --git a/sources/src/main/java/pr2/io/konsole/ConsoleToFile.java b/sources/src/main/java/pr2/io/konsole/ConsoleToFile.java new file mode 100644 index 0000000..5662792 --- /dev/null +++ b/sources/src/main/java/pr2/io/konsole/ConsoleToFile.java @@ -0,0 +1,32 @@ +package pr2.io.konsole; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintStream; + +/** + * Liest einen Text von der Console und + * schreibt ihn dann in eine Datei. Allerdings + * erfolgt das Schreiben über eine Ausgabeumleitung + * und nicht über Dateioperationen. + */ +public class ConsoleToFile { + + /** + * Logfile für Ausgaben. + */ + private static final String LOGFILE = "console.log"; + + /** + * Hauptmethode. + * + * @param args Kommandozeile-Argumente. + */ + public static void main(String[] args) { + + // TODO: Von Konsole zeilenweise lesen + // TODO: Aktuelle Anzahl der Zeilen auf System.err ausgeben + // TODO: System.out in die Datei `LOGFILE` umleiten + } +} diff --git a/sources/src/main/java/pr2/io/linecounter/LineCounter.java b/sources/src/main/java/pr2/io/linecounter/LineCounter.java new file mode 100644 index 0000000..11317a6 --- /dev/null +++ b/sources/src/main/java/pr2/io/linecounter/LineCounter.java @@ -0,0 +1,17 @@ +package pr2.io.linecounter; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; + +public class LineCounter { + + public static void main(String[] args) throws IOException { + + int lines = 0; + + // TODO: Implementieren + + System.out.printf("Datei: %s hat %d Zeilen%n", args[0], lines); + } +} diff --git a/sources/src/main/java/pr2/io/random_access/FileSort.java b/sources/src/main/java/pr2/io/random_access/FileSort.java new file mode 100644 index 0000000..ca5696d --- /dev/null +++ b/sources/src/main/java/pr2/io/random_access/FileSort.java @@ -0,0 +1,21 @@ +package pr2.io.random_access; + +import java.io.IOException; +import java.io.RandomAccessFile; + +/** + * Sortierung von Dateien (in place). + */ +public class FileSort { + + /** + * Sortiert die Datei von Byte-Werten per Bubble-Sort. + * + * @param filename Dateiname + * @throws IOException IO-Probleme + */ + public static void sortFile(String filename) throws IOException { + + // TODO: Bubblesort implementieren + } +} diff --git a/sources/src/main/java/pr2/io/random_access/test/FileSortTest.java b/sources/src/main/java/pr2/io/random_access/test/FileSortTest.java new file mode 100644 index 0000000..2112c41 --- /dev/null +++ b/sources/src/main/java/pr2/io/random_access/test/FileSortTest.java @@ -0,0 +1,63 @@ +package pr2.io.random_access.test; + +import org.junit.jupiter.api.Test; +import pr2.io.random_access.FileSort; + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** + * Testet die Sortierung per Random-Access-File. + */ +public class FileSortTest { + + /** + * Kopiert die Datei f1 als Datei f2. + * + * @param f1 Quell-Datei + * @param f2 Ziel-Datei + * @throws IOException IO-Probleme + */ + private static void copyFile(String f1, String f2) throws IOException { + + FileInputStream fis = new FileInputStream(f1); + FileOutputStream fos = new FileOutputStream(f2); + + int b; + + while ((b = fis.read()) != -1) { + fos.write(b); + } + + fis.close(); + fos.close(); + } + + /** + * Testet die File-Sortierung. + * + * @throws IOException IO-Problem + */ + @Test + void testBubbleSort() throws IOException { + copyFile("data.dat", "output/data.dat"); + FileSort.sortFile("output/data.dat"); + + InputStream is = new FileInputStream("output/data.dat"); + + int data; + byte lastByte = 0; + + while ((data = is.read()) >= 0) { + byte b = (byte) data; + assertTrue(b >= lastByte); + lastByte = b; + } + + is.close(); + } +} diff --git a/sources/src/main/java/pr2/io/reader_writer/ReadAndPrintFile.java b/sources/src/main/java/pr2/io/reader_writer/ReadAndPrintFile.java new file mode 100644 index 0000000..d0c4799 --- /dev/null +++ b/sources/src/main/java/pr2/io/reader_writer/ReadAndPrintFile.java @@ -0,0 +1,25 @@ +package pr2.io.reader_writer; + +import java.io.FileReader; +import java.io.IOException; +import java.io.Reader; + +/** + * Liest eine Textdatei und gibt den Inhalt auf der Konsole aus. + */ +public class ReadAndPrintFile { + + /** + * Hauptmethode. + * + * @param args Kommandozeilen-Argumente. + */ + public static void main(String[] args) { + + String filename = args.length == 1 + ? args[0] + : "pr2/io/reader_writer/kafka.txt"; + + // TODO: Datei lesen und auf der Konsole ausgeben + } +} diff --git a/sources/src/main/java/pr2/io/rot13/Rot13.java b/sources/src/main/java/pr2/io/rot13/Rot13.java new file mode 100644 index 0000000..a7d84fc --- /dev/null +++ b/sources/src/main/java/pr2/io/rot13/Rot13.java @@ -0,0 +1,17 @@ +package pr2.io.rot13; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; + +public class Rot13 { + + public static void main(String[] args) throws IOException { + if (args.length != 1) { + System.err.println("Bitte eine Datei angeben"); + System.exit(1); + } + + // TODO: Implementieren + } +} diff --git a/sources/src/main/java/pr2/io/rot13/Rot13Reader.java b/sources/src/main/java/pr2/io/rot13/Rot13Reader.java new file mode 100644 index 0000000..2d5b388 --- /dev/null +++ b/sources/src/main/java/pr2/io/rot13/Rot13Reader.java @@ -0,0 +1,10 @@ +package pr2.io.rot13; + +import java.io.FilterReader; +import java.io.IOException; +import java.io.Reader; + + public class Rot13Reader { + + // TODO: Implementieren +} diff --git a/sources/src/main/java/pr2/io/scrambler/Scrambler.java b/sources/src/main/java/pr2/io/scrambler/Scrambler.java new file mode 100644 index 0000000..5151ccd --- /dev/null +++ b/sources/src/main/java/pr2/io/scrambler/Scrambler.java @@ -0,0 +1,16 @@ +package pr2.io.scrambler; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; + +public class Scrambler { + + public static void main(String[] args) throws IOException { + if (args.length != 1) { + System.err.println("Bitte eine Datei angeben"); + System.exit(1); + } + + } +} diff --git a/sources/src/main/java/pr2/io/serialisierung/Board.java b/sources/src/main/java/pr2/io/serialisierung/Board.java new file mode 100644 index 0000000..957b3d8 --- /dev/null +++ b/sources/src/main/java/pr2/io/serialisierung/Board.java @@ -0,0 +1,124 @@ +package pr2.io.serialisierung; + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; + +/** + * Ein Dame-Brett. + */ +public class Board implements Serializable { + + /** + * Belegung des Brettes. + */ + private final Color[][] brett = new Color[8][8]; + + /** + * Liest den Inhalt aus einer Datei. + * + * @param file Dateipfad. + * @return das gelesene Spielfeld + * @throws IOException IO-Probleme + */ + public static Board loadFromFile(String file) throws IOException { + + // TODO: Aus einer Datei lesen + + return null; + } + + /** + * Schreibt den Inhalt des Spielfeldes in eine Datei. + * + * @param file Dateiname. + * @throws IOException IO-Probleme + */ + public void writeToFile(String file) throws IOException { + } + + /** + * Setzt einen Stein an die gegebene Koordinate. + * + * @param koordinate Koordinate in "a1"-Notation. + * @param farbe Fabe des Spielsteins. + */ + public void set(String koordinate, Color farbe) { + Tupel t = parseCoordinates(koordinate); + brett[t.x][t.y] = farbe; + } + + /** + * Wandelt textuelle Koordinaten in x- und y-Wert um. + * + * @param koordinate Koordinate als String. + * @return Koordinate als Integer-Tupel. + */ + private Tupel parseCoordinates(String koordinate) { + char buchstabe = koordinate.toLowerCase().charAt(0); + char zahl = koordinate.charAt(1); + + Tupel t = new Tupel(); + + t.y = buchstabe - 'a'; + t.x = zahl - '1'; + + if (t.x < 0 || t.x > 7) { + throw new IllegalArgumentException(); + } + + if (t.y < 0 || t.y > 7) { + throw new IllegalArgumentException(); + } + + return t; + } + + /** + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + + StringBuilder result = new StringBuilder(); + + char y = '1'; + + result.append(" "); + for (char c : "abcdefgh".toCharArray()) { + result.append(' ').append(c); + } + + result.append("\n"); + + for (Color[] figurs : brett) { + + result.append(y++); + + for (Color figur : figurs) { + if (figur != null) { + result.append(' ').append(figur); + } + else { + result.append(" "); + } + } + + result.append("\n"); + } + + return result.toString(); + } + + /** + * Tupel von zwei int-Werten. + */ + private static class Tupel { + int x; + + int y; + } +} diff --git a/sources/src/main/java/pr2/io/serialisierung/Color.java b/sources/src/main/java/pr2/io/serialisierung/Color.java new file mode 100644 index 0000000..7f8f76b --- /dev/null +++ b/sources/src/main/java/pr2/io/serialisierung/Color.java @@ -0,0 +1,30 @@ +package pr2.io.serialisierung; + +/** + * Farben der Spielsteine. + */ +public enum Color { + + /** + * Schwarzer Stein. + */ + BLACK, + + /** + * Weißer Stein. + */ + WHITE; + + /** + * @see java.lang.Enum#toString() + */ + @Override + public String toString() { + if (this == Color.BLACK) { + return "B"; + } + else { + return "W"; + } + } +} diff --git a/sources/src/main/java/pr2/io/serialisierung/test/BoardTest.java b/sources/src/main/java/pr2/io/serialisierung/test/BoardTest.java new file mode 100644 index 0000000..e96d2a0 --- /dev/null +++ b/sources/src/main/java/pr2/io/serialisierung/test/BoardTest.java @@ -0,0 +1,46 @@ +package pr2.io.serialisierung.test; + +import org.junit.jupiter.api.Test; +import pr2.io.serialisierung.Board; +import pr2.io.serialisierung.Color; + +import java.io.IOException; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * Test. + */ +public class BoardTest { + + /** + * Test für die Implementierung des Spielbrettes. + * + * @throws IOException Datei-Probleme. + */ + @Test + void testDame() throws IOException { + Board s = new Board(); + s.set("a1", Color.BLACK); + s.set("b1", Color.WHITE); + s.set("h1", Color.BLACK); + s.set("h2", Color.BLACK); + s.set("a8", Color.BLACK); + s.set("f8", Color.BLACK); + s.set("f5", Color.WHITE); + s.set("e3", Color.WHITE); + s.set("g2", Color.WHITE); + + String stringRepresentation = s.toString(); + + s.writeToFile("/tmp/daten.dat"); + + s = Board.loadFromFile("/tmp/daten.dat"); + + assertEquals(stringRepresentation, s.toString()); + + s = Board.loadFromFile("testdata.dat"); + + assertEquals(stringRepresentation, s.toString()); + } +} diff --git a/sources/src/main/java/pr2/lambda/array_sorter/ReverseSort.java b/sources/src/main/java/pr2/lambda/array_sorter/ReverseSort.java new file mode 100644 index 0000000..381c6fc --- /dev/null +++ b/sources/src/main/java/pr2/lambda/array_sorter/ReverseSort.java @@ -0,0 +1,22 @@ +package pr2.lambda.array_sorter; + +import java.util.Arrays; +import java.util.Comparator; +import java.util.Date; + +public class ReverseSort { + + public static void main(String[] args) { + Date[] dates = { + new Date(9200000000L), + new Date(9300000000L), + new Date(92100000000L), + new Date(9600000000L), + new Date(93300000000L) + }; + + // TODO: Daten umgekehrt sortieren + + System.out.println(Arrays.asList(dates)); + } +} diff --git a/sources/src/main/java/pr2/lambda/callback/Main.java b/sources/src/main/java/pr2/lambda/callback/Main.java new file mode 100644 index 0000000..33857e6 --- /dev/null +++ b/sources/src/main/java/pr2/lambda/callback/Main.java @@ -0,0 +1,36 @@ +package pr2.lambda.callback; + +import java.util.Arrays; + +/** + * Hauptklasse. + */ +public class Main { + + private static final int[] ZAHLEN = + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20}; + + /** + * Hauptmethode. + * + * @param args Kommandozeilenargumente. + */ + public static void main(String[] args) { + + NumberSelector s = new NumberSelector(); + + int[] gerade = null; + + // TODO: Gerade Zahlen filtern + + System.out.println(Arrays.toString(gerade)); + + int[] ungerade = null; + + // TODO: Ungerade Zahlen filtern + + System.out.println(Arrays.toString(ungerade)); + + } +} diff --git a/sources/src/main/java/pr2/lambda/callback/NumberSelector.java b/sources/src/main/java/pr2/lambda/callback/NumberSelector.java new file mode 100644 index 0000000..bbce522 --- /dev/null +++ b/sources/src/main/java/pr2/lambda/callback/NumberSelector.java @@ -0,0 +1,30 @@ +package pr2.lambda.callback; + +/** + * Auswählen von Zahlen mithilfe eines Callbacks. + */ +public class NumberSelector { + + /** + * Filtert die übergebenen Zahlen anhand des Prädikates. + * + * @param predicate Prädikat. + * @param numbers die zu filternden Zahlen. + * @return Das Ergebnis + */ + public int[] filter(Predicate predicate, int[] numbers) { + + int[] temp = new int[numbers.length]; + int count = 0; + + for (int i : numbers) { + if (predicate.accept(i)) { + temp[count++] = i; + } + } + + int[] result = new int[count]; + System.arraycopy(temp, 0, result, 0, count); + return result; + } +} diff --git a/sources/src/main/java/pr2/lambda/callback/Predicate.java b/sources/src/main/java/pr2/lambda/callback/Predicate.java new file mode 100644 index 0000000..bf3f416 --- /dev/null +++ b/sources/src/main/java/pr2/lambda/callback/Predicate.java @@ -0,0 +1,20 @@ +package pr2.lambda.callback; + +/** + * Interface, um Entscheidung über ein Objekt zu + * treffen. + * + * @param Typ des Objekts + */ +@FunctionalInterface +public interface Predicate { + + /** + * Entscheidet, ob ein Objekt akzeptiert wird oder nicht. + * + * @param object das zu untersuchende Objekt + * @return {@code true} wenn das Objekt akzeptiert wird, + * andernfalls {@code false}. + */ + boolean accept(T object); +} diff --git a/sources/src/main/java/pr2/lambda/comparator/SortLambda.java b/sources/src/main/java/pr2/lambda/comparator/SortLambda.java new file mode 100644 index 0000000..57f0cbf --- /dev/null +++ b/sources/src/main/java/pr2/lambda/comparator/SortLambda.java @@ -0,0 +1,12 @@ +package pr2.lambda.comparator; + +import java.util.Arrays; + +public class SortLambda { + + public static void main(String[] args) { + Integer[] zahlen = {23, 42, 17, 9, 1, 5, 7, 88, 35}; + // TODO: Zahlen mit einem Lambda sortieren + System.out.println(Arrays.toString(zahlen)); + } +} diff --git a/sources/src/main/java/pr2/lambda/lambdas/Main.java b/sources/src/main/java/pr2/lambda/lambdas/Main.java new file mode 100644 index 0000000..a0ca630 --- /dev/null +++ b/sources/src/main/java/pr2/lambda/lambdas/Main.java @@ -0,0 +1,33 @@ +package pr2.lambda.lambdas; + +import java.util.Arrays; + +/** + * Hauptklasse. + */ +public class Main { + + private static final int[] ZAHLEN = + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20}; + + /** + * Hauptmethode. + * + * @param args Kommandozeileargumente. + */ + public static void main(String[] args) { + + NumberSelector s = new NumberSelector(); + + // TODO: Daten filtern + int[] gerade = null; + + System.out.println(Arrays.toString(gerade)); + + // TODO: Daten filtern + int[] ungerade = null; + + System.out.println(Arrays.toString(ungerade)); + } +} diff --git a/sources/src/main/java/pr2/lambda/lambdas/NumberSelector.java b/sources/src/main/java/pr2/lambda/lambdas/NumberSelector.java new file mode 100644 index 0000000..16f974b --- /dev/null +++ b/sources/src/main/java/pr2/lambda/lambdas/NumberSelector.java @@ -0,0 +1,30 @@ +package pr2.lambda.lambdas; + +/** + * Auswählen von Zahlen mithilfe eines Callbacks. + */ +public class NumberSelector { + + /** + * Filtert die übergebenen Zahlen anhand des Prädikates. + * + * @param predicate Prädikat. + * @param numbers die zu filternden Zahlen. + * @return Das Ergebnis + */ + public int[] filter(Predicate predicate, int[] numbers) { + + int[] temp = new int[numbers.length]; + int count = 0; + + for (int i : numbers) { + if (predicate.accept(i)) { + temp[count++] = i; + } + } + + int[] result = new int[count]; + System.arraycopy(temp, 0, result, 0, count); + return result; + } +} diff --git a/sources/src/main/java/pr2/lambda/lambdas/Predicate.java b/sources/src/main/java/pr2/lambda/lambdas/Predicate.java new file mode 100644 index 0000000..d8aa4ee --- /dev/null +++ b/sources/src/main/java/pr2/lambda/lambdas/Predicate.java @@ -0,0 +1,20 @@ +package pr2.lambda.lambdas; + +/** + * Interface, um Entscheidung über ein Objekt zu + * treffen. + * + * @param Typ des Objekts + */ +@FunctionalInterface +public interface Predicate { + + /** + * Entscheidet, ob ein Objekt akzeptiert wird oder nicht. + * + * @param object das zu untersuchende Objekt + * @return {@code true} wenn das Objekt akzeptiert wird, + * andernfalls {@code false}. + */ + boolean accept(T object); +} diff --git a/sources/src/main/java/pr2/lambda/matrixsuche/MatrixSuche.java b/sources/src/main/java/pr2/lambda/matrixsuche/MatrixSuche.java new file mode 100644 index 0000000..77500d7 --- /dev/null +++ b/sources/src/main/java/pr2/lambda/matrixsuche/MatrixSuche.java @@ -0,0 +1,5 @@ +package pr2.lambda.matrixsuche; + +public class MatrixSuche { + +} diff --git a/sources/src/main/java/pr2/lambda/matrixsuche/test/MatrixSucheTest.java b/sources/src/main/java/pr2/lambda/matrixsuche/test/MatrixSucheTest.java new file mode 100644 index 0000000..4435c33 --- /dev/null +++ b/sources/src/main/java/pr2/lambda/matrixsuche/test/MatrixSucheTest.java @@ -0,0 +1,33 @@ +package pr2.lambda.matrixsuche.test; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import pr2.lambda.matrixsuche.MatrixSuche; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +public class MatrixSucheTest { + + @Test + void testSuche() { + +// TODO: Einkommentieren +// int[][] matrix = { +// {3, 5, 6, 7, 8}, +// {10, 12, 14, 16, 18}, +// {23, 25, 26, 27, 28} +// }; +// +// Assertions.assertEquals("(0, 1)", +// MatrixSuche.findEntry(matrix, 5).toString()); +// assertEquals("(2, 0)", +// MatrixSuche.findEntry(matrix, 23).toString()); +// assertEquals("(1, 2)", +// MatrixSuche.findEntry(matrix, 14).toString()); +// assertEquals("(0, 4)", +// MatrixSuche.findEntry(matrix, 8).toString()); +// assertNull( +// MatrixSuche.findEntry(matrix, 99)); + } +} diff --git a/sources/src/main/java/pr2/lambda/mogrifier_1/StringFunction.java b/sources/src/main/java/pr2/lambda/mogrifier_1/StringFunction.java new file mode 100644 index 0000000..dff398e --- /dev/null +++ b/sources/src/main/java/pr2/lambda/mogrifier_1/StringFunction.java @@ -0,0 +1,4 @@ +package pr2.lambda.mogrifier_1; + +public interface StringFunction { +} diff --git a/sources/src/main/java/pr2/lambda/mogrifier_1/StringTransmogrifier.java b/sources/src/main/java/pr2/lambda/mogrifier_1/StringTransmogrifier.java new file mode 100644 index 0000000..52a5e21 --- /dev/null +++ b/sources/src/main/java/pr2/lambda/mogrifier_1/StringTransmogrifier.java @@ -0,0 +1,6 @@ +package pr2.lambda.mogrifier_1; + +public class StringTransmogrifier { + + // TODO: Statische Methode transmogrify schreiben +} diff --git a/sources/src/main/java/pr2/lambda/mogrifier_1/test/StringTransmogrifierTest.java b/sources/src/main/java/pr2/lambda/mogrifier_1/test/StringTransmogrifierTest.java new file mode 100644 index 0000000..1e5bfcb --- /dev/null +++ b/sources/src/main/java/pr2/lambda/mogrifier_1/test/StringTransmogrifierTest.java @@ -0,0 +1,15 @@ +package pr2.lambda.mogrifier_1.test; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import pr2.lambda.mogrifier_1.StringTransmogrifier; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; + +public class StringTransmogrifierTest { + + @Test + void testMogrification() { + // TODO: Tests durchführen + } +} diff --git a/sources/src/main/java/pr2/lambda/mogrifier_2/StringFunction.java b/sources/src/main/java/pr2/lambda/mogrifier_2/StringFunction.java new file mode 100644 index 0000000..d68c511 --- /dev/null +++ b/sources/src/main/java/pr2/lambda/mogrifier_2/StringFunction.java @@ -0,0 +1,6 @@ +package pr2.lambda.mogrifier_2; + +public interface StringFunction { + + String apply(String s); +} diff --git a/sources/src/main/java/pr2/lambda/mogrifier_2/StringTransmogrifier.java b/sources/src/main/java/pr2/lambda/mogrifier_2/StringTransmogrifier.java new file mode 100644 index 0000000..79b64a4 --- /dev/null +++ b/sources/src/main/java/pr2/lambda/mogrifier_2/StringTransmogrifier.java @@ -0,0 +1,14 @@ +package pr2.lambda.mogrifier_2; + +public class StringTransmogrifier { + + public static String[] transmogrify(String[] elements, StringFunction t) { + String[] result = new String[elements.length]; + + for (int i = 0; i < elements.length; i++) { + result[i] = t.apply(elements[i]); + } + + return result; + } +} diff --git a/sources/src/main/java/pr2/lambda/mogrifier_2/test/StringTransmogrifierTest.java b/sources/src/main/java/pr2/lambda/mogrifier_2/test/StringTransmogrifierTest.java new file mode 100644 index 0000000..79aff6c --- /dev/null +++ b/sources/src/main/java/pr2/lambda/mogrifier_2/test/StringTransmogrifierTest.java @@ -0,0 +1,38 @@ +package pr2.lambda.mogrifier_2.test; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import pr2.lambda.mogrifier_2.StringFunction; +import pr2.lambda.mogrifier_2.StringTransmogrifier; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; + +public class StringTransmogrifierTest { + + static final String[] ELEMENTS = {"Hello", "World"}; + + @Test + void testMogrification() { + + + Assertions.assertArrayEquals(new String[] {"hello", "world"}, + StringTransmogrifier.transmogrify(ELEMENTS, + String::toLowerCase)); + + assertArrayEquals(new String[] {"HELLO", "WORLD"}, + StringTransmogrifier.transmogrify(ELEMENTS, + String::toUpperCase)); + + assertArrayEquals(new String[] {"Ifmmp", "Xpsme"}, + StringTransmogrifier.transmogrify(ELEMENTS, + s -> { + char[] c = s.toCharArray(); + for (int i = 0; i < c.length; i++) { + c[i] = (char) (c[i] + 1); + } + return new String(c); + })); + } + + // TODO: Tests für caesar durchführen +} diff --git a/sources/src/main/java/pr2/lambda/observer/Beobachter.java b/sources/src/main/java/pr2/lambda/observer/Beobachter.java new file mode 100644 index 0000000..98eb441 --- /dev/null +++ b/sources/src/main/java/pr2/lambda/observer/Beobachter.java @@ -0,0 +1,5 @@ +package pr2.lambda.observer; + +public interface Beobachter { + int getValue(); +} diff --git a/sources/src/main/java/pr2/object/clone_alien/Alien.java b/sources/src/main/java/pr2/object/clone_alien/Alien.java new file mode 100644 index 0000000..0223a3d --- /dev/null +++ b/sources/src/main/java/pr2/object/clone_alien/Alien.java @@ -0,0 +1,91 @@ +package pr2.object.clone_alien; + +/** + * Ein Alien. + */ + public class Alien { + + /** + * Name des Aliens. + */ + private final String name; + + /** + * Raumanzug des Aliens. + */ + private Raumanzug raumanzug; + + /** + * Erzeugt ein neues Alien. + * + * @param name Name des Aliens. + * @param raumanzug Anzug. + */ + public Alien(String name, Raumanzug raumanzug) { + this.name = name; + this.raumanzug = raumanzug; + } + + /** + * Gibt den Namen des Aliens zurück. + * + * @return Name des Aliens. + */ + public String getName() { + return name; + } + + /** + * Gibt den Anzug zurück. + * + * @return der Anzug. + */ + public Raumanzug getAnzug() { + return raumanzug; + } + + /** + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + ((raumanzug + == null) ? 0 : raumanzug.hashCode()); + return result; + } + + /** + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + Alien other = (Alien) obj; + if (name == null) { + if (other.name != null) { + return false; + } + } + else if (!name.equals(other.name)) { + return false; + } + if (raumanzug == null) { + return other.raumanzug == null; + } + else { + return raumanzug.equals(other.raumanzug); + } + } + +} diff --git a/sources/src/main/java/pr2/object/clone_alien/Raumanzug.java b/sources/src/main/java/pr2/object/clone_alien/Raumanzug.java new file mode 100644 index 0000000..1658848 --- /dev/null +++ b/sources/src/main/java/pr2/object/clone_alien/Raumanzug.java @@ -0,0 +1,68 @@ +package pr2.object.clone_alien; + +/** + * Ein Raumanzug. + */ + public class Raumanzug { + + /** + * Sauerstoffvorrat, der noch im Raumanzug ist. + */ + private double sauerstoffVorrat; + + /** + * Ertzeugt einen neuen Raumanzug. + */ + public Raumanzug() { + sauerstoffVorrat = Math.random(); + } + + /** + * Sauerstoffvorrat im Anzug. + * + * @return Vorrat in % (0.0-1.0) + */ + public double getSauerstoffVorrat() { + return sauerstoffVorrat; + } + + /** + * Tankt den Anzug auf. + */ + public void auftanken() { + sauerstoffVorrat = 1.0; + } + + /** + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + long temp; + temp = Double.doubleToLongBits(sauerstoffVorrat); + result = prime * result + (int) (temp ^ (temp >>> 32)); + return result; + } + + /** + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + Raumanzug other = (Raumanzug) obj; + return Double.doubleToLongBits(sauerstoffVorrat) + == Double.doubleToLongBits(other.sauerstoffVorrat); + } + +} diff --git a/sources/src/main/java/pr2/object/clone_alien/test/AlienCloneTest.java b/sources/src/main/java/pr2/object/clone_alien/test/AlienCloneTest.java new file mode 100644 index 0000000..c30dff5 --- /dev/null +++ b/sources/src/main/java/pr2/object/clone_alien/test/AlienCloneTest.java @@ -0,0 +1,38 @@ +package pr2.object.clone_alien.test; + +import org.junit.jupiter.api.Test; +import pr2.object.clone_alien.Alien; +import pr2.object.clone_alien.Raumanzug; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotSame; + +/** + * Test für die Clone-Methoden. + */ +public class AlienCloneTest { + + /** + * Test-Methode. + * + * @throws CloneNotSupportedException wird geworfen, wenn clone_alien + * nicht korrekt implementiert wurde. + */ + @Test + void testClone() throws CloneNotSupportedException { +// TODO: Einkommentieren +// Raumanzug r1 = new Raumanzug(); +// Alien a1 = new Alien("Predator", r1); +// +// Alien a2 = (Alien) a1.clone(); +// Raumanzug r2 = a2.getAnzug(); +// +// assertNotSame(a1, a2); +// assertNotSame(r1, r2); +// +// assertEquals(a1, a2); +// assertEquals(r1, r2); +// assertEquals(r1.getSauerstoffVorrat(), r2.getSauerstoffVorrat(), +// 0.0001); + } +} diff --git a/sources/src/main/java/pr2/object/clone_person/Person.java b/sources/src/main/java/pr2/object/clone_person/Person.java new file mode 100644 index 0000000..934ec8d --- /dev/null +++ b/sources/src/main/java/pr2/object/clone_person/Person.java @@ -0,0 +1,22 @@ +package pr2.object.clone_person; + +import java.util.Date; + + public class Person { + + private final String vorname = ""; + private final String nachname = ""; + private Date geburtsdatum = new Date(); + + // TODO: clone implementieren + + + @Override + public String toString() { + return "Person{" + + "vorname='" + vorname + '\'' + + ", nachname='" + nachname + '\'' + + ", geburtsdatum=" + geburtsdatum + + '}'; + } +} diff --git a/sources/src/main/java/pr2/object/equals_hashcode/Ork.java b/sources/src/main/java/pr2/object/equals_hashcode/Ork.java new file mode 100644 index 0000000..60dd23e --- /dev/null +++ b/sources/src/main/java/pr2/object/equals_hashcode/Ork.java @@ -0,0 +1,29 @@ +package pr2.object.equals_hashcode; + +/** + * Ork. + */ +public class Ork extends Wesen { + + /** + * Stärke der Orks. + */ + private static final int ORK_STAERKE = 17; + + /** + * Zeigt an, ob der Ork gut oder böse ist. + */ + private final boolean boese; + + /** + * Legt einen neuen Ork an. + * + * @param name Name des Orks. + * @param boese zeigt an, ob der Ork gut oder böse ist + */ + public Ork(String name, boolean boese) { + super(name, ORK_STAERKE); + this.boese = boese; + } + +} diff --git a/sources/src/main/java/pr2/object/equals_hashcode/Wesen.java b/sources/src/main/java/pr2/object/equals_hashcode/Wesen.java new file mode 100644 index 0000000..424641c --- /dev/null +++ b/sources/src/main/java/pr2/object/equals_hashcode/Wesen.java @@ -0,0 +1,66 @@ +package pr2.object.equals_hashcode; + +/** + * Ein Wesen in der Spielwelt. + */ +public class Wesen { + + /** + * Name des Wesens. + */ + private final String name; + + /** + * Stärke des Wesens. + */ + private final int staerke; + + /** + * Legt ein neues Wesen an. + * + * @param name Name des Wesens. + * @param staerke Stärke des Wesens. + */ + public Wesen(String name, int staerke) { + this.name = name; + this.staerke = staerke; + } + + /** + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + staerke; + return result; + } + + /** + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + Wesen other = (Wesen) obj; + if (name == null) { + if (other.name != null) { + return false; + } + } + else if (!name.equals(other.name)) { + return false; + } + return staerke == other.staerke; + } +} diff --git a/sources/src/main/java/pr2/object/equals_hashcode/test/WesenTest.java b/sources/src/main/java/pr2/object/equals_hashcode/test/WesenTest.java new file mode 100644 index 0000000..bdbe397 --- /dev/null +++ b/sources/src/main/java/pr2/object/equals_hashcode/test/WesenTest.java @@ -0,0 +1,87 @@ +package pr2.object.equals_hashcode.test; + +import org.junit.jupiter.api.Test; +import pr2.object.equals_hashcode.Ork; +import pr2.object.equals_hashcode.Wesen; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertNotSame; + +/** + * Testklasse für die Wesen. + */ +public class WesenTest { + + /** + * Testet equals und hashCode von Wesen. + */ + @Test + void testWesen() { + Wesen w1 = new Wesen("Azok", 30); + Wesen w2 = new Wesen("Azok", 30); + Wesen w3 = new Wesen("Azok", 31); + Wesen w4 = new Wesen("Gorrok", 30); + Wesen w5 = new Wesen("Gorrok", 31); + + assertNotSame(w1, w2); + assertEquals(w1, w2); + + assertNotSame(w1, w3); + assertNotEquals(w1, w3); + + assertNotSame(w1, w4); + assertNotEquals(w1, w4); + + assertNotSame(w1, w5); + assertNotEquals(w1, w5); + + assertEquals(w1.hashCode(), w2.hashCode()); + } + + /** + * Testet equals und hashCode von Ork. + */ + @Test + void testOrk() { + Ork o1 = new Ork("Snagas", true); + Ork o2 = new Ork("Snagas", true); + Ork o3 = new Ork("Snagas", false); + Ork o4 = new Ork("Berg-Ork", false); + Ork o5 = new Ork("Berg-Ork", true); + Ork o6 = new Ork("Berg-Ork", false); + Wesen w = new Wesen("Snagas", 17); + + assertNotSame(o1, o2); + assertEquals(o1, o2); + + assertNotSame(o1, o3); + assertNotEquals(o1, o3); + + assertNotSame(o1, o4); + assertNotEquals(o1, o4); + + assertNotSame(o1, o5); + assertNotEquals(o1, o5); + + assertEquals(o1.hashCode(), o2.hashCode()); + assertEquals(o4.hashCode(), o6.hashCode()); + + assertNotEquals(w, o1); + assertNotEquals(w, o2); + assertNotEquals(w, o3); + assertNotEquals(null, o1); + assertNotEquals("Hugo", o1); + assertEquals(o1, o1); + + // Diese Tests muss nicht zwangsweise funktionieren, da + // ungleiche Objekte einen identischen Hashcode haben können. + // Wir gehen hier aber davon aus, dass eine Hashkollision + // sehr selten ist und machen daher aus didaktischen Gründen + // diesen Test. + assertNotEquals(o1.hashCode(), o3.hashCode()); + assertNotEquals(o1.hashCode(), o4.hashCode()); + assertNotEquals(o1.hashCode(), o5.hashCode()); + assertNotEquals(o4.hashCode(), o5.hashCode()); + } +} diff --git a/sources/src/main/java/pr2/object/equals_person/Person.java b/sources/src/main/java/pr2/object/equals_person/Person.java new file mode 100644 index 0000000..1c32ed4 --- /dev/null +++ b/sources/src/main/java/pr2/object/equals_person/Person.java @@ -0,0 +1,10 @@ +package pr2.object.equals_person; + +public class Person { + + private String vorname; + private String nachname; + private int alter; + + // TODO: equals und hashCode implementieren +} diff --git a/sources/src/main/java/pr2/object/tostring/Alien.java b/sources/src/main/java/pr2/object/tostring/Alien.java new file mode 100644 index 0000000..4bbaa28 --- /dev/null +++ b/sources/src/main/java/pr2/object/tostring/Alien.java @@ -0,0 +1,47 @@ +package pr2.object.tostring; + +/** + * Ein Alien. + */ +public class Alien implements Cloneable { + + /** + * Name des Aliens. + */ + private final String name; + + /** + * Raumanzug des Aliens. + */ + private final Raumanzug raumanzug; + + /** + * Erzeugt ein neues Alien. + * + * @param name Name des Aliens. + * @param raumanzug Anzug. + */ + public Alien(String name, Raumanzug raumanzug) { + this.name = name; + this.raumanzug = raumanzug; + } + + /** + * Gibt den Namen des Aliens zurück. + * + * @return Name des Aliens. + */ + public String getName() { + return name; + } + + /** + * Gibt den Anzug zurück. + * + * @return der Anzug. + */ + public Raumanzug getAnzug() { + return raumanzug; + } + +} diff --git a/sources/src/main/java/pr2/object/tostring/Ausgabe.java b/sources/src/main/java/pr2/object/tostring/Ausgabe.java new file mode 100644 index 0000000..637f3c6 --- /dev/null +++ b/sources/src/main/java/pr2/object/tostring/Ausgabe.java @@ -0,0 +1,24 @@ +package pr2.object.tostring; + +/** + * Ausgabe. + */ +public final class Ausgabe { + + /** + * Konstruktor. + */ + private Ausgabe() { + // keine Objekte. + } + + /** + * Einstiegspunkt in das Programm. + * + * @param args Kommandozeilenargumente. + */ + public static void main(String[] args) { + Alien alien = new Alien("E.T.", new Raumanzug("Spaceman 2000")); + System.out.println(alien); + } +} diff --git a/sources/src/main/java/pr2/object/tostring/Raumanzug.java b/sources/src/main/java/pr2/object/tostring/Raumanzug.java new file mode 100644 index 0000000..57f653e --- /dev/null +++ b/sources/src/main/java/pr2/object/tostring/Raumanzug.java @@ -0,0 +1,44 @@ +package pr2.object.tostring; + +/** + * Ein Raumanzug. + */ +public class Raumanzug implements Cloneable { + + /** + * Hersteller des Raumanzuges. + */ + private final String hersteller; + + /** + * Sauerstoffvorrat, der noch im Raumanzug ist. + */ + private double sauerstoffVorrat; + + /** + * Ertzeugt einen neuen Raumanzug. + * + * @param hersteller Hersteller des Anzuges. + */ + public Raumanzug(String hersteller) { + this.hersteller = hersteller; + sauerstoffVorrat = Math.random(); + } + + /** + * Sauerstoffvorrat im Anzug. + * + * @return Vorrat in % (0.0-1.0) + */ + public double getSauerstoffVorrat() { + return sauerstoffVorrat; + } + + /** + * Tankt den Anzug auf. + */ + public void auftanken() { + sauerstoffVorrat = 1.0; + } + +} diff --git a/sources/src/main/java/pr2/object/wrapper_boxsearch/BoxSearcher.java b/sources/src/main/java/pr2/object/wrapper_boxsearch/BoxSearcher.java new file mode 100644 index 0000000..d760cbd --- /dev/null +++ b/sources/src/main/java/pr2/object/wrapper_boxsearch/BoxSearcher.java @@ -0,0 +1,8 @@ +package pr2.object.wrapper_boxsearch; + +public class BoxSearcher { + + public static void main(String[] args) { + // TODO: Grenze suchen und Ergebnis ausgeben + } +} diff --git a/sources/src/main/java/pr2/object/wrapper_umwandler/Umwandler.java b/sources/src/main/java/pr2/object/wrapper_umwandler/Umwandler.java new file mode 100644 index 0000000..2fc0727 --- /dev/null +++ b/sources/src/main/java/pr2/object/wrapper_umwandler/Umwandler.java @@ -0,0 +1,45 @@ +package pr2.object.wrapper_umwandler; + +/** + * Enthält Methoden, um Integer-Zahlen umzuwandeln. + */ +public final class Umwandler { + + /** + * Konstruktor. + */ + private Umwandler() { + // keine Instanzen + } + + /** + * Wandelt eine Zahl in meherer Formate um. + * + * @param i die Zahl. + * @return String mit mehreren Formaten. + */ + public static String toString(int i) { + return null; + } + + /** + * Wandelt einen String (zur Basis 10) in eine Zahl um. + * + * @param s String, der umgewandelt werden soll + * @return Umgewandelte Zahl + */ + public static int fromString(String s) { + return 0; + } + + /** + * Einstiegspunkt in das Programm. + * + * @param args Kommandozeilenargumente. + */ + public static void main(String[] args) { + String s = "17871"; + int i = fromString(s); + System.out.println(toString(i)); + } +} diff --git a/sources/src/main/java/pr2/reflection/analyzer/Analyzer.java b/sources/src/main/java/pr2/reflection/analyzer/Analyzer.java new file mode 100644 index 0000000..8fc77c3 --- /dev/null +++ b/sources/src/main/java/pr2/reflection/analyzer/Analyzer.java @@ -0,0 +1,17 @@ +package pr2.reflection.analyzer; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +public class Analyzer { + + public static void main(String[] args) { + + if (args.length != 1) { + System.err.println("Bitte einen Klassennamen angeben."); + System.exit(1); + } + + // TODO: Implementieren + } +} diff --git a/sources/src/main/java/pr2/reflection/reflector/Reflector.java b/sources/src/main/java/pr2/reflection/reflector/Reflector.java new file mode 100644 index 0000000..07ee7bf --- /dev/null +++ b/sources/src/main/java/pr2/reflection/reflector/Reflector.java @@ -0,0 +1,16 @@ +package pr2.reflection.reflector; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +public class Reflector { + + public static void main(String[] args) throws ClassNotFoundException, + SecurityException, NoSuchMethodException, IllegalArgumentException, + InstantiationException, IllegalAccessException, + InvocationTargetException { + + // TODO: Implementieren + } +} diff --git a/sources/src/main/java/pr2/streams/chars_1/CountLetters.java b/sources/src/main/java/pr2/streams/chars_1/CountLetters.java new file mode 100644 index 0000000..323b50e --- /dev/null +++ b/sources/src/main/java/pr2/streams/chars_1/CountLetters.java @@ -0,0 +1,11 @@ +package pr2.streams.chars_1; + +public class CountLetters { + public static long count(String s) { + long sum = 0; + + // TODO: Implementieren + + return sum; + } +} diff --git a/sources/src/main/java/pr2/streams/chars_1/test/CountLettersTest.java b/sources/src/main/java/pr2/streams/chars_1/test/CountLettersTest.java new file mode 100644 index 0000000..e18ad24 --- /dev/null +++ b/sources/src/main/java/pr2/streams/chars_1/test/CountLettersTest.java @@ -0,0 +1,13 @@ +package pr2.streams.chars_1.test; + +import org.junit.jupiter.api.Test; +import pr2.streams.chars_1.CountLetters; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class CountLettersTest { + @Test + void testCount() { + // TODO: Methode count testen + } +} diff --git a/sources/src/main/java/pr2/streams/chars_2/CountLetters.java b/sources/src/main/java/pr2/streams/chars_2/CountLetters.java new file mode 100644 index 0000000..166bac6 --- /dev/null +++ b/sources/src/main/java/pr2/streams/chars_2/CountLetters.java @@ -0,0 +1,14 @@ +package pr2.streams.chars_2; + +import java.util.List; + +public class CountLetters { + public static long count(List liste) { + + long chars = 0; + + // TODO: Implementieren + + return chars; + } +} diff --git a/sources/src/main/java/pr2/streams/chars_2/test/CountLettersTest.java b/sources/src/main/java/pr2/streams/chars_2/test/CountLettersTest.java new file mode 100644 index 0000000..446262c --- /dev/null +++ b/sources/src/main/java/pr2/streams/chars_2/test/CountLettersTest.java @@ -0,0 +1,16 @@ +package pr2.streams.chars_2.test; + +import org.junit.jupiter.api.Test; +import pr2.streams.chars_2.CountLetters; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class CountLettersTest { + @Test + void testCount() { + // TODO: Methode count testen + } +} diff --git a/sources/src/main/java/pr2/streams/chars_3/CountLetters.java b/sources/src/main/java/pr2/streams/chars_3/CountLetters.java new file mode 100644 index 0000000..de8d162 --- /dev/null +++ b/sources/src/main/java/pr2/streams/chars_3/CountLetters.java @@ -0,0 +1,14 @@ +package pr2.streams.chars_3; + +import java.util.List; + +public class CountLetters { + public static long count(List liste) { + + long chars = 0; + + // TODO: Implementieren + + return chars; + } +} diff --git a/sources/src/main/java/pr2/streams/chars_3/test/CountLettersTest.java b/sources/src/main/java/pr2/streams/chars_3/test/CountLettersTest.java new file mode 100644 index 0000000..6e0ed8c --- /dev/null +++ b/sources/src/main/java/pr2/streams/chars_3/test/CountLettersTest.java @@ -0,0 +1,16 @@ +package pr2.streams.chars_3.test; + +import org.junit.jupiter.api.Test; +import pr2.streams.chars_3.CountLetters; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class CountLettersTest { + @Test + void testCount() { + // TODO: Methode count testen + } +} diff --git a/sources/src/main/java/pr2/streams/filter/FilterList.java b/sources/src/main/java/pr2/streams/filter/FilterList.java new file mode 100644 index 0000000..033b397 --- /dev/null +++ b/sources/src/main/java/pr2/streams/filter/FilterList.java @@ -0,0 +1,14 @@ +package pr2.streams.filter; + +import java.util.List; +import java.util.stream.Collectors; + +public class FilterList { + public static List filter(List liste) { + List result = null; + + // TODO: Daten filtern + + return result; + } +} diff --git a/sources/src/main/java/pr2/streams/filter/test/FilterListTest.java b/sources/src/main/java/pr2/streams/filter/test/FilterListTest.java new file mode 100644 index 0000000..a807aec --- /dev/null +++ b/sources/src/main/java/pr2/streams/filter/test/FilterListTest.java @@ -0,0 +1,25 @@ +package pr2.streams.filter.test; + +import org.junit.jupiter.api.Test; +import pr2.streams.filter.FilterList; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class FilterListTest { + + @Test + void testFilter() { + List liste = Arrays.asList( + "Hallo", "Welt", "Dampfschifffahrt", "Hundekuchen", + "Fiction", "Java", "Visual Basic", "Drucker"); + + List result = Arrays.asList( + "hallo", "dampfschifffahrt", "hundekuchen", + "fiction", "visual basic", "drucker"); + + assertEquals(result, FilterList.filter(liste)); + } +} diff --git a/sources/src/main/java/pr2/streams/interne_iteration/ComputerGame.java b/sources/src/main/java/pr2/streams/interne_iteration/ComputerGame.java new file mode 100644 index 0000000..ad9ef21 --- /dev/null +++ b/sources/src/main/java/pr2/streams/interne_iteration/ComputerGame.java @@ -0,0 +1,87 @@ +package pr2.streams.interne_iteration; + +/** + * Computerspiel. + */ +public class ComputerGame { + + /** + * Name. + */ + private final String name; + + /** + * Jahr. + */ + private final int year; + + /** + * Metacritic. + */ + private final int metaScore; + + /** + * Userscore. + */ + private final int userScore; + + /** + * Legt ein neues Spiel an. + * + * @param name Name des Spiels. + * @param year Jahr. + * @param metaScore Metacritic-Bewertung. + * @param userScore Nutzer-Bewertung. + */ + public ComputerGame(String name, int year, int metaScore, int userScore) { + this.name = name; + this.year = year; + this.metaScore = metaScore; + this.userScore = userScore; + } + + /** + * Name des Spiels. + * + * @return Der Name + */ + public String getName() { + return name; + } + + /** + * Jahr, in dem das Spiel erschienen ist bzw. kritisiert wurde. + * + * @return Das Erscheinungsjahr. + */ + public int getYear() { + return year; + } + + /** + * Die Metacritic-Bewertung (0-100). + * + * @return Die Bewertung. + */ + public int getMetaScore() { + return metaScore; + } + + /** + * Die Benutzerbewertung (0-100). + * + * @return Die Benutzerbewertung. + */ + public int getUserScore() { + return userScore; + } + + /** + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return String.format("%d;%s;%s;%d", metaScore, name, userScore / 10.0, + year); + } +} diff --git a/sources/src/main/java/pr2/streams/interne_iteration/GameDatabase.java b/sources/src/main/java/pr2/streams/interne_iteration/GameDatabase.java new file mode 100644 index 0000000..be8483f --- /dev/null +++ b/sources/src/main/java/pr2/streams/interne_iteration/GameDatabase.java @@ -0,0 +1,61 @@ +package pr2.streams.interne_iteration; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +/** + * Datenbank für die Spiele. + */ +public class GameDatabase { + + private final List games; + + /** + * Datenbank mit Spieleinfomrationen. + */ + @SuppressWarnings("deprecation") + public GameDatabase() { + games = new ArrayList<>(); + + try { + BufferedReader br = + new BufferedReader(new FileReader( + "games.txt")); + + String line; + + while ((line = br.readLine()) != null) { + String[] tokens = line.split(";"); + int metacritic = Integer.parseInt(tokens[0]); + String name = tokens[1]; + int userScore = (int) (Double.parseDouble(tokens[2]) * 10); + Date date = + new SimpleDateFormat("MMM d, yyyy", Locale.US).parse( + tokens[3]); + + games.add(new ComputerGame(name, date.getYear() + 1900, + metacritic, userScore)); + } + + br.close(); + } catch (IOException | ParseException ex) { + ex.printStackTrace(); + } + } + + /** + * Gibt die Liste der Spiele zurück. + * + * @return Liste der Spiele + */ + public List getGames() { + return new ArrayList<>(games); + } +} diff --git a/sources/src/main/java/pr2/streams/interne_iteration/ListGames.java b/sources/src/main/java/pr2/streams/interne_iteration/ListGames.java new file mode 100644 index 0000000..81ae41b --- /dev/null +++ b/sources/src/main/java/pr2/streams/interne_iteration/ListGames.java @@ -0,0 +1,35 @@ +package pr2.streams.interne_iteration; + +import java.util.stream.Stream; + +/** + * Spiele auflisten. + */ +public class ListGames { + + /** + * Hauptmethode. + * + * @param args Kommandozeilenargumente. + */ + public static void main(String[] args) { + GameDatabase db = new GameDatabase(); + + System.out.println("Interne Iterartion"); + System.out.println(); + Stream stream = db.getGames().stream(); + // TODO: Spiele per Lambda-Ausdruck auf der Konsole ausgeben + + System.out.println(); + System.out.println(); + System.out.println("Interne Iterartion mit Methodenreferenz"); + stream = db.getGames().stream(); + // TODO: Spiele per Methoden-Referenz auf der Konsole ausgeben + + System.out.println(); + System.out.println(); + System.out.println("Spiele aus 2012"); + stream = db.getGames().stream(); + // TODO: Spiele aus dem Jahr 2012 mit einem Lambda-Ausdruck ausgeben + } +} diff --git a/sources/src/main/java/pr2/streams/map_filter/ComputerGame.java b/sources/src/main/java/pr2/streams/map_filter/ComputerGame.java new file mode 100644 index 0000000..c85cb86 --- /dev/null +++ b/sources/src/main/java/pr2/streams/map_filter/ComputerGame.java @@ -0,0 +1,88 @@ +package pr2.streams.map_filter; + +/** + * Computerspiel. + */ +public class ComputerGame { + + /** + * Name. + */ + private final String name; + + /** + * Jahr. + */ + private final int year; + + /** + * Metacritic. + */ + private final int metaScore; + + /** + * Userscore. + */ + private final int userScore; + + /** + * Legt ein neues Spiel an. + * + * @param name Name des Spiels. + * @param year Jahr. + * @param metaScore Metacritic-Bewertung. + * @param userScore Nutzer-Bewertung. + */ + public ComputerGame(String name, int year, int metaScore, int userScore) { + + this.name = name; + this.year = year; + this.metaScore = metaScore; + this.userScore = userScore; + } + + /** + * Name des Spiels. + * + * @return Der Name + */ + public String getName() { + return name; + } + + /** + * Jahr, in dem das Spiel erschienen ist bzw. kritisiert wurde. + * + * @return Das Erscheinungsjahr. + */ + public int getYear() { + return year; + } + + /** + * Die Metacritic-Bewertung (0-100). + * + * @return Die Bewertung. + */ + public int getMetaScore() { + return metaScore; + } + + /** + * Die Benutzerbewertung (0-100). + * + * @return Die Benutzerbewertung. + */ + public int getUserScore() { + return userScore; + } + + /** + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return String.format("%d;%s;%s;%d", metaScore, name, userScore / 10.0, + year); + } +} diff --git a/sources/src/main/java/pr2/streams/map_filter/GameDatabase.java b/sources/src/main/java/pr2/streams/map_filter/GameDatabase.java new file mode 100644 index 0000000..863ff18 --- /dev/null +++ b/sources/src/main/java/pr2/streams/map_filter/GameDatabase.java @@ -0,0 +1,61 @@ +package pr2.streams.map_filter; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +/** + * Datenbank für die Spiele. + */ +public class GameDatabase { + + private final List games; + + /** + * Datenbank mit Spieleinfomrationen. + */ + @SuppressWarnings("deprecation") + public GameDatabase() { + games = new ArrayList<>(); + + try { + BufferedReader br = + new BufferedReader(new FileReader( + "games.txt")); + + String line; + + while ((line = br.readLine()) != null) { + String[] tokens = line.split(";"); + int metacritic = Integer.parseInt(tokens[0]); + String name = tokens[1]; + int userScore = (int) (Double.parseDouble(tokens[2]) * 10); + Date date = + new SimpleDateFormat("MMM d, yyyy", Locale.US).parse( + tokens[3]); + + games.add(new ComputerGame(name, date.getYear() + 1900, + metacritic, userScore)); + } + + br.close(); + } catch (IOException | ParseException ex) { + ex.printStackTrace(); + } + } + + /** + * Gibt die Liste der Spiele zurück. + * + * @return Liste der Spiele + */ + public List getGames() { + return new ArrayList<>(games); + } +} diff --git a/sources/src/main/java/pr2/streams/map_filter/MapFilterGames.java b/sources/src/main/java/pr2/streams/map_filter/MapFilterGames.java new file mode 100644 index 0000000..5982199 --- /dev/null +++ b/sources/src/main/java/pr2/streams/map_filter/MapFilterGames.java @@ -0,0 +1,30 @@ +package pr2.streams.map_filter; + +import java.util.List; +import java.util.Optional; +import java.util.stream.Stream; + +/** + * Spiele auflisten. + */ +public class MapFilterGames { + + /** + * Hauptmethode. + * + * @param args Kommandozeilenargumente. + */ + public static void main(String[] args) { + GameDatabase db = new GameDatabase(); + List games = db.getGames(); + + // Alle Spiele von 2010 mit einem Metascore >= 80 + // und einem User-Score >= 80 + Stream stream = games.stream(); + // TODO: Spiele filtern + + // Größter und kleinster Unterschied + stream = games.stream(); + // TODO: Daten extrahieren + } +} diff --git a/sources/src/main/java/pr2/streams/reduce/Squarer.java b/sources/src/main/java/pr2/streams/reduce/Squarer.java new file mode 100644 index 0000000..e605368 --- /dev/null +++ b/sources/src/main/java/pr2/streams/reduce/Squarer.java @@ -0,0 +1,21 @@ +package pr2.streams.reduce; + +import java.util.List; + +import static java.util.stream.Collectors.summingInt; + +public class Squarer { + public static int mitMap(List zahlen) { + //= Arrays.asList(1, 5, 8, 9, 12, 10, 3); + int mitMap = 0; + + // TODO: Implementieren + return mitMap; + } + + public static int ohneMap(List zahlen) { + int ohneMap = 0; + // TODO: Implementieren + return ohneMap; + } +} diff --git a/sources/src/main/java/pr2/streams/reduce/test/SquarerTest.java b/sources/src/main/java/pr2/streams/reduce/test/SquarerTest.java new file mode 100644 index 0000000..638f9c2 --- /dev/null +++ b/sources/src/main/java/pr2/streams/reduce/test/SquarerTest.java @@ -0,0 +1,26 @@ +package pr2.streams.reduce.test; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import pr2.streams.reduce.Squarer; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class SquarerTest { + + @Test + void testMitMap() { + List l = Arrays.asList(1, 5, 8, 9, 12, 10, 3); + Assertions.assertEquals(424, Squarer.mitMap(l)); + } + + @Test + void testOhneMap() { + List l = Arrays.asList(1, 5, 8, 9, 12, 10, 3); + assertEquals(424, Squarer.ohneMap(l)); + } + +} diff --git a/sources/src/main/java/pr2/streams/reduce_critics/ComputerGame.java b/sources/src/main/java/pr2/streams/reduce_critics/ComputerGame.java new file mode 100644 index 0000000..4410562 --- /dev/null +++ b/sources/src/main/java/pr2/streams/reduce_critics/ComputerGame.java @@ -0,0 +1,88 @@ +package pr2.streams.reduce_critics; + +/** + * Computerspiel. + */ +public class ComputerGame { + + /** + * Name. + */ + private final String name; + + /** + * Jahr. + */ + private final int year; + + /** + * Metacritic. + */ + private final int metaScore; + + /** + * Userscore. + */ + private final int userScore; + + /** + * Legt ein neues Spiel an. + * + * @param name Name des Spiels. + * @param year Jahr. + * @param metaScore Metacritic-Bewertung. + * @param userScore Nutzer-Bewertung. + */ + public ComputerGame(String name, int year, int metaScore, int userScore) { + + this.name = name; + this.year = year; + this.metaScore = metaScore; + this.userScore = userScore; + } + + /** + * Name des Spiels. + * + * @return Der Name + */ + public String getName() { + return name; + } + + /** + * Jahr, in dem das Spiel erschienen ist bzw. kritisiert wurde. + * + * @return Das Erscheinungsjahr. + */ + public int getYear() { + return year; + } + + /** + * Die Metacritic-Bewertung (0-100). + * + * @return Die Bewertung. + */ + public int getMetaScore() { + return metaScore; + } + + /** + * Die Benutzerbewertung (0-100). + * + * @return Die Benutzerbewertung. + */ + public int getUserScore() { + return userScore; + } + + /** + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return String.format("%d;%s;%s;%d", metaScore, name, userScore / 10.0, + year); + } +} diff --git a/sources/src/main/java/pr2/streams/reduce_critics/GameDatabase.java b/sources/src/main/java/pr2/streams/reduce_critics/GameDatabase.java new file mode 100644 index 0000000..771b8d4 --- /dev/null +++ b/sources/src/main/java/pr2/streams/reduce_critics/GameDatabase.java @@ -0,0 +1,61 @@ +package pr2.streams.reduce_critics; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Locale; + +/** + * Datenbank für die Spiele. + */ +public class GameDatabase { + + private final List games; + + /** + * Datenbank mit Spieleinfomrationen. + */ + @SuppressWarnings("deprecation") + public GameDatabase() { + games = new ArrayList<>(); + + try { + BufferedReader br = + new BufferedReader( + new FileReader("games.txt")); + + String line; + + while ((line = br.readLine()) != null) { + String[] tokens = line.split(";"); + int metacritic = Integer.parseInt(tokens[0]); + String name = tokens[1]; + int userScore = (int) (Double.parseDouble(tokens[2]) * 10); + Date date = + new SimpleDateFormat("MMM d, yyyy", Locale.US).parse( + tokens[3]); + + games.add(new ComputerGame(name, date.getYear() + 1900, + metacritic, userScore)); + } + + br.close(); + } catch (IOException | ParseException ex) { + ex.printStackTrace(); + } + } + + /** + * Gibt die Liste der Spiele zurück. + * + * @return Liste der Spiele + */ + public List getGames() { + return new ArrayList<>(games); + } +} diff --git a/sources/src/main/java/pr2/streams/reduce_critics/MapReduceGames.java b/sources/src/main/java/pr2/streams/reduce_critics/MapReduceGames.java new file mode 100644 index 0000000..5106cc3 --- /dev/null +++ b/sources/src/main/java/pr2/streams/reduce_critics/MapReduceGames.java @@ -0,0 +1,32 @@ +package pr2.streams.reduce_critics; + +import java.util.List; +import java.util.stream.Stream; + +/** + * Spiele auflisten. + */ +public class MapReduceGames { + + /** + * Hauptmethode. + * + * @param args Kommandozeilenargumente. + */ + public static void main(String[] args) { + GameDatabase db = new GameDatabase(); + List games = db.getGames(); + + // Abweichung des Metascores von dem Userscore + // als quadratisches Mittel berechnen. + Stream stream = games.stream(); + + // TODO: Berechnung einfügen + + // Abweichung als arithmetisches Mittel + stream = games.stream(); + // TODO: Berechnung einfügen + + // TODO: Ergebnis ausgeben + } +} diff --git a/sources/src/main/java/pr2/streams/summieren/SumUp.java b/sources/src/main/java/pr2/streams/summieren/SumUp.java new file mode 100644 index 0000000..b6916ed --- /dev/null +++ b/sources/src/main/java/pr2/streams/summieren/SumUp.java @@ -0,0 +1,10 @@ +package pr2.streams.summieren; + +import java.util.stream.Stream; + +public class SumUp { + public static int sumUp(Stream numbers) { + int result = 0; + return result; + } +} diff --git a/sources/src/main/java/pr2/streams/summieren/test/SumUpTest.java b/sources/src/main/java/pr2/streams/summieren/test/SumUpTest.java new file mode 100644 index 0000000..bec5b46 --- /dev/null +++ b/sources/src/main/java/pr2/streams/summieren/test/SumUpTest.java @@ -0,0 +1,18 @@ +package pr2.streams.summieren.test; + +import org.junit.jupiter.api.Test; +import pr2.streams.summieren.SumUp; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class SumUpTest { + + @Test + void testSum() { + List l = Arrays.asList(1, 5, 8, 9, 12, 10, 3); + assertEquals(48, SumUp.sumUp(l.stream())); + } +} diff --git a/sources/src/main/java/pr2/streams/word_count/WordCount.java b/sources/src/main/java/pr2/streams/word_count/WordCount.java new file mode 100644 index 0000000..080139e --- /dev/null +++ b/sources/src/main/java/pr2/streams/word_count/WordCount.java @@ -0,0 +1,16 @@ +package pr2.streams.word_count; + +import java.util.List; + +import static java.util.stream.Collectors.groupingBy; +import static java.util.stream.Collectors.toList; + +public class WordCount { + public static List count(List liste) { + List result = null; + + // TODO: Implementieren + + return result; + } +} diff --git a/sources/src/main/java/pr2/streams/word_count/test/WordCountTest.java b/sources/src/main/java/pr2/streams/word_count/test/WordCountTest.java new file mode 100644 index 0000000..43dbcf8 --- /dev/null +++ b/sources/src/main/java/pr2/streams/word_count/test/WordCountTest.java @@ -0,0 +1,21 @@ +package pr2.streams.word_count.test; + +import org.junit.jupiter.api.Test; +import pr2.streams.word_count.WordCount; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class WordCountTest { + + @Test + void testWordCount() { + List liste = Arrays.asList("A", "A", "B", "B", "B", "C", + "D", "D", "E", "E", "E", "F"); + + assertEquals(Arrays.asList("A->2", "B->3", "C->1", "D->2", + "E->3", "F->1"), WordCount.count(liste)); + } +} diff --git a/sources/src/main/java/pr2/strukturierung/information_hiding/Rechner.java b/sources/src/main/java/pr2/strukturierung/information_hiding/Rechner.java new file mode 100644 index 0000000..2ed0289 --- /dev/null +++ b/sources/src/main/java/pr2/strukturierung/information_hiding/Rechner.java @@ -0,0 +1,51 @@ +package pr2.strukturierung.information_hiding; + +/** + * Ein einfacher Taschenrechner. + */ +public class Rechner { + /** Ergebnis des Taschenrechners. */ + public double wert; + + /** Speicher des Taschenrechners. */ + public double speicher; + + /** + * Addiert zwei Werte und gibt das Ergebnis zurück. + * + * @param a erster Operand. + * @param b zweiter Operand. + * @return das Ergebnis. + */ + public void addiere(double a, double b) { + wert = a + b; + } + + /** + * Subtrahiert zwei Werte und gibt das Ergebnis zurück. + * + * @param a erster Operand. + * @param b zweiter Operand. + * @return das Ergebnis. + */ + public void subtrahiere(double a, double b) { + wert = a - b; + } + + /** + * Multipliziert zwei Werte und gibt das Ergebnis zurück. + * + * @param a erster Operand. + * @param b zweiter Operand. + * @return das Ergebnis. + */ + public void multipliziere(double a, double b) { + wert = a * b; + } + /** + * Speichert den aktuellen Wert in der Variable {@speicher}. + */ + public void speichern() { + speicher = wert; + } +} diff --git a/sources/src/main/java/pr2/strukturierung/information_hiding/test/RechnerTest.java b/sources/src/main/java/pr2/strukturierung/information_hiding/test/RechnerTest.java new file mode 100644 index 0000000..852894f --- /dev/null +++ b/sources/src/main/java/pr2/strukturierung/information_hiding/test/RechnerTest.java @@ -0,0 +1,38 @@ +package pr2.strukturierung.information_hiding.test; + +import org.junit.jupiter.api.Test; +import pr2.strukturierung.information_hiding.Rechner; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * Unit-Test für den Rechner. + */ +public class RechnerTest { + + /** + * Testet alle Grundoperationen des Rechners. + */ + @Test + void testRechner() { + Rechner r = new Rechner(); + + // 2 + 2 = 4 + r.addiere(2.0, 2.0); + assertEquals(4.0, r.wert, 0.0001); + + // 3 - 1 = 2 + r.subtrahiere(3, 1); + assertEquals(2.0, r.wert, 0.0001); + + // 3 * 3 = 9 + r.multipliziere(3, 3); + assertEquals(9.0, r.wert, 0.0001); + + // 2 + 2 * 2 = 6 + r.multipliziere(2, 2); + r.speichern(); + r.addiere(2, r.speicher); + assertEquals(6.0, r.wert, 0.0001); + } +} diff --git a/sources/src/main/java/pr2/strukturierung/jars_einbinden/PieChart.java b/sources/src/main/java/pr2/strukturierung/jars_einbinden/PieChart.java new file mode 100644 index 0000000..c84afac --- /dev/null +++ b/sources/src/main/java/pr2/strukturierung/jars_einbinden/PieChart.java @@ -0,0 +1,59 @@ +package pr2.strukturierung.jars_einbinden; + +import javax.swing.JFrame; + +// TODO: Einkommentieren +//import org.jfree.chart.ChartFactory; +//import org.jfree.chart.ChartPanel; +//import org.jfree.chart.JFreeChart; +//import org.jfree.chart.plot.PiePlot3D; +//import org.jfree.data.general.DefaultPieDataset; + +/** + * Fenster mit der Torten-Grafik. + */ +public final class PieChart { + + /** + * Konstruktor. + */ + private PieChart() { + // keine Objekte benötigt. + } + + /** + * Main-Methode. + * + * @param args Kommandozeilen-Argumente + */ + public static void main(String[] args) { + +// TODO: Einkommentieren +// final String title = "Welches ist Euer Lieblingsspiel?"; +// +// JFrame jframe = new JFrame(title); +// jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); +// +// DefaultPieDataset dataset = new DefaultPieDataset(); +// dataset.setValue("GTA V", 20); +// dataset.setValue("Fortnite", 30); +// dataset.setValue("Elden Ring", 15); +// dataset.setValue("Horizon Forbidden West", 35); +// +// JFreeChart chart = ChartFactory.createPieChart3D( +// title, +// dataset, +// true, +// true, +// false); +// +// PiePlot3D plot = (PiePlot3D) chart.getPlot(); +// plot.setForegroundAlpha(0.6f); +// +// ChartPanel chartPanel = new ChartPanel(chart); +// chartPanel.setPreferredSize(new java.awt.Dimension(500, 270)); +// jframe.setContentPane(chartPanel); +// jframe.pack(); +// jframe.setVisible(true); + } +} diff --git a/sources/src/main/java/pr2/threads/fakultaet/FakultaetParallel.java b/sources/src/main/java/pr2/threads/fakultaet/FakultaetParallel.java new file mode 100644 index 0000000..bf1ff79 --- /dev/null +++ b/sources/src/main/java/pr2/threads/fakultaet/FakultaetParallel.java @@ -0,0 +1,20 @@ +package pr2.threads.fakultaet; + +public class FakultaetParallel { + + private long[] ergebnisse; + + // TODO: Implementieren + + public long[] calculate(int bis) { + + if ((bis <= 0) || (bis > 20)) { + throw new IllegalArgumentException("0 < n <= 20"); + } + + ergebnisse = new long[bis + 1]; + + + return ergebnisse.clone(); + } +} diff --git a/sources/src/main/java/pr2/threads/fakultaet/Main.java b/sources/src/main/java/pr2/threads/fakultaet/Main.java new file mode 100644 index 0000000..c0c7449 --- /dev/null +++ b/sources/src/main/java/pr2/threads/fakultaet/Main.java @@ -0,0 +1,7 @@ +package pr2.threads.fakultaet; + +public class Main { + public static void main(String[] args) { + // TODO: Implementieren + } +} diff --git a/sources/src/main/java/pr2/threads/interrupt/ThreadsBeenden.java b/sources/src/main/java/pr2/threads/interrupt/ThreadsBeenden.java new file mode 100644 index 0000000..db41f40 --- /dev/null +++ b/sources/src/main/java/pr2/threads/interrupt/ThreadsBeenden.java @@ -0,0 +1,8 @@ +package pr2.threads.interrupt; + +public class ThreadsBeenden { + + public static void main(String[] args) throws InterruptedException { + // TODO: Implementieren + } +} diff --git a/sources/src/main/java/pr2/threads/notifier/Main.java b/sources/src/main/java/pr2/threads/notifier/Main.java new file mode 100644 index 0000000..bce2ee6 --- /dev/null +++ b/sources/src/main/java/pr2/threads/notifier/Main.java @@ -0,0 +1,13 @@ +package pr2.threads.notifier; + +public class Main { + + private static final int SLEEP_TIME = 200; + + public static void main(String[] args) { + + final Notifier notifier = new Notifier(); + + // TODO: Implementieren + } +} diff --git a/sources/src/main/java/pr2/threads/notifier/Notifier.java b/sources/src/main/java/pr2/threads/notifier/Notifier.java new file mode 100644 index 0000000..1684a4e --- /dev/null +++ b/sources/src/main/java/pr2/threads/notifier/Notifier.java @@ -0,0 +1,8 @@ +package pr2.threads.notifier; + +public class Notifier { + + private String theString; + + // TODO: Implementieren +} diff --git a/sources/src/main/java/pr2/threads/paralleldrucker/ParallelDrucker.java b/sources/src/main/java/pr2/threads/paralleldrucker/ParallelDrucker.java new file mode 100644 index 0000000..b1a30b1 --- /dev/null +++ b/sources/src/main/java/pr2/threads/paralleldrucker/ParallelDrucker.java @@ -0,0 +1,8 @@ +package pr2.threads.paralleldrucker; + +public class ParallelDrucker { + + public static void main(String[] args) { + // TODO: Implementieren + } +} diff --git a/sources/src/main/java/pr2/threads/race_condition/Main.java b/sources/src/main/java/pr2/threads/race_condition/Main.java new file mode 100644 index 0000000..ee66523 --- /dev/null +++ b/sources/src/main/java/pr2/threads/race_condition/Main.java @@ -0,0 +1,41 @@ +package pr2.threads.race_condition; + +import java.util.Arrays; +import java.util.List; + +/** + * Haupklasse. + */ +public class Main { + + /** + * Start-Methode. + * + * @param args Kommandozeilenargumente. + */ + public static void main(String[] args) { + + NumberList numbers = new NumberList(); + + // Threads anlegen + List threads = Arrays.asList( + new Thread(new NumberIncrementer(100000, numbers)), + new Thread(new NumberIncrementer(100000, numbers)), + new Thread(new NumberIncrementer(100000, numbers))); + + // Threads starten + threads.forEach(Thread::start); + + // Auf Ende der Threads warten + threads.forEach(t -> { + try { + t.join(); + } catch (InterruptedException e) { + // ignore + } + }); + + // Zahlen überprüfen + numbers.check(); + } +} diff --git a/sources/src/main/java/pr2/threads/race_condition/NumberIncrementer.java b/sources/src/main/java/pr2/threads/race_condition/NumberIncrementer.java new file mode 100644 index 0000000..ba6860c --- /dev/null +++ b/sources/src/main/java/pr2/threads/race_condition/NumberIncrementer.java @@ -0,0 +1,40 @@ +package pr2.threads.race_condition; + +/** + * Runnable, dass Zahlen inkrementieren kann. + */ +public class NumberIncrementer implements Runnable { + + /** + * Zahl, bis zu der gearbeitet werden soll. + */ + private final int boundary; + + /** + * Speicher für die generierten Zahlen. + */ + private final NumberList numberList; + + /** + * Legt ein neues Objekt an. + * + * @param boundary Obergrenze für die Generierung + * @param numberList Speicher für die Zahlen + */ + public NumberIncrementer(int boundary, NumberList numberList) { + this.boundary = boundary; + this.numberList = numberList; + } + + /** + * @see java.lang.Runnable#run() + */ + @Override + public void run() { + for (int i = 0; i < boundary; i++) { + int lastNum = numberList.getLastNumber(); + lastNum++; + numberList.add(lastNum); + } + } +} diff --git a/sources/src/main/java/pr2/threads/race_condition/NumberList.java b/sources/src/main/java/pr2/threads/race_condition/NumberList.java new file mode 100644 index 0000000..c5ba3f5 --- /dev/null +++ b/sources/src/main/java/pr2/threads/race_condition/NumberList.java @@ -0,0 +1,60 @@ +package pr2.threads.race_condition; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * Einfache Sammlung von Zahlen. + */ +public class NumberList { + + /** + * Die gespeicherten Zahlen. + */ + private final List numbers = + Collections.synchronizedList(new ArrayList<>()); + + /** + * Die letzte Zahl, die gespeichert wurde. + */ + private int lastNumber; + + /** + * Liefert die letzte Zahl, die gespeichert wurde. + * + * @return letzte Zahl. + */ + public int getLastNumber() { + return lastNumber; + } + + /** + * Fügt eine neue Zahl hinzu. + * + * @param number die zu speichernde Zahl. + */ + public void add(int number) { + lastNumber = number; + numbers.add(number); + } + + /** + * Überprüft, ob die Zahlen fortlaufend sind. + * + * @throws IllegalArgumentException wenn die Zahlen nicht fortlaufend sind + */ + public void check() { + + int number = 0; + + for (Integer integer : numbers) { + number++; + if (integer != number) { + throw new IllegalStateException( + "Zahlen nicht fortlaufend!" + " erwartet: " + number + + " gefunden: " + integer); + } + } + } +} diff --git a/sources/src/main/java/pr2/threads/stack_heap/ThreadProblem.java b/sources/src/main/java/pr2/threads/stack_heap/ThreadProblem.java new file mode 100644 index 0000000..ed89ffa --- /dev/null +++ b/sources/src/main/java/pr2/threads/stack_heap/ThreadProblem.java @@ -0,0 +1,8 @@ +package pr2.threads.stack_heap; + +public class ThreadProblem { + + private int i = 0; + + // TODO: Implementieren +} diff --git a/sources/src/main/java/pr2/threads/synchronize/Synchronizer.java b/sources/src/main/java/pr2/threads/synchronize/Synchronizer.java new file mode 100644 index 0000000..70b46a3 --- /dev/null +++ b/sources/src/main/java/pr2/threads/synchronize/Synchronizer.java @@ -0,0 +1,14 @@ +package pr2.threads.synchronize; + +public class Synchronizer { + + private int i = 0; + + public static void main(String[] args) { + + } + + public synchronized void addAndPrint() { + System.out.println(i++); + } +} diff --git a/sources/src/main/java/pr2/threads/timer/FakultaetTimer.java b/sources/src/main/java/pr2/threads/timer/FakultaetTimer.java new file mode 100644 index 0000000..9293c3e --- /dev/null +++ b/sources/src/main/java/pr2/threads/timer/FakultaetTimer.java @@ -0,0 +1,21 @@ +/* (c) 2010 Thomas Smits */ +package pr2.threads.timer; + +import java.util.Timer; +import java.util.TimerTask; + +public class FakultaetTimer { + + private long fact(long n) { + return (n == 0 ? 1 : n * fact(n - 1)); + } + + public long[] calculate() { + + final long[] ergebnisse = new long[21]; + + // TODO: Implementieren + + return ergebnisse; + } +} diff --git a/sources/src/main/java/pr2/threads/timer/Main.java b/sources/src/main/java/pr2/threads/timer/Main.java new file mode 100644 index 0000000..0162793 --- /dev/null +++ b/sources/src/main/java/pr2/threads/timer/Main.java @@ -0,0 +1,14 @@ +package pr2.threads.timer; + +public class Main { + + public static void main(String[] args) { + FakultaetTimer ft = new FakultaetTimer(); + long[] result = ft.calculate(); + + for (int i = 0; i < result.length; i++) { + long ergebnis = result[i]; + System.out.printf("fact(%d) = %d%n", i, ergebnis); + } + } +} diff --git a/sources/src/main/java/pr2/vererbung/finals/A.java b/sources/src/main/java/pr2/vererbung/finals/A.java new file mode 100644 index 0000000..de42ed8 --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/finals/A.java @@ -0,0 +1,32 @@ +package pr2.vererbung.finals; + +/** + * A-Klasse. + */ +public class A { + + /** + * Konstante für die Vorzeichenumkehr. + */ + public static int KONSTANTE = 100; + + /** + * Addiert zwei Zahlen. Wenn das Ergebnis größer ist als + * der Wert von KONSTANTE, dann wird das + * Vorzeichen umgekehrt. + * + * @param a erster Wert + * @param b zweiter Wert + * @return Ergebnis + */ + public int add(int a, int b) { + int result = a + b; + + if (result > KONSTANTE) { + return result * -1; + } + else { + return result; + } + } +} diff --git a/sources/src/main/java/pr2/vererbung/finals/B.java b/sources/src/main/java/pr2/vererbung/finals/B.java new file mode 100644 index 0000000..52dc4ac --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/finals/B.java @@ -0,0 +1,22 @@ +package pr2.vererbung.finals; + +/** + * B-Klasse. + */ + public class B extends A { + + /** + * Subtrahiert zwei Zahlen. Wenn das Ergebnis kleiner ist als + * der Wert von KONSTANTE, dann wird das + * Vorzeichen umgekehrt. + * + * @param a erster Wert + * @param b zweiter Wert + * @return Ergebnis + */ + public static int sub(int a, int b) { + int result = a + b; + + return (result < KONSTANTE) ? (result * -1) : (result); + } +} diff --git a/sources/src/main/java/pr2/vererbung/geometrie1/Figur.java b/sources/src/main/java/pr2/vererbung/geometrie1/Figur.java new file mode 100644 index 0000000..3ab7f2a --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/geometrie1/Figur.java @@ -0,0 +1,5 @@ +package pr2.vererbung.geometrie1; + +public class Figur { + +} diff --git a/sources/src/main/java/pr2/vererbung/geometrie1/Main.java b/sources/src/main/java/pr2/vererbung/geometrie1/Main.java new file mode 100644 index 0000000..8b18fce --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/geometrie1/Main.java @@ -0,0 +1,8 @@ +package pr2.vererbung.geometrie1; + +public class Main { + + public static void main(String[] args) { + // TODO: Klassen nutzen + } +} diff --git a/sources/src/main/java/pr2/vererbung/geometrie1/Rechteck.java b/sources/src/main/java/pr2/vererbung/geometrie1/Rechteck.java new file mode 100644 index 0000000..0415332 --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/geometrie1/Rechteck.java @@ -0,0 +1,5 @@ +package pr2.vererbung.geometrie1; + + public class Rechteck { + +} diff --git a/sources/src/main/java/pr2/vererbung/geometrie2/Figur.java b/sources/src/main/java/pr2/vererbung/geometrie2/Figur.java new file mode 100644 index 0000000..6243d25 --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/geometrie2/Figur.java @@ -0,0 +1,14 @@ +package pr2.vererbung.geometrie2; + +public class Figur { + + protected int flaeche; + + protected Figur() { + /* nichts zu tun */ + } + + public int getFlaeche() { + return flaeche; + } +} diff --git a/sources/src/main/java/pr2/vererbung/geometrie2/Main.java b/sources/src/main/java/pr2/vererbung/geometrie2/Main.java new file mode 100644 index 0000000..7b21a64 --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/geometrie2/Main.java @@ -0,0 +1,8 @@ +package pr2.vererbung.geometrie2; + +public class Main { + + public static void main(String[] args) { + // TODO: Klassen nutzen + } +} diff --git a/sources/src/main/java/pr2/vererbung/geometrie2/Rechteck.java b/sources/src/main/java/pr2/vererbung/geometrie2/Rechteck.java new file mode 100644 index 0000000..64bf135 --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/geometrie2/Rechteck.java @@ -0,0 +1,9 @@ +package pr2.vererbung.geometrie2; + + +public class Rechteck extends Figur { + + public Rechteck(int breite, int hoehe) { + flaeche = breite * hoehe; + } +} diff --git a/sources/src/main/java/pr2/vererbung/geometrie3/Dreieck.java b/sources/src/main/java/pr2/vererbung/geometrie3/Dreieck.java new file mode 100644 index 0000000..7c0bbcf --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/geometrie3/Dreieck.java @@ -0,0 +1,5 @@ +package pr2.vererbung.geometrie3; + + public class Dreieck { + +} diff --git a/sources/src/main/java/pr2/vererbung/geometrie3/Figur.java b/sources/src/main/java/pr2/vererbung/geometrie3/Figur.java new file mode 100644 index 0000000..2f99a06 --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/geometrie3/Figur.java @@ -0,0 +1,16 @@ +package pr2.vererbung.geometrie3; + +public class Figur { + + private int flaeche; + + + protected Figur(int flaeche) { + this.flaeche = flaeche; + } + + public int getFlaeche() { + return flaeche; + } + +} diff --git a/sources/src/main/java/pr2/vererbung/geometrie3/Gerade.java b/sources/src/main/java/pr2/vererbung/geometrie3/Gerade.java new file mode 100644 index 0000000..67499d1 --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/geometrie3/Gerade.java @@ -0,0 +1,5 @@ +package pr2.vererbung.geometrie3; + + public class Gerade { + +} diff --git a/sources/src/main/java/pr2/vererbung/geometrie3/Main.java b/sources/src/main/java/pr2/vererbung/geometrie3/Main.java new file mode 100644 index 0000000..281e2c6 --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/geometrie3/Main.java @@ -0,0 +1,7 @@ +package pr2.vererbung.geometrie3; + +public class Main { + + public static void main(String[] args) { + } +} diff --git a/sources/src/main/java/pr2/vererbung/geometrie3/Quadrat.java b/sources/src/main/java/pr2/vererbung/geometrie3/Quadrat.java new file mode 100644 index 0000000..0bc45c2 --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/geometrie3/Quadrat.java @@ -0,0 +1,5 @@ +package pr2.vererbung.geometrie3; + + public class Quadrat { + +} diff --git a/sources/src/main/java/pr2/vererbung/geometrie3/Rechteck.java b/sources/src/main/java/pr2/vererbung/geometrie3/Rechteck.java new file mode 100644 index 0000000..a02354c --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/geometrie3/Rechteck.java @@ -0,0 +1,8 @@ +package pr2.vererbung.geometrie3; + +public class Rechteck extends Figur { + + public Rechteck(int breite, int hoehe) { + super(breite * hoehe); + } +} diff --git a/sources/src/main/java/pr2/vererbung/konstruktoren/Nachtelf.java b/sources/src/main/java/pr2/vererbung/konstruktoren/Nachtelf.java new file mode 100644 index 0000000..2d651fd --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/konstruktoren/Nachtelf.java @@ -0,0 +1,28 @@ +package pr2.vererbung.konstruktoren; + +/** + * Nachtelf aus der Allianz. + */ + public class Nachtelf { + + /** + * Standardmäßige Stärke der Fähigkeit Naturwiderstand. + */ + public static final int STANDARD_NATURWIDERSTAND = 5; + + /** + * Fähigkeit zum Widerstand gegen Naturmagie. + */ + private int naturwiderstand; + + // TODO: Konstruktoren implementieren + + /** + * Stärke des Naturwiderstandes. + * + * @return the naturwiderstand + */ + public int getNaturwiderstand() { + return naturwiderstand; + } +} diff --git a/sources/src/main/java/pr2/vererbung/konstruktoren/Untoter.java b/sources/src/main/java/pr2/vererbung/konstruktoren/Untoter.java new file mode 100644 index 0000000..214f654 --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/konstruktoren/Untoter.java @@ -0,0 +1,28 @@ +package pr2.vererbung.konstruktoren; + +/** + * Untoter aus der Horde. + */ + public class Untoter { + + /** + * Standardmäßige Stärke der Fähigkeit zur Unterwasseratmung. + */ + public static final int STANDARD_UNTERWASSERATMUNG = 10; + + /** + * Fähigkeit zur Atmung unter Wasser. + */ + private int unterwasseratmung; + + // TODO: Konstruktoren implementieren + + /** + * Fähigkeit zur Unterwasseratmnung. + * + * @return the Stärke der Fähigkeit. + */ + public int getUnterwasseratmung() { + return unterwasseratmung; + } +} diff --git a/sources/src/main/java/pr2/vererbung/konstruktoren/Wesen.java b/sources/src/main/java/pr2/vererbung/konstruktoren/Wesen.java new file mode 100644 index 0000000..0287b62 --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/konstruktoren/Wesen.java @@ -0,0 +1,30 @@ +package pr2.vererbung.konstruktoren; + +/** + * Basisklasse für Spielfiguren. + */ +public class Wesen { + + /** + * Name der Spielfigur. + */ + private final String name; + + /** + * Legt eine neue Spielfigur an. + * + * @param name Name der Figur. + */ + public Wesen(String name) { + this.name = name; + } + + /** + * Gibt den Namen der Spielfigur zurück. + * + * @return Name der Spielfigur. + */ + public String getName() { + return name; + } +} diff --git a/sources/src/main/java/pr2/vererbung/konstruktoren/test/WesenTest.java b/sources/src/main/java/pr2/vererbung/konstruktoren/test/WesenTest.java new file mode 100644 index 0000000..1732f9e --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/konstruktoren/test/WesenTest.java @@ -0,0 +1,49 @@ +package pr2.vererbung.konstruktoren.test; + +import org.junit.jupiter.api.Test; +import pr2.vererbung.konstruktoren.Nachtelf; +import pr2.vererbung.konstruktoren.Untoter; +import pr2.vererbung.konstruktoren.Wesen; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** + * Test für die Aufgabe. + */ +public class WesenTest { + + /** + * Testet den Nachtelf. + */ + @Test + void testNachtelf() { +// TODO: Einkommentieren +// assertTrue(new Nachtelf("") instanceof Wesen, +// "Nachtelf erbt nicht " + "von Wesen"); +// +// assertEquals(Nachtelf.STANDARD_NATURWIDERSTAND, +// new Nachtelf("").getNaturwiderstand()); +// +// assertEquals(120, new Nachtelf("", 120).getNaturwiderstand()); +// +// assertEquals("Hugo", new Nachtelf("Hugo").getName()); + } + + /** + * Testet den Untoten. + */ + @Test + void testUntoten() { +// TODO: Einkommentieren +// assertTrue(new Untoter("") instanceof Wesen, +// "Untoter erbt nicht von " + "Wesen"); +// +// assertEquals(Untoter.STANDARD_UNTERWASSERATMUNG, +// new Untoter("").getUnterwasseratmung()); +// +// assertEquals(120, new Untoter("", 120).getUnterwasseratmung()); +// +// assertEquals("Hugo", new Untoter("Hugo").getName()); + } +} diff --git a/sources/src/main/java/pr2/vererbung/polymorphie/Affe.java b/sources/src/main/java/pr2/vererbung/polymorphie/Affe.java new file mode 100644 index 0000000..612e4ee --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/polymorphie/Affe.java @@ -0,0 +1,16 @@ +package pr2.vererbung.polymorphie; + +/** + * Ein Affe im Zoo. + */ +public class Affe extends ZooTier { + + /** + * Legt einen neuen Affen an. + * + * @param name Name des Affen. + */ + public Affe(String name) { + super(name); + } +} diff --git a/sources/src/main/java/pr2/vererbung/polymorphie/Futterstelle.java b/sources/src/main/java/pr2/vererbung/polymorphie/Futterstelle.java new file mode 100644 index 0000000..c5cc781 --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/polymorphie/Futterstelle.java @@ -0,0 +1,35 @@ +package pr2.vererbung.polymorphie; + +/** + * Fütterung der Tiere. + */ +public class Futterstelle { + + + /** + * Füttert den Affen. + * + * @param affe Affe, der gefüttert werden soll. + */ + public void gibFutter(Affe affe) { + affe.fuettern(); + } + + /** + * Füttert den Gorilla. + * + * @param gorilla Gorilla, der gefüttert werden soll. + */ + public void gibFutter(Gorilla gorilla) { + gorilla.fuettern(); + } + + /** + * Füttert die Giraffe. + * + * @param giraffe Giraffe, die gefüttert werden soll. + */ + public void gibFutter(Giraffe giraffe) { + giraffe.fuettern(); + } +} diff --git a/sources/src/main/java/pr2/vererbung/polymorphie/Giraffe.java b/sources/src/main/java/pr2/vererbung/polymorphie/Giraffe.java new file mode 100644 index 0000000..1c4cf69 --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/polymorphie/Giraffe.java @@ -0,0 +1,16 @@ +package pr2.vererbung.polymorphie; + +/** + * Eine Giraffe im Zoo. + */ +public class Giraffe extends ZooTier { + + /** + * Legt einen neue Giraffe an. + * + * @param name Name der Giraffe. + */ + public Giraffe(String name) { + super(name); + } +} diff --git a/sources/src/main/java/pr2/vererbung/polymorphie/Gorilla.java b/sources/src/main/java/pr2/vererbung/polymorphie/Gorilla.java new file mode 100644 index 0000000..fd6f23d --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/polymorphie/Gorilla.java @@ -0,0 +1,16 @@ +package pr2.vererbung.polymorphie; + +/** + * Ein Gorilla. + */ +public class Gorilla extends Affe { + + /** + * Legt einen neuen Gorilla an. + * + * @param name Name des Gorilla. + */ + public Gorilla(String name) { + super(name); + } +} diff --git a/sources/src/main/java/pr2/vererbung/polymorphie/ZooSimulation.java b/sources/src/main/java/pr2/vererbung/polymorphie/ZooSimulation.java new file mode 100644 index 0000000..8e00527 --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/polymorphie/ZooSimulation.java @@ -0,0 +1,41 @@ +package pr2.vererbung.polymorphie; + +/** + * Simulationsklasse. + */ +public final class ZooSimulation { + + /** + * Konstruktor. + */ + private ZooSimulation() { + // keine Objekte benötigt + } + + /** + * Main-Methode. + * + * @param args Kommandozeilen-Argumente. + */ + public static void main(String[] args) { + Futterstelle futterstelle = new Futterstelle(); + + Affe charlie = new Affe("Charlie"); + Gorilla buck = new Gorilla("Buck"); + Giraffe debbie = new Giraffe("Debbie"); + + System.out.println(charlie); + System.out.println(buck); + System.out.println(debbie); + + System.out.println("Fütterung..."); + + futterstelle.gibFutter(charlie); + futterstelle.gibFutter(buck); + futterstelle.gibFutter(debbie); + + System.out.println(charlie); + System.out.println(buck); + System.out.println(debbie); + } +} diff --git a/sources/src/main/java/pr2/vererbung/polymorphie/ZooTier.java b/sources/src/main/java/pr2/vererbung/polymorphie/ZooTier.java new file mode 100644 index 0000000..ff9edf9 --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/polymorphie/ZooTier.java @@ -0,0 +1,41 @@ +package pr2.vererbung.polymorphie; + +/** + * Ein Tier im Zoo. + */ +public class ZooTier { + + /** + * Name des Tiers. + */ + private final String name; + + /** + * Zeigt an, ob das Tier hungrig ist. + */ + private boolean hungrig = true; + + /** + * Legt ein neues Zootier an. + * + * @param name Name des Tiers + */ + public ZooTier(String name) { + this.name = name; + } + + /** + * Gibt dem Tier futter. + */ + public void fuettern() { + hungrig = false; + } + + /** + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return name + ": Ich bin " + (hungrig ? "hungrig" : "satt") + "!"; + } +} diff --git a/sources/src/main/java/pr2/vererbung/singleton_einfach/Singleton.java b/sources/src/main/java/pr2/vererbung/singleton_einfach/Singleton.java new file mode 100644 index 0000000..313fcc7 --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/singleton_einfach/Singleton.java @@ -0,0 +1,5 @@ +package pr2.vererbung.singleton_einfach; + + public class Singleton { + +} diff --git a/sources/src/main/java/pr2/vererbung/statics/Spiel.java b/sources/src/main/java/pr2/vererbung/statics/Spiel.java new file mode 100644 index 0000000..3b76b5e --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/statics/Spiel.java @@ -0,0 +1,37 @@ +package pr2.vererbung.statics; + +/** + * Spiel mit den Würfeln. + */ +public final class Spiel { + + /** + * Keine Objekte. + */ + private Spiel() { + // leer + } + + /** + * Programm-Einstieg. + * + * @param args Kommandozeilen-Argumente. + */ + public static void main(String[] args) { + Wuerfel wuerfel1 = new Wuerfel(); + Wuerfel wuerfel2 = new Wuerfel(); + + // 1000 Mal würfeln + for (int i = 0; i < 1000; i++) { + wuerfel1.wuerfele(); + wuerfel2.wuerfele(); + } + + // Statistik ausgeben + System.out.println("Statistik für Würfel 1"); + System.out.println(wuerfel1.statistik()); + System.out.println(); + System.out.println("Statistik für Würfel 2"); + System.out.println(wuerfel2.statistik()); + } +} diff --git a/sources/src/main/java/pr2/vererbung/statics/Wuerfel.java b/sources/src/main/java/pr2/vererbung/statics/Wuerfel.java new file mode 100644 index 0000000..5c3fc2e --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/statics/Wuerfel.java @@ -0,0 +1,44 @@ +package pr2.vererbung.statics; + +import java.util.Random; + +/** + * Ein einfacher Würfel. + */ +public class Wuerfel { + + /** Häufigkeit der Werte. */ + private int[] haeufigkeit = new int[6]; + + /** Zufallsgenerator. */ + private Random random = new Random(); + + /** + * Bestimmt den nächsten Wurf. + * + * @return der Wurf. + */ + public int wuerfele() { + int wert = random.nextInt(6); + haeufigkeit[wert]++; + return wert + 1; + } + + /** + * Gibt die Häufigkeit der Würfe zurück. + * + * @return die Statistik mit der Häufigkeit. + */ + public String statistik() { + StringBuilder result = new StringBuilder(); + + for (int i = 0; i < haeufigkeit.length; i++) { + result.append(i + 1) + .append(": ") + .append(haeufigkeit[i]) + .append("\n"); + } + + return result.toString(); + } +} diff --git a/sources/src/main/java/pr2/vererbung/ueberladen_summe/Summator.java b/sources/src/main/java/pr2/vererbung/ueberladen_summe/Summator.java new file mode 100644 index 0000000..f69bfe5 --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/ueberladen_summe/Summator.java @@ -0,0 +1,5 @@ +package pr2.vererbung.ueberladen_summe; + +public class Summator { + +} diff --git a/sources/src/main/java/pr2/vererbung/ueberladen_summe/test/SummatorTest.java b/sources/src/main/java/pr2/vererbung/ueberladen_summe/test/SummatorTest.java new file mode 100644 index 0000000..5d3496b --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/ueberladen_summe/test/SummatorTest.java @@ -0,0 +1,23 @@ +package pr2.vererbung.ueberladen_summe.test; + +import org.junit.jupiter.api.Test; +import pr2.vererbung.ueberladen_summe.Summator; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class SummatorTest { + + @Test + void testSum() { +// TODO: Einkommentieren +// Summator s = new Summator(); +// assertEquals(3, s.sum(1, 2)); +// assertEquals(1, s.sum(-1, 2)); +// assertEquals(6, s.sum(1, 2, 3)); +// assertEquals(0, s.sum(1, 2, -3)); +// assertEquals(10, s.sum(1, 2, 3, 4)); +// assertEquals(2, s.sum(1, 2, 3, -4)); +// assertEquals(15, s.sum(1, 2, 3, 4, 5)); +// assertEquals(5, s.sum(1, 2, 3, 4, -5)); + } +} diff --git a/sources/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Amoebe.java b/sources/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Amoebe.java new file mode 100644 index 0000000..02ea122 --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Amoebe.java @@ -0,0 +1,5 @@ +package pr2.vererbung.ueberschreiben_lebewesen; + + public class Amoebe { + +} diff --git a/sources/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Dackel.java b/sources/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Dackel.java new file mode 100644 index 0000000..1c5fd8a --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Dackel.java @@ -0,0 +1,5 @@ +package pr2.vererbung.ueberschreiben_lebewesen; + + public class Dackel { + +} diff --git a/sources/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Lebewesen.java b/sources/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Lebewesen.java new file mode 100644 index 0000000..acde914 --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Lebewesen.java @@ -0,0 +1,5 @@ +package pr2.vererbung.ueberschreiben_lebewesen; + +public class Lebewesen { + +} diff --git a/sources/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Main.java b/sources/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Main.java new file mode 100644 index 0000000..ee3f3ba --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/ueberschreiben_lebewesen/Main.java @@ -0,0 +1,8 @@ +package pr2.vererbung.ueberschreiben_lebewesen; + +public class Main { + + public static void main(String[] args) { + // TODO: Lebewesen testen + } +} diff --git a/sources/src/main/java/pr2/vererbung/vararg_summe/Summator.java b/sources/src/main/java/pr2/vererbung/vararg_summe/Summator.java new file mode 100644 index 0000000..f38b0ac --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/vararg_summe/Summator.java @@ -0,0 +1,5 @@ +package pr2.vererbung.vararg_summe; + +public class Summator { + +} diff --git a/sources/src/main/java/pr2/vererbung/vararg_summe/test/SummatorTest.java b/sources/src/main/java/pr2/vererbung/vararg_summe/test/SummatorTest.java new file mode 100644 index 0000000..2b8ab32 --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/vararg_summe/test/SummatorTest.java @@ -0,0 +1,24 @@ +package pr2.vererbung.vararg_summe.test; + +import org.junit.jupiter.api.Test; +import pr2.vererbung.vararg_summe.Summator; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class SummatorTest { + + @Test + void testSum() { +// TODO: Einkommentieren +// Summator s = new Summator(); +// assertEquals(3, s.sum(1, 2)); +// assertEquals(1, s.sum(-1, 2)); +// assertEquals(6, s.sum(1, 2, 3)); +// assertEquals(0, s.sum(1, 2, -3)); +// assertEquals(10, s.sum(1, 2, 3, 4)); +// assertEquals(2, s.sum(1, 2, 3, -4)); +// assertEquals(15, s.sum(1, 2, 3, 4, 5)); +// assertEquals(5, s.sum(1, 2, 3, 4, -5)); +// assertEquals(36, s.sum(1, 2, 3, 4, 5, 6, 7, 8)); + } +} diff --git a/sources/src/main/java/pr2/vererbung/vererbung_geometrie/Dreieck.java b/sources/src/main/java/pr2/vererbung/vererbung_geometrie/Dreieck.java new file mode 100644 index 0000000..b03f17b --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/vererbung_geometrie/Dreieck.java @@ -0,0 +1,9 @@ +package pr2.vererbung.vererbung_geometrie; + +/** + * Ein Dreieck. + */ + public class Dreieck { + + // TODO: Konstruktor +} diff --git a/sources/src/main/java/pr2/vererbung/vererbung_geometrie/Figur.java b/sources/src/main/java/pr2/vererbung/vererbung_geometrie/Figur.java new file mode 100644 index 0000000..adf4348 --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/vererbung_geometrie/Figur.java @@ -0,0 +1,14 @@ +package pr2.vererbung.vererbung_geometrie; + +/** + * Basisklasse für geometrische Formen. + */ +public class Figur { + + /** + * Fläche der Figur. + */ + private double flaeche; + + // TODO: Konstruktoren und Methoden schreiben +} diff --git a/sources/src/main/java/pr2/vererbung/vererbung_geometrie/Gerade.java b/sources/src/main/java/pr2/vererbung/vererbung_geometrie/Gerade.java new file mode 100644 index 0000000..dfeb740 --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/vererbung_geometrie/Gerade.java @@ -0,0 +1,14 @@ +package pr2.vererbung.vererbung_geometrie; + +/** + * Eine Gerade. + */ + public class Gerade { + + /** + * Länge der Geraden. + */ + private double laenge; + + // TODO: Konstruktor und Methoden +} diff --git a/sources/src/main/java/pr2/vererbung/vererbung_geometrie/Quadrat.java b/sources/src/main/java/pr2/vererbung/vererbung_geometrie/Quadrat.java new file mode 100644 index 0000000..d6a1a64 --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/vererbung_geometrie/Quadrat.java @@ -0,0 +1,9 @@ +package pr2.vererbung.vererbung_geometrie; + +/** + * Qudrat. + */ +public class Quadrat extends Rechteck { //*** replace(public class Quadrat {) + + // TODO: Konstruktor +} diff --git a/sources/src/main/java/pr2/vererbung/vererbung_geometrie/Rechteck.java b/sources/src/main/java/pr2/vererbung/vererbung_geometrie/Rechteck.java new file mode 100644 index 0000000..2221eb9 --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/vererbung_geometrie/Rechteck.java @@ -0,0 +1,9 @@ +package pr2.vererbung.vererbung_geometrie; + +/** + * Rechteck. + */ + public class Rechteck { + + // TODO: Konstruktor +} diff --git a/sources/src/main/java/pr2/vererbung/vererbung_geometrie/test/FigurenTest.java b/sources/src/main/java/pr2/vererbung/vererbung_geometrie/test/FigurenTest.java new file mode 100644 index 0000000..3dc462c --- /dev/null +++ b/sources/src/main/java/pr2/vererbung/vererbung_geometrie/test/FigurenTest.java @@ -0,0 +1,71 @@ +package pr2.vererbung.vererbung_geometrie.test; + +import org.junit.jupiter.api.Test; +import pr2.vererbung.vererbung_geometrie.Dreieck; +import pr2.vererbung.vererbung_geometrie.Gerade; +import pr2.vererbung.vererbung_geometrie.Quadrat; +import pr2.vererbung.vererbung_geometrie.Rechteck; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * Tests für die Figuren. + */ +public class FigurenTest { + + private static final double PRECISION = 0.0001; + + /** + * Rechteck. + */ + @Test + void testReckteck() { +// TODO: Einkommentieren +// Rechteck r1 = new Rechteck(4.0, 5.0); +// Rechteck r2 = new Rechteck(0.0, 3.0); +// assertEquals(20.0, r1.getFlaeche(), PRECISION); +// assertEquals(0.0, r2.getFlaeche(), PRECISION); + } + + /** + * Dreieck. + */ + @Test + void testDreieck() { +// TODO: Einkommentieren +// Dreieck d1 = new Dreieck(6.0, 3.5); +// assertEquals(10.5, d1.getFlaeche(), PRECISION); + } + + /** + * Gerade. + */ + @Test + void testGerade() { +// TODO: Einkommentieren +// Gerade g1 = new Gerade(8.0); +// assertEquals(8.0, g1.getLaenge(), PRECISION); +// assertEquals(0.0, g1.getFlaeche(), PRECISION); +// +// g1 = new Gerade(0.0); +// assertEquals(0.0, g1.getLaenge(), PRECISION); +// assertEquals(0.0, g1.getFlaeche(), PRECISION); + } + + /** + * Quadrat. + */ + @Test + void testQuadrat() { +// TODO: Einkommentieren +// Quadrat q1 = new Quadrat(3.0); +// assertEquals(9.0, q1.getFlaeche(), PRECISION); +// +// Rechteck r1 = new Rechteck(5.0, 5.0); +// Quadrat q2 = new Quadrat(5.0); +// assertEquals(r1.getFlaeche(), q2.getFlaeche(), PRECISION); +// +// q1 = new Quadrat(0.0); +// assertEquals(0.0, q1.getFlaeche(), PRECISION); + } +} diff --git a/sources/src/main/resources/pr2/collections/iterieren/10c.png b/sources/src/main/resources/pr2/collections/iterieren/10c.png new file mode 100644 index 0000000..fa5f93e Binary files /dev/null and b/sources/src/main/resources/pr2/collections/iterieren/10c.png differ diff --git a/sources/src/main/resources/pr2/collections/iterieren/1c.png b/sources/src/main/resources/pr2/collections/iterieren/1c.png new file mode 100644 index 0000000..a9df83d Binary files /dev/null and b/sources/src/main/resources/pr2/collections/iterieren/1c.png differ diff --git a/sources/src/main/resources/pr2/collections/iterieren/1e.png b/sources/src/main/resources/pr2/collections/iterieren/1e.png new file mode 100644 index 0000000..1ebd286 Binary files /dev/null and b/sources/src/main/resources/pr2/collections/iterieren/1e.png differ diff --git a/sources/src/main/resources/pr2/collections/iterieren/20c.png b/sources/src/main/resources/pr2/collections/iterieren/20c.png new file mode 100644 index 0000000..95cb86c Binary files /dev/null and b/sources/src/main/resources/pr2/collections/iterieren/20c.png differ diff --git a/sources/src/main/resources/pr2/collections/iterieren/2c.png b/sources/src/main/resources/pr2/collections/iterieren/2c.png new file mode 100644 index 0000000..0efa797 Binary files /dev/null and b/sources/src/main/resources/pr2/collections/iterieren/2c.png differ diff --git a/sources/src/main/resources/pr2/collections/iterieren/2e.png b/sources/src/main/resources/pr2/collections/iterieren/2e.png new file mode 100644 index 0000000..ff3c78f Binary files /dev/null and b/sources/src/main/resources/pr2/collections/iterieren/2e.png differ diff --git a/sources/src/main/resources/pr2/collections/iterieren/50c.png b/sources/src/main/resources/pr2/collections/iterieren/50c.png new file mode 100644 index 0000000..6c10ee4 Binary files /dev/null and b/sources/src/main/resources/pr2/collections/iterieren/50c.png differ diff --git a/sources/src/main/resources/pr2/collections/iterieren/5c.png b/sources/src/main/resources/pr2/collections/iterieren/5c.png new file mode 100644 index 0000000..013376c Binary files /dev/null and b/sources/src/main/resources/pr2/collections/iterieren/5c.png differ diff --git a/sources/src/main/resources/pr2/collections/list/kafka.txt b/sources/src/main/resources/pr2/collections/list/kafka.txt new file mode 100644 index 0000000..b5695c5 --- /dev/null +++ b/sources/src/main/resources/pr2/collections/list/kafka.txt @@ -0,0 +1,11 @@ +Verhaftung - Gespräch mit Frau Grubach - Dann Fräulein Bürstner + +Jemand mußte Josef K. verleumdet haben, denn ohne daß er etwas Böses getan hätte, wurde er eines Morgens verhaftet. Die Köchin der Frau Grubach, seiner Zimmervermieterin, die ihm jeden Tag gegen acht Uhr früh das Frühstück brachte, kam diesmal nicht. Das war noch niemals geschehen. K. wartete noch ein Weilchen, sah von seinem Kopfkissen aus die alte Frau, die ihm gegenüber wohnte und die ihn mit einer an ihr ganz ungewöhnlichen Neugierde beobachtete, dann aber, gleichzeitig befremdet und hungrig, läutete er. Sofort klopfte es und ein Mann, den er in dieser Wohnung noch niemals gesehen hatte, trat ein. Er war schlank und doch fest gebaut, er trug ein anliegendes schwarzes Kleid, das, ähnlich den Reiseanzügen, mit verschiedenen Falten, Taschen, Schnallen, Knöpfen und einem Gürtel versehen war und infolgedessen, ohne daß man sich darüber klar wurde, wozu es dienen sollte, besonders praktisch erschien. "Wer sind Sie?" fragte K. und saß gleich halb aufrecht im Bett. Der Mann aber ging über die Frage hinweg, als müsse man seine Erscheinung hinnehmen, und sagte bloß seinerseits: "Sie haben geläutet?" "Anna soll mir das Frühstück bringen", sagte K. und versuchte, zunächst stillschweigend, durch Aufmerksamkeit und Überlegung festzustellen, wer der Mann eigentlich war. Aber dieser setzte sich nicht allzulange seinen Blicken aus, sondern wandte sich zur Tür, die er ein wenig öffnete, um jemandem, der offenbar knapp hinter der Tür stand, zu sagen: "Er will, daß Anna ihm das Frühstück bringt." Ein kleines Gelächter im Nebenzimmer folgte, es war nach dem Klang nicht sicher, ob nicht mehrere Personen daran beteiligt waren. Obwohl der fremde Mann dadurch nichts erfahren haben konnte, was er nicht schon früher gewußt hätte, sagte er nun doch zu K. im Tone einer Meldung: "Es ist unmöglich." "Das wäre neu", sagte K., sprang aus dem Bett und zog rasch seine Hosen an. "Ich will doch sehen, was für Leute im Nebenzimmer sind und wie Frau Grubach diese Störung mir gegenüber verantworten wird." Es fiel ihm zwar gleich ein, daß er das nicht hätte laut sagen müssen und daß er dadurch gewissermaßen ein Beaufsichtigungsrecht des Fremden anerkannte, aber es schien ihm jetzt nicht wichtig. Immerhin faßte es der Fremde so auf, denn er sagte: "Wollen Sie nicht lieber hierbleiben?" "Ich will weder hierbleiben, noch von Ihnen angesprochen werden, solange Sie sich mir nicht vorstellen." "Es war gut gemeint", sagte der Fremde und öffnete nun freiwillig die Tür. Im Nebenzimmer, in das K. langsamer eintrat, als er wollte, sah es auf den ersten Blick fast genau so aus wie am Abend vorher. Es war das Wohnzimmer der Frau Grubach, vielleicht war in diesem mit Möbeln, Decken, Porzellan und Photographien überfüllten Zimmer heute ein wenig mehr Raum als sonst, man erkannte das nicht gleich, um so weniger, als die Hauptveränderung in der Anwesenheit eines Mannes bestand, der beim offenen Fenster mit einem Buch saß, von dem er jetzt aufblickte. "Sie hätten in Ihrem Zimmer bleiben sollen! Hat es Ihnen denn Franz nicht gesagt?" "Ja, was wollen Sie denn?" sagte K. und sah von der neuen Bekanntschaft zu dem mit Franz Benannten, der in der Tür stehengeblieben war, und dann wieder zurück. Durch das offene Fenster erblickte man wieder die alte Frau, die mit wahrhaft greisenhafter Neugierde zu dem jetzt gegenüberliegenden Fenster getreten war, um auch weiterhin alles zu sehen. "Ich will doch Frau Grubach -", sagte K., machte eine Bewegung, als reiße er sich von den zwei Männern los, die aber weit von ihm entfernt standen, und wollte weitergehen. "Nein", sagte der Mann beim Fenster, warf das Buch auf ein Tischchen und stand auf. "Sie dürfen nicht weggehen, Sie sind ja verhaftet." "Es sieht so aus", sagte K. "Und warum denn?" fragte er dann. "Wir sind nicht dazu bestellt, Ihnen das zu sagen. Gehen Sie in Ihr Zimmer und warten Sie. Das Verfahren ist nun einmal eingeleitet, und Sie werden alles zur richtigen Zeit erfahren. Ich gehe über meinen Auftrag hinaus, wenn ich Ihnen so freundschaftlich zurede. Aber ich hoffe, es hört es niemand sonst als Franz, und der ist selbst gegen alle Vorschrift freundlich zu Ihnen. Wenn Sie auch weiterhin so viel Glück haben wie bei der Bestimmung Ihrer Wächter, dann können Sie zuversichtlich sein." K. wollte sich setzen, aber nun sah er, daß im ganzen Zimmer keine Sitzgelegenheit war, außer dem Sessel beim Fenster. "Sie werden noch einsehen, wie wahr das alles ist", sagte Franz und ging gleichzeitig mit dem andern Mann auf ihn zu. Besonders der letztere überragte K. bedeutend und klopfte ihm öfters auf die Schulter. Beide prüften K.s Nachthemd und sagten, daß er jetzt ein viel schlechteres Hemd werde anziehen müssen, daß sie aber dieses Hemd wie auch seine übrige Wäsche aufbewahren und, wenn seine Sache günstig ausfallen sollte, ihm wieder zurückgeben würden. "Es ist besser, Sie geben die Sachen uns als ins Depot", sagten sie, "denn im Depot kommen öfters Unterschleife vor und außerdem verkauft man dort alle Sachen nach einer gewissen Zeit, ohne Rücksicht, ob das betreffende Verfahren zu Ende ist oder nicht. Und wie lange dauern doch derartige Prozesse, besonders in letzter Zeit! Sie bekämen dann schließlich allerdings vom Depot den Erlös, aber dieser Erlös ist erstens an sich schon gering, denn beim Verkauf entscheidet nicht die Höhe des Angebotes, sondern die Höhe der Bestechung, und weiter verringern sich solche Erlöse erfahrungsgemäß, wenn sie von Hand zu Hand und von Jahr zu Jahr weitergegeben werden." K. achtete auf diese Reden kaum, das Verfügungsrecht über seine Sachen, das er vielleicht noch besaß, schätzte er nicht hoch ein, viel wichtiger war es ihm, Klarheit über seine Lage zu bekommen; in Gegenwart dieser Leute konnte er aber nicht einmal nachdenken, immer wieder stieß der Bauch des zweiten Wächters - es konnten ja nur Wächter sein - förmlich freundschaftlich an ihn, sah er aber auf, dann erblickte er ein zu diesem dicken Körper gar nicht passendes trockenes, knochiges Gesicht mit starker, seitlich gedrehter Nase, das sich über ihn hinweg mit dem anderen Wächter verständigte. Was waren denn das für Menschen? Wovon sprachen sie? Welcher Behörde gehörten sie an? K. lebte doch in einem Rechtsstaat, überall herrschte Friede, alle Gesetze bestanden aufrecht, wer wagte, ihn in seiner Wohnung zu überfallen? Er neigte stets dazu, alles möglichst leicht zu nehmen, das Schlimmste erst beim Eintritt des Schlimmsten zu glauben, keine Vorsorge für die Zukunft zu treffen, selbst wenn alles drohte. Hier schien ihm das aber nicht richtig, man konnte zwar das Ganze als Spaß ansehen, als einen groben Spaß, den ihm aus unbekannten Gründen, vielleicht weil heute sein dreißigster Geburtstag war, die Kollegen in der Bank veranstaltet hatten, es war natürlich möglich, vielleicht brauchte er nur auf irgendeine Weise den Wächtern ins Gesicht zu lachen, und sie würden mitlachen, vielleicht waren es Dienstmänner von der Straßenecke, sie sahen ihnen nicht unähnlich - trotzdem war er diesmal, förmlich schon seit dem ersten Anblick des Wächters Franz, entschlossen, nicht den geringsten Vorteil, den er vielleicht gegenüber diesen Leuten besaß, aus der Hand zu geben. Darin, daß man später sagen würde, er habe keinen Spaß verstanden, sah K. eine ganz geringe Gefahr, wohl aber erinnerte er sich - ohne daß es sonst seine Gewohnheit gewesen wäre, aus Erfahrungen zu lernen - an einige, an sich unbedeutende Fälle, in denen er zum Unterschied von seinen Freunden mit Bewußtsein, ohne das geringste Gefühl für die möglichen Folgen, sich unvorsichtig benommen hatte und dafür durch das Ergebnis gestraft worden war. Es sollte nicht wieder geschehen, zumindest nicht diesmal; war es eine Komödie, so wollte er mitspielen. + +Noch war er frei. "Erlauben Sie", sagte er und ging eilig zwischen den Wächtern durch in sein Zimmer. "Er scheint vernünftig zu sein", hörte er hinter sich sagen. In seinem Zimmer riß er gleich die Schubladen des Schreibtischs auf, es lag dort alles in großer Ordnung, aber gerade die Legitimationspapiere, die er suchte, konnte er in der Aufregung nicht gleich finden. Schließlich fand er seine Radfahrlegitimation und wollte schon mit ihr zu den Wächtern gehen, dann aber schien ihm das Papier zu geringfügig und er suchte weiter, bis er den Geburtsschein fand. Als er wieder in das Nebenzimmer zurückkam, öffnete sich gerade die gegenüberliegende Tür und Frau Grubach wollte dort eintreten. Man sah sie nur einen Augenblick, denn kaum hatte sie K. erkannt, als sie offenbar verlegen wurde, um Verzeihung bat, verschwand und äußerst vorsichtig die Tür schloß. "Kommen Sie doch herein", hatte K. gerade noch sagen können. Nun aber stand er mit seinen Papieren in der Mitte des Zimmers, sah noch auf die Tür hin, die sich nicht wieder öffnete, und wurde erst durch einen Anruf der Wächter aufgeschreckt, die bei dem Tischchen am offenen Fenster saßen und, wie K. jetzt erkannte, sein Frühstück verzehrten. "Warum ist sie nicht eingetreten?" fragte er. "Sie darf nicht", sagte der große Wächter. "Sie sind doch verhaftet." "Wie kann ich denn verhaftet sein? Und gar auf diese Weise?" "Nun fangen Sie also wieder an", sagte der Wächter und tauchte ein Butterbrot ins Honigfäßchen. "Solche Fragen beantworten wir nicht." "Sie werden sie beantworten müssen", sagte K. "Hier sind meine Legitimationspapiere, zeigen Sie mir jetzt die Ihrigen und vor allem den Verhaftbefehl." "Du lieber Himmel!" sagte der Wächter. "Daß Sie sich in Ihre Lage nicht fügen können und daß Sie es darauf angelegt zu haben scheinen, uns, die wir Ihnen jetzt wahrscheinlich von allen Ihren Mitmenschen am nächsten stehen, nutzlos zu reizen!" "Es ist so, glauben Sie es doch", sagte Franz, führte die Kaffeetasse, die er in der Hand hielt, nicht zum Mund, sondern sah K. mit einem langen, wahrscheinlich bedeutungsvollen, aber unverständlichen Blick an. K. ließ sich, ohne es zu wollen, in ein Zwiegespräch der Blicke mit Franz ein, schlug dann aber doch auf seine Papiere und sagte: "Hier sind meine Legitimationspapiere." "Was kümmern uns denn die?" rief nun schon der große Wächter. "Sie führen sich ärger auf als ein Kind. Was wollen Sie denn? Wollen Sie Ihren großen, verfluchten Prozeß dadurch zu einem raschen Ende bringen, daß Sie mit uns, den Wächtern, über Legitimation und Verhaftbefehl diskutieren? Wir sind niedrige Angestellte, die sich in einem Legitimationspapier kaum auskennen und die mit Ihrer Sache nichts anderes zu tun haben, als daß sie zehn Stunden täglich bei Ihnen Wache halten und dafür bezahlt werden. Das ist alles, was wir sind, trotzdem aber sind wir fähig, einzusehen, daß die hohen Behörden, in deren Dienst wir stehen, ehe sie eine solche Verhaftung verfügen, sich sehr genau über die Gründe der Verhaftung und die Person des Verhafteten unterrichten. Es gibt darin keinen Irrtum. Unsere Behörde, soweit ich sie kenne, und ich kenne nur die niedrigsten Grade, sucht doch nicht etwa die Schuld in der Bevölkerung, sondern wird, wie es im Gesetz heißt, von der Schuld angezogen und muß uns Wächter ausschicken. Das ist Gesetz. Wo gäbe es da einen Irrtum?" "Dieses Gesetz kenne ich nicht", sagte K. "Desto schlimmer für Sie", sagte der Wächter. "Es besteht wohl auch nur in Ihren Köpfen", sagte K., er wollte sich irgendwie in die Gedanken der Wächter einschleichen, sie zu seinen Gunsten wenden oder sich dort einbürgern. Aber der Wächter sagte nur abweisend: "Sie werden es zu fühlen bekommen." Franz mischte sich ein und sagte: "Sieh, Willem, er gibt zu, er kenne das Gesetz nicht, und behauptet gleichzeitig, schuldlos zu sein." "Du hast ganz recht, aber ihm kann man nichts begreiflich machen", sagte der andere. K. antwortete nichts mehr; muß ich, dachte er, durch das Geschwätz dieser niedrigsten Organe - sie geben selbst zu, es zu sein - mich noch mehr verwirren lassen? Sie reden doch jedenfalls von Dingen, die sie gar nicht verstehen. Ihre Sicherheit ist nur durch ihre Dummheit möglich. Ein paar Worte, die ich mit einem mir ebenbürtigen Menschen sprechen werde, werden alles unvergleichlich klarer machen als die längsten Reden mit diesen. Er ging einige Male in dem freien Raum des Zimmers auf und ab, drüben sah er die alte Frau, die einen noch viel älteren Greis zum Fenster gezerrt hatte, den sie umschlungen hielt. K. mußte dieser Schaustellung ein Ende machen: "Führen Sie mich zu Ihrem Vorgesetzten", sagte er. "Wenn er es wünscht; nicht früher", sagte der Wächter, der Willem genannt worden war. "Und nun rate ich Ihnen", fügte er hinzu, "in Ihr Zimmer zu gehen, sich ruhig zu verhalten und darauf zu warten, was über Sie verfügt werden wird. Wir raten Ihnen, zerstreuen Sie sich nicht durch nutzlose Gedanken, sondern sammeln Sie sich, es werden große Anforderungen an Sie gestellt werden. Sie haben uns nicht so behandelt, wie es unser Entgegenkommen verdient hätte, Sie haben vergessen, daß wir, mögen wir auch sein was immer, zumindest jetzt Ihnen gegenüber freie Männer sind, das ist kein kleines Übergewicht. Trotzdem sind wir bereit, falls Sie Geld haben, Ihnen ein kleines Frühstück aus dem Kaffeehaus drüben zu bringen." + +Ohne auf dieses Angebot zu antworten, stand K. ein Weilchen lang still. Vielleicht würden ihn die beiden, wenn er die Tür des folgenden Zimmers oder gar die Tür des Vorzimmers öffnete, gar nicht zu hindern wagen, vielleicht wäre es die einfachste Lösung des Ganzen, daß er es auf die Spitze trieb. Aber vielleicht würden sie ihn doch packen und, war er einmal niedergeworfen, so war auch alle Überlegenheit verloren, die er jetzt ihnen gegenüber in gewisser Hinsicht doch wahrte. Deshalb zog er die Sicherheit der Lösung vor, wie sie der natürliche Verlauf bringen mußte, und ging in sein Zimmer zurück, ohne daß von seiner Seite oder von Seite der Wächter ein weiteres Wort gefallen wäre. + +Er warf sich auf sein Bett und nahm vom Waschtisch einen schönen Apfel, den er sich gestern abend für das Frühstück vorbereitet hatte. Jetzt war er sein einziges Frühstück und jedenfalls, wie er sich beim ersten großen Bissen versicherte, viel besser, als das Frühstück aus dem schmutzigen Nachtcafé gewesen wäre, das er durch die Gnade der Wächter hätte bekommen können. Er fühlte sich wohl und zuversichtlich, in der Bank versäumte er zwar heute vormittag seinen Dienst, aber das war bei der verhältnismäßig hohen Stellung, die er dort einnahm, leicht entschuldigt. Sollte er die wirkliche Entschuldigung anführen? Er gedachte es zu tun, Würde man ihm nicht glauben, was in diesem Fall begreiflich war, so konnte er Frau Grubach als Zeugin führen oder auch die beiden Alten von drüben, die wohl jetzt auf dem Marsch zum gegenüberliegenden Fenster waren. Es wunderte K., wenigstens aus dem Gedankengang der Wächter wunderte es ihn, daß sie ihn in das Zimmer getrieben und ihn hier allein gelassen hatten, wo er doch zehnfache Möglichkeit hatte, sich umzubringen. Gleichzeitig allerdings fragte er sich, diesmal aus seinem Gedankengang, was für einen Grund er haben könnte, es zu tun. Etwa weil die zwei nebenan saßen und sein Frühstück abgefangen hatten? Es wäre so sinnlos gewesen, sich umzubringen, daß er, selbst wenn er es hätte tun wollen, infolge der Sinnlosigkeit dazu nicht imstande gewesen wäre. Wäre die geistige Beschränktheit der Wächter nicht so auffallend gewesen, so hätte man annehmen können, daß auch sie, infolge der gleichen Überzeugung, keine Gefahr darin gesehen hätten, ihn allein zu lassen. Sie mochten jetzt, wenn sie wollten, zusehen, wie er zu einem Wandschränkchen ging, in dem er einen guten Schnaps aufbewahrte, wie er ein Gläschen zuerst zum Ersatz des Frühstücks leerte und wie er ein zweites Gläschen dazu bestimmte, sich Mut zu machen, das letztere nur aus Vorsicht für den unwahrscheinlichen Fall, daß es nötig sein sollte. + + diff --git a/sources/src/main/resources/pr2/collections/map/kafka.txt b/sources/src/main/resources/pr2/collections/map/kafka.txt new file mode 100644 index 0000000..b5695c5 --- /dev/null +++ b/sources/src/main/resources/pr2/collections/map/kafka.txt @@ -0,0 +1,11 @@ +Verhaftung - Gespräch mit Frau Grubach - Dann Fräulein Bürstner + +Jemand mußte Josef K. verleumdet haben, denn ohne daß er etwas Böses getan hätte, wurde er eines Morgens verhaftet. Die Köchin der Frau Grubach, seiner Zimmervermieterin, die ihm jeden Tag gegen acht Uhr früh das Frühstück brachte, kam diesmal nicht. Das war noch niemals geschehen. K. wartete noch ein Weilchen, sah von seinem Kopfkissen aus die alte Frau, die ihm gegenüber wohnte und die ihn mit einer an ihr ganz ungewöhnlichen Neugierde beobachtete, dann aber, gleichzeitig befremdet und hungrig, läutete er. Sofort klopfte es und ein Mann, den er in dieser Wohnung noch niemals gesehen hatte, trat ein. Er war schlank und doch fest gebaut, er trug ein anliegendes schwarzes Kleid, das, ähnlich den Reiseanzügen, mit verschiedenen Falten, Taschen, Schnallen, Knöpfen und einem Gürtel versehen war und infolgedessen, ohne daß man sich darüber klar wurde, wozu es dienen sollte, besonders praktisch erschien. "Wer sind Sie?" fragte K. und saß gleich halb aufrecht im Bett. Der Mann aber ging über die Frage hinweg, als müsse man seine Erscheinung hinnehmen, und sagte bloß seinerseits: "Sie haben geläutet?" "Anna soll mir das Frühstück bringen", sagte K. und versuchte, zunächst stillschweigend, durch Aufmerksamkeit und Überlegung festzustellen, wer der Mann eigentlich war. Aber dieser setzte sich nicht allzulange seinen Blicken aus, sondern wandte sich zur Tür, die er ein wenig öffnete, um jemandem, der offenbar knapp hinter der Tür stand, zu sagen: "Er will, daß Anna ihm das Frühstück bringt." Ein kleines Gelächter im Nebenzimmer folgte, es war nach dem Klang nicht sicher, ob nicht mehrere Personen daran beteiligt waren. Obwohl der fremde Mann dadurch nichts erfahren haben konnte, was er nicht schon früher gewußt hätte, sagte er nun doch zu K. im Tone einer Meldung: "Es ist unmöglich." "Das wäre neu", sagte K., sprang aus dem Bett und zog rasch seine Hosen an. "Ich will doch sehen, was für Leute im Nebenzimmer sind und wie Frau Grubach diese Störung mir gegenüber verantworten wird." Es fiel ihm zwar gleich ein, daß er das nicht hätte laut sagen müssen und daß er dadurch gewissermaßen ein Beaufsichtigungsrecht des Fremden anerkannte, aber es schien ihm jetzt nicht wichtig. Immerhin faßte es der Fremde so auf, denn er sagte: "Wollen Sie nicht lieber hierbleiben?" "Ich will weder hierbleiben, noch von Ihnen angesprochen werden, solange Sie sich mir nicht vorstellen." "Es war gut gemeint", sagte der Fremde und öffnete nun freiwillig die Tür. Im Nebenzimmer, in das K. langsamer eintrat, als er wollte, sah es auf den ersten Blick fast genau so aus wie am Abend vorher. Es war das Wohnzimmer der Frau Grubach, vielleicht war in diesem mit Möbeln, Decken, Porzellan und Photographien überfüllten Zimmer heute ein wenig mehr Raum als sonst, man erkannte das nicht gleich, um so weniger, als die Hauptveränderung in der Anwesenheit eines Mannes bestand, der beim offenen Fenster mit einem Buch saß, von dem er jetzt aufblickte. "Sie hätten in Ihrem Zimmer bleiben sollen! Hat es Ihnen denn Franz nicht gesagt?" "Ja, was wollen Sie denn?" sagte K. und sah von der neuen Bekanntschaft zu dem mit Franz Benannten, der in der Tür stehengeblieben war, und dann wieder zurück. Durch das offene Fenster erblickte man wieder die alte Frau, die mit wahrhaft greisenhafter Neugierde zu dem jetzt gegenüberliegenden Fenster getreten war, um auch weiterhin alles zu sehen. "Ich will doch Frau Grubach -", sagte K., machte eine Bewegung, als reiße er sich von den zwei Männern los, die aber weit von ihm entfernt standen, und wollte weitergehen. "Nein", sagte der Mann beim Fenster, warf das Buch auf ein Tischchen und stand auf. "Sie dürfen nicht weggehen, Sie sind ja verhaftet." "Es sieht so aus", sagte K. "Und warum denn?" fragte er dann. "Wir sind nicht dazu bestellt, Ihnen das zu sagen. Gehen Sie in Ihr Zimmer und warten Sie. Das Verfahren ist nun einmal eingeleitet, und Sie werden alles zur richtigen Zeit erfahren. Ich gehe über meinen Auftrag hinaus, wenn ich Ihnen so freundschaftlich zurede. Aber ich hoffe, es hört es niemand sonst als Franz, und der ist selbst gegen alle Vorschrift freundlich zu Ihnen. Wenn Sie auch weiterhin so viel Glück haben wie bei der Bestimmung Ihrer Wächter, dann können Sie zuversichtlich sein." K. wollte sich setzen, aber nun sah er, daß im ganzen Zimmer keine Sitzgelegenheit war, außer dem Sessel beim Fenster. "Sie werden noch einsehen, wie wahr das alles ist", sagte Franz und ging gleichzeitig mit dem andern Mann auf ihn zu. Besonders der letztere überragte K. bedeutend und klopfte ihm öfters auf die Schulter. Beide prüften K.s Nachthemd und sagten, daß er jetzt ein viel schlechteres Hemd werde anziehen müssen, daß sie aber dieses Hemd wie auch seine übrige Wäsche aufbewahren und, wenn seine Sache günstig ausfallen sollte, ihm wieder zurückgeben würden. "Es ist besser, Sie geben die Sachen uns als ins Depot", sagten sie, "denn im Depot kommen öfters Unterschleife vor und außerdem verkauft man dort alle Sachen nach einer gewissen Zeit, ohne Rücksicht, ob das betreffende Verfahren zu Ende ist oder nicht. Und wie lange dauern doch derartige Prozesse, besonders in letzter Zeit! Sie bekämen dann schließlich allerdings vom Depot den Erlös, aber dieser Erlös ist erstens an sich schon gering, denn beim Verkauf entscheidet nicht die Höhe des Angebotes, sondern die Höhe der Bestechung, und weiter verringern sich solche Erlöse erfahrungsgemäß, wenn sie von Hand zu Hand und von Jahr zu Jahr weitergegeben werden." K. achtete auf diese Reden kaum, das Verfügungsrecht über seine Sachen, das er vielleicht noch besaß, schätzte er nicht hoch ein, viel wichtiger war es ihm, Klarheit über seine Lage zu bekommen; in Gegenwart dieser Leute konnte er aber nicht einmal nachdenken, immer wieder stieß der Bauch des zweiten Wächters - es konnten ja nur Wächter sein - förmlich freundschaftlich an ihn, sah er aber auf, dann erblickte er ein zu diesem dicken Körper gar nicht passendes trockenes, knochiges Gesicht mit starker, seitlich gedrehter Nase, das sich über ihn hinweg mit dem anderen Wächter verständigte. Was waren denn das für Menschen? Wovon sprachen sie? Welcher Behörde gehörten sie an? K. lebte doch in einem Rechtsstaat, überall herrschte Friede, alle Gesetze bestanden aufrecht, wer wagte, ihn in seiner Wohnung zu überfallen? Er neigte stets dazu, alles möglichst leicht zu nehmen, das Schlimmste erst beim Eintritt des Schlimmsten zu glauben, keine Vorsorge für die Zukunft zu treffen, selbst wenn alles drohte. Hier schien ihm das aber nicht richtig, man konnte zwar das Ganze als Spaß ansehen, als einen groben Spaß, den ihm aus unbekannten Gründen, vielleicht weil heute sein dreißigster Geburtstag war, die Kollegen in der Bank veranstaltet hatten, es war natürlich möglich, vielleicht brauchte er nur auf irgendeine Weise den Wächtern ins Gesicht zu lachen, und sie würden mitlachen, vielleicht waren es Dienstmänner von der Straßenecke, sie sahen ihnen nicht unähnlich - trotzdem war er diesmal, förmlich schon seit dem ersten Anblick des Wächters Franz, entschlossen, nicht den geringsten Vorteil, den er vielleicht gegenüber diesen Leuten besaß, aus der Hand zu geben. Darin, daß man später sagen würde, er habe keinen Spaß verstanden, sah K. eine ganz geringe Gefahr, wohl aber erinnerte er sich - ohne daß es sonst seine Gewohnheit gewesen wäre, aus Erfahrungen zu lernen - an einige, an sich unbedeutende Fälle, in denen er zum Unterschied von seinen Freunden mit Bewußtsein, ohne das geringste Gefühl für die möglichen Folgen, sich unvorsichtig benommen hatte und dafür durch das Ergebnis gestraft worden war. Es sollte nicht wieder geschehen, zumindest nicht diesmal; war es eine Komödie, so wollte er mitspielen. + +Noch war er frei. "Erlauben Sie", sagte er und ging eilig zwischen den Wächtern durch in sein Zimmer. "Er scheint vernünftig zu sein", hörte er hinter sich sagen. In seinem Zimmer riß er gleich die Schubladen des Schreibtischs auf, es lag dort alles in großer Ordnung, aber gerade die Legitimationspapiere, die er suchte, konnte er in der Aufregung nicht gleich finden. Schließlich fand er seine Radfahrlegitimation und wollte schon mit ihr zu den Wächtern gehen, dann aber schien ihm das Papier zu geringfügig und er suchte weiter, bis er den Geburtsschein fand. Als er wieder in das Nebenzimmer zurückkam, öffnete sich gerade die gegenüberliegende Tür und Frau Grubach wollte dort eintreten. Man sah sie nur einen Augenblick, denn kaum hatte sie K. erkannt, als sie offenbar verlegen wurde, um Verzeihung bat, verschwand und äußerst vorsichtig die Tür schloß. "Kommen Sie doch herein", hatte K. gerade noch sagen können. Nun aber stand er mit seinen Papieren in der Mitte des Zimmers, sah noch auf die Tür hin, die sich nicht wieder öffnete, und wurde erst durch einen Anruf der Wächter aufgeschreckt, die bei dem Tischchen am offenen Fenster saßen und, wie K. jetzt erkannte, sein Frühstück verzehrten. "Warum ist sie nicht eingetreten?" fragte er. "Sie darf nicht", sagte der große Wächter. "Sie sind doch verhaftet." "Wie kann ich denn verhaftet sein? Und gar auf diese Weise?" "Nun fangen Sie also wieder an", sagte der Wächter und tauchte ein Butterbrot ins Honigfäßchen. "Solche Fragen beantworten wir nicht." "Sie werden sie beantworten müssen", sagte K. "Hier sind meine Legitimationspapiere, zeigen Sie mir jetzt die Ihrigen und vor allem den Verhaftbefehl." "Du lieber Himmel!" sagte der Wächter. "Daß Sie sich in Ihre Lage nicht fügen können und daß Sie es darauf angelegt zu haben scheinen, uns, die wir Ihnen jetzt wahrscheinlich von allen Ihren Mitmenschen am nächsten stehen, nutzlos zu reizen!" "Es ist so, glauben Sie es doch", sagte Franz, führte die Kaffeetasse, die er in der Hand hielt, nicht zum Mund, sondern sah K. mit einem langen, wahrscheinlich bedeutungsvollen, aber unverständlichen Blick an. K. ließ sich, ohne es zu wollen, in ein Zwiegespräch der Blicke mit Franz ein, schlug dann aber doch auf seine Papiere und sagte: "Hier sind meine Legitimationspapiere." "Was kümmern uns denn die?" rief nun schon der große Wächter. "Sie führen sich ärger auf als ein Kind. Was wollen Sie denn? Wollen Sie Ihren großen, verfluchten Prozeß dadurch zu einem raschen Ende bringen, daß Sie mit uns, den Wächtern, über Legitimation und Verhaftbefehl diskutieren? Wir sind niedrige Angestellte, die sich in einem Legitimationspapier kaum auskennen und die mit Ihrer Sache nichts anderes zu tun haben, als daß sie zehn Stunden täglich bei Ihnen Wache halten und dafür bezahlt werden. Das ist alles, was wir sind, trotzdem aber sind wir fähig, einzusehen, daß die hohen Behörden, in deren Dienst wir stehen, ehe sie eine solche Verhaftung verfügen, sich sehr genau über die Gründe der Verhaftung und die Person des Verhafteten unterrichten. Es gibt darin keinen Irrtum. Unsere Behörde, soweit ich sie kenne, und ich kenne nur die niedrigsten Grade, sucht doch nicht etwa die Schuld in der Bevölkerung, sondern wird, wie es im Gesetz heißt, von der Schuld angezogen und muß uns Wächter ausschicken. Das ist Gesetz. Wo gäbe es da einen Irrtum?" "Dieses Gesetz kenne ich nicht", sagte K. "Desto schlimmer für Sie", sagte der Wächter. "Es besteht wohl auch nur in Ihren Köpfen", sagte K., er wollte sich irgendwie in die Gedanken der Wächter einschleichen, sie zu seinen Gunsten wenden oder sich dort einbürgern. Aber der Wächter sagte nur abweisend: "Sie werden es zu fühlen bekommen." Franz mischte sich ein und sagte: "Sieh, Willem, er gibt zu, er kenne das Gesetz nicht, und behauptet gleichzeitig, schuldlos zu sein." "Du hast ganz recht, aber ihm kann man nichts begreiflich machen", sagte der andere. K. antwortete nichts mehr; muß ich, dachte er, durch das Geschwätz dieser niedrigsten Organe - sie geben selbst zu, es zu sein - mich noch mehr verwirren lassen? Sie reden doch jedenfalls von Dingen, die sie gar nicht verstehen. Ihre Sicherheit ist nur durch ihre Dummheit möglich. Ein paar Worte, die ich mit einem mir ebenbürtigen Menschen sprechen werde, werden alles unvergleichlich klarer machen als die längsten Reden mit diesen. Er ging einige Male in dem freien Raum des Zimmers auf und ab, drüben sah er die alte Frau, die einen noch viel älteren Greis zum Fenster gezerrt hatte, den sie umschlungen hielt. K. mußte dieser Schaustellung ein Ende machen: "Führen Sie mich zu Ihrem Vorgesetzten", sagte er. "Wenn er es wünscht; nicht früher", sagte der Wächter, der Willem genannt worden war. "Und nun rate ich Ihnen", fügte er hinzu, "in Ihr Zimmer zu gehen, sich ruhig zu verhalten und darauf zu warten, was über Sie verfügt werden wird. Wir raten Ihnen, zerstreuen Sie sich nicht durch nutzlose Gedanken, sondern sammeln Sie sich, es werden große Anforderungen an Sie gestellt werden. Sie haben uns nicht so behandelt, wie es unser Entgegenkommen verdient hätte, Sie haben vergessen, daß wir, mögen wir auch sein was immer, zumindest jetzt Ihnen gegenüber freie Männer sind, das ist kein kleines Übergewicht. Trotzdem sind wir bereit, falls Sie Geld haben, Ihnen ein kleines Frühstück aus dem Kaffeehaus drüben zu bringen." + +Ohne auf dieses Angebot zu antworten, stand K. ein Weilchen lang still. Vielleicht würden ihn die beiden, wenn er die Tür des folgenden Zimmers oder gar die Tür des Vorzimmers öffnete, gar nicht zu hindern wagen, vielleicht wäre es die einfachste Lösung des Ganzen, daß er es auf die Spitze trieb. Aber vielleicht würden sie ihn doch packen und, war er einmal niedergeworfen, so war auch alle Überlegenheit verloren, die er jetzt ihnen gegenüber in gewisser Hinsicht doch wahrte. Deshalb zog er die Sicherheit der Lösung vor, wie sie der natürliche Verlauf bringen mußte, und ging in sein Zimmer zurück, ohne daß von seiner Seite oder von Seite der Wächter ein weiteres Wort gefallen wäre. + +Er warf sich auf sein Bett und nahm vom Waschtisch einen schönen Apfel, den er sich gestern abend für das Frühstück vorbereitet hatte. Jetzt war er sein einziges Frühstück und jedenfalls, wie er sich beim ersten großen Bissen versicherte, viel besser, als das Frühstück aus dem schmutzigen Nachtcafé gewesen wäre, das er durch die Gnade der Wächter hätte bekommen können. Er fühlte sich wohl und zuversichtlich, in der Bank versäumte er zwar heute vormittag seinen Dienst, aber das war bei der verhältnismäßig hohen Stellung, die er dort einnahm, leicht entschuldigt. Sollte er die wirkliche Entschuldigung anführen? Er gedachte es zu tun, Würde man ihm nicht glauben, was in diesem Fall begreiflich war, so konnte er Frau Grubach als Zeugin führen oder auch die beiden Alten von drüben, die wohl jetzt auf dem Marsch zum gegenüberliegenden Fenster waren. Es wunderte K., wenigstens aus dem Gedankengang der Wächter wunderte es ihn, daß sie ihn in das Zimmer getrieben und ihn hier allein gelassen hatten, wo er doch zehnfache Möglichkeit hatte, sich umzubringen. Gleichzeitig allerdings fragte er sich, diesmal aus seinem Gedankengang, was für einen Grund er haben könnte, es zu tun. Etwa weil die zwei nebenan saßen und sein Frühstück abgefangen hatten? Es wäre so sinnlos gewesen, sich umzubringen, daß er, selbst wenn er es hätte tun wollen, infolge der Sinnlosigkeit dazu nicht imstande gewesen wäre. Wäre die geistige Beschränktheit der Wächter nicht so auffallend gewesen, so hätte man annehmen können, daß auch sie, infolge der gleichen Überzeugung, keine Gefahr darin gesehen hätten, ihn allein zu lassen. Sie mochten jetzt, wenn sie wollten, zusehen, wie er zu einem Wandschränkchen ging, in dem er einen guten Schnaps aufbewahrte, wie er ein Gläschen zuerst zum Ersatz des Frühstücks leerte und wie er ein zweites Gläschen dazu bestimmte, sich Mut zu machen, das letztere nur aus Vorsicht für den unwahrscheinlichen Fall, daß es nötig sein sollte. + + diff --git a/sources/src/main/resources/pr2/collections/set/kafka.txt b/sources/src/main/resources/pr2/collections/set/kafka.txt new file mode 100644 index 0000000..b5695c5 --- /dev/null +++ b/sources/src/main/resources/pr2/collections/set/kafka.txt @@ -0,0 +1,11 @@ +Verhaftung - Gespräch mit Frau Grubach - Dann Fräulein Bürstner + +Jemand mußte Josef K. verleumdet haben, denn ohne daß er etwas Böses getan hätte, wurde er eines Morgens verhaftet. Die Köchin der Frau Grubach, seiner Zimmervermieterin, die ihm jeden Tag gegen acht Uhr früh das Frühstück brachte, kam diesmal nicht. Das war noch niemals geschehen. K. wartete noch ein Weilchen, sah von seinem Kopfkissen aus die alte Frau, die ihm gegenüber wohnte und die ihn mit einer an ihr ganz ungewöhnlichen Neugierde beobachtete, dann aber, gleichzeitig befremdet und hungrig, läutete er. Sofort klopfte es und ein Mann, den er in dieser Wohnung noch niemals gesehen hatte, trat ein. Er war schlank und doch fest gebaut, er trug ein anliegendes schwarzes Kleid, das, ähnlich den Reiseanzügen, mit verschiedenen Falten, Taschen, Schnallen, Knöpfen und einem Gürtel versehen war und infolgedessen, ohne daß man sich darüber klar wurde, wozu es dienen sollte, besonders praktisch erschien. "Wer sind Sie?" fragte K. und saß gleich halb aufrecht im Bett. Der Mann aber ging über die Frage hinweg, als müsse man seine Erscheinung hinnehmen, und sagte bloß seinerseits: "Sie haben geläutet?" "Anna soll mir das Frühstück bringen", sagte K. und versuchte, zunächst stillschweigend, durch Aufmerksamkeit und Überlegung festzustellen, wer der Mann eigentlich war. Aber dieser setzte sich nicht allzulange seinen Blicken aus, sondern wandte sich zur Tür, die er ein wenig öffnete, um jemandem, der offenbar knapp hinter der Tür stand, zu sagen: "Er will, daß Anna ihm das Frühstück bringt." Ein kleines Gelächter im Nebenzimmer folgte, es war nach dem Klang nicht sicher, ob nicht mehrere Personen daran beteiligt waren. Obwohl der fremde Mann dadurch nichts erfahren haben konnte, was er nicht schon früher gewußt hätte, sagte er nun doch zu K. im Tone einer Meldung: "Es ist unmöglich." "Das wäre neu", sagte K., sprang aus dem Bett und zog rasch seine Hosen an. "Ich will doch sehen, was für Leute im Nebenzimmer sind und wie Frau Grubach diese Störung mir gegenüber verantworten wird." Es fiel ihm zwar gleich ein, daß er das nicht hätte laut sagen müssen und daß er dadurch gewissermaßen ein Beaufsichtigungsrecht des Fremden anerkannte, aber es schien ihm jetzt nicht wichtig. Immerhin faßte es der Fremde so auf, denn er sagte: "Wollen Sie nicht lieber hierbleiben?" "Ich will weder hierbleiben, noch von Ihnen angesprochen werden, solange Sie sich mir nicht vorstellen." "Es war gut gemeint", sagte der Fremde und öffnete nun freiwillig die Tür. Im Nebenzimmer, in das K. langsamer eintrat, als er wollte, sah es auf den ersten Blick fast genau so aus wie am Abend vorher. Es war das Wohnzimmer der Frau Grubach, vielleicht war in diesem mit Möbeln, Decken, Porzellan und Photographien überfüllten Zimmer heute ein wenig mehr Raum als sonst, man erkannte das nicht gleich, um so weniger, als die Hauptveränderung in der Anwesenheit eines Mannes bestand, der beim offenen Fenster mit einem Buch saß, von dem er jetzt aufblickte. "Sie hätten in Ihrem Zimmer bleiben sollen! Hat es Ihnen denn Franz nicht gesagt?" "Ja, was wollen Sie denn?" sagte K. und sah von der neuen Bekanntschaft zu dem mit Franz Benannten, der in der Tür stehengeblieben war, und dann wieder zurück. Durch das offene Fenster erblickte man wieder die alte Frau, die mit wahrhaft greisenhafter Neugierde zu dem jetzt gegenüberliegenden Fenster getreten war, um auch weiterhin alles zu sehen. "Ich will doch Frau Grubach -", sagte K., machte eine Bewegung, als reiße er sich von den zwei Männern los, die aber weit von ihm entfernt standen, und wollte weitergehen. "Nein", sagte der Mann beim Fenster, warf das Buch auf ein Tischchen und stand auf. "Sie dürfen nicht weggehen, Sie sind ja verhaftet." "Es sieht so aus", sagte K. "Und warum denn?" fragte er dann. "Wir sind nicht dazu bestellt, Ihnen das zu sagen. Gehen Sie in Ihr Zimmer und warten Sie. Das Verfahren ist nun einmal eingeleitet, und Sie werden alles zur richtigen Zeit erfahren. Ich gehe über meinen Auftrag hinaus, wenn ich Ihnen so freundschaftlich zurede. Aber ich hoffe, es hört es niemand sonst als Franz, und der ist selbst gegen alle Vorschrift freundlich zu Ihnen. Wenn Sie auch weiterhin so viel Glück haben wie bei der Bestimmung Ihrer Wächter, dann können Sie zuversichtlich sein." K. wollte sich setzen, aber nun sah er, daß im ganzen Zimmer keine Sitzgelegenheit war, außer dem Sessel beim Fenster. "Sie werden noch einsehen, wie wahr das alles ist", sagte Franz und ging gleichzeitig mit dem andern Mann auf ihn zu. Besonders der letztere überragte K. bedeutend und klopfte ihm öfters auf die Schulter. Beide prüften K.s Nachthemd und sagten, daß er jetzt ein viel schlechteres Hemd werde anziehen müssen, daß sie aber dieses Hemd wie auch seine übrige Wäsche aufbewahren und, wenn seine Sache günstig ausfallen sollte, ihm wieder zurückgeben würden. "Es ist besser, Sie geben die Sachen uns als ins Depot", sagten sie, "denn im Depot kommen öfters Unterschleife vor und außerdem verkauft man dort alle Sachen nach einer gewissen Zeit, ohne Rücksicht, ob das betreffende Verfahren zu Ende ist oder nicht. Und wie lange dauern doch derartige Prozesse, besonders in letzter Zeit! Sie bekämen dann schließlich allerdings vom Depot den Erlös, aber dieser Erlös ist erstens an sich schon gering, denn beim Verkauf entscheidet nicht die Höhe des Angebotes, sondern die Höhe der Bestechung, und weiter verringern sich solche Erlöse erfahrungsgemäß, wenn sie von Hand zu Hand und von Jahr zu Jahr weitergegeben werden." K. achtete auf diese Reden kaum, das Verfügungsrecht über seine Sachen, das er vielleicht noch besaß, schätzte er nicht hoch ein, viel wichtiger war es ihm, Klarheit über seine Lage zu bekommen; in Gegenwart dieser Leute konnte er aber nicht einmal nachdenken, immer wieder stieß der Bauch des zweiten Wächters - es konnten ja nur Wächter sein - förmlich freundschaftlich an ihn, sah er aber auf, dann erblickte er ein zu diesem dicken Körper gar nicht passendes trockenes, knochiges Gesicht mit starker, seitlich gedrehter Nase, das sich über ihn hinweg mit dem anderen Wächter verständigte. Was waren denn das für Menschen? Wovon sprachen sie? Welcher Behörde gehörten sie an? K. lebte doch in einem Rechtsstaat, überall herrschte Friede, alle Gesetze bestanden aufrecht, wer wagte, ihn in seiner Wohnung zu überfallen? Er neigte stets dazu, alles möglichst leicht zu nehmen, das Schlimmste erst beim Eintritt des Schlimmsten zu glauben, keine Vorsorge für die Zukunft zu treffen, selbst wenn alles drohte. Hier schien ihm das aber nicht richtig, man konnte zwar das Ganze als Spaß ansehen, als einen groben Spaß, den ihm aus unbekannten Gründen, vielleicht weil heute sein dreißigster Geburtstag war, die Kollegen in der Bank veranstaltet hatten, es war natürlich möglich, vielleicht brauchte er nur auf irgendeine Weise den Wächtern ins Gesicht zu lachen, und sie würden mitlachen, vielleicht waren es Dienstmänner von der Straßenecke, sie sahen ihnen nicht unähnlich - trotzdem war er diesmal, förmlich schon seit dem ersten Anblick des Wächters Franz, entschlossen, nicht den geringsten Vorteil, den er vielleicht gegenüber diesen Leuten besaß, aus der Hand zu geben. Darin, daß man später sagen würde, er habe keinen Spaß verstanden, sah K. eine ganz geringe Gefahr, wohl aber erinnerte er sich - ohne daß es sonst seine Gewohnheit gewesen wäre, aus Erfahrungen zu lernen - an einige, an sich unbedeutende Fälle, in denen er zum Unterschied von seinen Freunden mit Bewußtsein, ohne das geringste Gefühl für die möglichen Folgen, sich unvorsichtig benommen hatte und dafür durch das Ergebnis gestraft worden war. Es sollte nicht wieder geschehen, zumindest nicht diesmal; war es eine Komödie, so wollte er mitspielen. + +Noch war er frei. "Erlauben Sie", sagte er und ging eilig zwischen den Wächtern durch in sein Zimmer. "Er scheint vernünftig zu sein", hörte er hinter sich sagen. In seinem Zimmer riß er gleich die Schubladen des Schreibtischs auf, es lag dort alles in großer Ordnung, aber gerade die Legitimationspapiere, die er suchte, konnte er in der Aufregung nicht gleich finden. Schließlich fand er seine Radfahrlegitimation und wollte schon mit ihr zu den Wächtern gehen, dann aber schien ihm das Papier zu geringfügig und er suchte weiter, bis er den Geburtsschein fand. Als er wieder in das Nebenzimmer zurückkam, öffnete sich gerade die gegenüberliegende Tür und Frau Grubach wollte dort eintreten. Man sah sie nur einen Augenblick, denn kaum hatte sie K. erkannt, als sie offenbar verlegen wurde, um Verzeihung bat, verschwand und äußerst vorsichtig die Tür schloß. "Kommen Sie doch herein", hatte K. gerade noch sagen können. Nun aber stand er mit seinen Papieren in der Mitte des Zimmers, sah noch auf die Tür hin, die sich nicht wieder öffnete, und wurde erst durch einen Anruf der Wächter aufgeschreckt, die bei dem Tischchen am offenen Fenster saßen und, wie K. jetzt erkannte, sein Frühstück verzehrten. "Warum ist sie nicht eingetreten?" fragte er. "Sie darf nicht", sagte der große Wächter. "Sie sind doch verhaftet." "Wie kann ich denn verhaftet sein? Und gar auf diese Weise?" "Nun fangen Sie also wieder an", sagte der Wächter und tauchte ein Butterbrot ins Honigfäßchen. "Solche Fragen beantworten wir nicht." "Sie werden sie beantworten müssen", sagte K. "Hier sind meine Legitimationspapiere, zeigen Sie mir jetzt die Ihrigen und vor allem den Verhaftbefehl." "Du lieber Himmel!" sagte der Wächter. "Daß Sie sich in Ihre Lage nicht fügen können und daß Sie es darauf angelegt zu haben scheinen, uns, die wir Ihnen jetzt wahrscheinlich von allen Ihren Mitmenschen am nächsten stehen, nutzlos zu reizen!" "Es ist so, glauben Sie es doch", sagte Franz, führte die Kaffeetasse, die er in der Hand hielt, nicht zum Mund, sondern sah K. mit einem langen, wahrscheinlich bedeutungsvollen, aber unverständlichen Blick an. K. ließ sich, ohne es zu wollen, in ein Zwiegespräch der Blicke mit Franz ein, schlug dann aber doch auf seine Papiere und sagte: "Hier sind meine Legitimationspapiere." "Was kümmern uns denn die?" rief nun schon der große Wächter. "Sie führen sich ärger auf als ein Kind. Was wollen Sie denn? Wollen Sie Ihren großen, verfluchten Prozeß dadurch zu einem raschen Ende bringen, daß Sie mit uns, den Wächtern, über Legitimation und Verhaftbefehl diskutieren? Wir sind niedrige Angestellte, die sich in einem Legitimationspapier kaum auskennen und die mit Ihrer Sache nichts anderes zu tun haben, als daß sie zehn Stunden täglich bei Ihnen Wache halten und dafür bezahlt werden. Das ist alles, was wir sind, trotzdem aber sind wir fähig, einzusehen, daß die hohen Behörden, in deren Dienst wir stehen, ehe sie eine solche Verhaftung verfügen, sich sehr genau über die Gründe der Verhaftung und die Person des Verhafteten unterrichten. Es gibt darin keinen Irrtum. Unsere Behörde, soweit ich sie kenne, und ich kenne nur die niedrigsten Grade, sucht doch nicht etwa die Schuld in der Bevölkerung, sondern wird, wie es im Gesetz heißt, von der Schuld angezogen und muß uns Wächter ausschicken. Das ist Gesetz. Wo gäbe es da einen Irrtum?" "Dieses Gesetz kenne ich nicht", sagte K. "Desto schlimmer für Sie", sagte der Wächter. "Es besteht wohl auch nur in Ihren Köpfen", sagte K., er wollte sich irgendwie in die Gedanken der Wächter einschleichen, sie zu seinen Gunsten wenden oder sich dort einbürgern. Aber der Wächter sagte nur abweisend: "Sie werden es zu fühlen bekommen." Franz mischte sich ein und sagte: "Sieh, Willem, er gibt zu, er kenne das Gesetz nicht, und behauptet gleichzeitig, schuldlos zu sein." "Du hast ganz recht, aber ihm kann man nichts begreiflich machen", sagte der andere. K. antwortete nichts mehr; muß ich, dachte er, durch das Geschwätz dieser niedrigsten Organe - sie geben selbst zu, es zu sein - mich noch mehr verwirren lassen? Sie reden doch jedenfalls von Dingen, die sie gar nicht verstehen. Ihre Sicherheit ist nur durch ihre Dummheit möglich. Ein paar Worte, die ich mit einem mir ebenbürtigen Menschen sprechen werde, werden alles unvergleichlich klarer machen als die längsten Reden mit diesen. Er ging einige Male in dem freien Raum des Zimmers auf und ab, drüben sah er die alte Frau, die einen noch viel älteren Greis zum Fenster gezerrt hatte, den sie umschlungen hielt. K. mußte dieser Schaustellung ein Ende machen: "Führen Sie mich zu Ihrem Vorgesetzten", sagte er. "Wenn er es wünscht; nicht früher", sagte der Wächter, der Willem genannt worden war. "Und nun rate ich Ihnen", fügte er hinzu, "in Ihr Zimmer zu gehen, sich ruhig zu verhalten und darauf zu warten, was über Sie verfügt werden wird. Wir raten Ihnen, zerstreuen Sie sich nicht durch nutzlose Gedanken, sondern sammeln Sie sich, es werden große Anforderungen an Sie gestellt werden. Sie haben uns nicht so behandelt, wie es unser Entgegenkommen verdient hätte, Sie haben vergessen, daß wir, mögen wir auch sein was immer, zumindest jetzt Ihnen gegenüber freie Männer sind, das ist kein kleines Übergewicht. Trotzdem sind wir bereit, falls Sie Geld haben, Ihnen ein kleines Frühstück aus dem Kaffeehaus drüben zu bringen." + +Ohne auf dieses Angebot zu antworten, stand K. ein Weilchen lang still. Vielleicht würden ihn die beiden, wenn er die Tür des folgenden Zimmers oder gar die Tür des Vorzimmers öffnete, gar nicht zu hindern wagen, vielleicht wäre es die einfachste Lösung des Ganzen, daß er es auf die Spitze trieb. Aber vielleicht würden sie ihn doch packen und, war er einmal niedergeworfen, so war auch alle Überlegenheit verloren, die er jetzt ihnen gegenüber in gewisser Hinsicht doch wahrte. Deshalb zog er die Sicherheit der Lösung vor, wie sie der natürliche Verlauf bringen mußte, und ging in sein Zimmer zurück, ohne daß von seiner Seite oder von Seite der Wächter ein weiteres Wort gefallen wäre. + +Er warf sich auf sein Bett und nahm vom Waschtisch einen schönen Apfel, den er sich gestern abend für das Frühstück vorbereitet hatte. Jetzt war er sein einziges Frühstück und jedenfalls, wie er sich beim ersten großen Bissen versicherte, viel besser, als das Frühstück aus dem schmutzigen Nachtcafé gewesen wäre, das er durch die Gnade der Wächter hätte bekommen können. Er fühlte sich wohl und zuversichtlich, in der Bank versäumte er zwar heute vormittag seinen Dienst, aber das war bei der verhältnismäßig hohen Stellung, die er dort einnahm, leicht entschuldigt. Sollte er die wirkliche Entschuldigung anführen? Er gedachte es zu tun, Würde man ihm nicht glauben, was in diesem Fall begreiflich war, so konnte er Frau Grubach als Zeugin führen oder auch die beiden Alten von drüben, die wohl jetzt auf dem Marsch zum gegenüberliegenden Fenster waren. Es wunderte K., wenigstens aus dem Gedankengang der Wächter wunderte es ihn, daß sie ihn in das Zimmer getrieben und ihn hier allein gelassen hatten, wo er doch zehnfache Möglichkeit hatte, sich umzubringen. Gleichzeitig allerdings fragte er sich, diesmal aus seinem Gedankengang, was für einen Grund er haben könnte, es zu tun. Etwa weil die zwei nebenan saßen und sein Frühstück abgefangen hatten? Es wäre so sinnlos gewesen, sich umzubringen, daß er, selbst wenn er es hätte tun wollen, infolge der Sinnlosigkeit dazu nicht imstande gewesen wäre. Wäre die geistige Beschränktheit der Wächter nicht so auffallend gewesen, so hätte man annehmen können, daß auch sie, infolge der gleichen Überzeugung, keine Gefahr darin gesehen hätten, ihn allein zu lassen. Sie mochten jetzt, wenn sie wollten, zusehen, wie er zu einem Wandschränkchen ging, in dem er einen guten Schnaps aufbewahrte, wie er ein Gläschen zuerst zum Ersatz des Frühstücks leerte und wie er ein zweites Gläschen dazu bestimmte, sich Mut zu machen, das letztere nur aus Vorsicht für den unwahrscheinlichen Fall, daß es nötig sein sollte. + + diff --git a/sources/src/main/resources/pr2/enums/use/professor_left.png b/sources/src/main/resources/pr2/enums/use/professor_left.png new file mode 100644 index 0000000..491a16f Binary files /dev/null and b/sources/src/main/resources/pr2/enums/use/professor_left.png differ diff --git a/sources/src/main/resources/pr2/enums/use/professor_right.png b/sources/src/main/resources/pr2/enums/use/professor_right.png new file mode 100644 index 0000000..a94e648 Binary files /dev/null and b/sources/src/main/resources/pr2/enums/use/professor_right.png differ diff --git a/sources/src/main/resources/pr2/enums/use/professor_walk_cycle_no_hat.png b/sources/src/main/resources/pr2/enums/use/professor_walk_cycle_no_hat.png new file mode 100644 index 0000000..817d4d3 Binary files /dev/null and b/sources/src/main/resources/pr2/enums/use/professor_walk_cycle_no_hat.png differ diff --git a/sources/src/main/resources/pr2/exceptions/finallys/professor_left.png b/sources/src/main/resources/pr2/exceptions/finallys/professor_left.png new file mode 100644 index 0000000..491a16f Binary files /dev/null and b/sources/src/main/resources/pr2/exceptions/finallys/professor_left.png differ diff --git a/sources/src/main/resources/pr2/exceptions/finallys/professor_right.png b/sources/src/main/resources/pr2/exceptions/finallys/professor_right.png new file mode 100644 index 0000000..a94e648 Binary files /dev/null and b/sources/src/main/resources/pr2/exceptions/finallys/professor_right.png differ diff --git a/sources/src/main/resources/pr2/exceptions/finallys/professor_walk_cycle_no_hat.png b/sources/src/main/resources/pr2/exceptions/finallys/professor_walk_cycle_no_hat.png new file mode 100644 index 0000000..817d4d3 Binary files /dev/null and b/sources/src/main/resources/pr2/exceptions/finallys/professor_walk_cycle_no_hat.png differ diff --git a/sources/src/main/resources/pr2/generics/verwendung/10c.png b/sources/src/main/resources/pr2/generics/verwendung/10c.png new file mode 100644 index 0000000..fa5f93e Binary files /dev/null and b/sources/src/main/resources/pr2/generics/verwendung/10c.png differ diff --git a/sources/src/main/resources/pr2/generics/verwendung/1c.png b/sources/src/main/resources/pr2/generics/verwendung/1c.png new file mode 100644 index 0000000..a9df83d Binary files /dev/null and b/sources/src/main/resources/pr2/generics/verwendung/1c.png differ diff --git a/sources/src/main/resources/pr2/generics/verwendung/1e.png b/sources/src/main/resources/pr2/generics/verwendung/1e.png new file mode 100644 index 0000000..1ebd286 Binary files /dev/null and b/sources/src/main/resources/pr2/generics/verwendung/1e.png differ diff --git a/sources/src/main/resources/pr2/generics/verwendung/20c.png b/sources/src/main/resources/pr2/generics/verwendung/20c.png new file mode 100644 index 0000000..95cb86c Binary files /dev/null and b/sources/src/main/resources/pr2/generics/verwendung/20c.png differ diff --git a/sources/src/main/resources/pr2/generics/verwendung/2c.png b/sources/src/main/resources/pr2/generics/verwendung/2c.png new file mode 100644 index 0000000..0efa797 Binary files /dev/null and b/sources/src/main/resources/pr2/generics/verwendung/2c.png differ diff --git a/sources/src/main/resources/pr2/generics/verwendung/2e.png b/sources/src/main/resources/pr2/generics/verwendung/2e.png new file mode 100644 index 0000000..ff3c78f Binary files /dev/null and b/sources/src/main/resources/pr2/generics/verwendung/2e.png differ diff --git a/sources/src/main/resources/pr2/generics/verwendung/50c.png b/sources/src/main/resources/pr2/generics/verwendung/50c.png new file mode 100644 index 0000000..6c10ee4 Binary files /dev/null and b/sources/src/main/resources/pr2/generics/verwendung/50c.png differ diff --git a/sources/src/main/resources/pr2/generics/verwendung/5c.png b/sources/src/main/resources/pr2/generics/verwendung/5c.png new file mode 100644 index 0000000..013376c Binary files /dev/null and b/sources/src/main/resources/pr2/generics/verwendung/5c.png differ diff --git a/sources/src/main/resources/pr2/io/buffered_reader/kafka.txt b/sources/src/main/resources/pr2/io/buffered_reader/kafka.txt new file mode 100644 index 0000000..b5695c5 --- /dev/null +++ b/sources/src/main/resources/pr2/io/buffered_reader/kafka.txt @@ -0,0 +1,11 @@ +Verhaftung - Gespräch mit Frau Grubach - Dann Fräulein Bürstner + +Jemand mußte Josef K. verleumdet haben, denn ohne daß er etwas Böses getan hätte, wurde er eines Morgens verhaftet. Die Köchin der Frau Grubach, seiner Zimmervermieterin, die ihm jeden Tag gegen acht Uhr früh das Frühstück brachte, kam diesmal nicht. Das war noch niemals geschehen. K. wartete noch ein Weilchen, sah von seinem Kopfkissen aus die alte Frau, die ihm gegenüber wohnte und die ihn mit einer an ihr ganz ungewöhnlichen Neugierde beobachtete, dann aber, gleichzeitig befremdet und hungrig, läutete er. Sofort klopfte es und ein Mann, den er in dieser Wohnung noch niemals gesehen hatte, trat ein. Er war schlank und doch fest gebaut, er trug ein anliegendes schwarzes Kleid, das, ähnlich den Reiseanzügen, mit verschiedenen Falten, Taschen, Schnallen, Knöpfen und einem Gürtel versehen war und infolgedessen, ohne daß man sich darüber klar wurde, wozu es dienen sollte, besonders praktisch erschien. "Wer sind Sie?" fragte K. und saß gleich halb aufrecht im Bett. Der Mann aber ging über die Frage hinweg, als müsse man seine Erscheinung hinnehmen, und sagte bloß seinerseits: "Sie haben geläutet?" "Anna soll mir das Frühstück bringen", sagte K. und versuchte, zunächst stillschweigend, durch Aufmerksamkeit und Überlegung festzustellen, wer der Mann eigentlich war. Aber dieser setzte sich nicht allzulange seinen Blicken aus, sondern wandte sich zur Tür, die er ein wenig öffnete, um jemandem, der offenbar knapp hinter der Tür stand, zu sagen: "Er will, daß Anna ihm das Frühstück bringt." Ein kleines Gelächter im Nebenzimmer folgte, es war nach dem Klang nicht sicher, ob nicht mehrere Personen daran beteiligt waren. Obwohl der fremde Mann dadurch nichts erfahren haben konnte, was er nicht schon früher gewußt hätte, sagte er nun doch zu K. im Tone einer Meldung: "Es ist unmöglich." "Das wäre neu", sagte K., sprang aus dem Bett und zog rasch seine Hosen an. "Ich will doch sehen, was für Leute im Nebenzimmer sind und wie Frau Grubach diese Störung mir gegenüber verantworten wird." Es fiel ihm zwar gleich ein, daß er das nicht hätte laut sagen müssen und daß er dadurch gewissermaßen ein Beaufsichtigungsrecht des Fremden anerkannte, aber es schien ihm jetzt nicht wichtig. Immerhin faßte es der Fremde so auf, denn er sagte: "Wollen Sie nicht lieber hierbleiben?" "Ich will weder hierbleiben, noch von Ihnen angesprochen werden, solange Sie sich mir nicht vorstellen." "Es war gut gemeint", sagte der Fremde und öffnete nun freiwillig die Tür. Im Nebenzimmer, in das K. langsamer eintrat, als er wollte, sah es auf den ersten Blick fast genau so aus wie am Abend vorher. Es war das Wohnzimmer der Frau Grubach, vielleicht war in diesem mit Möbeln, Decken, Porzellan und Photographien überfüllten Zimmer heute ein wenig mehr Raum als sonst, man erkannte das nicht gleich, um so weniger, als die Hauptveränderung in der Anwesenheit eines Mannes bestand, der beim offenen Fenster mit einem Buch saß, von dem er jetzt aufblickte. "Sie hätten in Ihrem Zimmer bleiben sollen! Hat es Ihnen denn Franz nicht gesagt?" "Ja, was wollen Sie denn?" sagte K. und sah von der neuen Bekanntschaft zu dem mit Franz Benannten, der in der Tür stehengeblieben war, und dann wieder zurück. Durch das offene Fenster erblickte man wieder die alte Frau, die mit wahrhaft greisenhafter Neugierde zu dem jetzt gegenüberliegenden Fenster getreten war, um auch weiterhin alles zu sehen. "Ich will doch Frau Grubach -", sagte K., machte eine Bewegung, als reiße er sich von den zwei Männern los, die aber weit von ihm entfernt standen, und wollte weitergehen. "Nein", sagte der Mann beim Fenster, warf das Buch auf ein Tischchen und stand auf. "Sie dürfen nicht weggehen, Sie sind ja verhaftet." "Es sieht so aus", sagte K. "Und warum denn?" fragte er dann. "Wir sind nicht dazu bestellt, Ihnen das zu sagen. Gehen Sie in Ihr Zimmer und warten Sie. Das Verfahren ist nun einmal eingeleitet, und Sie werden alles zur richtigen Zeit erfahren. Ich gehe über meinen Auftrag hinaus, wenn ich Ihnen so freundschaftlich zurede. Aber ich hoffe, es hört es niemand sonst als Franz, und der ist selbst gegen alle Vorschrift freundlich zu Ihnen. Wenn Sie auch weiterhin so viel Glück haben wie bei der Bestimmung Ihrer Wächter, dann können Sie zuversichtlich sein." K. wollte sich setzen, aber nun sah er, daß im ganzen Zimmer keine Sitzgelegenheit war, außer dem Sessel beim Fenster. "Sie werden noch einsehen, wie wahr das alles ist", sagte Franz und ging gleichzeitig mit dem andern Mann auf ihn zu. Besonders der letztere überragte K. bedeutend und klopfte ihm öfters auf die Schulter. Beide prüften K.s Nachthemd und sagten, daß er jetzt ein viel schlechteres Hemd werde anziehen müssen, daß sie aber dieses Hemd wie auch seine übrige Wäsche aufbewahren und, wenn seine Sache günstig ausfallen sollte, ihm wieder zurückgeben würden. "Es ist besser, Sie geben die Sachen uns als ins Depot", sagten sie, "denn im Depot kommen öfters Unterschleife vor und außerdem verkauft man dort alle Sachen nach einer gewissen Zeit, ohne Rücksicht, ob das betreffende Verfahren zu Ende ist oder nicht. Und wie lange dauern doch derartige Prozesse, besonders in letzter Zeit! Sie bekämen dann schließlich allerdings vom Depot den Erlös, aber dieser Erlös ist erstens an sich schon gering, denn beim Verkauf entscheidet nicht die Höhe des Angebotes, sondern die Höhe der Bestechung, und weiter verringern sich solche Erlöse erfahrungsgemäß, wenn sie von Hand zu Hand und von Jahr zu Jahr weitergegeben werden." K. achtete auf diese Reden kaum, das Verfügungsrecht über seine Sachen, das er vielleicht noch besaß, schätzte er nicht hoch ein, viel wichtiger war es ihm, Klarheit über seine Lage zu bekommen; in Gegenwart dieser Leute konnte er aber nicht einmal nachdenken, immer wieder stieß der Bauch des zweiten Wächters - es konnten ja nur Wächter sein - förmlich freundschaftlich an ihn, sah er aber auf, dann erblickte er ein zu diesem dicken Körper gar nicht passendes trockenes, knochiges Gesicht mit starker, seitlich gedrehter Nase, das sich über ihn hinweg mit dem anderen Wächter verständigte. Was waren denn das für Menschen? Wovon sprachen sie? Welcher Behörde gehörten sie an? K. lebte doch in einem Rechtsstaat, überall herrschte Friede, alle Gesetze bestanden aufrecht, wer wagte, ihn in seiner Wohnung zu überfallen? Er neigte stets dazu, alles möglichst leicht zu nehmen, das Schlimmste erst beim Eintritt des Schlimmsten zu glauben, keine Vorsorge für die Zukunft zu treffen, selbst wenn alles drohte. Hier schien ihm das aber nicht richtig, man konnte zwar das Ganze als Spaß ansehen, als einen groben Spaß, den ihm aus unbekannten Gründen, vielleicht weil heute sein dreißigster Geburtstag war, die Kollegen in der Bank veranstaltet hatten, es war natürlich möglich, vielleicht brauchte er nur auf irgendeine Weise den Wächtern ins Gesicht zu lachen, und sie würden mitlachen, vielleicht waren es Dienstmänner von der Straßenecke, sie sahen ihnen nicht unähnlich - trotzdem war er diesmal, förmlich schon seit dem ersten Anblick des Wächters Franz, entschlossen, nicht den geringsten Vorteil, den er vielleicht gegenüber diesen Leuten besaß, aus der Hand zu geben. Darin, daß man später sagen würde, er habe keinen Spaß verstanden, sah K. eine ganz geringe Gefahr, wohl aber erinnerte er sich - ohne daß es sonst seine Gewohnheit gewesen wäre, aus Erfahrungen zu lernen - an einige, an sich unbedeutende Fälle, in denen er zum Unterschied von seinen Freunden mit Bewußtsein, ohne das geringste Gefühl für die möglichen Folgen, sich unvorsichtig benommen hatte und dafür durch das Ergebnis gestraft worden war. Es sollte nicht wieder geschehen, zumindest nicht diesmal; war es eine Komödie, so wollte er mitspielen. + +Noch war er frei. "Erlauben Sie", sagte er und ging eilig zwischen den Wächtern durch in sein Zimmer. "Er scheint vernünftig zu sein", hörte er hinter sich sagen. In seinem Zimmer riß er gleich die Schubladen des Schreibtischs auf, es lag dort alles in großer Ordnung, aber gerade die Legitimationspapiere, die er suchte, konnte er in der Aufregung nicht gleich finden. Schließlich fand er seine Radfahrlegitimation und wollte schon mit ihr zu den Wächtern gehen, dann aber schien ihm das Papier zu geringfügig und er suchte weiter, bis er den Geburtsschein fand. Als er wieder in das Nebenzimmer zurückkam, öffnete sich gerade die gegenüberliegende Tür und Frau Grubach wollte dort eintreten. Man sah sie nur einen Augenblick, denn kaum hatte sie K. erkannt, als sie offenbar verlegen wurde, um Verzeihung bat, verschwand und äußerst vorsichtig die Tür schloß. "Kommen Sie doch herein", hatte K. gerade noch sagen können. Nun aber stand er mit seinen Papieren in der Mitte des Zimmers, sah noch auf die Tür hin, die sich nicht wieder öffnete, und wurde erst durch einen Anruf der Wächter aufgeschreckt, die bei dem Tischchen am offenen Fenster saßen und, wie K. jetzt erkannte, sein Frühstück verzehrten. "Warum ist sie nicht eingetreten?" fragte er. "Sie darf nicht", sagte der große Wächter. "Sie sind doch verhaftet." "Wie kann ich denn verhaftet sein? Und gar auf diese Weise?" "Nun fangen Sie also wieder an", sagte der Wächter und tauchte ein Butterbrot ins Honigfäßchen. "Solche Fragen beantworten wir nicht." "Sie werden sie beantworten müssen", sagte K. "Hier sind meine Legitimationspapiere, zeigen Sie mir jetzt die Ihrigen und vor allem den Verhaftbefehl." "Du lieber Himmel!" sagte der Wächter. "Daß Sie sich in Ihre Lage nicht fügen können und daß Sie es darauf angelegt zu haben scheinen, uns, die wir Ihnen jetzt wahrscheinlich von allen Ihren Mitmenschen am nächsten stehen, nutzlos zu reizen!" "Es ist so, glauben Sie es doch", sagte Franz, führte die Kaffeetasse, die er in der Hand hielt, nicht zum Mund, sondern sah K. mit einem langen, wahrscheinlich bedeutungsvollen, aber unverständlichen Blick an. K. ließ sich, ohne es zu wollen, in ein Zwiegespräch der Blicke mit Franz ein, schlug dann aber doch auf seine Papiere und sagte: "Hier sind meine Legitimationspapiere." "Was kümmern uns denn die?" rief nun schon der große Wächter. "Sie führen sich ärger auf als ein Kind. Was wollen Sie denn? Wollen Sie Ihren großen, verfluchten Prozeß dadurch zu einem raschen Ende bringen, daß Sie mit uns, den Wächtern, über Legitimation und Verhaftbefehl diskutieren? Wir sind niedrige Angestellte, die sich in einem Legitimationspapier kaum auskennen und die mit Ihrer Sache nichts anderes zu tun haben, als daß sie zehn Stunden täglich bei Ihnen Wache halten und dafür bezahlt werden. Das ist alles, was wir sind, trotzdem aber sind wir fähig, einzusehen, daß die hohen Behörden, in deren Dienst wir stehen, ehe sie eine solche Verhaftung verfügen, sich sehr genau über die Gründe der Verhaftung und die Person des Verhafteten unterrichten. Es gibt darin keinen Irrtum. Unsere Behörde, soweit ich sie kenne, und ich kenne nur die niedrigsten Grade, sucht doch nicht etwa die Schuld in der Bevölkerung, sondern wird, wie es im Gesetz heißt, von der Schuld angezogen und muß uns Wächter ausschicken. Das ist Gesetz. Wo gäbe es da einen Irrtum?" "Dieses Gesetz kenne ich nicht", sagte K. "Desto schlimmer für Sie", sagte der Wächter. "Es besteht wohl auch nur in Ihren Köpfen", sagte K., er wollte sich irgendwie in die Gedanken der Wächter einschleichen, sie zu seinen Gunsten wenden oder sich dort einbürgern. Aber der Wächter sagte nur abweisend: "Sie werden es zu fühlen bekommen." Franz mischte sich ein und sagte: "Sieh, Willem, er gibt zu, er kenne das Gesetz nicht, und behauptet gleichzeitig, schuldlos zu sein." "Du hast ganz recht, aber ihm kann man nichts begreiflich machen", sagte der andere. K. antwortete nichts mehr; muß ich, dachte er, durch das Geschwätz dieser niedrigsten Organe - sie geben selbst zu, es zu sein - mich noch mehr verwirren lassen? Sie reden doch jedenfalls von Dingen, die sie gar nicht verstehen. Ihre Sicherheit ist nur durch ihre Dummheit möglich. Ein paar Worte, die ich mit einem mir ebenbürtigen Menschen sprechen werde, werden alles unvergleichlich klarer machen als die längsten Reden mit diesen. Er ging einige Male in dem freien Raum des Zimmers auf und ab, drüben sah er die alte Frau, die einen noch viel älteren Greis zum Fenster gezerrt hatte, den sie umschlungen hielt. K. mußte dieser Schaustellung ein Ende machen: "Führen Sie mich zu Ihrem Vorgesetzten", sagte er. "Wenn er es wünscht; nicht früher", sagte der Wächter, der Willem genannt worden war. "Und nun rate ich Ihnen", fügte er hinzu, "in Ihr Zimmer zu gehen, sich ruhig zu verhalten und darauf zu warten, was über Sie verfügt werden wird. Wir raten Ihnen, zerstreuen Sie sich nicht durch nutzlose Gedanken, sondern sammeln Sie sich, es werden große Anforderungen an Sie gestellt werden. Sie haben uns nicht so behandelt, wie es unser Entgegenkommen verdient hätte, Sie haben vergessen, daß wir, mögen wir auch sein was immer, zumindest jetzt Ihnen gegenüber freie Männer sind, das ist kein kleines Übergewicht. Trotzdem sind wir bereit, falls Sie Geld haben, Ihnen ein kleines Frühstück aus dem Kaffeehaus drüben zu bringen." + +Ohne auf dieses Angebot zu antworten, stand K. ein Weilchen lang still. Vielleicht würden ihn die beiden, wenn er die Tür des folgenden Zimmers oder gar die Tür des Vorzimmers öffnete, gar nicht zu hindern wagen, vielleicht wäre es die einfachste Lösung des Ganzen, daß er es auf die Spitze trieb. Aber vielleicht würden sie ihn doch packen und, war er einmal niedergeworfen, so war auch alle Überlegenheit verloren, die er jetzt ihnen gegenüber in gewisser Hinsicht doch wahrte. Deshalb zog er die Sicherheit der Lösung vor, wie sie der natürliche Verlauf bringen mußte, und ging in sein Zimmer zurück, ohne daß von seiner Seite oder von Seite der Wächter ein weiteres Wort gefallen wäre. + +Er warf sich auf sein Bett und nahm vom Waschtisch einen schönen Apfel, den er sich gestern abend für das Frühstück vorbereitet hatte. Jetzt war er sein einziges Frühstück und jedenfalls, wie er sich beim ersten großen Bissen versicherte, viel besser, als das Frühstück aus dem schmutzigen Nachtcafé gewesen wäre, das er durch die Gnade der Wächter hätte bekommen können. Er fühlte sich wohl und zuversichtlich, in der Bank versäumte er zwar heute vormittag seinen Dienst, aber das war bei der verhältnismäßig hohen Stellung, die er dort einnahm, leicht entschuldigt. Sollte er die wirkliche Entschuldigung anführen? Er gedachte es zu tun, Würde man ihm nicht glauben, was in diesem Fall begreiflich war, so konnte er Frau Grubach als Zeugin führen oder auch die beiden Alten von drüben, die wohl jetzt auf dem Marsch zum gegenüberliegenden Fenster waren. Es wunderte K., wenigstens aus dem Gedankengang der Wächter wunderte es ihn, daß sie ihn in das Zimmer getrieben und ihn hier allein gelassen hatten, wo er doch zehnfache Möglichkeit hatte, sich umzubringen. Gleichzeitig allerdings fragte er sich, diesmal aus seinem Gedankengang, was für einen Grund er haben könnte, es zu tun. Etwa weil die zwei nebenan saßen und sein Frühstück abgefangen hatten? Es wäre so sinnlos gewesen, sich umzubringen, daß er, selbst wenn er es hätte tun wollen, infolge der Sinnlosigkeit dazu nicht imstande gewesen wäre. Wäre die geistige Beschränktheit der Wächter nicht so auffallend gewesen, so hätte man annehmen können, daß auch sie, infolge der gleichen Überzeugung, keine Gefahr darin gesehen hätten, ihn allein zu lassen. Sie mochten jetzt, wenn sie wollten, zusehen, wie er zu einem Wandschränkchen ging, in dem er einen guten Schnaps aufbewahrte, wie er ein Gläschen zuerst zum Ersatz des Frühstücks leerte und wie er ein zweites Gläschen dazu bestimmte, sich Mut zu machen, das letztere nur aus Vorsicht für den unwahrscheinlichen Fall, daß es nötig sein sollte. + + diff --git a/sources/src/main/resources/pr2/io/data_output/.gitkeep b/sources/src/main/resources/pr2/io/data_output/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/sources/src/main/resources/pr2/io/datei_lesen/daten.dat b/sources/src/main/resources/pr2/io/datei_lesen/daten.dat new file mode 100644 index 0000000..8d3eacd Binary files /dev/null and b/sources/src/main/resources/pr2/io/datei_lesen/daten.dat differ diff --git a/sources/src/main/resources/pr2/io/datei_schreiben/.gitkeep b/sources/src/main/resources/pr2/io/datei_schreiben/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/sources/src/main/resources/pr2/io/random_access/data.dat b/sources/src/main/resources/pr2/io/random_access/data.dat new file mode 100644 index 0000000..33a6855 Binary files /dev/null and b/sources/src/main/resources/pr2/io/random_access/data.dat differ diff --git a/sources/src/main/resources/pr2/io/random_access/output/.gitkeep b/sources/src/main/resources/pr2/io/random_access/output/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/sources/src/main/resources/pr2/io/reader_writer/kafka.txt b/sources/src/main/resources/pr2/io/reader_writer/kafka.txt new file mode 100644 index 0000000..b5695c5 --- /dev/null +++ b/sources/src/main/resources/pr2/io/reader_writer/kafka.txt @@ -0,0 +1,11 @@ +Verhaftung - Gespräch mit Frau Grubach - Dann Fräulein Bürstner + +Jemand mußte Josef K. verleumdet haben, denn ohne daß er etwas Böses getan hätte, wurde er eines Morgens verhaftet. Die Köchin der Frau Grubach, seiner Zimmervermieterin, die ihm jeden Tag gegen acht Uhr früh das Frühstück brachte, kam diesmal nicht. Das war noch niemals geschehen. K. wartete noch ein Weilchen, sah von seinem Kopfkissen aus die alte Frau, die ihm gegenüber wohnte und die ihn mit einer an ihr ganz ungewöhnlichen Neugierde beobachtete, dann aber, gleichzeitig befremdet und hungrig, läutete er. Sofort klopfte es und ein Mann, den er in dieser Wohnung noch niemals gesehen hatte, trat ein. Er war schlank und doch fest gebaut, er trug ein anliegendes schwarzes Kleid, das, ähnlich den Reiseanzügen, mit verschiedenen Falten, Taschen, Schnallen, Knöpfen und einem Gürtel versehen war und infolgedessen, ohne daß man sich darüber klar wurde, wozu es dienen sollte, besonders praktisch erschien. "Wer sind Sie?" fragte K. und saß gleich halb aufrecht im Bett. Der Mann aber ging über die Frage hinweg, als müsse man seine Erscheinung hinnehmen, und sagte bloß seinerseits: "Sie haben geläutet?" "Anna soll mir das Frühstück bringen", sagte K. und versuchte, zunächst stillschweigend, durch Aufmerksamkeit und Überlegung festzustellen, wer der Mann eigentlich war. Aber dieser setzte sich nicht allzulange seinen Blicken aus, sondern wandte sich zur Tür, die er ein wenig öffnete, um jemandem, der offenbar knapp hinter der Tür stand, zu sagen: "Er will, daß Anna ihm das Frühstück bringt." Ein kleines Gelächter im Nebenzimmer folgte, es war nach dem Klang nicht sicher, ob nicht mehrere Personen daran beteiligt waren. Obwohl der fremde Mann dadurch nichts erfahren haben konnte, was er nicht schon früher gewußt hätte, sagte er nun doch zu K. im Tone einer Meldung: "Es ist unmöglich." "Das wäre neu", sagte K., sprang aus dem Bett und zog rasch seine Hosen an. "Ich will doch sehen, was für Leute im Nebenzimmer sind und wie Frau Grubach diese Störung mir gegenüber verantworten wird." Es fiel ihm zwar gleich ein, daß er das nicht hätte laut sagen müssen und daß er dadurch gewissermaßen ein Beaufsichtigungsrecht des Fremden anerkannte, aber es schien ihm jetzt nicht wichtig. Immerhin faßte es der Fremde so auf, denn er sagte: "Wollen Sie nicht lieber hierbleiben?" "Ich will weder hierbleiben, noch von Ihnen angesprochen werden, solange Sie sich mir nicht vorstellen." "Es war gut gemeint", sagte der Fremde und öffnete nun freiwillig die Tür. Im Nebenzimmer, in das K. langsamer eintrat, als er wollte, sah es auf den ersten Blick fast genau so aus wie am Abend vorher. Es war das Wohnzimmer der Frau Grubach, vielleicht war in diesem mit Möbeln, Decken, Porzellan und Photographien überfüllten Zimmer heute ein wenig mehr Raum als sonst, man erkannte das nicht gleich, um so weniger, als die Hauptveränderung in der Anwesenheit eines Mannes bestand, der beim offenen Fenster mit einem Buch saß, von dem er jetzt aufblickte. "Sie hätten in Ihrem Zimmer bleiben sollen! Hat es Ihnen denn Franz nicht gesagt?" "Ja, was wollen Sie denn?" sagte K. und sah von der neuen Bekanntschaft zu dem mit Franz Benannten, der in der Tür stehengeblieben war, und dann wieder zurück. Durch das offene Fenster erblickte man wieder die alte Frau, die mit wahrhaft greisenhafter Neugierde zu dem jetzt gegenüberliegenden Fenster getreten war, um auch weiterhin alles zu sehen. "Ich will doch Frau Grubach -", sagte K., machte eine Bewegung, als reiße er sich von den zwei Männern los, die aber weit von ihm entfernt standen, und wollte weitergehen. "Nein", sagte der Mann beim Fenster, warf das Buch auf ein Tischchen und stand auf. "Sie dürfen nicht weggehen, Sie sind ja verhaftet." "Es sieht so aus", sagte K. "Und warum denn?" fragte er dann. "Wir sind nicht dazu bestellt, Ihnen das zu sagen. Gehen Sie in Ihr Zimmer und warten Sie. Das Verfahren ist nun einmal eingeleitet, und Sie werden alles zur richtigen Zeit erfahren. Ich gehe über meinen Auftrag hinaus, wenn ich Ihnen so freundschaftlich zurede. Aber ich hoffe, es hört es niemand sonst als Franz, und der ist selbst gegen alle Vorschrift freundlich zu Ihnen. Wenn Sie auch weiterhin so viel Glück haben wie bei der Bestimmung Ihrer Wächter, dann können Sie zuversichtlich sein." K. wollte sich setzen, aber nun sah er, daß im ganzen Zimmer keine Sitzgelegenheit war, außer dem Sessel beim Fenster. "Sie werden noch einsehen, wie wahr das alles ist", sagte Franz und ging gleichzeitig mit dem andern Mann auf ihn zu. Besonders der letztere überragte K. bedeutend und klopfte ihm öfters auf die Schulter. Beide prüften K.s Nachthemd und sagten, daß er jetzt ein viel schlechteres Hemd werde anziehen müssen, daß sie aber dieses Hemd wie auch seine übrige Wäsche aufbewahren und, wenn seine Sache günstig ausfallen sollte, ihm wieder zurückgeben würden. "Es ist besser, Sie geben die Sachen uns als ins Depot", sagten sie, "denn im Depot kommen öfters Unterschleife vor und außerdem verkauft man dort alle Sachen nach einer gewissen Zeit, ohne Rücksicht, ob das betreffende Verfahren zu Ende ist oder nicht. Und wie lange dauern doch derartige Prozesse, besonders in letzter Zeit! Sie bekämen dann schließlich allerdings vom Depot den Erlös, aber dieser Erlös ist erstens an sich schon gering, denn beim Verkauf entscheidet nicht die Höhe des Angebotes, sondern die Höhe der Bestechung, und weiter verringern sich solche Erlöse erfahrungsgemäß, wenn sie von Hand zu Hand und von Jahr zu Jahr weitergegeben werden." K. achtete auf diese Reden kaum, das Verfügungsrecht über seine Sachen, das er vielleicht noch besaß, schätzte er nicht hoch ein, viel wichtiger war es ihm, Klarheit über seine Lage zu bekommen; in Gegenwart dieser Leute konnte er aber nicht einmal nachdenken, immer wieder stieß der Bauch des zweiten Wächters - es konnten ja nur Wächter sein - förmlich freundschaftlich an ihn, sah er aber auf, dann erblickte er ein zu diesem dicken Körper gar nicht passendes trockenes, knochiges Gesicht mit starker, seitlich gedrehter Nase, das sich über ihn hinweg mit dem anderen Wächter verständigte. Was waren denn das für Menschen? Wovon sprachen sie? Welcher Behörde gehörten sie an? K. lebte doch in einem Rechtsstaat, überall herrschte Friede, alle Gesetze bestanden aufrecht, wer wagte, ihn in seiner Wohnung zu überfallen? Er neigte stets dazu, alles möglichst leicht zu nehmen, das Schlimmste erst beim Eintritt des Schlimmsten zu glauben, keine Vorsorge für die Zukunft zu treffen, selbst wenn alles drohte. Hier schien ihm das aber nicht richtig, man konnte zwar das Ganze als Spaß ansehen, als einen groben Spaß, den ihm aus unbekannten Gründen, vielleicht weil heute sein dreißigster Geburtstag war, die Kollegen in der Bank veranstaltet hatten, es war natürlich möglich, vielleicht brauchte er nur auf irgendeine Weise den Wächtern ins Gesicht zu lachen, und sie würden mitlachen, vielleicht waren es Dienstmänner von der Straßenecke, sie sahen ihnen nicht unähnlich - trotzdem war er diesmal, förmlich schon seit dem ersten Anblick des Wächters Franz, entschlossen, nicht den geringsten Vorteil, den er vielleicht gegenüber diesen Leuten besaß, aus der Hand zu geben. Darin, daß man später sagen würde, er habe keinen Spaß verstanden, sah K. eine ganz geringe Gefahr, wohl aber erinnerte er sich - ohne daß es sonst seine Gewohnheit gewesen wäre, aus Erfahrungen zu lernen - an einige, an sich unbedeutende Fälle, in denen er zum Unterschied von seinen Freunden mit Bewußtsein, ohne das geringste Gefühl für die möglichen Folgen, sich unvorsichtig benommen hatte und dafür durch das Ergebnis gestraft worden war. Es sollte nicht wieder geschehen, zumindest nicht diesmal; war es eine Komödie, so wollte er mitspielen. + +Noch war er frei. "Erlauben Sie", sagte er und ging eilig zwischen den Wächtern durch in sein Zimmer. "Er scheint vernünftig zu sein", hörte er hinter sich sagen. In seinem Zimmer riß er gleich die Schubladen des Schreibtischs auf, es lag dort alles in großer Ordnung, aber gerade die Legitimationspapiere, die er suchte, konnte er in der Aufregung nicht gleich finden. Schließlich fand er seine Radfahrlegitimation und wollte schon mit ihr zu den Wächtern gehen, dann aber schien ihm das Papier zu geringfügig und er suchte weiter, bis er den Geburtsschein fand. Als er wieder in das Nebenzimmer zurückkam, öffnete sich gerade die gegenüberliegende Tür und Frau Grubach wollte dort eintreten. Man sah sie nur einen Augenblick, denn kaum hatte sie K. erkannt, als sie offenbar verlegen wurde, um Verzeihung bat, verschwand und äußerst vorsichtig die Tür schloß. "Kommen Sie doch herein", hatte K. gerade noch sagen können. Nun aber stand er mit seinen Papieren in der Mitte des Zimmers, sah noch auf die Tür hin, die sich nicht wieder öffnete, und wurde erst durch einen Anruf der Wächter aufgeschreckt, die bei dem Tischchen am offenen Fenster saßen und, wie K. jetzt erkannte, sein Frühstück verzehrten. "Warum ist sie nicht eingetreten?" fragte er. "Sie darf nicht", sagte der große Wächter. "Sie sind doch verhaftet." "Wie kann ich denn verhaftet sein? Und gar auf diese Weise?" "Nun fangen Sie also wieder an", sagte der Wächter und tauchte ein Butterbrot ins Honigfäßchen. "Solche Fragen beantworten wir nicht." "Sie werden sie beantworten müssen", sagte K. "Hier sind meine Legitimationspapiere, zeigen Sie mir jetzt die Ihrigen und vor allem den Verhaftbefehl." "Du lieber Himmel!" sagte der Wächter. "Daß Sie sich in Ihre Lage nicht fügen können und daß Sie es darauf angelegt zu haben scheinen, uns, die wir Ihnen jetzt wahrscheinlich von allen Ihren Mitmenschen am nächsten stehen, nutzlos zu reizen!" "Es ist so, glauben Sie es doch", sagte Franz, führte die Kaffeetasse, die er in der Hand hielt, nicht zum Mund, sondern sah K. mit einem langen, wahrscheinlich bedeutungsvollen, aber unverständlichen Blick an. K. ließ sich, ohne es zu wollen, in ein Zwiegespräch der Blicke mit Franz ein, schlug dann aber doch auf seine Papiere und sagte: "Hier sind meine Legitimationspapiere." "Was kümmern uns denn die?" rief nun schon der große Wächter. "Sie führen sich ärger auf als ein Kind. Was wollen Sie denn? Wollen Sie Ihren großen, verfluchten Prozeß dadurch zu einem raschen Ende bringen, daß Sie mit uns, den Wächtern, über Legitimation und Verhaftbefehl diskutieren? Wir sind niedrige Angestellte, die sich in einem Legitimationspapier kaum auskennen und die mit Ihrer Sache nichts anderes zu tun haben, als daß sie zehn Stunden täglich bei Ihnen Wache halten und dafür bezahlt werden. Das ist alles, was wir sind, trotzdem aber sind wir fähig, einzusehen, daß die hohen Behörden, in deren Dienst wir stehen, ehe sie eine solche Verhaftung verfügen, sich sehr genau über die Gründe der Verhaftung und die Person des Verhafteten unterrichten. Es gibt darin keinen Irrtum. Unsere Behörde, soweit ich sie kenne, und ich kenne nur die niedrigsten Grade, sucht doch nicht etwa die Schuld in der Bevölkerung, sondern wird, wie es im Gesetz heißt, von der Schuld angezogen und muß uns Wächter ausschicken. Das ist Gesetz. Wo gäbe es da einen Irrtum?" "Dieses Gesetz kenne ich nicht", sagte K. "Desto schlimmer für Sie", sagte der Wächter. "Es besteht wohl auch nur in Ihren Köpfen", sagte K., er wollte sich irgendwie in die Gedanken der Wächter einschleichen, sie zu seinen Gunsten wenden oder sich dort einbürgern. Aber der Wächter sagte nur abweisend: "Sie werden es zu fühlen bekommen." Franz mischte sich ein und sagte: "Sieh, Willem, er gibt zu, er kenne das Gesetz nicht, und behauptet gleichzeitig, schuldlos zu sein." "Du hast ganz recht, aber ihm kann man nichts begreiflich machen", sagte der andere. K. antwortete nichts mehr; muß ich, dachte er, durch das Geschwätz dieser niedrigsten Organe - sie geben selbst zu, es zu sein - mich noch mehr verwirren lassen? Sie reden doch jedenfalls von Dingen, die sie gar nicht verstehen. Ihre Sicherheit ist nur durch ihre Dummheit möglich. Ein paar Worte, die ich mit einem mir ebenbürtigen Menschen sprechen werde, werden alles unvergleichlich klarer machen als die längsten Reden mit diesen. Er ging einige Male in dem freien Raum des Zimmers auf und ab, drüben sah er die alte Frau, die einen noch viel älteren Greis zum Fenster gezerrt hatte, den sie umschlungen hielt. K. mußte dieser Schaustellung ein Ende machen: "Führen Sie mich zu Ihrem Vorgesetzten", sagte er. "Wenn er es wünscht; nicht früher", sagte der Wächter, der Willem genannt worden war. "Und nun rate ich Ihnen", fügte er hinzu, "in Ihr Zimmer zu gehen, sich ruhig zu verhalten und darauf zu warten, was über Sie verfügt werden wird. Wir raten Ihnen, zerstreuen Sie sich nicht durch nutzlose Gedanken, sondern sammeln Sie sich, es werden große Anforderungen an Sie gestellt werden. Sie haben uns nicht so behandelt, wie es unser Entgegenkommen verdient hätte, Sie haben vergessen, daß wir, mögen wir auch sein was immer, zumindest jetzt Ihnen gegenüber freie Männer sind, das ist kein kleines Übergewicht. Trotzdem sind wir bereit, falls Sie Geld haben, Ihnen ein kleines Frühstück aus dem Kaffeehaus drüben zu bringen." + +Ohne auf dieses Angebot zu antworten, stand K. ein Weilchen lang still. Vielleicht würden ihn die beiden, wenn er die Tür des folgenden Zimmers oder gar die Tür des Vorzimmers öffnete, gar nicht zu hindern wagen, vielleicht wäre es die einfachste Lösung des Ganzen, daß er es auf die Spitze trieb. Aber vielleicht würden sie ihn doch packen und, war er einmal niedergeworfen, so war auch alle Überlegenheit verloren, die er jetzt ihnen gegenüber in gewisser Hinsicht doch wahrte. Deshalb zog er die Sicherheit der Lösung vor, wie sie der natürliche Verlauf bringen mußte, und ging in sein Zimmer zurück, ohne daß von seiner Seite oder von Seite der Wächter ein weiteres Wort gefallen wäre. + +Er warf sich auf sein Bett und nahm vom Waschtisch einen schönen Apfel, den er sich gestern abend für das Frühstück vorbereitet hatte. Jetzt war er sein einziges Frühstück und jedenfalls, wie er sich beim ersten großen Bissen versicherte, viel besser, als das Frühstück aus dem schmutzigen Nachtcafé gewesen wäre, das er durch die Gnade der Wächter hätte bekommen können. Er fühlte sich wohl und zuversichtlich, in der Bank versäumte er zwar heute vormittag seinen Dienst, aber das war bei der verhältnismäßig hohen Stellung, die er dort einnahm, leicht entschuldigt. Sollte er die wirkliche Entschuldigung anführen? Er gedachte es zu tun, Würde man ihm nicht glauben, was in diesem Fall begreiflich war, so konnte er Frau Grubach als Zeugin führen oder auch die beiden Alten von drüben, die wohl jetzt auf dem Marsch zum gegenüberliegenden Fenster waren. Es wunderte K., wenigstens aus dem Gedankengang der Wächter wunderte es ihn, daß sie ihn in das Zimmer getrieben und ihn hier allein gelassen hatten, wo er doch zehnfache Möglichkeit hatte, sich umzubringen. Gleichzeitig allerdings fragte er sich, diesmal aus seinem Gedankengang, was für einen Grund er haben könnte, es zu tun. Etwa weil die zwei nebenan saßen und sein Frühstück abgefangen hatten? Es wäre so sinnlos gewesen, sich umzubringen, daß er, selbst wenn er es hätte tun wollen, infolge der Sinnlosigkeit dazu nicht imstande gewesen wäre. Wäre die geistige Beschränktheit der Wächter nicht so auffallend gewesen, so hätte man annehmen können, daß auch sie, infolge der gleichen Überzeugung, keine Gefahr darin gesehen hätten, ihn allein zu lassen. Sie mochten jetzt, wenn sie wollten, zusehen, wie er zu einem Wandschränkchen ging, in dem er einen guten Schnaps aufbewahrte, wie er ein Gläschen zuerst zum Ersatz des Frühstücks leerte und wie er ein zweites Gläschen dazu bestimmte, sich Mut zu machen, das letztere nur aus Vorsicht für den unwahrscheinlichen Fall, daß es nötig sein sollte. + + diff --git a/sources/src/main/resources/pr2/io/serialisierung/testdata.dat b/sources/src/main/resources/pr2/io/serialisierung/testdata.dat new file mode 100644 index 0000000..34b842b Binary files /dev/null and b/sources/src/main/resources/pr2/io/serialisierung/testdata.dat differ diff --git a/sources/src/main/resources/pr2/lambda/anonymous/explosion_1.png b/sources/src/main/resources/pr2/lambda/anonymous/explosion_1.png new file mode 100644 index 0000000..73e7c66 Binary files /dev/null and b/sources/src/main/resources/pr2/lambda/anonymous/explosion_1.png differ diff --git a/sources/src/main/resources/pr2/lambda/anonymous/ship01.png b/sources/src/main/resources/pr2/lambda/anonymous/ship01.png new file mode 100644 index 0000000..03b3cbd Binary files /dev/null and b/sources/src/main/resources/pr2/lambda/anonymous/ship01.png differ diff --git a/sources/src/main/resources/pr2/lambda/anonymous/ship02.png b/sources/src/main/resources/pr2/lambda/anonymous/ship02.png new file mode 100644 index 0000000..c2b583a Binary files /dev/null and b/sources/src/main/resources/pr2/lambda/anonymous/ship02.png differ diff --git a/sources/src/main/resources/pr2/lambda/anonymous/ship03.png b/sources/src/main/resources/pr2/lambda/anonymous/ship03.png new file mode 100644 index 0000000..b7f269c Binary files /dev/null and b/sources/src/main/resources/pr2/lambda/anonymous/ship03.png differ diff --git a/sources/src/main/resources/pr2/lambda/local/explosion_1.png b/sources/src/main/resources/pr2/lambda/local/explosion_1.png new file mode 100644 index 0000000..73e7c66 Binary files /dev/null and b/sources/src/main/resources/pr2/lambda/local/explosion_1.png differ diff --git a/sources/src/main/resources/pr2/lambda/local/ship01.png b/sources/src/main/resources/pr2/lambda/local/ship01.png new file mode 100644 index 0000000..03b3cbd Binary files /dev/null and b/sources/src/main/resources/pr2/lambda/local/ship01.png differ diff --git a/sources/src/main/resources/pr2/lambda/local/ship02.png b/sources/src/main/resources/pr2/lambda/local/ship02.png new file mode 100644 index 0000000..c2b583a Binary files /dev/null and b/sources/src/main/resources/pr2/lambda/local/ship02.png differ diff --git a/sources/src/main/resources/pr2/lambda/local/ship03.png b/sources/src/main/resources/pr2/lambda/local/ship03.png new file mode 100644 index 0000000..b7f269c Binary files /dev/null and b/sources/src/main/resources/pr2/lambda/local/ship03.png differ diff --git a/sources/src/main/resources/pr2/lambda/nonstatic/explosion_1.png b/sources/src/main/resources/pr2/lambda/nonstatic/explosion_1.png new file mode 100644 index 0000000..73e7c66 Binary files /dev/null and b/sources/src/main/resources/pr2/lambda/nonstatic/explosion_1.png differ diff --git a/sources/src/main/resources/pr2/lambda/nonstatic/ship01.png b/sources/src/main/resources/pr2/lambda/nonstatic/ship01.png new file mode 100644 index 0000000..03b3cbd Binary files /dev/null and b/sources/src/main/resources/pr2/lambda/nonstatic/ship01.png differ diff --git a/sources/src/main/resources/pr2/lambda/nonstatic/ship02.png b/sources/src/main/resources/pr2/lambda/nonstatic/ship02.png new file mode 100644 index 0000000..c2b583a Binary files /dev/null and b/sources/src/main/resources/pr2/lambda/nonstatic/ship02.png differ diff --git a/sources/src/main/resources/pr2/lambda/nonstatic/ship03.png b/sources/src/main/resources/pr2/lambda/nonstatic/ship03.png new file mode 100644 index 0000000..b7f269c Binary files /dev/null and b/sources/src/main/resources/pr2/lambda/nonstatic/ship03.png differ diff --git a/sources/src/main/resources/pr2/lambda/static_member/explosion_1.png b/sources/src/main/resources/pr2/lambda/static_member/explosion_1.png new file mode 100644 index 0000000..73e7c66 Binary files /dev/null and b/sources/src/main/resources/pr2/lambda/static_member/explosion_1.png differ diff --git a/sources/src/main/resources/pr2/lambda/static_member/ship01.png b/sources/src/main/resources/pr2/lambda/static_member/ship01.png new file mode 100644 index 0000000..03b3cbd Binary files /dev/null and b/sources/src/main/resources/pr2/lambda/static_member/ship01.png differ diff --git a/sources/src/main/resources/pr2/lambda/static_member/ship02.png b/sources/src/main/resources/pr2/lambda/static_member/ship02.png new file mode 100644 index 0000000..c2b583a Binary files /dev/null and b/sources/src/main/resources/pr2/lambda/static_member/ship02.png differ diff --git a/sources/src/main/resources/pr2/lambda/static_member/ship03.png b/sources/src/main/resources/pr2/lambda/static_member/ship03.png new file mode 100644 index 0000000..b7f269c Binary files /dev/null and b/sources/src/main/resources/pr2/lambda/static_member/ship03.png differ diff --git a/sources/src/main/resources/pr2/streams/interne_iteration/games.txt b/sources/src/main/resources/pr2/streams/interne_iteration/games.txt new file mode 100644 index 0000000..3390355 --- /dev/null +++ b/sources/src/main/resources/pr2/streams/interne_iteration/games.txt @@ -0,0 +1,994 @@ +96;Half-Life 2;9.2;Nov 16, 2004 +96;Grand Theft Auto V;7.8;Apr 14, 2015 +96;The Orange Box;9.3;Oct 10, 2007 +96;Half-Life;9.1;Oct 31, 1998 +96;BioShock;8.4;Aug 21, 2007 +95;Baldur's Gate II: Shadows of Amn;9.2;Sep 24, 2000 +95;Portal 2;8.8;Apr 19, 2011 +94;The Elder Scrolls V: Skyrim;8.1;Nov 11, 2011 +94;Mass Effect 2;8.7;Jan 26, 2010 +94;Grand Theft Auto: Vice City;8.8;May 12, 2003 +94;Civilization II;9.0;Feb 29, 1996 +94;Quake;8.8;Jun 22, 1996 +94;BioShock Infinite;8.5;Mar 26, 2013 +94;The Elder Scrolls IV: Oblivion;8.0;Mar 20, 2006 +94;Grim Fandango;9.1;Sep 30, 1998 +94;Diablo;8.7;Nov 30, 1996 +94;Sid Meier's Civilization IV;8.2;Oct 25, 2005 +93;The Witcher 3: Wild Hunt;9.1;May 19, 2015 +93;Company of Heroes;8.8;Sep 13, 2006 +93;Unreal Tournament 2004;8.9;Mar 16, 2004 +93;Starcraft II: Wings of Liberty;8.2;Jul 27, 2010 +93;Minecraft;7.4;May 10, 2009 +93;Grand Theft Auto III;8.4;May 20, 2002 +93;Homeworld;8.9;Aug 31, 1999 +93;Star Wars: Knights of the Old Republic;9.0;Nov 18, 2003 +93;World of Warcraft;7.2;Nov 23, 2004 +93;Grand Theft Auto: San Andreas;8.8;Jun 7, 2005 +92;Call of Duty 4: Modern Warfare;8.5;Nov 5, 2007 +92;Warcraft III: Reign of Chaos;9.1;Jul 3, 2002 +92;The Sims;7.9;Jan 31, 2000 +92;Sid Meier's Gettysburg!;7.7;Sep 30, 1997 +92;World Soccer Winning Eleven 7 International;7.9;Apr 9, 2004 +92;Team Fortress 2;9.2;Apr 8, 2008 +92;System Shock 2;9.1;Aug 11, 1999 +92;Tom Clancy's Splinter Cell: Chaos Theory;8.8;Mar 28, 2005 +92;Undertale;8.2;Sep 15, 2015 +92;Rome: Total War;9.1;Sep 22, 2004 +92;Thief: The Dark Project;9.1;Nov 30, 1998 +92;Age of Empires II: The Age of Kings;9.0;Sep 30, 1999 +92;Unreal Tournament (1999);9.1;Nov 30, 1999 +92;Sid Meier's Alpha Centauri;9.1;Feb 12, 1999 +92;Galactic Civilizations II: Twilight of the Arnor;8.4;Apr 30, 2008 +92;Tiger Woods PGA Tour 2003;6.0;Oct 31, 2002 +91;Dishonored;8.4;Oct 9, 2012 +91;Medal of Honor: Allied Assault;8.6;Jan 20, 2002 +91;Myth: The Fallen Lords;8.8;Oct 31, 1997 +91;World of Warcraft: Wrath of the Lich King;7.4;Nov 13, 2008 +91;F1 Challenge '99-'02;8.3;Jun 24, 2003 +91;Baldur's Gate;9.0;Nov 30, 1998 +91;IL-2 Sturmovik;8.7;Nov 18, 2001 +91;FreeSpace 2;8.8;Sep 30, 1999 +91;Metal Gear Solid V: The Phantom Pain;7.7;Sep 1, 2015 +91;Tom Clancy's Splinter Cell;8.6;Feb 19, 2003 +91;Crysis;8.0;Nov 13, 2007 +91;World of Warcraft: The Burning Crusade;7.9;Jan 16, 2007 +91;Tiger Woods PGA Tour 2005;4.6;Sep 20, 2004 +91;The Longest Journey;8.9;Nov 16, 2000 +91;Tony Hawk's Pro Skater 2;8.5;Oct 31, 2000 +91;Star Wars Jedi Knight: Dark Forces II;8.5;Sep 30, 1997 +91;Batman: Arkham Asylum;8.7;Sep 15, 2009 +91;Galactic Civilizations II: Dark Avatar;8.2;Feb 14, 2007 +91;The Operative: No One Lives Forever;8.9;Nov 9, 2000 +91;Battlefield 2;8.4;Jun 21, 2005 +91;Street Fighter IV;8.0;Jul 1, 2009 +91;Fallout 3;7.9;Oct 28, 2008 +91;Batman: Arkham City;8.6;Nov 22, 2011 +91;Fez;6.5;May 1, 2013 +91;Planescape: Torment;9.3;Nov 30, 1999 +91;Neverwinter Nights;8.1;Jun 16, 2002 +91;No One Lives Forever 2: A Spy in H.A.R.M.'s Way;8.7;Sep 30, 2002 +91;Dragon Age: Origins;8.6;Nov 3, 2009 +91;Mark of the Ninja;8.0;Oct 16, 2012 +91;Dark Souls II;7.1;Apr 25, 2014 +91;Call of Duty;8.5;Oct 29, 2003 +91;Madden NFL 2004;8.2;Aug 12, 2003 +90;The Sims 2;8.8;Sep 14, 2004 +90;World of Warcraft: Cataclysm;5.5;Dec 7, 2010 +90;World of Goo;8.5;Oct 21, 2008 +90;Spelunky;7.2;Aug 8, 2013 +90;Black & White;7.6;Mar 26, 2001 +90;Portal;9.3;Apr 8, 2008 +90;NHL 2001;6.9;Sep 28, 2000 +90;Tony Hawk's Pro Skater 3;8.6;Mar 28, 2002 +90;Deus Ex;9.3;Jun 26, 2000 +90;Half-Life 2: Episode Two;9.2;Oct 10, 2007 +90;Braid;8.6;Jan 26, 2010 +90;The Chronicles of Riddick: Escape From Butcher Bay - Developer's Cut;8.7;Dec 8, 2004 +90;Sid Meier's Civilization III;8.4;Oct 30, 2001 +90;Silent Hunter III;7.8;Mar 15, 2005 +90;Sid Meier's Civilization V;7.8;Sep 21, 2010 +90;Falcon 4.0: Allied Force;8.6;Jun 28, 2005 +90;Deus Ex: Human Revolution;8.5;Aug 23, 2011 +90;Dark Souls III;8.2;Apr 12, 2016 +90;Flight Simulator 2002;8.4;Oct 19, 2001 +90;Brothers: A Tale of Two Sons;8.5;Sep 3, 2013 +90;Dota 2;6.2;Jul 9, 2013 +90;Guild Wars 2;7.9;Aug 28, 2012 +90;Freedom Force;8.0;Mar 24, 2002 +90;GTR 2;8.7;Sep 29, 2006 +90;Grand Theft Auto IV;6.5;Dec 2, 2008 +90;Total War: Shogun 2;8.3;Mar 15, 2011 +90;Empire: Total War;6.9;Mar 3, 2009 +90;Command & Conquer: Red Alert;8.9;Oct 31, 1996 +89;Star Wars Jedi Knight II: Jedi Outcast;8.6;Mar 26, 2002 +89;The Walking Dead: A Telltale Games Series;8.7;Dec 11, 2012 +89;Age of Mythology;8.9;Nov 1, 2002 +89;Sacrifice;8.8;Nov 5, 2000 +89;The Witcher 3: Wild Hunt - Hearts of Stone;8.4;Oct 13, 2015 +89;Pillars of Eternity;8.3;Mar 26, 2015 +89;The Elder Scrolls III: Morrowind;9.0;May 1, 2002 +89;Rocksmith 2014 Edition;7.9;Oct 22, 2013 +89;Fallout;8.9;Sep 30, 1997 +89;World Soccer Winning Eleven 9;8.4;Apr 28, 2006 +89;Worldwide Soccer Manager 2005;8.7;Dec 7, 2004 +89;Left 4 Dead;9.2;Nov 18, 2008 +89;Left 4 Dead 2;8.5;Nov 17, 2009 +89;NASCAR Racing 2002 Season;5.8;Feb 14, 2002 +89;Mass Effect;8.6;May 28, 2008 +89;Combat Mission: Barbarossa to Berlin;8.3;Oct 29, 2002 +89;Homeworld: Cataclysm;8.9;Sep 7, 2000 +89;The Walking Dead: Episode 5 - No Time Left;8.9;Nov 21, 2012 +89;Guild Wars;8.4;Apr 26, 2005 +89;Borderlands 2;8.2;Sep 18, 2012 +89;Max Payne;9.1;Jul 23, 2001 +89;Out of the Park Baseball 15;7.2;Apr 21, 2014 +89;World in Conflict;8.1;Sep 18, 2007 +89;NASCAR Racing 4;8.2;Feb 6, 2001 +89;Duke Nukem 3D;8.8;Jan 31, 1996 +89;Far Cry;8.0;Mar 23, 2004 +89;FIFA Soccer 12;7.1;Sep 27, 2011 +89;XCOM: Enemy Unknown;8.2;Oct 9, 2012 +89;Mass Effect 3;5.4;Mar 6, 2012 +89;Rise of Nations;9.0;May 20, 2003 +89;NASCAR Racing 2003 Season;8.6;Feb 14, 2003 +89;Descent 3;8.3;Jun 14, 2000 +89;The Curse of Monkey Island;9.1;Oct 31, 1997 +89;Battlefield 3;7.5;Oct 25, 2011 +89;Battlefield 1942;8.6;Sep 10, 2002 +89;Madden NFL 2003;8.4;Aug 12, 2002 +89;DiRT 2;8.3;Dec 10, 2009 +89;Stardew Valley;8.5;Feb 26, 2016 +89;Prince of Persia: The Sands of Time;8.6;Nov 30, 2003 +89;Railroad Tycoon II;8.4;Oct 31, 1998 +88;Microsoft Flight Simulator 2004: A Century of Flight;8.2;Jul 29, 2003 +88;Medieval: Total War;8.8;Aug 19, 2002 +88;Mafia;9.1;Aug 27, 2002 +88;LIMBO;8.1;Aug 2, 2011 +88;Nuclear Throne;7.4;Dec 5, 2015 +88;Crusader Kings II: The Old Gods;8.8;May 28, 2013 +88;Assassin's Creed: Brotherhood;8.2;Mar 22, 2011 +88;Superbike 2001;6.5;Oct 9, 2000 +88;F.E.A.R.;8.3;Oct 17, 2005 +88;Kerbal Space Program;8.1;Apr 27, 2015 +88;Tribes 2;8.5;Mar 28, 2001 +88;Age of Empires II: The Conquerors Expansion;9.0;Aug 24, 2000 +88;Tiger Woods PGA Tour 2004;8.8;Sep 22, 2003 +88;Warcraft III: The Frozen Throne;9.0;Jul 1, 2003 +88;Starcraft;9.1;Apr 1, 1998 +88;Far Cry 3;8.2;Dec 4, 2012 +88;XCOM 2;7.0;Feb 5, 2016 +88;World Soccer Winning Eleven 8 International;8.5;Feb 16, 2005 +88;Torchlight II;8.6;Sep 20, 2012 +88;Myth II: Soulblighter;9.0;Nov 30, 1998 +88;Return to Castle Wolfenstein;8.7;Nov 19, 2001 +88;Shogo: Mobile Armor Division;8.9;Sep 30, 1998 +88;Thirty Flights of Loving;5.0;Aug 20, 2012 +88;Hearthstone: Heroes of Warcraft;6.3;Mar 11, 2014 +88;Medieval II: Total War;8.9;Nov 13, 2006 +88;F1 2002;7.6;Jun 13, 2002 +88;The Stanley Parable;8.0;Oct 17, 2013 +88;BioShock 2;8.0;Feb 9, 2010 +88;Counter-Strike: Source;8.9;Sep 26, 2005 +88;Starcraft II: Legacy of the Void;8.3;Nov 10, 2015 +88;Diablo III;4.0;May 15, 2012 +88;Rise of Nations: Thrones & Patriots;8.8;Apr 27, 2004 +88;Sid Meier's Pirates!;8.3;Nov 22, 2004 +88;EVE Online: Special Edition;7.8;Mar 10, 2009 +88;Guacamelee! Gold Edition;7.3;Aug 8, 2013 +88;Armadillo Run;8.2;Apr 22, 2006 +88;Dark Age of Camelot;8.9;Sep 1, 2001 +88;Baldur's Gate II: Throne of Bhaal;8.9;Jun 21, 2001 +88;Counter-Strike;9.3;Nov 8, 2000 +88;Tony Hawk's Pro Skater 4;8.4;Aug 27, 2003 +88;Ori and the Blind Forest;8.7;Mar 11, 2015 +88;Diablo II;8.8;Jun 29, 2000 +88;The Witcher 2: Assassins of Kings;8.5;May 17, 2011 +87;Plants vs. Zombies;8.9;Aug 18, 2009 +87;Doom 3;7.5;Aug 3, 2004 +87;Super Meat Boy;8.3;Apr 5, 2011 +87;Football Manager 2010;9.1;Nov 3, 2009 +87;Oddworld: Abe's Oddysee - New 'n' Tasty;7.8;Feb 25, 2015 +87;Tom Clancy's Splinter Cell: Pandora Tomorrow;8.0;Mar 23, 2004 +87;Europa Universalis II;8.8;Nov 12, 2001 +87;Burnout Paradise: The Ultimate Box;7.5;Feb 5, 2009 +87;Battlefield: Bad Company 2;8.3;Mar 2, 2010 +87;GRID;7.9;Jun 3, 2008 +87;Crypt of the NecroDancer;7.7;Apr 23, 2015 +87;Sins of a Solar Empire;8.2;Feb 4, 2008 +87;MechWarrior 4: Vengeance;8.2;Nov 23, 2000 +87;Thief II: The Metal Age;9.1;Feb 29, 2000 +87;Diablo II: Lord of Destruction;9.1;Jun 27, 2001 +87;Monkey Island 2 Special Edition: LeChuck's Revenge;9.0;Jul 7, 2010 +87;Half-Life 2: Episode One;8.6;Jun 1, 2006 +87;The Swapper;8.7;May 30, 2013 +87;Hitman 2: Silent Assassin;8.2;Oct 1, 2002 +87;Year Walk;7.0;Mar 6, 2014 +87;Max Payne 3;7.6;Jun 1, 2012 +87;TowerFall Ascension;6.6;Mar 11, 2014 +87;Battlefield 3: Armored Kill;7.0;Sep 11, 2012 +87;NHL 2002;8.7;Sep 17, 2001 +87;Icewind Dale;8.3;Jun 29, 2000 +87;The Witness;6.6;Jan 26, 2016 +87;Brothers in Arms: Road to Hill 30;7.1;Mar 15, 2005 +87;Kohan: Immortal Sovereigns;8.6;Mar 14, 2001 +87;Day of the Tentacle Remastered;7.9;Mar 21, 2016 +87;Dead Space 2;8.3;Jan 25, 2011 +87;Diablo III: Reaper of Souls;6.6;Mar 25, 2014 +87;Shogun: Total War Warlord Edition;8.7;Aug 13, 2001 +87;Serious Sam: The First Encounter;8.4;Mar 21, 2001 +87;Grand Prix 3;8.3;Aug 24, 2000 +87;Call of Duty: United Offensive;8.3;Sep 14, 2004 +87;Divinity: Original Sin;8.7;Jan 17, 2014 +87;Company of Heroes: Opposing Fronts;8.6;Sep 24, 2007 +87;Psychonauts;8.9;Apr 19, 2005 +87;Gears of War;7.8;Nov 6, 2007 +87;Out of the Park Baseball 4;7.8;Feb 28, 2002 +87;Europa Universalis IV;8.7;Aug 13, 2013 +87;NHL 2004;8.2;Sep 22, 2003 +87;Zeus: Master of Olympus;9.0;Oct 22, 2000 +87;World of Warcraft: Warlords of Draenor;6.0;Nov 13, 2014 +87;Warhammer 40,000: Dawn of War - Dark Crusade;8.9;Oct 9, 2006 +87;Commandos 2: Men of Courage;8.8;Sep 20, 2001 +86;Tales From The Borderlands: Episode 5 - The Vault of the Traveler;8.7;Oct 20, 2015 +86;Bastion;8.6;Aug 16, 2011 +86;Gone Home;5.4;Aug 15, 2013 +86;Pac-Man Championship Edition DX +;7.3;Sep 24, 2013 +86;Supreme Commander;8.3;Feb 20, 2007 +86;Total War: Shogun 2 - Fall of the Samurai;8.4;Mar 23, 2012 +86;Startopia;8.7;Jun 19, 2001 +86;Enemy Engaged: RAH-66 Comanche Versus Ka-52 Hokum;8.3;Jul 31, 2000 +86;Fallout 2;9.2;Sep 30, 1998 +86;Final Fantasy XIV: Heavensward;7.7;Jun 23, 2015 +86;Football Manager 2013;6.7;Nov 1, 2012 +86;Out of the Park Baseball 14;8.6;Apr 15, 2013 +86;The Witcher: Enhanced Edition;8.5;Sep 16, 2008 +86;Borderlands: The Secret Armory of General Knoxx;7.6;Feb 25, 2010 +86;Call of Duty 2;8.3;Oct 25, 2005 +86;Astebreed;7.3;May 30, 2014 +86;Ground Control;7.8;May 31, 2000 +86;Rise of the Tomb Raider;8.0;Jan 28, 2016 +86;Resident Evil 5;7.1;Sep 18, 2009 +86;Saints Row IV;7.4;Aug 20, 2013 +86;Black Mesa;9.0;Sep 14, 2012 +86;EverQuest: Omens of War;7.7;Sep 13, 2004 +86;Steel Beasts;8.4;Sep 24, 2000 +86;Total Annihilation;8.9;Sep 30, 1997 +86;Need for Speed: Hot Pursuit;6.7;Nov 16, 2010 +86;FIFA Soccer 13;6.6;Sep 25, 2012 +86;Sid Meier's Civilization IV: Beyond the Sword;8.6;Jul 23, 2007 +86;The Sims 3;7.6;Jun 2, 2009 +86;Freedom Force vs The 3rd Reich;7.7;Mar 8, 2005 +86;The Binding of Isaac: Rebirth;8.3;Nov 4, 2014 +86;Tribes: Ascend;7.7;Apr 12, 2012 +86;Titanfall;6.1;Mar 11, 2014 +86;Rayman Origins;8.4;Mar 29, 2012 +86;Her Story;5.7;Jun 24, 2015 +86;Starcraft II: Heart of the Swarm;7.9;Mar 12, 2013 +86;Mass Effect 2: Lair of the Shadow Broker;8.5;Sep 7, 2010 +86;LEGO Star Wars II: The Original Trilogy;8.3;Sep 12, 2006 +86;Dungeon Siege;7.9;Mar 31, 2002 +86;Crysis 2;6.7;Mar 22, 2011 +86;Call of Duty: Modern Warfare 2;4.1;Nov 10, 2009 +86;The Secret of Monkey Island: Special Edition;9.1;Jul 15, 2009 +86;Max Payne 2: The Fall of Max Payne;9.0;Oct 14, 2003 +86;Homeworld Remastered Collection;8.2;Feb 25, 2015 +86;Galactic Civilizations II: Dread Lords;8.0;Feb 21, 2006 +86;Tomb Raider;8.5;Mar 5, 2013 +86;Star Trek: Voyager Elite Force;8.2;Sep 20, 2000 +86;Worldwide Soccer Manager 2008;8.4;Oct 23, 2007 +86;IL-2 Sturmovik: Forgotten Battles;8.6;Mar 2, 2003 +86;Hyper Light Drifter;8.1;Mar 31, 2016 +86;DiRT 3;6.9;May 24, 2011 +86;Unreal Tournament 2003;8.1;Sep 30, 2002 +86;Age of Wonders II: The Wizard's Throne;8.4;Jun 12, 2002 +86;Links 2001;6.8;Oct 24, 2000 +86;EverQuest: The Ruins of Kunark;8.8;Mar 31, 2000 +86;Full Throttle;8.8;Apr 30, 1995 +86;The Lord of the Rings Online: Shadows of Angmar;8.1;Apr 24, 2007 +86;Pony Island;6.8;Jan 4, 2016 +86;Warhammer 40,000: Dawn of War;8.8;Sep 20, 2004 +86;Warhammer Online: Age of Reckoning;7.9;Sep 16, 2008 +86;Dead Space;8.0;Oct 20, 2008 +86;Bionic Commando Rearmed;7.0;Aug 13, 2008 +86;Command & Conquer: Red Alert 2 - Yuri's Revenge;9.0;Oct 10, 2001 +86;Europa Universalis;8.1;Feb 2, 2001 +86;Escape from Monkey Island;8.2;Nov 8, 2000 +86;IL-2 Sturmovik: 1946;8.8;Mar 13, 2007 +86;XCOM: Enemy Within;7.9;Nov 12, 2013 +86;Battlefield 3: Back to Karkand;7.2;Dec 13, 2011 +86;Heroes of the Storm;6.7;Jun 2, 2015 +86;Civilization III: Conquests;8.4;Nov 4, 2003 +86;Path of Exile;8.0;Jan 25, 2013 +86;Battlefield: Bad Company 2 Vietnam;8.1;Dec 18, 2010 +86;Assassin's Creed II;6.8;Mar 9, 2010 +86;The Elder Scrolls IV: Shivering Isles;8.4;Mar 26, 2007 +86;DiRT Rally;8.8;Dec 7, 2015 +86;Rocket League;8.1;Jul 7, 2015 +86;Allegiance;8.2;Mar 31, 2000 +85;The Talos Principle;8.5;Dec 11, 2014 +85;Cities: Skylines;8.9;Mar 10, 2015 +85;Falcon 4.0;8.0;Nov 30, 1998 +85;Tom Clancy's Rainbow Six;8.6;Jul 31, 1998 +85;Madden NFL 2005;6.4;Sep 14, 2004 +85;Legend of Grimrock II;8.0;Oct 15, 2014 +85;Sam & Max Episode 205: What's New, Beelzebub?;8.6;Apr 10, 2008 +85;Dragon Age: Inquisition;5.8;Nov 18, 2014 +85;Tales from the Borderlands: A Telltale Game Series;8.7;Apr 26, 2016 +85;Tom Clancy's Rainbow Six: Vegas;7.7;Dec 12, 2006 +85;City of Heroes;8.5;Apr 27, 2004 +85;SWAT 4;8.6;Apr 5, 2005 +85;Clive Barker's Undying;8.7;Feb 21, 2001 +85;EverQuest;8.2;Mar 16, 1999 +85;Warhammer 40,000: Dawn of War II;8.1;Feb 18, 2009 +85;Command & Conquer 3: Tiberium Wars;8.0;Mar 26, 2007 +85;Bit.Trip Presents...Runner2: Future Legend of Rhythm Alien;8.2;Feb 26, 2013 +85;Hotline Miami;8.5;Oct 23, 2012 +85;Out of the Park Baseball 13;8.2;Apr 9, 2012 +85;Wizardry 8;8.6;Nov 14, 2001 +85;Aliens Versus Predator 2;8.7;Oct 31, 2001 +85;Operation Flashpoint: Cold War Crisis;9.0;Aug 30, 2001 +85;Tropico;8.4;Apr 5, 2001 +85;Giants: Citizen Kabuto;8.9;Dec 6, 2000 +85;NASCAR SimRacing;4.9;Feb 15, 2005 +85;The Lord of the Rings Online: Mines of Moria;8.3;Nov 17, 2008 +85;The Binding of Isaac: Afterbirth;8.1;Oct 30, 2015 +85;Amnesia: The Dark Descent;8.6;Feb 17, 2011 +85;GTR FIA Racing;8.6;May 3, 2005 +85;Football Manager 2011;8.4;Nov 23, 2010 +85;Dust: An Elysian Tail;8.5;May 24, 2013 +85;South Park: The Stick of Truth;8.6;Mar 4, 2014 +85;Dark Souls: Prepare to Die Edition;7.4;Aug 24, 2012 +85;Medieval II: Total War Kingdoms;8.8;Aug 28, 2007 +85;Shovel Knight;7.9;Jun 26, 2014 +85;DmC: Devil May Cry;6.7;Jan 24, 2013 +85;Peggle Deluxe;8.1;Feb 19, 2008 +85;Monopoly Tycoon;8.0;Sep 24, 2001 +85;Indigo Prophecy;8.3;Oct 2, 2005 +85;Prince of Persia: The Two Thrones;8.0;Dec 1, 2005 +85;Sam & Max Episode 204: Chariots of the Dogs;8.1;Mar 13, 2008 +85;Assetto Corsa;8.4;Dec 19, 2014 +85;Machinarium;8.8;Oct 16, 2009 +85;Frozen Synapse;7.7;May 26, 2011 +85;Valkyria Chronicles;8.3;Nov 11, 2014 +85;Freelancer;8.9;Mar 3, 2003 +85;Zenzizenzic;5.9;Jul 23, 2015 +85;The Wolf Among Us: Episode 1 - Faith;9.0;Oct 11, 2013 +85;Mega Man Legacy Collection;7.3;Aug 25, 2015 +85;Warhammer 40,000: Dawn of War II - Chaos Rising;8.7;Mar 11, 2010 +85;Far Cry 2;5.8;Oct 21, 2008 +85;The Walking Dead: Episode 3 - Long Road Ahead;8.4;Aug 29, 2012 +85;AudioSurf;8.8;Feb 15, 2008 +85;BattleBlock Theater;8.0;May 15, 2014 +85;Star Wars: Knights of the Old Republic II - The Sith Lords;8.4;Feb 8, 2005 +85;MVP Baseball 2005;8.1;Feb 22, 2005 +85;The Elder Scrolls III: Bloodmoon;8.5;Jun 3, 2003 +85;Rogue Legacy;7.9;Jun 27, 2013 +85;Chaos Reborn;8.4;Oct 26, 2015 +85;Thief: Deadly Shadows;8.4;May 25, 2004 +85;Football Manager 2014;5.4;Oct 30, 2013 +85;System Shock: Enhanced Edition;7.9;Sep 22, 2015 +85;EverQuest: Gates of Discord;6.8;Feb 9, 2004 +85;FIFA 2001 Major League Soccer;7.3;Oct 30, 2000 +85;Sid Meier's Civilization V: Brave New World;8.6;Jul 9, 2013 +85;Final Fantasy XI;7.5;Oct 28, 2003 +85;Serious Sam: The Second Encounter;8.5;Feb 4, 2002 +85;The Sims: Hot Date;7.9;Nov 12, 2001 +85;American McGee's Alice;8.2;Dec 6, 2000 +85;Trials Evolution: Gold Edition;6.7;Mar 21, 2013 +85;Warhammer 40,000: Dawn of War - Winter Assault;8.3;Sep 21, 2005 +85;Tony Hawk's Underground 2;7.9;Oct 4, 2004 +85;Papers, Please;8.5;Aug 8, 2013 +85;Star Wars: The Old Republic;5.9;Dec 20, 2011 +85;Anarchy Online: Shadowlands;8.7;Sep 8, 2003 +85;Dark Age of Camelot: Shrouded Isles;8.8;Dec 2, 2002 +85;Obsidian;8.3;Dec 31, 1996 +84;The Walking Dead: Episode 2 - Starved for Help;8.6;Jun 29, 2012 +84;Saints Row: The Third;8.1;Nov 15, 2011 +84;Fallout: New Vegas;8.5;Oct 19, 2010 +84;The Movies;8.3;Nov 8, 2005 +84;Neverwinter Nights: Hordes of the Underdark;8.6;Dec 2, 2003 +84;Command & Conquer: Generals;8.3;Feb 10, 2003 +84;Sid Meier's SimGolf;8.2;Jan 23, 2002 +84;Middle-earth: Shadow of Mordor;8.0;Sep 30, 2014 +84;SpaceChem;8.4;Mar 2, 2011 +84;Downwell;6.2;Oct 15, 2015 +84;Pinball FX 2;8.0;Oct 27, 2012 +84;Devil Daggers;6.7;Feb 18, 2016 +84;PlanetSide 2;7.0;Nov 20, 2012 +84;Enter the Gungeon;7.4;Apr 5, 2016 +84;GT Legends;8.6;Jan 23, 2006 +84;Hearthstone: Goblins Vs. Gnomes;6.6;Dec 8, 2014 +84;Space Rangers 2: Rise of the Dominators;9.0;Mar 27, 2006 +84;Tales From The Borderlands: Episode 1 - Zer0 Sum;8.4;Nov 25, 2014 +84;Puzzle Quest: Challenge of the Warlords;8.3;Oct 10, 2007 +84;Heroes of Might and Magic IV;7.6;Mar 29, 2002 +84;Command & Conquer: Red Alert 2;8.9;Oct 21, 2000 +84;Shogun: Total War;8.7;Jun 13, 2000 +84;DiRT;7.2;Jun 19, 2007 +84;Darkest Dungeon;8.0;Jan 19, 2016 +84;Super Street Fighter IV: Arcade Edition;7.8;Jul 13, 2011 +84;Football Manager 2012;8.0;Oct 20, 2011 +84;Guild Wars Factions;8.5;Apr 28, 2006 +84;80 Days (2015);6.1;Sep 29, 2015 +84;Spore;5.2;Sep 7, 2008 +84;Unity of Command;7.2;Nov 15, 2011 +84;Hearthstone: The Grand Tournament;4.0;Aug 24, 2015 +84;Metro Redux;8.0;Aug 26, 2014 +84;Time Gentlemen, Please!;7.6;Jul 2, 2009 +84;Europa Universalis IV: Wealth of Nations;8.4;May 29, 2014 +84;Mass Effect 3: Citadel;7.8;Mar 5, 2013 +84;Disciples II: Dark Prophecy;8.6;Jan 22, 2002 +84;Just Cause 2;7.7;Mar 23, 2010 +84;Crysis Warhead;7.9;Sep 16, 2008 +84;Assassin's Creed IV: Black Flag;7.7;Nov 19, 2013 +84;Age of Mythology: The Titans;8.7;Sep 30, 2003 +84;SimCity 4;8.7;Jan 12, 2003 +84;Microsoft Train Simulator;8.4;May 31, 2001 +84;Rise of Nations: Rise of Legends;8.5;May 9, 2006 +84;TOCA Race Driver 3;7.8;Feb 24, 2006 +84;FTL: Faster Than Light;8.4;Sep 14, 2012 +84;SOMA;8.2;Sep 22, 2015 +84;DEFCON: Everybody Dies;8.3;Mar 26, 2007 +84;Tron 2.0;8.3;Aug 26, 2003 +84;Brothers in Arms: Earned in Blood;7.3;Oct 6, 2005 +84;Grim Fandango Remastered;8.0;Jan 27, 2015 +84;The Lord of the Rings: The Battle for Middle-Earth II;7.5;Mar 2, 2006 +84;Battlefield Vietnam;7.4;Mar 16, 2004 +84;Medieval: Total War - Viking Invasion;8.8;May 7, 2003 +84;Fallout 4;5.4;Nov 10, 2015 +84;Guild Wars Nightfall;8.7;Oct 26, 2006 +84;The Binding of Isaac;8.3;Sep 28, 2011 +84;Enemy Territory: Quake Wars;8.3;Oct 2, 2007 +84;Trine 2;8.4;Dec 7, 2011 +84;Rift;7.3;Mar 1, 2011 +84;The Wolf Among Us: Episode 5 - Cry Wolf;8.8;Jul 8, 2014 +84;Shift 2: Unleashed;6.1;Mar 29, 2011 +84;Sid Meier's Civilization IV: Warlords;8.2;Jul 24, 2006 +84;Battlefield 1942: The Road to Rome;7.9;Feb 2, 2003 +84;Poseidon;8.4;Jun 25, 2001 +84;F1 2010;6.6;Sep 22, 2010 +84;Shatter;7.4;Mar 15, 2010 +84;Darwinia;7.9;Jun 12, 2006 +84;Ultimate General: Gettysburg;8.0;Oct 16, 2014 +83;Final Fantasy XI: Treasures of Aht Urhgan;7.6;Apr 18, 2006 +83;MDK2;8.4;May 31, 2000 +83;Gunpoint;8.4;Jun 3, 2013 +83;Beyond Good & Evil;8.7;Nov 19, 2003 +83;Anno 2070;7.0;Nov 17, 2011 +83;SMITE;8.3;Mar 25, 2014 +83;Halo: Combat Evolved;7.4;Sep 30, 2003 +83;Grim Dawn;8.9;Feb 25, 2016 +83;Silent Storm;8.9;Jan 20, 2004 +83;Command & Conquer: Generals - Zero Hour;9.0;Sep 22, 2003 +83;Homeworld 2;8.3;Sep 16, 2003 +83;Galactic Civilizations;8.1;Mar 26, 2003 +83;EverQuest: The Shadows of Luclin;7.2;Dec 2, 2001 +83;Orcs Must Die!;8.1;Oct 11, 2011 +83;Life is Strange;8.6;Jan 19, 2016 +83;Fable: The Lost Chapters;8.7;Sep 20, 2005 +83;Unreal Tournament III;8.0;Nov 19, 2007 +83;The Blackwell Epiphany;7.6;Apr 24, 2014 +83;The Lord of the Rings Online: Siege of Mirkwood;7.1;Dec 1, 2009 +83;Out of the Park Baseball 10;8.3;Jun 2, 2009 +83;Tomb Raider: Anniversary;8.0;Jun 5, 2007 +83;Need for Speed: Shift;5.7;Sep 15, 2009 +83;Hearts of Iron II;8.6;Jan 4, 2005 +83;FIFA Soccer 11;7.6;Sep 28, 2010 +83;Project CARS;7.0;May 6, 2015 +83;FIFA Soccer 2003;6.8;Nov 2, 2002 +83;Icewind Dale II;8.3;Aug 26, 2002 +83;Age of Empires;8.8;Sep 30, 1997 +83;EverQuest II: Echoes of Faydwer;8.4;Nov 13, 2006 +83;EverQuest II;7.3;Nov 8, 2004 +83;Terraria;8.5;May 16, 2011 +83;Final Fantasy XIV Online: A Realm Reborn;6.7;Aug 27, 2013 +83;Card Hunter (2013);7.9;Sep 12, 2013 +83;Sam & Max: The Devil's Playhouse - Episode 2: The Tomb of Sammun-Mak;7.9;May 18, 2010 +83;This War of Mine;8.4;Nov 14, 2014 +83;Darksiders;7.7;Sep 23, 2010 +83;Tom Clancy's Rainbow Six 3: Raven Shield;8.9;Mar 19, 2003 +83;World of Outlaws: Sprint Cars;7.9;Feb 11, 2003 +83;Colin McRae Rally 2.0;8.4;Feb 14, 2001 +83;Combat Flight Simulator 2: WWII Pacific Theater;8.1;Oct 13, 2000 +83;Orcs Must Die! 2;7.9;Jul 30, 2012 +83;Prey;7.9;Jul 11, 2006 +83;Metal Gear Rising: Revengeance;7.9;Jan 9, 2014 +83;Starseed Pilgrim;6.3;Apr 16, 2013 +83;Age of Conan: Rise of the Godslayer;8.4;May 11, 2010 +83;Alan Wake;8.0;Feb 16, 2012 +83;Tiger Woods PGA Tour 2002;5.0;Feb 24, 2002 +83;Monaco: What's Yours Is Mine;7.7;Apr 24, 2013 +83;Transistor;8.3;May 20, 2014 +83;Helldivers;6.9;Dec 7, 2015 +83;Worldwide Soccer Manager 2009;8.1;Nov 18, 2008 +83;Call of Duty: World at War;7.5;Nov 10, 2008 +83;Torchlight;8.0;Jan 5, 2010 +83;Prison Architect;8.3;Oct 6, 2015 +83;Valdis Story: Abyssal City;8.1;Oct 30, 2013 +83;Crimson Skies;8.2;Sep 17, 2000 +83;RACE 07: Official WTCC Game;9.0;Oct 9, 2007 +83;SUPERHOT;7.6;Feb 25, 2016 +83;EverQuest II: Rise of Kunark;7.9;Nov 13, 2007 +83;Dark Age of Camelot: Catacombs;8.6;Dec 7, 2004 +83;Spore Creature Creator;8.1;Jun 17, 2008 +83;Colin McRae Rally 2005;7.0;Oct 28, 2004 +83;Tom Clancy's Splinter Cell: Conviction;5.2;Apr 27, 2010 +83;Tribes: Vengeance;7.6;Oct 12, 2004 +83;L.A. Noire: The Complete Edition;7.9;Nov 8, 2011 +83;GTR Evolution;8.2;Sep 2, 2008 +83;Life is Strange: Episode 5 - Polarized;8.4;Oct 20, 2015 +83;BROFORCE;8.0;Oct 15, 2015 +83;Independence War 2: Edge of Chaos;8.4;Aug 22, 2001 +83;Myst III: Exile;8.2;May 8, 2001 +83;Superbrothers: Sword & Sworcery EP;6.4;Apr 16, 2012 +83;Sid Meier's Civilization IV: Colonization;6.7;Sep 22, 2008 +83;Europa Universalis III;8.4;Jan 23, 2007 +83;F1 2011;7.2;Sep 20, 2011 +83;Prince of Persia: Warrior Within;8.4;Nov 30, 2004 +83;Danganronpa: Trigger Happy Havoc;7.6;Feb 18, 2016 +83;Counter-Strike: Global Offensive;7.8;Aug 21, 2012 +83;Outland;7.1;Sep 29, 2014 +83;MechWarrior 4: Mercenaries;8.6;Nov 7, 2002 +83;Metal Gear Solid;9.0;Sep 24, 2000 +82;Invisible, Inc.;8.0;May 12, 2015 +82;Dark Souls II: Crown of the Ivory King;7.8;Sep 29, 2014 +82;Red Faction: Guerrilla;7.5;Sep 15, 2009 +82;The Book of Unwritten Tales;8.2;Oct 28, 2011 +82;Capitalism II;9.0;Dec 16, 2001 +82;Rally Trophy;8.5;Nov 20, 2001 +82;Dawn of Discovery;8.8;Jun 17, 2009 +82;City of Villains;8.1;Oct 31, 2005 +82;Kentucky Route Zero - Act II;8.0;May 31, 2013 +82;Tom Clancy's Splinter Cell: Blacklist;7.4;Aug 20, 2013 +82;Act of War: Direct Action;8.5;Mar 15, 2005 +82;Sokobond;7.8;Aug 27, 2013 +82;Sam & Max Episode 105: Reality 2.0;8.4;Mar 29, 2007 +82;Bejeweled 3;8.0;Dec 7, 2010 +82;Dangerous Waters;8.8;Feb 22, 2005 +82;Tomb Raider: Legend;7.8;Apr 11, 2006 +82;Asheron's Call 2: Fallen Kings;8.8;Nov 20, 2002 +82;Gemini Rue;8.4;Feb 24, 2011 +82;Antichamber;8.2;Jan 31, 2013 +82;Neverwinter Nights 2;6.5;Oct 31, 2006 +82;Dragon Age: Origins - Awakening;7.7;Mar 16, 2010 +82;Door Kickers;8.2;Oct 20, 2014 +82;Hearthstone: Blackrock Mountain;6.4;Apr 2, 2015 +82;Rome: Total War Barbarian Invasion;8.4;Sep 27, 2005 +82;Hacknet;7.3;Aug 12, 2015 +82;Tales of Monkey Island Chapter 3: Lair of the Leviathan;7.8;Sep 29, 2009 +82;Neverwinter Nights 2: Mask of The Betrayer;8.8;Oct 9, 2007 +82;Sins of a Solar Empire: Rebellion;7.8;Jun 12, 2012 +82;Broken Sword: The Sleeping Dragon;7.6;Nov 17, 2003 +82;Age of Wonders: Shadow Magic;8.5;Jul 25, 2003 +82;Tom Clancy's Ghost Recon: Desert Siege;8.4;Mar 27, 2002 +82;Warlords Battlecry II;8.5;Mar 11, 2002 +82;Football Manager Live;2.9;Jan 23, 2009 +82;Marvel: Ultimate Alliance;8.3;Oct 24, 2006 +82;The Talos Principle: Road To Gehenna;7.6;Jul 23, 2015 +82;Lara Croft and the Guardian of Light;8.2;Sep 28, 2010 +82;Aquaria;8.3;Dec 7, 2007 +82;Need for Speed: Underground;8.3;Nov 17, 2003 +82;TrackMania Sunrise;8.5;May 6, 2005 +82;King's Quest Chapter 1: A Knight to Remember;7.2;Jul 28, 2015 +82;Dragon Age II;4.4;Mar 8, 2011 +82;Endless Legend;7.9;Apr 24, 2014 +82;Tom Clancy's Ghost Recon: Island Thunder;8.3;Sep 25, 2002 +82;S.T.A.L.K.E.R.: Shadow of Chernobyl;8.4;Mar 20, 2007 +82;Kero Blaster;6.9;May 11, 2014 +82;Monday Night Combat;7.3;Jan 24, 2011 +82;The Wolf Among Us: Episode 3 - A Crooked Mile;8.6;Apr 8, 2014 +82;Airborne Assault: Red Devils Over Arnhem;7.4;Jun 17, 2002 +82;Fallout Tactics: Brotherhood of Steel;7.9;Mar 14, 2001 +82;Need for Speed: Underground 2;8.5;Nov 9, 2004 +82;NHL Eastside Hockey Manager 2005;6.6;Oct 5, 2005 +82;Legend of Grimrock;8.1;Apr 11, 2012 +82;Dominions 3: The Awakening;8.1;Sep 29, 2006 +82;Bulletstorm;7.7;Feb 22, 2011 +82;Borderlands 2: Mr. Torgue's Campaign of Carnage;7.3;Nov 20, 2012 +82;Desktop Dungeons;8.2;Oct 17, 2010 +82;Fallout: New Vegas - Old World Blues;7.8;Jul 19, 2011 +82;Crusader Kings II;8.7;Feb 14, 2012 +82;MVP Baseball 2004;7.9;Mar 9, 2004 +82;Europa 1400: The Guild;8.6;Nov 18, 2002 +82;Battle Realms;8.6;Nov 7, 2001 +82;Warlords Battlecry;8.2;Jul 9, 2000 +82;Sam & Max Episode 201: Ice Station Santa;8.6;Nov 8, 2007 +82;Technobabylon;7.8;May 21, 2015 +82;World of Warcraft: Mists of Pandaria;4.8;Sep 25, 2012 +82;FIFA 15;4.2;Sep 23, 2014 +82;Recettear: An Item Shop's Tale;8.6;Sep 10, 2010 +82;ETHER One;6.9;Mar 25, 2014 +82;The Vanishing of Ethan Carter;8.1;Sep 25, 2014 +82;Flight Simulator X: Acceleration;7.3;Oct 23, 2007 +82;Blood;9.0;May 31, 1997 +82;Command & Conquer: Red Alert 3;6.8;Oct 28, 2008 +82;The Walking Dead: Episode 1 - A New Day;8.4;Apr 24, 2012 +82;Links 2003;6.8;Sep 16, 2002 +82;Earth & Beyond;7.1;Sep 2, 2002 +82;Syberia;8.5;Sep 1, 2002 +82;Virtual Pool 3;7.3;Nov 14, 2000 +82;The Sims: Livin' Large;6.6;Aug 27, 2000 +82;DCS: Black Shark;8.5;Apr 13, 2009 +82;King's Bounty: Armored Princess;8.7;Sep 10, 2010 +82;Age of Wonders III - Golden Realms;8.5;Sep 18, 2014 +82;Strong Bad's Cool Game for Attractive People Episode 5: 8-Bit Is Enough;7.5;Dec 15, 2008 +82;Prince of Persia;7.2;Dec 2, 2008 +82;Joint Operations: Typhoon Rising;8.7;Jun 15, 2004 +82;Xpand Rally;7.4;Apr 20, 2006 +82;Dark Souls II: Crown of the Sunken King;7.3;Jul 22, 2014 +82;Resident Evil HD Remaster;8.2;Jan 20, 2015 +82;Celtic Kings: Rage of War;8.5;Aug 21, 2002 +82;B-17 Flying Fortress: The Mighty 8th;7.3;Dec 13, 2000 +82;EverQuest: The Scars of Velious;7.8;Dec 4, 2000 +82;Metro: Last Light;8.6;May 14, 2013 +82;Rising Storm;8.5;May 30, 2013 +82;Lethal League;7.4;Aug 27, 2014 +82;Botanicula;8.3;Apr 19, 2012 +82;Pro Evolution Soccer 2015;5.8;Nov 13, 2014 +82;Bookworm Adventures Deluxe;7.9;Dec 20, 2006 +82;The Lord of the Rings: The Battle for Middle-Earth;8.6;Dec 6, 2004 +82;Hitman: Blood Money;8.8;May 30, 2006 +82;Need for Speed: Most Wanted;8.5;Nov 15, 2005 +82;OlliOlli2: Welcome to Olliwood;5.2;Aug 11, 2015 +82;WildStar;7.4;Jun 3, 2014 +82;Broken Age: Act 1;7.7;Jan 28, 2014 +82;Divinity II: The Dragon Knight Saga;8.2;Nov 5, 2010 +82;Out of the Park Baseball 9;7.4;Jun 1, 2008 +82;The Simpsons: Hit & Run;8.0;Nov 13, 2003 +82;America's Army;6.1;Aug 28, 2002 +82;Star Trek Bridge Commander;8.1;Feb 27, 2002 +82;The Last Express;8.9;Mar 31, 1997 +81;Quake 4;7.5;Oct 11, 2005 +81;Nidhogg;7.0;Jan 13, 2014 +81;Battlefield 4;6.0;Oct 29, 2013 +81;To the Moon;8.9;Sep 7, 2012 +81;The Sims 3: World Adventures;8.0;Nov 16, 2009 +81;Painkiller;8.0;Apr 12, 2004 +81;Airborne Assault: Highway to the Reich;6.1;Dec 10, 2003 +81;Nancy Drew: Danger on Deception Island;7.7;Oct 1, 2003 +81;Shadowrun: Hong Kong;7.7;Aug 20, 2015 +81;Supreme Commander: Forged Alliance;8.9;Nov 6, 2007 +81;Sunless Sea;7.4;Jul 1, 2014 +81;The Walking Dead: Season Two Episode 3 - In Harm's Way;8.3;May 13, 2014 +81;Marvel Heroes 2015;7.9;Jun 4, 2014 +81;Football Manager 2016;6.4;Nov 13, 2015 +81;VVVVVV;8.1;Jan 11, 2010 +81;Darksiders II;7.9;Aug 14, 2012 +81;Wolfenstein: The New Order;8.2;May 20, 2014 +81;Lone Survivor;7.2;Apr 23, 2012 +81;Alien: Isolation;8.4;Oct 6, 2014 +81;The Witcher;8.8;Oct 30, 2007 +81;Kentucky Route Zero - Act I;7.5;Jan 7, 2013 +81;Jade Empire: Special Edition;8.3;Feb 26, 2007 +81;SWAT 3: Elite Edition;8.4;Oct 6, 2000 +81;Asheron's Call;8.8;Oct 31, 1999 +81;Unravel;8.1;Feb 9, 2016 +81;Midnight Club II;8.0;Jun 30, 2003 +81;Chessmaster 10th Edition;7.4;Aug 12, 2004 +81;Age of Empires III;7.7;Oct 18, 2005 +81;Tales of Monkey Island Chapter 5: Rise of the Pirate God;8.4;Dec 8, 2009 +81;Castlevania: Lords of Shadow Ultimate Edition;7.3;Aug 27, 2013 +81;Strong Bad's Cool Game for Attractive People Episode 2: Strong Badia the Free;8.2;Sep 15, 2008 +81;The Cat Lady;8.7;Dec 4, 2013 +81;Vessel;7.9;Mar 1, 2012 +81;Metro 2033;8.1;Mar 16, 2010 +81;OutRun 2006: Coast 2 Coast;7.8;Jun 27, 2006 +81;Blur;7.3;May 25, 2010 +81;Empires: Dawn of the Modern World;8.2;Oct 21, 2003 +81;Chessmaster 9000;7.7;Aug 31, 2002 +81;Gothic;8.6;Nov 23, 2001 +81;Arcanum: Of Steamworks and Magick Obscura;8.9;Aug 22, 2001 +81;NASCAR Heat;8.6;Sep 27, 2000 +81;Company of Heroes 2: Ardennes Assault;6.1;Nov 17, 2014 +81;PlanetSide;7.3;May 20, 2003 +81;Tales From The Borderlands: Episode 3 - Catch A Ride;8.4;Jun 23, 2015 +81;The Walking Dead: Season Two Episode 2 - A House Divided;8.6;Mar 4, 2014 +81;Kingdoms of Amalur: Reckoning;6.6;Feb 7, 2012 +81;Sam & Max: The Devil's Playhouse - Episode 1: The Penal Zone;8.5;Apr 15, 2010 +81;Borderlands;7.8;Oct 26, 2009 +81;DG2: Defense Grid 2;6.7;Sep 23, 2014 +81;Napoleon: Total War;7.9;Feb 23, 2010 +81;Overlord;8.1;Jun 26, 2007 +81;Firewatch;7.2;Feb 9, 2016 +81;Victoria II: Heart of Darkness;8.7;Apr 16, 2013 +81;Waveform;7.6;Jan 25, 2013 +81;The Elder Scrolls IV: Knights of the Nine;7.5;Nov 21, 2006 +81;Red Orchestra: Ostfront 41-45;8.6;Mar 14, 2006 +81;Stronghold;8.9;Oct 21, 2001 +81;Strong Bad's Cool Game for Attractive People Episode 4: Dangeresque 3: The Criminal Projective;8.5;Nov 17, 2008 +81;Rochard;8.0;Nov 15, 2011 +81;Fallout 3: Broken Steel;7.3;May 5, 2009 +81;Tiger Woods PGA Tour 06;8.1;Sep 20, 2005 +81;RollerCoaster Tycoon 3;4.9;Oct 26, 2004 +81;Dragon's Dogma: Dark Arisen;8.3;Jan 15, 2016 +81;Guild Wars 2: Heart of Thorns;7.3;Oct 23, 2015 +81;AaaaaAAaaaAAAaaAAAAaAAAAA!!! - A Reckless Disregard for Gravity;7.2;Sep 3, 2009 +81;The Sims 2 University;7.8;Feb 28, 2005 +81;Far Cry 3: Blood Dragon;8.1;May 1, 2013 +81;Sid Meier's Civilization: Beyond Earth;5.5;Oct 24, 2014 +81;Disney's Toontown Online;8.7;Oct 6, 2005 +81;Combat Mission 3: Afrika Korps;8.4;Dec 3, 2003 +81;EverQuest: The Planes of Power;8.2;Oct 28, 2002 +81;Rails Across America;8.0;Sep 18, 2001 +81;Wasteland 2;7.3;Sep 19, 2014 +81;Jamestown: Legend of the Lost Colony;7.5;Jun 8, 2011 +81;Call of Duty: Black Ops;5.1;Nov 9, 2010 +81;Kohan II: Kings of War;7.9;Sep 20, 2004 +81;The Age of Decadence;7.9;Oct 15, 2015 +81;Samorost 3;8.3;Mar 24, 2016 +81;Order of Battle: Pacific;6.4;Apr 30, 2015 +81;Empire Earth;8.3;Nov 12, 2001 +81;Star Trek: Deep Space Nine: The Fallen;7.9;Nov 15, 2000 +81;Sam & Max Episode 101: Culture Shock;8.7;Oct 18, 2006 +81;Mirror's Edge (2008);8.1;Jan 12, 2009 +81;TrackMania 2 Canyon;7.7;Sep 14, 2011 +81;Sleeping Dogs;8.2;Aug 14, 2012 +81;Star Wars Jedi Knight: Jedi Academy;8.6;Sep 17, 2003 +81;Mortal Kombat Komplete Edition;8.7;Aug 6, 2013 +81;Shadowrun: Dragonfall;8.3;Feb 27, 2014 +81;Eets;6.4;Mar 29, 2006 +81;World of Warships;6.6;Sep 17, 2015 +81;TOCA Race Driver 2: The Ultimate Racing Simulator;8.0;Apr 15, 2004 +81;Wargame: European Escalation;8.2;Feb 22, 2012 +81;Dungeon Defenders;7.3;Oct 18, 2011 +81;Sam & Max: The Devil's Playhouse - Episode 5: The City That Dares Not Sleep;7.9;Aug 30, 2010 +81;Age of Empires III: The Asian Dynasties;8.5;Oct 23, 2007 +81;Defense Grid: The Awakening;8.8;Jul 29, 2009 +81;Codename: Panzers, Phase One;8.8;Sep 30, 2004 +81;FIFA 16;4.4;Sep 22, 2015 +81;Europa Universalis IV: Conquest of Paradise;7.7;Jan 14, 2014 +81;Ghost Master;8.0;Aug 26, 2003 +81;Divine Divinity;8.5;Sep 22, 2002 +80;The Book of Unwritten Tales 2;7.7;Feb 20, 2015 +80;Galactic Civilizations III;6.6;May 14, 2015 +80;Lovers in a Dangerous Spacetime;7.2;Sep 9, 2015 +80;Age of Conan: Hyborian Adventures;7.3;May 20, 2008 +80;Company of Heroes 2: The Western Front Armies;6.8;Jun 23, 2014 +80;Sid Meier's Civilization V: Gods & Kings;7.7;Jun 19, 2012 +80;Age of Empires III: The WarChiefs;8.1;Oct 17, 2006 +80;Metal Gear Solid V: Ground Zeroes;7.7;Dec 18, 2014 +80;Trials Fusion;6.8;Apr 16, 2014 +80;Syberia II;8.3;Mar 30, 2004 +80;Tom Clancy's Ghost Recon;8.4;Nov 13, 2001 +80;Conquest: Frontier Wars;8.3;Aug 14, 2001 +80;Gabriel Knight 3: Blood of the Sacred, Blood of the Damned;8.8;Oct 5, 1999 +80;Westerado: Double Barreled;7.4;Apr 16, 2015 +80;Anomaly: Warzone Earth;7.3;Apr 8, 2011 +80;Volume;7.2;Aug 18, 2015 +80;GRID 2;5.7;May 27, 2013 +80;The Banner Saga;7.9;Jan 14, 2014 +80;Sam & Max Episode 202: Moai Better Blues;7.7;Jan 10, 2008 +80;Age of Wonders III - Eternal Lords;8.4;Apr 14, 2015 +80;Pro Evolution Soccer 2013;6.8;Sep 25, 2012 +80;Osmos;7.5;Aug 18, 2009 +80;Dungeon Siege II;7.9;Aug 16, 2005 +80;Dead Island;6.8;Sep 6, 2011 +80;Sam & Max Episode 104: Abe Lincoln Must Die!;7.8;Feb 22, 2007 +80;Deus Ex: Invisible War;6.3;Dec 2, 2003 +80;The Sims: Makin' Magic;8.6;Oct 28, 2003 +80;Tom Clancy's Splinter Cell: Double Agent;5.7;Nov 7, 2006 +80;Medal of Honor: Pacific Assault;7.4;Nov 4, 2004 +80;Assassin's Creed: Revelations;7.4;Nov 29, 2011 +80;Grandia II Anniversary Edition;7.6;Aug 24, 2015 +80;Assassin's Creed III;6.2;Nov 20, 2012 +80;Madden NFL 07;7.3;Aug 22, 2006 +80;Outlast;8.4;Sep 4, 2013 +80;The Chronicles of Riddick: Assault on Dark Athena;8.0;Apr 7, 2009 +80;Hearts of Iron II: Doomsday;8.8;Apr 7, 2006 +80;Dishonored: The Brigmore Witches;8.5;Aug 13, 2013 +80;Codename: Panzers, Phase Two;8.0;Jul 25, 2005 +80;Full Spectrum Warrior;7.0;Sep 21, 2004 +80;AI War: Fleet Command;8.4;May 14, 2009 +80;Freedom Fighters;8.3;Oct 1, 2003 +80;NBA Live 2003;8.3;Nov 14, 2002 +80;The Elder Scrolls III: Tribunal;8.2;Nov 6, 2002 +80;Elite: Dangerous;6.4;Dec 16, 2014 +80;Pure;6.9;Sep 16, 2008 +80;Goodbye Deponia;8.1;Oct 17, 2013 +80;SWAT 4: The Stetchkov Syndicate;8.3;Feb 28, 2006 +80;Dropsy;7.3;Sep 10, 2015 +80;Company of Heroes 2: The British Forces;5.9;Sep 3, 2015 +80;Ground Control II: Operation Exodus;8.8;Jun 23, 2004 +80;NBA Live 2004;9.0;Nov 11, 2003 +80;Brutal Legend;7.8;Feb 26, 2013 +80;Tomb Raider: Underworld;7.6;Nov 18, 2008 +80;Oxenfree;7.7;Jan 15, 2016 +80;Titan Quest: Immortal Throne;8.7;Mar 5, 2007 +80;La-Mulana (Remake);7.1;Jul 13, 2012 +80;X-Men Legends II: Rise of Apocalypse;8.4;Sep 20, 2005 +80;SpellForce 2: Shadow Wars;7.6;May 5, 2006 +80;Fritz 8 Deluxe;7.8;Dec 1, 2004 +80;Trine;8.2;Sep 11, 2009 +80;Dishonored: The Knife of Dunwall;8.1;Apr 16, 2013 +80;Company of Heroes 2;2.0;Jun 25, 2013 +80;Natural Selection 2;8.4;Oct 30, 2012 +80;Read Only Memories;7.2;Oct 5, 2015 +80;The Sims 3: Into the Future;5.4;Oct 22, 2013 +80;Borderlands 2: Captain Scarlett and Her Pirate's Booty;7.4;Oct 16, 2012 +80;FATE;8.3;Sep 19, 2006 +80;2002 FIFA World Cup;7.9;Apr 30, 2002 +80;Asheron's Call Dark Majesty;8.1;Nov 4, 2001 +80;The Bug Butcher;8.2;Jan 19, 2016 +80;Dragonshard;7.4;Oct 2, 2005 +80;Icewind Dale: Enhanced Edition;7.6;Oct 30, 2014 +80;The Magic Circle;7.3;Jul 9, 2015 +80;Far Cry 4;6.6;Nov 18, 2014 +80;Super Time Force Ultra;6.6;Aug 25, 2014 +80;Day of Defeat: Source;9.1;Feb 7, 2006 +80;Battlefield 2142;6.8;Oct 17, 2006 +80;World of Tanks;3.8;Sep 6, 2011 +80;Vampire: The Masquerade - Bloodlines;9.0;Nov 16, 2004 +80;Dark Souls II: Scholar of the First Sin;7.4;Apr 1, 2015 +80;Warhammer 40,000: Dawn of War II - Retribution;7.8;Mar 1, 2011 +80;Panzer Corps;7.5;Jul 11, 2011 +80;Men of War;8.1;Mar 16, 2009 +80;Fallen Enchantress: Legendary Heroes;7.7;May 22, 2013 +80;The Walking Dead: Episode 4 - Around Every Corner;8.5;Oct 10, 2012 +80;Tales of Monkey Island Chapter 4: The Trial and Execution of Guybrush Threepwood;8.4;Oct 30, 2009 +80;Penny Arcade Adventures: Episode Two;7.7;Nov 7, 2008 +80;Time Commando;8.9;Jul 31, 1996 +80;Sins of a Solar Empire: Entrenchment;8.1;Feb 25, 2009 +80;F1 2012;6.9;Sep 18, 2012 +80;Luftrausers;6.8;Mar 18, 2014 +80;Naruto Shippuden: Ultimate Ninja Storm 3 Full Burst;7.9;Oct 24, 2013 +80;Stealth Bastard Deluxe;8.3;Nov 28, 2012 +80;Tom Clancy's Ghost Recon Advanced Warfighter;7.7;May 3, 2006 +80;LEGO Batman: The Videogame;7.9;Sep 23, 2008 +80;Stacking;7.9;Mar 6, 2012 +80;Age of Wonders III;7.8;Mar 31, 2014 +80;Life is Strange: Episode 3 - Chaos Theory;9.0;May 19, 2015 +80;The Legend of Heroes: Trails in the Sky SC;8.4;Oct 29, 2015 +80;Proteus;5.6;Jan 30, 2013 +80;Robin Hood: The Legend of Sherwood;8.3;Nov 14, 2002 +80;Soldier of Fortune II: Double Helix;7.3;May 20, 2002 +80;RollerCoaster Tycoon: Loopy Landscapes;9.0;Sep 30, 2000 +80;Toki Tori;7.9;Jan 28, 2010 +80;RoboBlitz;8.3;Nov 7, 2006 +80;Wargame: AirLand Battle;8.1;May 29, 2013 +80;Football Manager 2015;6.0;Nov 7, 2014 +80;The Suffering;8.2;Jun 8, 2004 +80;Gish;7.2;Sep 17, 2004 +80;Axiom Verge;8.2;May 14, 2015 +80;Driver: San Francisco;7.0;Sep 27, 2011 +80;The Corporate Machine;7.5;Jul 14, 2001 +80;Dungeons & Dragons: Chronicles of Mystara;6.7;Jun 18, 2013 +80;Disciples II: Rise of the Elves;8.1;Nov 25, 2003 +80;MechCommander 2;8.3;Jul 18, 2001 +80;Waterloo: Napoleon's Last Battle;7.5;Mar 25, 2001 +80;Chessmaster 8000;6.4;Nov 14, 2000 +80;Circle of Blood;8.6;Sep 30, 1996 +80;BioShock Infinite: Burial at Sea - Episode Two;8.5;Mar 25, 2014 +80;S.T.A.L.K.E.R.: Call of Pripyat;8.7;Feb 2, 2010 +80;The Walking Dead: Season Two - A Telltale Games Series;8.3;Dec 17, 2013 +80;FLY'N;8.2;Nov 9, 2012 +80;Total War: Attila;7.3;Feb 17, 2015 +80;The Wolf Among Us;8.8;Oct 11, 2013 +80;Nancy Drew: Secret of the Old Clock;8.1;Jul 26, 2005 +80;ArcheAge;3.6;Sep 16, 2014 +80;CAPSIZED;7.1;Apr 29, 2011 +80;Microsoft Flight Simulator X;7.6;Oct 17, 2006 +80;Myst V: End of Ages;7.8;Sep 19, 2005 +80;Railroad Tycoon 3;7.7;Oct 23, 2003 +80;Hostile Waters: Antaeus Rising;8.1;Jun 13, 2001 +79;Dustforce;7.9;Jan 17, 2012 +79;Empire Earth II;7.0;Apr 26, 2005 +79;Fallout 3: Point Lookout;7.8;Jun 23, 2009 +79;Test Drive Unlimited;8.1;Mar 20, 2007 +79;Dying Light: The Following;8.3;Feb 9, 2016 +79;The Path;7.0;Mar 18, 2009 +79;Dungeon of the Endless;8.0;Oct 27, 2014 +79;Revenge of the Titans;7.6;May 24, 2010 +79;Bookworm Adventures: Volume 2;7.6;Jul 30, 2009 +79;F1 2001;7.5;Oct 14, 2001 +79;Brothers in Arms: Hell's Highway;7.9;Oct 7, 2008 +79;Star Wars: Empire at War;8.4;Feb 15, 2006 +79;Dariusburst: Chronicle Saviours;8.3;Dec 3, 2015 +79;Europa Universalis: Rome - Vae Victis;8.6;Nov 19, 2008 +79;Silent Hunter: Wolves of the Pacific;6.5;Mar 20, 2007 +79;Pillars of Eternity: The White March - Part 2;6.7;Feb 16, 2016 +79;1701 A.D.;8.3;Nov 6, 2006 +79;Stasis;7.6;Aug 31, 2015 +79;Pro Evolution Soccer 2009;7.4;Nov 12, 2008 +79;Return to Mysterious Island;8.5;Nov 2, 2004 +79;Jotun;7.0;Sep 29, 2015 +79;Else Heart.Break();7.5;Sep 24, 2015 +79;Kohan: Ahriman's Gift;8.7;Nov 5, 2001 +79;Emperor: Battle for Dune;8.3;Jun 12, 2001 +79;Trackmania Turbo;6.9;Mar 24, 2016 +79;Cart Life;5.9;Jul 29, 2010 +79;Sword of the Stars: Born of Blood;8.1;Jun 5, 2007 +79;Worms Reloaded;6.7;Aug 26, 2010 +79;Warhammer: End Times - Vermintide;7.9;Oct 23, 2015 +79;Euro Truck Simulator 2;8.7;Jan 16, 2013 +79;Tropico 3;8.2;Oct 20, 2009 +79;Cities: Skylines - After Dark;7.9;Sep 24, 2015 +79;Runaway: A Twist of Fate;8.5;Apr 21, 2011 +79;Tales of Monkey Island Chapter 1: Launch of the Screaming Narwhal;8.2;Jul 7, 2009 +79;Bloodline Champions;8.0;Jan 13, 2011 +79;The Sims: Superstar;8.2;May 12, 2003 +79;NBA Live 2005;8.5;Oct 26, 2004 +79;Valiant Hearts: The Great War;8.6;Jun 25, 2014 +79;Payday 2;3.4;Aug 13, 2013 +79;Dungeons of Dredmor;7.8;Jul 13, 2011 +79;Geometry Wars 3: Dimensions;6.2;Nov 25, 2014 +79;Assassin's Creed: Director's Cut Edition;7.5;Apr 8, 2008 +79;Puzzle Dimension;7.6;Jun 21, 2010 +79;Split/Second;8.2;May 18, 2010 +79;Sang-Froid: Tales of Werewolves;7.9;Apr 5, 2013 +79;The Incredible Adventures of Van Helsing: Final Cut;7.2;Oct 7, 2015 +79;Hitman: Absolution;7.0;Nov 19, 2012 +79;Call of Juarez: Gunslinger;8.2;May 22, 2013 +79;Rome: Total War Alexander;7.6;Jun 19, 2006 +79;Strong Bad's Cool Game for Attractive People Episode 3: Baddest of the Bands;8.1;Oct 27, 2008 +79;Sam & Max Episode 102: Situation: Comedy;7.9;Dec 20, 2006 +79;Tropico 3: Absolute Power;7.7;May 17, 2010 +79;Sam & Max Episode 106: Bright Side of the Moon;7.3;Apr 26, 2007 +79;Day of Defeat;9.3;May 6, 2003 +79;Space Empires: IV;8.3;Nov 6, 2000 +79;Resident Evil 4: Ultimate HD Edition;7.7;Feb 27, 2014 +79;Sam & Max Episode 203: Night of the Raving Dead;8.2;Feb 12, 2008 +79;FlatOut: Ultimate Carnage;7.6;Sep 2, 2008 +79;Guitar Hero III: Legends of Rock;7.2;Nov 13, 2007 +79;Sid Meier's Civilization: Beyond Earth - Rising Tide;5.9;Oct 9, 2015 +79;Memoria;8.5;Aug 29, 2013 +79;The Last Door;7.8;May 20, 2014 +79;Shadowgrounds Survivor;7.8;Dec 6, 2007 +79;Gothic II;8.8;Oct 28, 2003 +79;Port Royale;8.2;Jun 4, 2003 +79;Deadly Dozen: Pacific Theater;7.9;Oct 31, 2002 +79;Shattered Galaxy;8.3;Aug 21, 2001 +79;Close Combat: Invasion: Normandy;8.2;Oct 10, 2000 +79;King's Bounty: The Legend;8.6;Sep 23, 2008 +79;Rage;5.1;Oct 4, 2011 +79;The Misadventures of P.B. Winterbottom;8.3;Apr 20, 2010 +79;Uru: Ages Beyond Myst;7.4;Nov 11, 2003 +79;Guild Wars: Eye of the North;8.6;Aug 28, 2007 +79;Tales From The Borderlands: Episode 4 - Escape Plan Bravo;8.4;Aug 18, 2015 +79;EverQuest: Lost Dungeons of Norrath;7.0;Sep 8, 2003 +79;Battlefield 1942: Secret Weapons of WWII;8.5;Sep 4, 2003 +79;The Sims: Unleashed;8.0;Sep 23, 2002 +79;Race the Sun;7.5;Aug 19, 2013 +79;The Sims 3: Pets;6.1;Oct 18, 2011 +79;Prototype;7.9;Jun 10, 2009 +79;Stick it to the Man!;7.2;Dec 13, 2013 +79;Street Fighter X Tekken;6.4;May 11, 2012 +79;Frozen Cortex;6.5;Feb 19, 2015 +79;Free Realms;6.4;Apr 29, 2009 +79;Homeworld: Deserts of Kharak;8.0;Jan 20, 2016 +79;Don't Starve;8.3;Apr 23, 2013 +79;Assault Android Cactus;7.0;Sep 23, 2015 +79;Trainz;7.2;Feb 10, 2002 +79;King Arthur: The Role-Playing Wargame;7.9;Nov 24, 2009 +79;Chivalry: Medieval Warfare;7.8;Oct 16, 2012 +79;Overlord II;8.1;Jun 23, 2009 +79;F.E.A.R. 2: Project Origin;7.8;Feb 10, 2009 +79;Tom Clancy's Rainbow Six Siege;6.9;Dec 1, 2015 +79;The Settlers 7: Paths to a Kingdom;5.2;Mar 23, 2010 +79;RollerCoaster Tycoon 3: Soaked!;2.9;Jun 23, 2005 +79;Dark Souls II: Crown of the Old Iron King;7.6;Aug 26, 2014 +79;TrackMania 2 Valley;8.3;Jul 4, 2013 +79;State of Decay;6.8;Nov 5, 2013 +79;LEGO Harry Potter: Years 1-4;7.8;Jun 29, 2010 +79;Rift: Storm Legion;7.8;Nov 13, 2012 +79;Crayon Physics Deluxe;7.6;Jan 7, 2009 +79;Nancy Drew: Legend of the Crystal Skull;8.5;Oct 8, 2007 +79;EverQuest II: Desert of Flames;7.8;Sep 12, 2005 +79;SimCity 4: Rush Hour;8.6;Sep 22, 2003 +79;Uncommon Valor: Campaign for the South Pacific;7.6;Dec 2, 2002 +79;Global Operations;8.3;Mar 25, 2002 +78;Apotheon;7.8;Feb 3, 2015 +78;Need for Speed: Most Wanted - A Criterion Game;4.4;Oct 30, 2012 +78;Star Wars: Battlefront II;8.8;Oct 31, 2005 +78;The Walking Dead: Season Two Episode 1 - All That Remains;8.5;Dec 17, 2013 +78;The Journey Down: Chapter Two;7.1;Aug 25, 2014 +78;Star Trek: Elite Force II;7.6;Jun 25, 2003 +78;Zuma's Revenge!;7.9;Sep 15, 2009 +78;Baldur's Gate: Enhanced Edition;7.0;Nov 28, 2012 +78;Doom 3: Resurrection of Evil;6.0;Apr 4, 2005 +78;LEGO Indiana Jones: The Original Adventures;7.7;Jun 3, 2008 +78;NASCAR Thunder 2004;7.5;Sep 16, 2003 +78;Transformers: Fall of Cybertron;7.8;Aug 21, 2012 +78;FIFA Soccer 06;6.7;Oct 4, 2005 +78;DeadCore;6.8;Oct 17, 2014 +78;The Walking Dead: Season Two Episode 5 - No Going Back;8.5;Aug 26, 2014 \ No newline at end of file diff --git a/sources/src/main/resources/pr2/streams/map_filter/games.txt b/sources/src/main/resources/pr2/streams/map_filter/games.txt new file mode 100644 index 0000000..3390355 --- /dev/null +++ b/sources/src/main/resources/pr2/streams/map_filter/games.txt @@ -0,0 +1,994 @@ +96;Half-Life 2;9.2;Nov 16, 2004 +96;Grand Theft Auto V;7.8;Apr 14, 2015 +96;The Orange Box;9.3;Oct 10, 2007 +96;Half-Life;9.1;Oct 31, 1998 +96;BioShock;8.4;Aug 21, 2007 +95;Baldur's Gate II: Shadows of Amn;9.2;Sep 24, 2000 +95;Portal 2;8.8;Apr 19, 2011 +94;The Elder Scrolls V: Skyrim;8.1;Nov 11, 2011 +94;Mass Effect 2;8.7;Jan 26, 2010 +94;Grand Theft Auto: Vice City;8.8;May 12, 2003 +94;Civilization II;9.0;Feb 29, 1996 +94;Quake;8.8;Jun 22, 1996 +94;BioShock Infinite;8.5;Mar 26, 2013 +94;The Elder Scrolls IV: Oblivion;8.0;Mar 20, 2006 +94;Grim Fandango;9.1;Sep 30, 1998 +94;Diablo;8.7;Nov 30, 1996 +94;Sid Meier's Civilization IV;8.2;Oct 25, 2005 +93;The Witcher 3: Wild Hunt;9.1;May 19, 2015 +93;Company of Heroes;8.8;Sep 13, 2006 +93;Unreal Tournament 2004;8.9;Mar 16, 2004 +93;Starcraft II: Wings of Liberty;8.2;Jul 27, 2010 +93;Minecraft;7.4;May 10, 2009 +93;Grand Theft Auto III;8.4;May 20, 2002 +93;Homeworld;8.9;Aug 31, 1999 +93;Star Wars: Knights of the Old Republic;9.0;Nov 18, 2003 +93;World of Warcraft;7.2;Nov 23, 2004 +93;Grand Theft Auto: San Andreas;8.8;Jun 7, 2005 +92;Call of Duty 4: Modern Warfare;8.5;Nov 5, 2007 +92;Warcraft III: Reign of Chaos;9.1;Jul 3, 2002 +92;The Sims;7.9;Jan 31, 2000 +92;Sid Meier's Gettysburg!;7.7;Sep 30, 1997 +92;World Soccer Winning Eleven 7 International;7.9;Apr 9, 2004 +92;Team Fortress 2;9.2;Apr 8, 2008 +92;System Shock 2;9.1;Aug 11, 1999 +92;Tom Clancy's Splinter Cell: Chaos Theory;8.8;Mar 28, 2005 +92;Undertale;8.2;Sep 15, 2015 +92;Rome: Total War;9.1;Sep 22, 2004 +92;Thief: The Dark Project;9.1;Nov 30, 1998 +92;Age of Empires II: The Age of Kings;9.0;Sep 30, 1999 +92;Unreal Tournament (1999);9.1;Nov 30, 1999 +92;Sid Meier's Alpha Centauri;9.1;Feb 12, 1999 +92;Galactic Civilizations II: Twilight of the Arnor;8.4;Apr 30, 2008 +92;Tiger Woods PGA Tour 2003;6.0;Oct 31, 2002 +91;Dishonored;8.4;Oct 9, 2012 +91;Medal of Honor: Allied Assault;8.6;Jan 20, 2002 +91;Myth: The Fallen Lords;8.8;Oct 31, 1997 +91;World of Warcraft: Wrath of the Lich King;7.4;Nov 13, 2008 +91;F1 Challenge '99-'02;8.3;Jun 24, 2003 +91;Baldur's Gate;9.0;Nov 30, 1998 +91;IL-2 Sturmovik;8.7;Nov 18, 2001 +91;FreeSpace 2;8.8;Sep 30, 1999 +91;Metal Gear Solid V: The Phantom Pain;7.7;Sep 1, 2015 +91;Tom Clancy's Splinter Cell;8.6;Feb 19, 2003 +91;Crysis;8.0;Nov 13, 2007 +91;World of Warcraft: The Burning Crusade;7.9;Jan 16, 2007 +91;Tiger Woods PGA Tour 2005;4.6;Sep 20, 2004 +91;The Longest Journey;8.9;Nov 16, 2000 +91;Tony Hawk's Pro Skater 2;8.5;Oct 31, 2000 +91;Star Wars Jedi Knight: Dark Forces II;8.5;Sep 30, 1997 +91;Batman: Arkham Asylum;8.7;Sep 15, 2009 +91;Galactic Civilizations II: Dark Avatar;8.2;Feb 14, 2007 +91;The Operative: No One Lives Forever;8.9;Nov 9, 2000 +91;Battlefield 2;8.4;Jun 21, 2005 +91;Street Fighter IV;8.0;Jul 1, 2009 +91;Fallout 3;7.9;Oct 28, 2008 +91;Batman: Arkham City;8.6;Nov 22, 2011 +91;Fez;6.5;May 1, 2013 +91;Planescape: Torment;9.3;Nov 30, 1999 +91;Neverwinter Nights;8.1;Jun 16, 2002 +91;No One Lives Forever 2: A Spy in H.A.R.M.'s Way;8.7;Sep 30, 2002 +91;Dragon Age: Origins;8.6;Nov 3, 2009 +91;Mark of the Ninja;8.0;Oct 16, 2012 +91;Dark Souls II;7.1;Apr 25, 2014 +91;Call of Duty;8.5;Oct 29, 2003 +91;Madden NFL 2004;8.2;Aug 12, 2003 +90;The Sims 2;8.8;Sep 14, 2004 +90;World of Warcraft: Cataclysm;5.5;Dec 7, 2010 +90;World of Goo;8.5;Oct 21, 2008 +90;Spelunky;7.2;Aug 8, 2013 +90;Black & White;7.6;Mar 26, 2001 +90;Portal;9.3;Apr 8, 2008 +90;NHL 2001;6.9;Sep 28, 2000 +90;Tony Hawk's Pro Skater 3;8.6;Mar 28, 2002 +90;Deus Ex;9.3;Jun 26, 2000 +90;Half-Life 2: Episode Two;9.2;Oct 10, 2007 +90;Braid;8.6;Jan 26, 2010 +90;The Chronicles of Riddick: Escape From Butcher Bay - Developer's Cut;8.7;Dec 8, 2004 +90;Sid Meier's Civilization III;8.4;Oct 30, 2001 +90;Silent Hunter III;7.8;Mar 15, 2005 +90;Sid Meier's Civilization V;7.8;Sep 21, 2010 +90;Falcon 4.0: Allied Force;8.6;Jun 28, 2005 +90;Deus Ex: Human Revolution;8.5;Aug 23, 2011 +90;Dark Souls III;8.2;Apr 12, 2016 +90;Flight Simulator 2002;8.4;Oct 19, 2001 +90;Brothers: A Tale of Two Sons;8.5;Sep 3, 2013 +90;Dota 2;6.2;Jul 9, 2013 +90;Guild Wars 2;7.9;Aug 28, 2012 +90;Freedom Force;8.0;Mar 24, 2002 +90;GTR 2;8.7;Sep 29, 2006 +90;Grand Theft Auto IV;6.5;Dec 2, 2008 +90;Total War: Shogun 2;8.3;Mar 15, 2011 +90;Empire: Total War;6.9;Mar 3, 2009 +90;Command & Conquer: Red Alert;8.9;Oct 31, 1996 +89;Star Wars Jedi Knight II: Jedi Outcast;8.6;Mar 26, 2002 +89;The Walking Dead: A Telltale Games Series;8.7;Dec 11, 2012 +89;Age of Mythology;8.9;Nov 1, 2002 +89;Sacrifice;8.8;Nov 5, 2000 +89;The Witcher 3: Wild Hunt - Hearts of Stone;8.4;Oct 13, 2015 +89;Pillars of Eternity;8.3;Mar 26, 2015 +89;The Elder Scrolls III: Morrowind;9.0;May 1, 2002 +89;Rocksmith 2014 Edition;7.9;Oct 22, 2013 +89;Fallout;8.9;Sep 30, 1997 +89;World Soccer Winning Eleven 9;8.4;Apr 28, 2006 +89;Worldwide Soccer Manager 2005;8.7;Dec 7, 2004 +89;Left 4 Dead;9.2;Nov 18, 2008 +89;Left 4 Dead 2;8.5;Nov 17, 2009 +89;NASCAR Racing 2002 Season;5.8;Feb 14, 2002 +89;Mass Effect;8.6;May 28, 2008 +89;Combat Mission: Barbarossa to Berlin;8.3;Oct 29, 2002 +89;Homeworld: Cataclysm;8.9;Sep 7, 2000 +89;The Walking Dead: Episode 5 - No Time Left;8.9;Nov 21, 2012 +89;Guild Wars;8.4;Apr 26, 2005 +89;Borderlands 2;8.2;Sep 18, 2012 +89;Max Payne;9.1;Jul 23, 2001 +89;Out of the Park Baseball 15;7.2;Apr 21, 2014 +89;World in Conflict;8.1;Sep 18, 2007 +89;NASCAR Racing 4;8.2;Feb 6, 2001 +89;Duke Nukem 3D;8.8;Jan 31, 1996 +89;Far Cry;8.0;Mar 23, 2004 +89;FIFA Soccer 12;7.1;Sep 27, 2011 +89;XCOM: Enemy Unknown;8.2;Oct 9, 2012 +89;Mass Effect 3;5.4;Mar 6, 2012 +89;Rise of Nations;9.0;May 20, 2003 +89;NASCAR Racing 2003 Season;8.6;Feb 14, 2003 +89;Descent 3;8.3;Jun 14, 2000 +89;The Curse of Monkey Island;9.1;Oct 31, 1997 +89;Battlefield 3;7.5;Oct 25, 2011 +89;Battlefield 1942;8.6;Sep 10, 2002 +89;Madden NFL 2003;8.4;Aug 12, 2002 +89;DiRT 2;8.3;Dec 10, 2009 +89;Stardew Valley;8.5;Feb 26, 2016 +89;Prince of Persia: The Sands of Time;8.6;Nov 30, 2003 +89;Railroad Tycoon II;8.4;Oct 31, 1998 +88;Microsoft Flight Simulator 2004: A Century of Flight;8.2;Jul 29, 2003 +88;Medieval: Total War;8.8;Aug 19, 2002 +88;Mafia;9.1;Aug 27, 2002 +88;LIMBO;8.1;Aug 2, 2011 +88;Nuclear Throne;7.4;Dec 5, 2015 +88;Crusader Kings II: The Old Gods;8.8;May 28, 2013 +88;Assassin's Creed: Brotherhood;8.2;Mar 22, 2011 +88;Superbike 2001;6.5;Oct 9, 2000 +88;F.E.A.R.;8.3;Oct 17, 2005 +88;Kerbal Space Program;8.1;Apr 27, 2015 +88;Tribes 2;8.5;Mar 28, 2001 +88;Age of Empires II: The Conquerors Expansion;9.0;Aug 24, 2000 +88;Tiger Woods PGA Tour 2004;8.8;Sep 22, 2003 +88;Warcraft III: The Frozen Throne;9.0;Jul 1, 2003 +88;Starcraft;9.1;Apr 1, 1998 +88;Far Cry 3;8.2;Dec 4, 2012 +88;XCOM 2;7.0;Feb 5, 2016 +88;World Soccer Winning Eleven 8 International;8.5;Feb 16, 2005 +88;Torchlight II;8.6;Sep 20, 2012 +88;Myth II: Soulblighter;9.0;Nov 30, 1998 +88;Return to Castle Wolfenstein;8.7;Nov 19, 2001 +88;Shogo: Mobile Armor Division;8.9;Sep 30, 1998 +88;Thirty Flights of Loving;5.0;Aug 20, 2012 +88;Hearthstone: Heroes of Warcraft;6.3;Mar 11, 2014 +88;Medieval II: Total War;8.9;Nov 13, 2006 +88;F1 2002;7.6;Jun 13, 2002 +88;The Stanley Parable;8.0;Oct 17, 2013 +88;BioShock 2;8.0;Feb 9, 2010 +88;Counter-Strike: Source;8.9;Sep 26, 2005 +88;Starcraft II: Legacy of the Void;8.3;Nov 10, 2015 +88;Diablo III;4.0;May 15, 2012 +88;Rise of Nations: Thrones & Patriots;8.8;Apr 27, 2004 +88;Sid Meier's Pirates!;8.3;Nov 22, 2004 +88;EVE Online: Special Edition;7.8;Mar 10, 2009 +88;Guacamelee! Gold Edition;7.3;Aug 8, 2013 +88;Armadillo Run;8.2;Apr 22, 2006 +88;Dark Age of Camelot;8.9;Sep 1, 2001 +88;Baldur's Gate II: Throne of Bhaal;8.9;Jun 21, 2001 +88;Counter-Strike;9.3;Nov 8, 2000 +88;Tony Hawk's Pro Skater 4;8.4;Aug 27, 2003 +88;Ori and the Blind Forest;8.7;Mar 11, 2015 +88;Diablo II;8.8;Jun 29, 2000 +88;The Witcher 2: Assassins of Kings;8.5;May 17, 2011 +87;Plants vs. Zombies;8.9;Aug 18, 2009 +87;Doom 3;7.5;Aug 3, 2004 +87;Super Meat Boy;8.3;Apr 5, 2011 +87;Football Manager 2010;9.1;Nov 3, 2009 +87;Oddworld: Abe's Oddysee - New 'n' Tasty;7.8;Feb 25, 2015 +87;Tom Clancy's Splinter Cell: Pandora Tomorrow;8.0;Mar 23, 2004 +87;Europa Universalis II;8.8;Nov 12, 2001 +87;Burnout Paradise: The Ultimate Box;7.5;Feb 5, 2009 +87;Battlefield: Bad Company 2;8.3;Mar 2, 2010 +87;GRID;7.9;Jun 3, 2008 +87;Crypt of the NecroDancer;7.7;Apr 23, 2015 +87;Sins of a Solar Empire;8.2;Feb 4, 2008 +87;MechWarrior 4: Vengeance;8.2;Nov 23, 2000 +87;Thief II: The Metal Age;9.1;Feb 29, 2000 +87;Diablo II: Lord of Destruction;9.1;Jun 27, 2001 +87;Monkey Island 2 Special Edition: LeChuck's Revenge;9.0;Jul 7, 2010 +87;Half-Life 2: Episode One;8.6;Jun 1, 2006 +87;The Swapper;8.7;May 30, 2013 +87;Hitman 2: Silent Assassin;8.2;Oct 1, 2002 +87;Year Walk;7.0;Mar 6, 2014 +87;Max Payne 3;7.6;Jun 1, 2012 +87;TowerFall Ascension;6.6;Mar 11, 2014 +87;Battlefield 3: Armored Kill;7.0;Sep 11, 2012 +87;NHL 2002;8.7;Sep 17, 2001 +87;Icewind Dale;8.3;Jun 29, 2000 +87;The Witness;6.6;Jan 26, 2016 +87;Brothers in Arms: Road to Hill 30;7.1;Mar 15, 2005 +87;Kohan: Immortal Sovereigns;8.6;Mar 14, 2001 +87;Day of the Tentacle Remastered;7.9;Mar 21, 2016 +87;Dead Space 2;8.3;Jan 25, 2011 +87;Diablo III: Reaper of Souls;6.6;Mar 25, 2014 +87;Shogun: Total War Warlord Edition;8.7;Aug 13, 2001 +87;Serious Sam: The First Encounter;8.4;Mar 21, 2001 +87;Grand Prix 3;8.3;Aug 24, 2000 +87;Call of Duty: United Offensive;8.3;Sep 14, 2004 +87;Divinity: Original Sin;8.7;Jan 17, 2014 +87;Company of Heroes: Opposing Fronts;8.6;Sep 24, 2007 +87;Psychonauts;8.9;Apr 19, 2005 +87;Gears of War;7.8;Nov 6, 2007 +87;Out of the Park Baseball 4;7.8;Feb 28, 2002 +87;Europa Universalis IV;8.7;Aug 13, 2013 +87;NHL 2004;8.2;Sep 22, 2003 +87;Zeus: Master of Olympus;9.0;Oct 22, 2000 +87;World of Warcraft: Warlords of Draenor;6.0;Nov 13, 2014 +87;Warhammer 40,000: Dawn of War - Dark Crusade;8.9;Oct 9, 2006 +87;Commandos 2: Men of Courage;8.8;Sep 20, 2001 +86;Tales From The Borderlands: Episode 5 - The Vault of the Traveler;8.7;Oct 20, 2015 +86;Bastion;8.6;Aug 16, 2011 +86;Gone Home;5.4;Aug 15, 2013 +86;Pac-Man Championship Edition DX +;7.3;Sep 24, 2013 +86;Supreme Commander;8.3;Feb 20, 2007 +86;Total War: Shogun 2 - Fall of the Samurai;8.4;Mar 23, 2012 +86;Startopia;8.7;Jun 19, 2001 +86;Enemy Engaged: RAH-66 Comanche Versus Ka-52 Hokum;8.3;Jul 31, 2000 +86;Fallout 2;9.2;Sep 30, 1998 +86;Final Fantasy XIV: Heavensward;7.7;Jun 23, 2015 +86;Football Manager 2013;6.7;Nov 1, 2012 +86;Out of the Park Baseball 14;8.6;Apr 15, 2013 +86;The Witcher: Enhanced Edition;8.5;Sep 16, 2008 +86;Borderlands: The Secret Armory of General Knoxx;7.6;Feb 25, 2010 +86;Call of Duty 2;8.3;Oct 25, 2005 +86;Astebreed;7.3;May 30, 2014 +86;Ground Control;7.8;May 31, 2000 +86;Rise of the Tomb Raider;8.0;Jan 28, 2016 +86;Resident Evil 5;7.1;Sep 18, 2009 +86;Saints Row IV;7.4;Aug 20, 2013 +86;Black Mesa;9.0;Sep 14, 2012 +86;EverQuest: Omens of War;7.7;Sep 13, 2004 +86;Steel Beasts;8.4;Sep 24, 2000 +86;Total Annihilation;8.9;Sep 30, 1997 +86;Need for Speed: Hot Pursuit;6.7;Nov 16, 2010 +86;FIFA Soccer 13;6.6;Sep 25, 2012 +86;Sid Meier's Civilization IV: Beyond the Sword;8.6;Jul 23, 2007 +86;The Sims 3;7.6;Jun 2, 2009 +86;Freedom Force vs The 3rd Reich;7.7;Mar 8, 2005 +86;The Binding of Isaac: Rebirth;8.3;Nov 4, 2014 +86;Tribes: Ascend;7.7;Apr 12, 2012 +86;Titanfall;6.1;Mar 11, 2014 +86;Rayman Origins;8.4;Mar 29, 2012 +86;Her Story;5.7;Jun 24, 2015 +86;Starcraft II: Heart of the Swarm;7.9;Mar 12, 2013 +86;Mass Effect 2: Lair of the Shadow Broker;8.5;Sep 7, 2010 +86;LEGO Star Wars II: The Original Trilogy;8.3;Sep 12, 2006 +86;Dungeon Siege;7.9;Mar 31, 2002 +86;Crysis 2;6.7;Mar 22, 2011 +86;Call of Duty: Modern Warfare 2;4.1;Nov 10, 2009 +86;The Secret of Monkey Island: Special Edition;9.1;Jul 15, 2009 +86;Max Payne 2: The Fall of Max Payne;9.0;Oct 14, 2003 +86;Homeworld Remastered Collection;8.2;Feb 25, 2015 +86;Galactic Civilizations II: Dread Lords;8.0;Feb 21, 2006 +86;Tomb Raider;8.5;Mar 5, 2013 +86;Star Trek: Voyager Elite Force;8.2;Sep 20, 2000 +86;Worldwide Soccer Manager 2008;8.4;Oct 23, 2007 +86;IL-2 Sturmovik: Forgotten Battles;8.6;Mar 2, 2003 +86;Hyper Light Drifter;8.1;Mar 31, 2016 +86;DiRT 3;6.9;May 24, 2011 +86;Unreal Tournament 2003;8.1;Sep 30, 2002 +86;Age of Wonders II: The Wizard's Throne;8.4;Jun 12, 2002 +86;Links 2001;6.8;Oct 24, 2000 +86;EverQuest: The Ruins of Kunark;8.8;Mar 31, 2000 +86;Full Throttle;8.8;Apr 30, 1995 +86;The Lord of the Rings Online: Shadows of Angmar;8.1;Apr 24, 2007 +86;Pony Island;6.8;Jan 4, 2016 +86;Warhammer 40,000: Dawn of War;8.8;Sep 20, 2004 +86;Warhammer Online: Age of Reckoning;7.9;Sep 16, 2008 +86;Dead Space;8.0;Oct 20, 2008 +86;Bionic Commando Rearmed;7.0;Aug 13, 2008 +86;Command & Conquer: Red Alert 2 - Yuri's Revenge;9.0;Oct 10, 2001 +86;Europa Universalis;8.1;Feb 2, 2001 +86;Escape from Monkey Island;8.2;Nov 8, 2000 +86;IL-2 Sturmovik: 1946;8.8;Mar 13, 2007 +86;XCOM: Enemy Within;7.9;Nov 12, 2013 +86;Battlefield 3: Back to Karkand;7.2;Dec 13, 2011 +86;Heroes of the Storm;6.7;Jun 2, 2015 +86;Civilization III: Conquests;8.4;Nov 4, 2003 +86;Path of Exile;8.0;Jan 25, 2013 +86;Battlefield: Bad Company 2 Vietnam;8.1;Dec 18, 2010 +86;Assassin's Creed II;6.8;Mar 9, 2010 +86;The Elder Scrolls IV: Shivering Isles;8.4;Mar 26, 2007 +86;DiRT Rally;8.8;Dec 7, 2015 +86;Rocket League;8.1;Jul 7, 2015 +86;Allegiance;8.2;Mar 31, 2000 +85;The Talos Principle;8.5;Dec 11, 2014 +85;Cities: Skylines;8.9;Mar 10, 2015 +85;Falcon 4.0;8.0;Nov 30, 1998 +85;Tom Clancy's Rainbow Six;8.6;Jul 31, 1998 +85;Madden NFL 2005;6.4;Sep 14, 2004 +85;Legend of Grimrock II;8.0;Oct 15, 2014 +85;Sam & Max Episode 205: What's New, Beelzebub?;8.6;Apr 10, 2008 +85;Dragon Age: Inquisition;5.8;Nov 18, 2014 +85;Tales from the Borderlands: A Telltale Game Series;8.7;Apr 26, 2016 +85;Tom Clancy's Rainbow Six: Vegas;7.7;Dec 12, 2006 +85;City of Heroes;8.5;Apr 27, 2004 +85;SWAT 4;8.6;Apr 5, 2005 +85;Clive Barker's Undying;8.7;Feb 21, 2001 +85;EverQuest;8.2;Mar 16, 1999 +85;Warhammer 40,000: Dawn of War II;8.1;Feb 18, 2009 +85;Command & Conquer 3: Tiberium Wars;8.0;Mar 26, 2007 +85;Bit.Trip Presents...Runner2: Future Legend of Rhythm Alien;8.2;Feb 26, 2013 +85;Hotline Miami;8.5;Oct 23, 2012 +85;Out of the Park Baseball 13;8.2;Apr 9, 2012 +85;Wizardry 8;8.6;Nov 14, 2001 +85;Aliens Versus Predator 2;8.7;Oct 31, 2001 +85;Operation Flashpoint: Cold War Crisis;9.0;Aug 30, 2001 +85;Tropico;8.4;Apr 5, 2001 +85;Giants: Citizen Kabuto;8.9;Dec 6, 2000 +85;NASCAR SimRacing;4.9;Feb 15, 2005 +85;The Lord of the Rings Online: Mines of Moria;8.3;Nov 17, 2008 +85;The Binding of Isaac: Afterbirth;8.1;Oct 30, 2015 +85;Amnesia: The Dark Descent;8.6;Feb 17, 2011 +85;GTR FIA Racing;8.6;May 3, 2005 +85;Football Manager 2011;8.4;Nov 23, 2010 +85;Dust: An Elysian Tail;8.5;May 24, 2013 +85;South Park: The Stick of Truth;8.6;Mar 4, 2014 +85;Dark Souls: Prepare to Die Edition;7.4;Aug 24, 2012 +85;Medieval II: Total War Kingdoms;8.8;Aug 28, 2007 +85;Shovel Knight;7.9;Jun 26, 2014 +85;DmC: Devil May Cry;6.7;Jan 24, 2013 +85;Peggle Deluxe;8.1;Feb 19, 2008 +85;Monopoly Tycoon;8.0;Sep 24, 2001 +85;Indigo Prophecy;8.3;Oct 2, 2005 +85;Prince of Persia: The Two Thrones;8.0;Dec 1, 2005 +85;Sam & Max Episode 204: Chariots of the Dogs;8.1;Mar 13, 2008 +85;Assetto Corsa;8.4;Dec 19, 2014 +85;Machinarium;8.8;Oct 16, 2009 +85;Frozen Synapse;7.7;May 26, 2011 +85;Valkyria Chronicles;8.3;Nov 11, 2014 +85;Freelancer;8.9;Mar 3, 2003 +85;Zenzizenzic;5.9;Jul 23, 2015 +85;The Wolf Among Us: Episode 1 - Faith;9.0;Oct 11, 2013 +85;Mega Man Legacy Collection;7.3;Aug 25, 2015 +85;Warhammer 40,000: Dawn of War II - Chaos Rising;8.7;Mar 11, 2010 +85;Far Cry 2;5.8;Oct 21, 2008 +85;The Walking Dead: Episode 3 - Long Road Ahead;8.4;Aug 29, 2012 +85;AudioSurf;8.8;Feb 15, 2008 +85;BattleBlock Theater;8.0;May 15, 2014 +85;Star Wars: Knights of the Old Republic II - The Sith Lords;8.4;Feb 8, 2005 +85;MVP Baseball 2005;8.1;Feb 22, 2005 +85;The Elder Scrolls III: Bloodmoon;8.5;Jun 3, 2003 +85;Rogue Legacy;7.9;Jun 27, 2013 +85;Chaos Reborn;8.4;Oct 26, 2015 +85;Thief: Deadly Shadows;8.4;May 25, 2004 +85;Football Manager 2014;5.4;Oct 30, 2013 +85;System Shock: Enhanced Edition;7.9;Sep 22, 2015 +85;EverQuest: Gates of Discord;6.8;Feb 9, 2004 +85;FIFA 2001 Major League Soccer;7.3;Oct 30, 2000 +85;Sid Meier's Civilization V: Brave New World;8.6;Jul 9, 2013 +85;Final Fantasy XI;7.5;Oct 28, 2003 +85;Serious Sam: The Second Encounter;8.5;Feb 4, 2002 +85;The Sims: Hot Date;7.9;Nov 12, 2001 +85;American McGee's Alice;8.2;Dec 6, 2000 +85;Trials Evolution: Gold Edition;6.7;Mar 21, 2013 +85;Warhammer 40,000: Dawn of War - Winter Assault;8.3;Sep 21, 2005 +85;Tony Hawk's Underground 2;7.9;Oct 4, 2004 +85;Papers, Please;8.5;Aug 8, 2013 +85;Star Wars: The Old Republic;5.9;Dec 20, 2011 +85;Anarchy Online: Shadowlands;8.7;Sep 8, 2003 +85;Dark Age of Camelot: Shrouded Isles;8.8;Dec 2, 2002 +85;Obsidian;8.3;Dec 31, 1996 +84;The Walking Dead: Episode 2 - Starved for Help;8.6;Jun 29, 2012 +84;Saints Row: The Third;8.1;Nov 15, 2011 +84;Fallout: New Vegas;8.5;Oct 19, 2010 +84;The Movies;8.3;Nov 8, 2005 +84;Neverwinter Nights: Hordes of the Underdark;8.6;Dec 2, 2003 +84;Command & Conquer: Generals;8.3;Feb 10, 2003 +84;Sid Meier's SimGolf;8.2;Jan 23, 2002 +84;Middle-earth: Shadow of Mordor;8.0;Sep 30, 2014 +84;SpaceChem;8.4;Mar 2, 2011 +84;Downwell;6.2;Oct 15, 2015 +84;Pinball FX 2;8.0;Oct 27, 2012 +84;Devil Daggers;6.7;Feb 18, 2016 +84;PlanetSide 2;7.0;Nov 20, 2012 +84;Enter the Gungeon;7.4;Apr 5, 2016 +84;GT Legends;8.6;Jan 23, 2006 +84;Hearthstone: Goblins Vs. Gnomes;6.6;Dec 8, 2014 +84;Space Rangers 2: Rise of the Dominators;9.0;Mar 27, 2006 +84;Tales From The Borderlands: Episode 1 - Zer0 Sum;8.4;Nov 25, 2014 +84;Puzzle Quest: Challenge of the Warlords;8.3;Oct 10, 2007 +84;Heroes of Might and Magic IV;7.6;Mar 29, 2002 +84;Command & Conquer: Red Alert 2;8.9;Oct 21, 2000 +84;Shogun: Total War;8.7;Jun 13, 2000 +84;DiRT;7.2;Jun 19, 2007 +84;Darkest Dungeon;8.0;Jan 19, 2016 +84;Super Street Fighter IV: Arcade Edition;7.8;Jul 13, 2011 +84;Football Manager 2012;8.0;Oct 20, 2011 +84;Guild Wars Factions;8.5;Apr 28, 2006 +84;80 Days (2015);6.1;Sep 29, 2015 +84;Spore;5.2;Sep 7, 2008 +84;Unity of Command;7.2;Nov 15, 2011 +84;Hearthstone: The Grand Tournament;4.0;Aug 24, 2015 +84;Metro Redux;8.0;Aug 26, 2014 +84;Time Gentlemen, Please!;7.6;Jul 2, 2009 +84;Europa Universalis IV: Wealth of Nations;8.4;May 29, 2014 +84;Mass Effect 3: Citadel;7.8;Mar 5, 2013 +84;Disciples II: Dark Prophecy;8.6;Jan 22, 2002 +84;Just Cause 2;7.7;Mar 23, 2010 +84;Crysis Warhead;7.9;Sep 16, 2008 +84;Assassin's Creed IV: Black Flag;7.7;Nov 19, 2013 +84;Age of Mythology: The Titans;8.7;Sep 30, 2003 +84;SimCity 4;8.7;Jan 12, 2003 +84;Microsoft Train Simulator;8.4;May 31, 2001 +84;Rise of Nations: Rise of Legends;8.5;May 9, 2006 +84;TOCA Race Driver 3;7.8;Feb 24, 2006 +84;FTL: Faster Than Light;8.4;Sep 14, 2012 +84;SOMA;8.2;Sep 22, 2015 +84;DEFCON: Everybody Dies;8.3;Mar 26, 2007 +84;Tron 2.0;8.3;Aug 26, 2003 +84;Brothers in Arms: Earned in Blood;7.3;Oct 6, 2005 +84;Grim Fandango Remastered;8.0;Jan 27, 2015 +84;The Lord of the Rings: The Battle for Middle-Earth II;7.5;Mar 2, 2006 +84;Battlefield Vietnam;7.4;Mar 16, 2004 +84;Medieval: Total War - Viking Invasion;8.8;May 7, 2003 +84;Fallout 4;5.4;Nov 10, 2015 +84;Guild Wars Nightfall;8.7;Oct 26, 2006 +84;The Binding of Isaac;8.3;Sep 28, 2011 +84;Enemy Territory: Quake Wars;8.3;Oct 2, 2007 +84;Trine 2;8.4;Dec 7, 2011 +84;Rift;7.3;Mar 1, 2011 +84;The Wolf Among Us: Episode 5 - Cry Wolf;8.8;Jul 8, 2014 +84;Shift 2: Unleashed;6.1;Mar 29, 2011 +84;Sid Meier's Civilization IV: Warlords;8.2;Jul 24, 2006 +84;Battlefield 1942: The Road to Rome;7.9;Feb 2, 2003 +84;Poseidon;8.4;Jun 25, 2001 +84;F1 2010;6.6;Sep 22, 2010 +84;Shatter;7.4;Mar 15, 2010 +84;Darwinia;7.9;Jun 12, 2006 +84;Ultimate General: Gettysburg;8.0;Oct 16, 2014 +83;Final Fantasy XI: Treasures of Aht Urhgan;7.6;Apr 18, 2006 +83;MDK2;8.4;May 31, 2000 +83;Gunpoint;8.4;Jun 3, 2013 +83;Beyond Good & Evil;8.7;Nov 19, 2003 +83;Anno 2070;7.0;Nov 17, 2011 +83;SMITE;8.3;Mar 25, 2014 +83;Halo: Combat Evolved;7.4;Sep 30, 2003 +83;Grim Dawn;8.9;Feb 25, 2016 +83;Silent Storm;8.9;Jan 20, 2004 +83;Command & Conquer: Generals - Zero Hour;9.0;Sep 22, 2003 +83;Homeworld 2;8.3;Sep 16, 2003 +83;Galactic Civilizations;8.1;Mar 26, 2003 +83;EverQuest: The Shadows of Luclin;7.2;Dec 2, 2001 +83;Orcs Must Die!;8.1;Oct 11, 2011 +83;Life is Strange;8.6;Jan 19, 2016 +83;Fable: The Lost Chapters;8.7;Sep 20, 2005 +83;Unreal Tournament III;8.0;Nov 19, 2007 +83;The Blackwell Epiphany;7.6;Apr 24, 2014 +83;The Lord of the Rings Online: Siege of Mirkwood;7.1;Dec 1, 2009 +83;Out of the Park Baseball 10;8.3;Jun 2, 2009 +83;Tomb Raider: Anniversary;8.0;Jun 5, 2007 +83;Need for Speed: Shift;5.7;Sep 15, 2009 +83;Hearts of Iron II;8.6;Jan 4, 2005 +83;FIFA Soccer 11;7.6;Sep 28, 2010 +83;Project CARS;7.0;May 6, 2015 +83;FIFA Soccer 2003;6.8;Nov 2, 2002 +83;Icewind Dale II;8.3;Aug 26, 2002 +83;Age of Empires;8.8;Sep 30, 1997 +83;EverQuest II: Echoes of Faydwer;8.4;Nov 13, 2006 +83;EverQuest II;7.3;Nov 8, 2004 +83;Terraria;8.5;May 16, 2011 +83;Final Fantasy XIV Online: A Realm Reborn;6.7;Aug 27, 2013 +83;Card Hunter (2013);7.9;Sep 12, 2013 +83;Sam & Max: The Devil's Playhouse - Episode 2: The Tomb of Sammun-Mak;7.9;May 18, 2010 +83;This War of Mine;8.4;Nov 14, 2014 +83;Darksiders;7.7;Sep 23, 2010 +83;Tom Clancy's Rainbow Six 3: Raven Shield;8.9;Mar 19, 2003 +83;World of Outlaws: Sprint Cars;7.9;Feb 11, 2003 +83;Colin McRae Rally 2.0;8.4;Feb 14, 2001 +83;Combat Flight Simulator 2: WWII Pacific Theater;8.1;Oct 13, 2000 +83;Orcs Must Die! 2;7.9;Jul 30, 2012 +83;Prey;7.9;Jul 11, 2006 +83;Metal Gear Rising: Revengeance;7.9;Jan 9, 2014 +83;Starseed Pilgrim;6.3;Apr 16, 2013 +83;Age of Conan: Rise of the Godslayer;8.4;May 11, 2010 +83;Alan Wake;8.0;Feb 16, 2012 +83;Tiger Woods PGA Tour 2002;5.0;Feb 24, 2002 +83;Monaco: What's Yours Is Mine;7.7;Apr 24, 2013 +83;Transistor;8.3;May 20, 2014 +83;Helldivers;6.9;Dec 7, 2015 +83;Worldwide Soccer Manager 2009;8.1;Nov 18, 2008 +83;Call of Duty: World at War;7.5;Nov 10, 2008 +83;Torchlight;8.0;Jan 5, 2010 +83;Prison Architect;8.3;Oct 6, 2015 +83;Valdis Story: Abyssal City;8.1;Oct 30, 2013 +83;Crimson Skies;8.2;Sep 17, 2000 +83;RACE 07: Official WTCC Game;9.0;Oct 9, 2007 +83;SUPERHOT;7.6;Feb 25, 2016 +83;EverQuest II: Rise of Kunark;7.9;Nov 13, 2007 +83;Dark Age of Camelot: Catacombs;8.6;Dec 7, 2004 +83;Spore Creature Creator;8.1;Jun 17, 2008 +83;Colin McRae Rally 2005;7.0;Oct 28, 2004 +83;Tom Clancy's Splinter Cell: Conviction;5.2;Apr 27, 2010 +83;Tribes: Vengeance;7.6;Oct 12, 2004 +83;L.A. Noire: The Complete Edition;7.9;Nov 8, 2011 +83;GTR Evolution;8.2;Sep 2, 2008 +83;Life is Strange: Episode 5 - Polarized;8.4;Oct 20, 2015 +83;BROFORCE;8.0;Oct 15, 2015 +83;Independence War 2: Edge of Chaos;8.4;Aug 22, 2001 +83;Myst III: Exile;8.2;May 8, 2001 +83;Superbrothers: Sword & Sworcery EP;6.4;Apr 16, 2012 +83;Sid Meier's Civilization IV: Colonization;6.7;Sep 22, 2008 +83;Europa Universalis III;8.4;Jan 23, 2007 +83;F1 2011;7.2;Sep 20, 2011 +83;Prince of Persia: Warrior Within;8.4;Nov 30, 2004 +83;Danganronpa: Trigger Happy Havoc;7.6;Feb 18, 2016 +83;Counter-Strike: Global Offensive;7.8;Aug 21, 2012 +83;Outland;7.1;Sep 29, 2014 +83;MechWarrior 4: Mercenaries;8.6;Nov 7, 2002 +83;Metal Gear Solid;9.0;Sep 24, 2000 +82;Invisible, Inc.;8.0;May 12, 2015 +82;Dark Souls II: Crown of the Ivory King;7.8;Sep 29, 2014 +82;Red Faction: Guerrilla;7.5;Sep 15, 2009 +82;The Book of Unwritten Tales;8.2;Oct 28, 2011 +82;Capitalism II;9.0;Dec 16, 2001 +82;Rally Trophy;8.5;Nov 20, 2001 +82;Dawn of Discovery;8.8;Jun 17, 2009 +82;City of Villains;8.1;Oct 31, 2005 +82;Kentucky Route Zero - Act II;8.0;May 31, 2013 +82;Tom Clancy's Splinter Cell: Blacklist;7.4;Aug 20, 2013 +82;Act of War: Direct Action;8.5;Mar 15, 2005 +82;Sokobond;7.8;Aug 27, 2013 +82;Sam & Max Episode 105: Reality 2.0;8.4;Mar 29, 2007 +82;Bejeweled 3;8.0;Dec 7, 2010 +82;Dangerous Waters;8.8;Feb 22, 2005 +82;Tomb Raider: Legend;7.8;Apr 11, 2006 +82;Asheron's Call 2: Fallen Kings;8.8;Nov 20, 2002 +82;Gemini Rue;8.4;Feb 24, 2011 +82;Antichamber;8.2;Jan 31, 2013 +82;Neverwinter Nights 2;6.5;Oct 31, 2006 +82;Dragon Age: Origins - Awakening;7.7;Mar 16, 2010 +82;Door Kickers;8.2;Oct 20, 2014 +82;Hearthstone: Blackrock Mountain;6.4;Apr 2, 2015 +82;Rome: Total War Barbarian Invasion;8.4;Sep 27, 2005 +82;Hacknet;7.3;Aug 12, 2015 +82;Tales of Monkey Island Chapter 3: Lair of the Leviathan;7.8;Sep 29, 2009 +82;Neverwinter Nights 2: Mask of The Betrayer;8.8;Oct 9, 2007 +82;Sins of a Solar Empire: Rebellion;7.8;Jun 12, 2012 +82;Broken Sword: The Sleeping Dragon;7.6;Nov 17, 2003 +82;Age of Wonders: Shadow Magic;8.5;Jul 25, 2003 +82;Tom Clancy's Ghost Recon: Desert Siege;8.4;Mar 27, 2002 +82;Warlords Battlecry II;8.5;Mar 11, 2002 +82;Football Manager Live;2.9;Jan 23, 2009 +82;Marvel: Ultimate Alliance;8.3;Oct 24, 2006 +82;The Talos Principle: Road To Gehenna;7.6;Jul 23, 2015 +82;Lara Croft and the Guardian of Light;8.2;Sep 28, 2010 +82;Aquaria;8.3;Dec 7, 2007 +82;Need for Speed: Underground;8.3;Nov 17, 2003 +82;TrackMania Sunrise;8.5;May 6, 2005 +82;King's Quest Chapter 1: A Knight to Remember;7.2;Jul 28, 2015 +82;Dragon Age II;4.4;Mar 8, 2011 +82;Endless Legend;7.9;Apr 24, 2014 +82;Tom Clancy's Ghost Recon: Island Thunder;8.3;Sep 25, 2002 +82;S.T.A.L.K.E.R.: Shadow of Chernobyl;8.4;Mar 20, 2007 +82;Kero Blaster;6.9;May 11, 2014 +82;Monday Night Combat;7.3;Jan 24, 2011 +82;The Wolf Among Us: Episode 3 - A Crooked Mile;8.6;Apr 8, 2014 +82;Airborne Assault: Red Devils Over Arnhem;7.4;Jun 17, 2002 +82;Fallout Tactics: Brotherhood of Steel;7.9;Mar 14, 2001 +82;Need for Speed: Underground 2;8.5;Nov 9, 2004 +82;NHL Eastside Hockey Manager 2005;6.6;Oct 5, 2005 +82;Legend of Grimrock;8.1;Apr 11, 2012 +82;Dominions 3: The Awakening;8.1;Sep 29, 2006 +82;Bulletstorm;7.7;Feb 22, 2011 +82;Borderlands 2: Mr. Torgue's Campaign of Carnage;7.3;Nov 20, 2012 +82;Desktop Dungeons;8.2;Oct 17, 2010 +82;Fallout: New Vegas - Old World Blues;7.8;Jul 19, 2011 +82;Crusader Kings II;8.7;Feb 14, 2012 +82;MVP Baseball 2004;7.9;Mar 9, 2004 +82;Europa 1400: The Guild;8.6;Nov 18, 2002 +82;Battle Realms;8.6;Nov 7, 2001 +82;Warlords Battlecry;8.2;Jul 9, 2000 +82;Sam & Max Episode 201: Ice Station Santa;8.6;Nov 8, 2007 +82;Technobabylon;7.8;May 21, 2015 +82;World of Warcraft: Mists of Pandaria;4.8;Sep 25, 2012 +82;FIFA 15;4.2;Sep 23, 2014 +82;Recettear: An Item Shop's Tale;8.6;Sep 10, 2010 +82;ETHER One;6.9;Mar 25, 2014 +82;The Vanishing of Ethan Carter;8.1;Sep 25, 2014 +82;Flight Simulator X: Acceleration;7.3;Oct 23, 2007 +82;Blood;9.0;May 31, 1997 +82;Command & Conquer: Red Alert 3;6.8;Oct 28, 2008 +82;The Walking Dead: Episode 1 - A New Day;8.4;Apr 24, 2012 +82;Links 2003;6.8;Sep 16, 2002 +82;Earth & Beyond;7.1;Sep 2, 2002 +82;Syberia;8.5;Sep 1, 2002 +82;Virtual Pool 3;7.3;Nov 14, 2000 +82;The Sims: Livin' Large;6.6;Aug 27, 2000 +82;DCS: Black Shark;8.5;Apr 13, 2009 +82;King's Bounty: Armored Princess;8.7;Sep 10, 2010 +82;Age of Wonders III - Golden Realms;8.5;Sep 18, 2014 +82;Strong Bad's Cool Game for Attractive People Episode 5: 8-Bit Is Enough;7.5;Dec 15, 2008 +82;Prince of Persia;7.2;Dec 2, 2008 +82;Joint Operations: Typhoon Rising;8.7;Jun 15, 2004 +82;Xpand Rally;7.4;Apr 20, 2006 +82;Dark Souls II: Crown of the Sunken King;7.3;Jul 22, 2014 +82;Resident Evil HD Remaster;8.2;Jan 20, 2015 +82;Celtic Kings: Rage of War;8.5;Aug 21, 2002 +82;B-17 Flying Fortress: The Mighty 8th;7.3;Dec 13, 2000 +82;EverQuest: The Scars of Velious;7.8;Dec 4, 2000 +82;Metro: Last Light;8.6;May 14, 2013 +82;Rising Storm;8.5;May 30, 2013 +82;Lethal League;7.4;Aug 27, 2014 +82;Botanicula;8.3;Apr 19, 2012 +82;Pro Evolution Soccer 2015;5.8;Nov 13, 2014 +82;Bookworm Adventures Deluxe;7.9;Dec 20, 2006 +82;The Lord of the Rings: The Battle for Middle-Earth;8.6;Dec 6, 2004 +82;Hitman: Blood Money;8.8;May 30, 2006 +82;Need for Speed: Most Wanted;8.5;Nov 15, 2005 +82;OlliOlli2: Welcome to Olliwood;5.2;Aug 11, 2015 +82;WildStar;7.4;Jun 3, 2014 +82;Broken Age: Act 1;7.7;Jan 28, 2014 +82;Divinity II: The Dragon Knight Saga;8.2;Nov 5, 2010 +82;Out of the Park Baseball 9;7.4;Jun 1, 2008 +82;The Simpsons: Hit & Run;8.0;Nov 13, 2003 +82;America's Army;6.1;Aug 28, 2002 +82;Star Trek Bridge Commander;8.1;Feb 27, 2002 +82;The Last Express;8.9;Mar 31, 1997 +81;Quake 4;7.5;Oct 11, 2005 +81;Nidhogg;7.0;Jan 13, 2014 +81;Battlefield 4;6.0;Oct 29, 2013 +81;To the Moon;8.9;Sep 7, 2012 +81;The Sims 3: World Adventures;8.0;Nov 16, 2009 +81;Painkiller;8.0;Apr 12, 2004 +81;Airborne Assault: Highway to the Reich;6.1;Dec 10, 2003 +81;Nancy Drew: Danger on Deception Island;7.7;Oct 1, 2003 +81;Shadowrun: Hong Kong;7.7;Aug 20, 2015 +81;Supreme Commander: Forged Alliance;8.9;Nov 6, 2007 +81;Sunless Sea;7.4;Jul 1, 2014 +81;The Walking Dead: Season Two Episode 3 - In Harm's Way;8.3;May 13, 2014 +81;Marvel Heroes 2015;7.9;Jun 4, 2014 +81;Football Manager 2016;6.4;Nov 13, 2015 +81;VVVVVV;8.1;Jan 11, 2010 +81;Darksiders II;7.9;Aug 14, 2012 +81;Wolfenstein: The New Order;8.2;May 20, 2014 +81;Lone Survivor;7.2;Apr 23, 2012 +81;Alien: Isolation;8.4;Oct 6, 2014 +81;The Witcher;8.8;Oct 30, 2007 +81;Kentucky Route Zero - Act I;7.5;Jan 7, 2013 +81;Jade Empire: Special Edition;8.3;Feb 26, 2007 +81;SWAT 3: Elite Edition;8.4;Oct 6, 2000 +81;Asheron's Call;8.8;Oct 31, 1999 +81;Unravel;8.1;Feb 9, 2016 +81;Midnight Club II;8.0;Jun 30, 2003 +81;Chessmaster 10th Edition;7.4;Aug 12, 2004 +81;Age of Empires III;7.7;Oct 18, 2005 +81;Tales of Monkey Island Chapter 5: Rise of the Pirate God;8.4;Dec 8, 2009 +81;Castlevania: Lords of Shadow Ultimate Edition;7.3;Aug 27, 2013 +81;Strong Bad's Cool Game for Attractive People Episode 2: Strong Badia the Free;8.2;Sep 15, 2008 +81;The Cat Lady;8.7;Dec 4, 2013 +81;Vessel;7.9;Mar 1, 2012 +81;Metro 2033;8.1;Mar 16, 2010 +81;OutRun 2006: Coast 2 Coast;7.8;Jun 27, 2006 +81;Blur;7.3;May 25, 2010 +81;Empires: Dawn of the Modern World;8.2;Oct 21, 2003 +81;Chessmaster 9000;7.7;Aug 31, 2002 +81;Gothic;8.6;Nov 23, 2001 +81;Arcanum: Of Steamworks and Magick Obscura;8.9;Aug 22, 2001 +81;NASCAR Heat;8.6;Sep 27, 2000 +81;Company of Heroes 2: Ardennes Assault;6.1;Nov 17, 2014 +81;PlanetSide;7.3;May 20, 2003 +81;Tales From The Borderlands: Episode 3 - Catch A Ride;8.4;Jun 23, 2015 +81;The Walking Dead: Season Two Episode 2 - A House Divided;8.6;Mar 4, 2014 +81;Kingdoms of Amalur: Reckoning;6.6;Feb 7, 2012 +81;Sam & Max: The Devil's Playhouse - Episode 1: The Penal Zone;8.5;Apr 15, 2010 +81;Borderlands;7.8;Oct 26, 2009 +81;DG2: Defense Grid 2;6.7;Sep 23, 2014 +81;Napoleon: Total War;7.9;Feb 23, 2010 +81;Overlord;8.1;Jun 26, 2007 +81;Firewatch;7.2;Feb 9, 2016 +81;Victoria II: Heart of Darkness;8.7;Apr 16, 2013 +81;Waveform;7.6;Jan 25, 2013 +81;The Elder Scrolls IV: Knights of the Nine;7.5;Nov 21, 2006 +81;Red Orchestra: Ostfront 41-45;8.6;Mar 14, 2006 +81;Stronghold;8.9;Oct 21, 2001 +81;Strong Bad's Cool Game for Attractive People Episode 4: Dangeresque 3: The Criminal Projective;8.5;Nov 17, 2008 +81;Rochard;8.0;Nov 15, 2011 +81;Fallout 3: Broken Steel;7.3;May 5, 2009 +81;Tiger Woods PGA Tour 06;8.1;Sep 20, 2005 +81;RollerCoaster Tycoon 3;4.9;Oct 26, 2004 +81;Dragon's Dogma: Dark Arisen;8.3;Jan 15, 2016 +81;Guild Wars 2: Heart of Thorns;7.3;Oct 23, 2015 +81;AaaaaAAaaaAAAaaAAAAaAAAAA!!! - A Reckless Disregard for Gravity;7.2;Sep 3, 2009 +81;The Sims 2 University;7.8;Feb 28, 2005 +81;Far Cry 3: Blood Dragon;8.1;May 1, 2013 +81;Sid Meier's Civilization: Beyond Earth;5.5;Oct 24, 2014 +81;Disney's Toontown Online;8.7;Oct 6, 2005 +81;Combat Mission 3: Afrika Korps;8.4;Dec 3, 2003 +81;EverQuest: The Planes of Power;8.2;Oct 28, 2002 +81;Rails Across America;8.0;Sep 18, 2001 +81;Wasteland 2;7.3;Sep 19, 2014 +81;Jamestown: Legend of the Lost Colony;7.5;Jun 8, 2011 +81;Call of Duty: Black Ops;5.1;Nov 9, 2010 +81;Kohan II: Kings of War;7.9;Sep 20, 2004 +81;The Age of Decadence;7.9;Oct 15, 2015 +81;Samorost 3;8.3;Mar 24, 2016 +81;Order of Battle: Pacific;6.4;Apr 30, 2015 +81;Empire Earth;8.3;Nov 12, 2001 +81;Star Trek: Deep Space Nine: The Fallen;7.9;Nov 15, 2000 +81;Sam & Max Episode 101: Culture Shock;8.7;Oct 18, 2006 +81;Mirror's Edge (2008);8.1;Jan 12, 2009 +81;TrackMania 2 Canyon;7.7;Sep 14, 2011 +81;Sleeping Dogs;8.2;Aug 14, 2012 +81;Star Wars Jedi Knight: Jedi Academy;8.6;Sep 17, 2003 +81;Mortal Kombat Komplete Edition;8.7;Aug 6, 2013 +81;Shadowrun: Dragonfall;8.3;Feb 27, 2014 +81;Eets;6.4;Mar 29, 2006 +81;World of Warships;6.6;Sep 17, 2015 +81;TOCA Race Driver 2: The Ultimate Racing Simulator;8.0;Apr 15, 2004 +81;Wargame: European Escalation;8.2;Feb 22, 2012 +81;Dungeon Defenders;7.3;Oct 18, 2011 +81;Sam & Max: The Devil's Playhouse - Episode 5: The City That Dares Not Sleep;7.9;Aug 30, 2010 +81;Age of Empires III: The Asian Dynasties;8.5;Oct 23, 2007 +81;Defense Grid: The Awakening;8.8;Jul 29, 2009 +81;Codename: Panzers, Phase One;8.8;Sep 30, 2004 +81;FIFA 16;4.4;Sep 22, 2015 +81;Europa Universalis IV: Conquest of Paradise;7.7;Jan 14, 2014 +81;Ghost Master;8.0;Aug 26, 2003 +81;Divine Divinity;8.5;Sep 22, 2002 +80;The Book of Unwritten Tales 2;7.7;Feb 20, 2015 +80;Galactic Civilizations III;6.6;May 14, 2015 +80;Lovers in a Dangerous Spacetime;7.2;Sep 9, 2015 +80;Age of Conan: Hyborian Adventures;7.3;May 20, 2008 +80;Company of Heroes 2: The Western Front Armies;6.8;Jun 23, 2014 +80;Sid Meier's Civilization V: Gods & Kings;7.7;Jun 19, 2012 +80;Age of Empires III: The WarChiefs;8.1;Oct 17, 2006 +80;Metal Gear Solid V: Ground Zeroes;7.7;Dec 18, 2014 +80;Trials Fusion;6.8;Apr 16, 2014 +80;Syberia II;8.3;Mar 30, 2004 +80;Tom Clancy's Ghost Recon;8.4;Nov 13, 2001 +80;Conquest: Frontier Wars;8.3;Aug 14, 2001 +80;Gabriel Knight 3: Blood of the Sacred, Blood of the Damned;8.8;Oct 5, 1999 +80;Westerado: Double Barreled;7.4;Apr 16, 2015 +80;Anomaly: Warzone Earth;7.3;Apr 8, 2011 +80;Volume;7.2;Aug 18, 2015 +80;GRID 2;5.7;May 27, 2013 +80;The Banner Saga;7.9;Jan 14, 2014 +80;Sam & Max Episode 202: Moai Better Blues;7.7;Jan 10, 2008 +80;Age of Wonders III - Eternal Lords;8.4;Apr 14, 2015 +80;Pro Evolution Soccer 2013;6.8;Sep 25, 2012 +80;Osmos;7.5;Aug 18, 2009 +80;Dungeon Siege II;7.9;Aug 16, 2005 +80;Dead Island;6.8;Sep 6, 2011 +80;Sam & Max Episode 104: Abe Lincoln Must Die!;7.8;Feb 22, 2007 +80;Deus Ex: Invisible War;6.3;Dec 2, 2003 +80;The Sims: Makin' Magic;8.6;Oct 28, 2003 +80;Tom Clancy's Splinter Cell: Double Agent;5.7;Nov 7, 2006 +80;Medal of Honor: Pacific Assault;7.4;Nov 4, 2004 +80;Assassin's Creed: Revelations;7.4;Nov 29, 2011 +80;Grandia II Anniversary Edition;7.6;Aug 24, 2015 +80;Assassin's Creed III;6.2;Nov 20, 2012 +80;Madden NFL 07;7.3;Aug 22, 2006 +80;Outlast;8.4;Sep 4, 2013 +80;The Chronicles of Riddick: Assault on Dark Athena;8.0;Apr 7, 2009 +80;Hearts of Iron II: Doomsday;8.8;Apr 7, 2006 +80;Dishonored: The Brigmore Witches;8.5;Aug 13, 2013 +80;Codename: Panzers, Phase Two;8.0;Jul 25, 2005 +80;Full Spectrum Warrior;7.0;Sep 21, 2004 +80;AI War: Fleet Command;8.4;May 14, 2009 +80;Freedom Fighters;8.3;Oct 1, 2003 +80;NBA Live 2003;8.3;Nov 14, 2002 +80;The Elder Scrolls III: Tribunal;8.2;Nov 6, 2002 +80;Elite: Dangerous;6.4;Dec 16, 2014 +80;Pure;6.9;Sep 16, 2008 +80;Goodbye Deponia;8.1;Oct 17, 2013 +80;SWAT 4: The Stetchkov Syndicate;8.3;Feb 28, 2006 +80;Dropsy;7.3;Sep 10, 2015 +80;Company of Heroes 2: The British Forces;5.9;Sep 3, 2015 +80;Ground Control II: Operation Exodus;8.8;Jun 23, 2004 +80;NBA Live 2004;9.0;Nov 11, 2003 +80;Brutal Legend;7.8;Feb 26, 2013 +80;Tomb Raider: Underworld;7.6;Nov 18, 2008 +80;Oxenfree;7.7;Jan 15, 2016 +80;Titan Quest: Immortal Throne;8.7;Mar 5, 2007 +80;La-Mulana (Remake);7.1;Jul 13, 2012 +80;X-Men Legends II: Rise of Apocalypse;8.4;Sep 20, 2005 +80;SpellForce 2: Shadow Wars;7.6;May 5, 2006 +80;Fritz 8 Deluxe;7.8;Dec 1, 2004 +80;Trine;8.2;Sep 11, 2009 +80;Dishonored: The Knife of Dunwall;8.1;Apr 16, 2013 +80;Company of Heroes 2;2.0;Jun 25, 2013 +80;Natural Selection 2;8.4;Oct 30, 2012 +80;Read Only Memories;7.2;Oct 5, 2015 +80;The Sims 3: Into the Future;5.4;Oct 22, 2013 +80;Borderlands 2: Captain Scarlett and Her Pirate's Booty;7.4;Oct 16, 2012 +80;FATE;8.3;Sep 19, 2006 +80;2002 FIFA World Cup;7.9;Apr 30, 2002 +80;Asheron's Call Dark Majesty;8.1;Nov 4, 2001 +80;The Bug Butcher;8.2;Jan 19, 2016 +80;Dragonshard;7.4;Oct 2, 2005 +80;Icewind Dale: Enhanced Edition;7.6;Oct 30, 2014 +80;The Magic Circle;7.3;Jul 9, 2015 +80;Far Cry 4;6.6;Nov 18, 2014 +80;Super Time Force Ultra;6.6;Aug 25, 2014 +80;Day of Defeat: Source;9.1;Feb 7, 2006 +80;Battlefield 2142;6.8;Oct 17, 2006 +80;World of Tanks;3.8;Sep 6, 2011 +80;Vampire: The Masquerade - Bloodlines;9.0;Nov 16, 2004 +80;Dark Souls II: Scholar of the First Sin;7.4;Apr 1, 2015 +80;Warhammer 40,000: Dawn of War II - Retribution;7.8;Mar 1, 2011 +80;Panzer Corps;7.5;Jul 11, 2011 +80;Men of War;8.1;Mar 16, 2009 +80;Fallen Enchantress: Legendary Heroes;7.7;May 22, 2013 +80;The Walking Dead: Episode 4 - Around Every Corner;8.5;Oct 10, 2012 +80;Tales of Monkey Island Chapter 4: The Trial and Execution of Guybrush Threepwood;8.4;Oct 30, 2009 +80;Penny Arcade Adventures: Episode Two;7.7;Nov 7, 2008 +80;Time Commando;8.9;Jul 31, 1996 +80;Sins of a Solar Empire: Entrenchment;8.1;Feb 25, 2009 +80;F1 2012;6.9;Sep 18, 2012 +80;Luftrausers;6.8;Mar 18, 2014 +80;Naruto Shippuden: Ultimate Ninja Storm 3 Full Burst;7.9;Oct 24, 2013 +80;Stealth Bastard Deluxe;8.3;Nov 28, 2012 +80;Tom Clancy's Ghost Recon Advanced Warfighter;7.7;May 3, 2006 +80;LEGO Batman: The Videogame;7.9;Sep 23, 2008 +80;Stacking;7.9;Mar 6, 2012 +80;Age of Wonders III;7.8;Mar 31, 2014 +80;Life is Strange: Episode 3 - Chaos Theory;9.0;May 19, 2015 +80;The Legend of Heroes: Trails in the Sky SC;8.4;Oct 29, 2015 +80;Proteus;5.6;Jan 30, 2013 +80;Robin Hood: The Legend of Sherwood;8.3;Nov 14, 2002 +80;Soldier of Fortune II: Double Helix;7.3;May 20, 2002 +80;RollerCoaster Tycoon: Loopy Landscapes;9.0;Sep 30, 2000 +80;Toki Tori;7.9;Jan 28, 2010 +80;RoboBlitz;8.3;Nov 7, 2006 +80;Wargame: AirLand Battle;8.1;May 29, 2013 +80;Football Manager 2015;6.0;Nov 7, 2014 +80;The Suffering;8.2;Jun 8, 2004 +80;Gish;7.2;Sep 17, 2004 +80;Axiom Verge;8.2;May 14, 2015 +80;Driver: San Francisco;7.0;Sep 27, 2011 +80;The Corporate Machine;7.5;Jul 14, 2001 +80;Dungeons & Dragons: Chronicles of Mystara;6.7;Jun 18, 2013 +80;Disciples II: Rise of the Elves;8.1;Nov 25, 2003 +80;MechCommander 2;8.3;Jul 18, 2001 +80;Waterloo: Napoleon's Last Battle;7.5;Mar 25, 2001 +80;Chessmaster 8000;6.4;Nov 14, 2000 +80;Circle of Blood;8.6;Sep 30, 1996 +80;BioShock Infinite: Burial at Sea - Episode Two;8.5;Mar 25, 2014 +80;S.T.A.L.K.E.R.: Call of Pripyat;8.7;Feb 2, 2010 +80;The Walking Dead: Season Two - A Telltale Games Series;8.3;Dec 17, 2013 +80;FLY'N;8.2;Nov 9, 2012 +80;Total War: Attila;7.3;Feb 17, 2015 +80;The Wolf Among Us;8.8;Oct 11, 2013 +80;Nancy Drew: Secret of the Old Clock;8.1;Jul 26, 2005 +80;ArcheAge;3.6;Sep 16, 2014 +80;CAPSIZED;7.1;Apr 29, 2011 +80;Microsoft Flight Simulator X;7.6;Oct 17, 2006 +80;Myst V: End of Ages;7.8;Sep 19, 2005 +80;Railroad Tycoon 3;7.7;Oct 23, 2003 +80;Hostile Waters: Antaeus Rising;8.1;Jun 13, 2001 +79;Dustforce;7.9;Jan 17, 2012 +79;Empire Earth II;7.0;Apr 26, 2005 +79;Fallout 3: Point Lookout;7.8;Jun 23, 2009 +79;Test Drive Unlimited;8.1;Mar 20, 2007 +79;Dying Light: The Following;8.3;Feb 9, 2016 +79;The Path;7.0;Mar 18, 2009 +79;Dungeon of the Endless;8.0;Oct 27, 2014 +79;Revenge of the Titans;7.6;May 24, 2010 +79;Bookworm Adventures: Volume 2;7.6;Jul 30, 2009 +79;F1 2001;7.5;Oct 14, 2001 +79;Brothers in Arms: Hell's Highway;7.9;Oct 7, 2008 +79;Star Wars: Empire at War;8.4;Feb 15, 2006 +79;Dariusburst: Chronicle Saviours;8.3;Dec 3, 2015 +79;Europa Universalis: Rome - Vae Victis;8.6;Nov 19, 2008 +79;Silent Hunter: Wolves of the Pacific;6.5;Mar 20, 2007 +79;Pillars of Eternity: The White March - Part 2;6.7;Feb 16, 2016 +79;1701 A.D.;8.3;Nov 6, 2006 +79;Stasis;7.6;Aug 31, 2015 +79;Pro Evolution Soccer 2009;7.4;Nov 12, 2008 +79;Return to Mysterious Island;8.5;Nov 2, 2004 +79;Jotun;7.0;Sep 29, 2015 +79;Else Heart.Break();7.5;Sep 24, 2015 +79;Kohan: Ahriman's Gift;8.7;Nov 5, 2001 +79;Emperor: Battle for Dune;8.3;Jun 12, 2001 +79;Trackmania Turbo;6.9;Mar 24, 2016 +79;Cart Life;5.9;Jul 29, 2010 +79;Sword of the Stars: Born of Blood;8.1;Jun 5, 2007 +79;Worms Reloaded;6.7;Aug 26, 2010 +79;Warhammer: End Times - Vermintide;7.9;Oct 23, 2015 +79;Euro Truck Simulator 2;8.7;Jan 16, 2013 +79;Tropico 3;8.2;Oct 20, 2009 +79;Cities: Skylines - After Dark;7.9;Sep 24, 2015 +79;Runaway: A Twist of Fate;8.5;Apr 21, 2011 +79;Tales of Monkey Island Chapter 1: Launch of the Screaming Narwhal;8.2;Jul 7, 2009 +79;Bloodline Champions;8.0;Jan 13, 2011 +79;The Sims: Superstar;8.2;May 12, 2003 +79;NBA Live 2005;8.5;Oct 26, 2004 +79;Valiant Hearts: The Great War;8.6;Jun 25, 2014 +79;Payday 2;3.4;Aug 13, 2013 +79;Dungeons of Dredmor;7.8;Jul 13, 2011 +79;Geometry Wars 3: Dimensions;6.2;Nov 25, 2014 +79;Assassin's Creed: Director's Cut Edition;7.5;Apr 8, 2008 +79;Puzzle Dimension;7.6;Jun 21, 2010 +79;Split/Second;8.2;May 18, 2010 +79;Sang-Froid: Tales of Werewolves;7.9;Apr 5, 2013 +79;The Incredible Adventures of Van Helsing: Final Cut;7.2;Oct 7, 2015 +79;Hitman: Absolution;7.0;Nov 19, 2012 +79;Call of Juarez: Gunslinger;8.2;May 22, 2013 +79;Rome: Total War Alexander;7.6;Jun 19, 2006 +79;Strong Bad's Cool Game for Attractive People Episode 3: Baddest of the Bands;8.1;Oct 27, 2008 +79;Sam & Max Episode 102: Situation: Comedy;7.9;Dec 20, 2006 +79;Tropico 3: Absolute Power;7.7;May 17, 2010 +79;Sam & Max Episode 106: Bright Side of the Moon;7.3;Apr 26, 2007 +79;Day of Defeat;9.3;May 6, 2003 +79;Space Empires: IV;8.3;Nov 6, 2000 +79;Resident Evil 4: Ultimate HD Edition;7.7;Feb 27, 2014 +79;Sam & Max Episode 203: Night of the Raving Dead;8.2;Feb 12, 2008 +79;FlatOut: Ultimate Carnage;7.6;Sep 2, 2008 +79;Guitar Hero III: Legends of Rock;7.2;Nov 13, 2007 +79;Sid Meier's Civilization: Beyond Earth - Rising Tide;5.9;Oct 9, 2015 +79;Memoria;8.5;Aug 29, 2013 +79;The Last Door;7.8;May 20, 2014 +79;Shadowgrounds Survivor;7.8;Dec 6, 2007 +79;Gothic II;8.8;Oct 28, 2003 +79;Port Royale;8.2;Jun 4, 2003 +79;Deadly Dozen: Pacific Theater;7.9;Oct 31, 2002 +79;Shattered Galaxy;8.3;Aug 21, 2001 +79;Close Combat: Invasion: Normandy;8.2;Oct 10, 2000 +79;King's Bounty: The Legend;8.6;Sep 23, 2008 +79;Rage;5.1;Oct 4, 2011 +79;The Misadventures of P.B. Winterbottom;8.3;Apr 20, 2010 +79;Uru: Ages Beyond Myst;7.4;Nov 11, 2003 +79;Guild Wars: Eye of the North;8.6;Aug 28, 2007 +79;Tales From The Borderlands: Episode 4 - Escape Plan Bravo;8.4;Aug 18, 2015 +79;EverQuest: Lost Dungeons of Norrath;7.0;Sep 8, 2003 +79;Battlefield 1942: Secret Weapons of WWII;8.5;Sep 4, 2003 +79;The Sims: Unleashed;8.0;Sep 23, 2002 +79;Race the Sun;7.5;Aug 19, 2013 +79;The Sims 3: Pets;6.1;Oct 18, 2011 +79;Prototype;7.9;Jun 10, 2009 +79;Stick it to the Man!;7.2;Dec 13, 2013 +79;Street Fighter X Tekken;6.4;May 11, 2012 +79;Frozen Cortex;6.5;Feb 19, 2015 +79;Free Realms;6.4;Apr 29, 2009 +79;Homeworld: Deserts of Kharak;8.0;Jan 20, 2016 +79;Don't Starve;8.3;Apr 23, 2013 +79;Assault Android Cactus;7.0;Sep 23, 2015 +79;Trainz;7.2;Feb 10, 2002 +79;King Arthur: The Role-Playing Wargame;7.9;Nov 24, 2009 +79;Chivalry: Medieval Warfare;7.8;Oct 16, 2012 +79;Overlord II;8.1;Jun 23, 2009 +79;F.E.A.R. 2: Project Origin;7.8;Feb 10, 2009 +79;Tom Clancy's Rainbow Six Siege;6.9;Dec 1, 2015 +79;The Settlers 7: Paths to a Kingdom;5.2;Mar 23, 2010 +79;RollerCoaster Tycoon 3: Soaked!;2.9;Jun 23, 2005 +79;Dark Souls II: Crown of the Old Iron King;7.6;Aug 26, 2014 +79;TrackMania 2 Valley;8.3;Jul 4, 2013 +79;State of Decay;6.8;Nov 5, 2013 +79;LEGO Harry Potter: Years 1-4;7.8;Jun 29, 2010 +79;Rift: Storm Legion;7.8;Nov 13, 2012 +79;Crayon Physics Deluxe;7.6;Jan 7, 2009 +79;Nancy Drew: Legend of the Crystal Skull;8.5;Oct 8, 2007 +79;EverQuest II: Desert of Flames;7.8;Sep 12, 2005 +79;SimCity 4: Rush Hour;8.6;Sep 22, 2003 +79;Uncommon Valor: Campaign for the South Pacific;7.6;Dec 2, 2002 +79;Global Operations;8.3;Mar 25, 2002 +78;Apotheon;7.8;Feb 3, 2015 +78;Need for Speed: Most Wanted - A Criterion Game;4.4;Oct 30, 2012 +78;Star Wars: Battlefront II;8.8;Oct 31, 2005 +78;The Walking Dead: Season Two Episode 1 - All That Remains;8.5;Dec 17, 2013 +78;The Journey Down: Chapter Two;7.1;Aug 25, 2014 +78;Star Trek: Elite Force II;7.6;Jun 25, 2003 +78;Zuma's Revenge!;7.9;Sep 15, 2009 +78;Baldur's Gate: Enhanced Edition;7.0;Nov 28, 2012 +78;Doom 3: Resurrection of Evil;6.0;Apr 4, 2005 +78;LEGO Indiana Jones: The Original Adventures;7.7;Jun 3, 2008 +78;NASCAR Thunder 2004;7.5;Sep 16, 2003 +78;Transformers: Fall of Cybertron;7.8;Aug 21, 2012 +78;FIFA Soccer 06;6.7;Oct 4, 2005 +78;DeadCore;6.8;Oct 17, 2014 +78;The Walking Dead: Season Two Episode 5 - No Going Back;8.5;Aug 26, 2014 \ No newline at end of file diff --git a/sources/src/main/resources/pr2/streams/reduce_critics/games.txt b/sources/src/main/resources/pr2/streams/reduce_critics/games.txt new file mode 100644 index 0000000..3390355 --- /dev/null +++ b/sources/src/main/resources/pr2/streams/reduce_critics/games.txt @@ -0,0 +1,994 @@ +96;Half-Life 2;9.2;Nov 16, 2004 +96;Grand Theft Auto V;7.8;Apr 14, 2015 +96;The Orange Box;9.3;Oct 10, 2007 +96;Half-Life;9.1;Oct 31, 1998 +96;BioShock;8.4;Aug 21, 2007 +95;Baldur's Gate II: Shadows of Amn;9.2;Sep 24, 2000 +95;Portal 2;8.8;Apr 19, 2011 +94;The Elder Scrolls V: Skyrim;8.1;Nov 11, 2011 +94;Mass Effect 2;8.7;Jan 26, 2010 +94;Grand Theft Auto: Vice City;8.8;May 12, 2003 +94;Civilization II;9.0;Feb 29, 1996 +94;Quake;8.8;Jun 22, 1996 +94;BioShock Infinite;8.5;Mar 26, 2013 +94;The Elder Scrolls IV: Oblivion;8.0;Mar 20, 2006 +94;Grim Fandango;9.1;Sep 30, 1998 +94;Diablo;8.7;Nov 30, 1996 +94;Sid Meier's Civilization IV;8.2;Oct 25, 2005 +93;The Witcher 3: Wild Hunt;9.1;May 19, 2015 +93;Company of Heroes;8.8;Sep 13, 2006 +93;Unreal Tournament 2004;8.9;Mar 16, 2004 +93;Starcraft II: Wings of Liberty;8.2;Jul 27, 2010 +93;Minecraft;7.4;May 10, 2009 +93;Grand Theft Auto III;8.4;May 20, 2002 +93;Homeworld;8.9;Aug 31, 1999 +93;Star Wars: Knights of the Old Republic;9.0;Nov 18, 2003 +93;World of Warcraft;7.2;Nov 23, 2004 +93;Grand Theft Auto: San Andreas;8.8;Jun 7, 2005 +92;Call of Duty 4: Modern Warfare;8.5;Nov 5, 2007 +92;Warcraft III: Reign of Chaos;9.1;Jul 3, 2002 +92;The Sims;7.9;Jan 31, 2000 +92;Sid Meier's Gettysburg!;7.7;Sep 30, 1997 +92;World Soccer Winning Eleven 7 International;7.9;Apr 9, 2004 +92;Team Fortress 2;9.2;Apr 8, 2008 +92;System Shock 2;9.1;Aug 11, 1999 +92;Tom Clancy's Splinter Cell: Chaos Theory;8.8;Mar 28, 2005 +92;Undertale;8.2;Sep 15, 2015 +92;Rome: Total War;9.1;Sep 22, 2004 +92;Thief: The Dark Project;9.1;Nov 30, 1998 +92;Age of Empires II: The Age of Kings;9.0;Sep 30, 1999 +92;Unreal Tournament (1999);9.1;Nov 30, 1999 +92;Sid Meier's Alpha Centauri;9.1;Feb 12, 1999 +92;Galactic Civilizations II: Twilight of the Arnor;8.4;Apr 30, 2008 +92;Tiger Woods PGA Tour 2003;6.0;Oct 31, 2002 +91;Dishonored;8.4;Oct 9, 2012 +91;Medal of Honor: Allied Assault;8.6;Jan 20, 2002 +91;Myth: The Fallen Lords;8.8;Oct 31, 1997 +91;World of Warcraft: Wrath of the Lich King;7.4;Nov 13, 2008 +91;F1 Challenge '99-'02;8.3;Jun 24, 2003 +91;Baldur's Gate;9.0;Nov 30, 1998 +91;IL-2 Sturmovik;8.7;Nov 18, 2001 +91;FreeSpace 2;8.8;Sep 30, 1999 +91;Metal Gear Solid V: The Phantom Pain;7.7;Sep 1, 2015 +91;Tom Clancy's Splinter Cell;8.6;Feb 19, 2003 +91;Crysis;8.0;Nov 13, 2007 +91;World of Warcraft: The Burning Crusade;7.9;Jan 16, 2007 +91;Tiger Woods PGA Tour 2005;4.6;Sep 20, 2004 +91;The Longest Journey;8.9;Nov 16, 2000 +91;Tony Hawk's Pro Skater 2;8.5;Oct 31, 2000 +91;Star Wars Jedi Knight: Dark Forces II;8.5;Sep 30, 1997 +91;Batman: Arkham Asylum;8.7;Sep 15, 2009 +91;Galactic Civilizations II: Dark Avatar;8.2;Feb 14, 2007 +91;The Operative: No One Lives Forever;8.9;Nov 9, 2000 +91;Battlefield 2;8.4;Jun 21, 2005 +91;Street Fighter IV;8.0;Jul 1, 2009 +91;Fallout 3;7.9;Oct 28, 2008 +91;Batman: Arkham City;8.6;Nov 22, 2011 +91;Fez;6.5;May 1, 2013 +91;Planescape: Torment;9.3;Nov 30, 1999 +91;Neverwinter Nights;8.1;Jun 16, 2002 +91;No One Lives Forever 2: A Spy in H.A.R.M.'s Way;8.7;Sep 30, 2002 +91;Dragon Age: Origins;8.6;Nov 3, 2009 +91;Mark of the Ninja;8.0;Oct 16, 2012 +91;Dark Souls II;7.1;Apr 25, 2014 +91;Call of Duty;8.5;Oct 29, 2003 +91;Madden NFL 2004;8.2;Aug 12, 2003 +90;The Sims 2;8.8;Sep 14, 2004 +90;World of Warcraft: Cataclysm;5.5;Dec 7, 2010 +90;World of Goo;8.5;Oct 21, 2008 +90;Spelunky;7.2;Aug 8, 2013 +90;Black & White;7.6;Mar 26, 2001 +90;Portal;9.3;Apr 8, 2008 +90;NHL 2001;6.9;Sep 28, 2000 +90;Tony Hawk's Pro Skater 3;8.6;Mar 28, 2002 +90;Deus Ex;9.3;Jun 26, 2000 +90;Half-Life 2: Episode Two;9.2;Oct 10, 2007 +90;Braid;8.6;Jan 26, 2010 +90;The Chronicles of Riddick: Escape From Butcher Bay - Developer's Cut;8.7;Dec 8, 2004 +90;Sid Meier's Civilization III;8.4;Oct 30, 2001 +90;Silent Hunter III;7.8;Mar 15, 2005 +90;Sid Meier's Civilization V;7.8;Sep 21, 2010 +90;Falcon 4.0: Allied Force;8.6;Jun 28, 2005 +90;Deus Ex: Human Revolution;8.5;Aug 23, 2011 +90;Dark Souls III;8.2;Apr 12, 2016 +90;Flight Simulator 2002;8.4;Oct 19, 2001 +90;Brothers: A Tale of Two Sons;8.5;Sep 3, 2013 +90;Dota 2;6.2;Jul 9, 2013 +90;Guild Wars 2;7.9;Aug 28, 2012 +90;Freedom Force;8.0;Mar 24, 2002 +90;GTR 2;8.7;Sep 29, 2006 +90;Grand Theft Auto IV;6.5;Dec 2, 2008 +90;Total War: Shogun 2;8.3;Mar 15, 2011 +90;Empire: Total War;6.9;Mar 3, 2009 +90;Command & Conquer: Red Alert;8.9;Oct 31, 1996 +89;Star Wars Jedi Knight II: Jedi Outcast;8.6;Mar 26, 2002 +89;The Walking Dead: A Telltale Games Series;8.7;Dec 11, 2012 +89;Age of Mythology;8.9;Nov 1, 2002 +89;Sacrifice;8.8;Nov 5, 2000 +89;The Witcher 3: Wild Hunt - Hearts of Stone;8.4;Oct 13, 2015 +89;Pillars of Eternity;8.3;Mar 26, 2015 +89;The Elder Scrolls III: Morrowind;9.0;May 1, 2002 +89;Rocksmith 2014 Edition;7.9;Oct 22, 2013 +89;Fallout;8.9;Sep 30, 1997 +89;World Soccer Winning Eleven 9;8.4;Apr 28, 2006 +89;Worldwide Soccer Manager 2005;8.7;Dec 7, 2004 +89;Left 4 Dead;9.2;Nov 18, 2008 +89;Left 4 Dead 2;8.5;Nov 17, 2009 +89;NASCAR Racing 2002 Season;5.8;Feb 14, 2002 +89;Mass Effect;8.6;May 28, 2008 +89;Combat Mission: Barbarossa to Berlin;8.3;Oct 29, 2002 +89;Homeworld: Cataclysm;8.9;Sep 7, 2000 +89;The Walking Dead: Episode 5 - No Time Left;8.9;Nov 21, 2012 +89;Guild Wars;8.4;Apr 26, 2005 +89;Borderlands 2;8.2;Sep 18, 2012 +89;Max Payne;9.1;Jul 23, 2001 +89;Out of the Park Baseball 15;7.2;Apr 21, 2014 +89;World in Conflict;8.1;Sep 18, 2007 +89;NASCAR Racing 4;8.2;Feb 6, 2001 +89;Duke Nukem 3D;8.8;Jan 31, 1996 +89;Far Cry;8.0;Mar 23, 2004 +89;FIFA Soccer 12;7.1;Sep 27, 2011 +89;XCOM: Enemy Unknown;8.2;Oct 9, 2012 +89;Mass Effect 3;5.4;Mar 6, 2012 +89;Rise of Nations;9.0;May 20, 2003 +89;NASCAR Racing 2003 Season;8.6;Feb 14, 2003 +89;Descent 3;8.3;Jun 14, 2000 +89;The Curse of Monkey Island;9.1;Oct 31, 1997 +89;Battlefield 3;7.5;Oct 25, 2011 +89;Battlefield 1942;8.6;Sep 10, 2002 +89;Madden NFL 2003;8.4;Aug 12, 2002 +89;DiRT 2;8.3;Dec 10, 2009 +89;Stardew Valley;8.5;Feb 26, 2016 +89;Prince of Persia: The Sands of Time;8.6;Nov 30, 2003 +89;Railroad Tycoon II;8.4;Oct 31, 1998 +88;Microsoft Flight Simulator 2004: A Century of Flight;8.2;Jul 29, 2003 +88;Medieval: Total War;8.8;Aug 19, 2002 +88;Mafia;9.1;Aug 27, 2002 +88;LIMBO;8.1;Aug 2, 2011 +88;Nuclear Throne;7.4;Dec 5, 2015 +88;Crusader Kings II: The Old Gods;8.8;May 28, 2013 +88;Assassin's Creed: Brotherhood;8.2;Mar 22, 2011 +88;Superbike 2001;6.5;Oct 9, 2000 +88;F.E.A.R.;8.3;Oct 17, 2005 +88;Kerbal Space Program;8.1;Apr 27, 2015 +88;Tribes 2;8.5;Mar 28, 2001 +88;Age of Empires II: The Conquerors Expansion;9.0;Aug 24, 2000 +88;Tiger Woods PGA Tour 2004;8.8;Sep 22, 2003 +88;Warcraft III: The Frozen Throne;9.0;Jul 1, 2003 +88;Starcraft;9.1;Apr 1, 1998 +88;Far Cry 3;8.2;Dec 4, 2012 +88;XCOM 2;7.0;Feb 5, 2016 +88;World Soccer Winning Eleven 8 International;8.5;Feb 16, 2005 +88;Torchlight II;8.6;Sep 20, 2012 +88;Myth II: Soulblighter;9.0;Nov 30, 1998 +88;Return to Castle Wolfenstein;8.7;Nov 19, 2001 +88;Shogo: Mobile Armor Division;8.9;Sep 30, 1998 +88;Thirty Flights of Loving;5.0;Aug 20, 2012 +88;Hearthstone: Heroes of Warcraft;6.3;Mar 11, 2014 +88;Medieval II: Total War;8.9;Nov 13, 2006 +88;F1 2002;7.6;Jun 13, 2002 +88;The Stanley Parable;8.0;Oct 17, 2013 +88;BioShock 2;8.0;Feb 9, 2010 +88;Counter-Strike: Source;8.9;Sep 26, 2005 +88;Starcraft II: Legacy of the Void;8.3;Nov 10, 2015 +88;Diablo III;4.0;May 15, 2012 +88;Rise of Nations: Thrones & Patriots;8.8;Apr 27, 2004 +88;Sid Meier's Pirates!;8.3;Nov 22, 2004 +88;EVE Online: Special Edition;7.8;Mar 10, 2009 +88;Guacamelee! Gold Edition;7.3;Aug 8, 2013 +88;Armadillo Run;8.2;Apr 22, 2006 +88;Dark Age of Camelot;8.9;Sep 1, 2001 +88;Baldur's Gate II: Throne of Bhaal;8.9;Jun 21, 2001 +88;Counter-Strike;9.3;Nov 8, 2000 +88;Tony Hawk's Pro Skater 4;8.4;Aug 27, 2003 +88;Ori and the Blind Forest;8.7;Mar 11, 2015 +88;Diablo II;8.8;Jun 29, 2000 +88;The Witcher 2: Assassins of Kings;8.5;May 17, 2011 +87;Plants vs. Zombies;8.9;Aug 18, 2009 +87;Doom 3;7.5;Aug 3, 2004 +87;Super Meat Boy;8.3;Apr 5, 2011 +87;Football Manager 2010;9.1;Nov 3, 2009 +87;Oddworld: Abe's Oddysee - New 'n' Tasty;7.8;Feb 25, 2015 +87;Tom Clancy's Splinter Cell: Pandora Tomorrow;8.0;Mar 23, 2004 +87;Europa Universalis II;8.8;Nov 12, 2001 +87;Burnout Paradise: The Ultimate Box;7.5;Feb 5, 2009 +87;Battlefield: Bad Company 2;8.3;Mar 2, 2010 +87;GRID;7.9;Jun 3, 2008 +87;Crypt of the NecroDancer;7.7;Apr 23, 2015 +87;Sins of a Solar Empire;8.2;Feb 4, 2008 +87;MechWarrior 4: Vengeance;8.2;Nov 23, 2000 +87;Thief II: The Metal Age;9.1;Feb 29, 2000 +87;Diablo II: Lord of Destruction;9.1;Jun 27, 2001 +87;Monkey Island 2 Special Edition: LeChuck's Revenge;9.0;Jul 7, 2010 +87;Half-Life 2: Episode One;8.6;Jun 1, 2006 +87;The Swapper;8.7;May 30, 2013 +87;Hitman 2: Silent Assassin;8.2;Oct 1, 2002 +87;Year Walk;7.0;Mar 6, 2014 +87;Max Payne 3;7.6;Jun 1, 2012 +87;TowerFall Ascension;6.6;Mar 11, 2014 +87;Battlefield 3: Armored Kill;7.0;Sep 11, 2012 +87;NHL 2002;8.7;Sep 17, 2001 +87;Icewind Dale;8.3;Jun 29, 2000 +87;The Witness;6.6;Jan 26, 2016 +87;Brothers in Arms: Road to Hill 30;7.1;Mar 15, 2005 +87;Kohan: Immortal Sovereigns;8.6;Mar 14, 2001 +87;Day of the Tentacle Remastered;7.9;Mar 21, 2016 +87;Dead Space 2;8.3;Jan 25, 2011 +87;Diablo III: Reaper of Souls;6.6;Mar 25, 2014 +87;Shogun: Total War Warlord Edition;8.7;Aug 13, 2001 +87;Serious Sam: The First Encounter;8.4;Mar 21, 2001 +87;Grand Prix 3;8.3;Aug 24, 2000 +87;Call of Duty: United Offensive;8.3;Sep 14, 2004 +87;Divinity: Original Sin;8.7;Jan 17, 2014 +87;Company of Heroes: Opposing Fronts;8.6;Sep 24, 2007 +87;Psychonauts;8.9;Apr 19, 2005 +87;Gears of War;7.8;Nov 6, 2007 +87;Out of the Park Baseball 4;7.8;Feb 28, 2002 +87;Europa Universalis IV;8.7;Aug 13, 2013 +87;NHL 2004;8.2;Sep 22, 2003 +87;Zeus: Master of Olympus;9.0;Oct 22, 2000 +87;World of Warcraft: Warlords of Draenor;6.0;Nov 13, 2014 +87;Warhammer 40,000: Dawn of War - Dark Crusade;8.9;Oct 9, 2006 +87;Commandos 2: Men of Courage;8.8;Sep 20, 2001 +86;Tales From The Borderlands: Episode 5 - The Vault of the Traveler;8.7;Oct 20, 2015 +86;Bastion;8.6;Aug 16, 2011 +86;Gone Home;5.4;Aug 15, 2013 +86;Pac-Man Championship Edition DX +;7.3;Sep 24, 2013 +86;Supreme Commander;8.3;Feb 20, 2007 +86;Total War: Shogun 2 - Fall of the Samurai;8.4;Mar 23, 2012 +86;Startopia;8.7;Jun 19, 2001 +86;Enemy Engaged: RAH-66 Comanche Versus Ka-52 Hokum;8.3;Jul 31, 2000 +86;Fallout 2;9.2;Sep 30, 1998 +86;Final Fantasy XIV: Heavensward;7.7;Jun 23, 2015 +86;Football Manager 2013;6.7;Nov 1, 2012 +86;Out of the Park Baseball 14;8.6;Apr 15, 2013 +86;The Witcher: Enhanced Edition;8.5;Sep 16, 2008 +86;Borderlands: The Secret Armory of General Knoxx;7.6;Feb 25, 2010 +86;Call of Duty 2;8.3;Oct 25, 2005 +86;Astebreed;7.3;May 30, 2014 +86;Ground Control;7.8;May 31, 2000 +86;Rise of the Tomb Raider;8.0;Jan 28, 2016 +86;Resident Evil 5;7.1;Sep 18, 2009 +86;Saints Row IV;7.4;Aug 20, 2013 +86;Black Mesa;9.0;Sep 14, 2012 +86;EverQuest: Omens of War;7.7;Sep 13, 2004 +86;Steel Beasts;8.4;Sep 24, 2000 +86;Total Annihilation;8.9;Sep 30, 1997 +86;Need for Speed: Hot Pursuit;6.7;Nov 16, 2010 +86;FIFA Soccer 13;6.6;Sep 25, 2012 +86;Sid Meier's Civilization IV: Beyond the Sword;8.6;Jul 23, 2007 +86;The Sims 3;7.6;Jun 2, 2009 +86;Freedom Force vs The 3rd Reich;7.7;Mar 8, 2005 +86;The Binding of Isaac: Rebirth;8.3;Nov 4, 2014 +86;Tribes: Ascend;7.7;Apr 12, 2012 +86;Titanfall;6.1;Mar 11, 2014 +86;Rayman Origins;8.4;Mar 29, 2012 +86;Her Story;5.7;Jun 24, 2015 +86;Starcraft II: Heart of the Swarm;7.9;Mar 12, 2013 +86;Mass Effect 2: Lair of the Shadow Broker;8.5;Sep 7, 2010 +86;LEGO Star Wars II: The Original Trilogy;8.3;Sep 12, 2006 +86;Dungeon Siege;7.9;Mar 31, 2002 +86;Crysis 2;6.7;Mar 22, 2011 +86;Call of Duty: Modern Warfare 2;4.1;Nov 10, 2009 +86;The Secret of Monkey Island: Special Edition;9.1;Jul 15, 2009 +86;Max Payne 2: The Fall of Max Payne;9.0;Oct 14, 2003 +86;Homeworld Remastered Collection;8.2;Feb 25, 2015 +86;Galactic Civilizations II: Dread Lords;8.0;Feb 21, 2006 +86;Tomb Raider;8.5;Mar 5, 2013 +86;Star Trek: Voyager Elite Force;8.2;Sep 20, 2000 +86;Worldwide Soccer Manager 2008;8.4;Oct 23, 2007 +86;IL-2 Sturmovik: Forgotten Battles;8.6;Mar 2, 2003 +86;Hyper Light Drifter;8.1;Mar 31, 2016 +86;DiRT 3;6.9;May 24, 2011 +86;Unreal Tournament 2003;8.1;Sep 30, 2002 +86;Age of Wonders II: The Wizard's Throne;8.4;Jun 12, 2002 +86;Links 2001;6.8;Oct 24, 2000 +86;EverQuest: The Ruins of Kunark;8.8;Mar 31, 2000 +86;Full Throttle;8.8;Apr 30, 1995 +86;The Lord of the Rings Online: Shadows of Angmar;8.1;Apr 24, 2007 +86;Pony Island;6.8;Jan 4, 2016 +86;Warhammer 40,000: Dawn of War;8.8;Sep 20, 2004 +86;Warhammer Online: Age of Reckoning;7.9;Sep 16, 2008 +86;Dead Space;8.0;Oct 20, 2008 +86;Bionic Commando Rearmed;7.0;Aug 13, 2008 +86;Command & Conquer: Red Alert 2 - Yuri's Revenge;9.0;Oct 10, 2001 +86;Europa Universalis;8.1;Feb 2, 2001 +86;Escape from Monkey Island;8.2;Nov 8, 2000 +86;IL-2 Sturmovik: 1946;8.8;Mar 13, 2007 +86;XCOM: Enemy Within;7.9;Nov 12, 2013 +86;Battlefield 3: Back to Karkand;7.2;Dec 13, 2011 +86;Heroes of the Storm;6.7;Jun 2, 2015 +86;Civilization III: Conquests;8.4;Nov 4, 2003 +86;Path of Exile;8.0;Jan 25, 2013 +86;Battlefield: Bad Company 2 Vietnam;8.1;Dec 18, 2010 +86;Assassin's Creed II;6.8;Mar 9, 2010 +86;The Elder Scrolls IV: Shivering Isles;8.4;Mar 26, 2007 +86;DiRT Rally;8.8;Dec 7, 2015 +86;Rocket League;8.1;Jul 7, 2015 +86;Allegiance;8.2;Mar 31, 2000 +85;The Talos Principle;8.5;Dec 11, 2014 +85;Cities: Skylines;8.9;Mar 10, 2015 +85;Falcon 4.0;8.0;Nov 30, 1998 +85;Tom Clancy's Rainbow Six;8.6;Jul 31, 1998 +85;Madden NFL 2005;6.4;Sep 14, 2004 +85;Legend of Grimrock II;8.0;Oct 15, 2014 +85;Sam & Max Episode 205: What's New, Beelzebub?;8.6;Apr 10, 2008 +85;Dragon Age: Inquisition;5.8;Nov 18, 2014 +85;Tales from the Borderlands: A Telltale Game Series;8.7;Apr 26, 2016 +85;Tom Clancy's Rainbow Six: Vegas;7.7;Dec 12, 2006 +85;City of Heroes;8.5;Apr 27, 2004 +85;SWAT 4;8.6;Apr 5, 2005 +85;Clive Barker's Undying;8.7;Feb 21, 2001 +85;EverQuest;8.2;Mar 16, 1999 +85;Warhammer 40,000: Dawn of War II;8.1;Feb 18, 2009 +85;Command & Conquer 3: Tiberium Wars;8.0;Mar 26, 2007 +85;Bit.Trip Presents...Runner2: Future Legend of Rhythm Alien;8.2;Feb 26, 2013 +85;Hotline Miami;8.5;Oct 23, 2012 +85;Out of the Park Baseball 13;8.2;Apr 9, 2012 +85;Wizardry 8;8.6;Nov 14, 2001 +85;Aliens Versus Predator 2;8.7;Oct 31, 2001 +85;Operation Flashpoint: Cold War Crisis;9.0;Aug 30, 2001 +85;Tropico;8.4;Apr 5, 2001 +85;Giants: Citizen Kabuto;8.9;Dec 6, 2000 +85;NASCAR SimRacing;4.9;Feb 15, 2005 +85;The Lord of the Rings Online: Mines of Moria;8.3;Nov 17, 2008 +85;The Binding of Isaac: Afterbirth;8.1;Oct 30, 2015 +85;Amnesia: The Dark Descent;8.6;Feb 17, 2011 +85;GTR FIA Racing;8.6;May 3, 2005 +85;Football Manager 2011;8.4;Nov 23, 2010 +85;Dust: An Elysian Tail;8.5;May 24, 2013 +85;South Park: The Stick of Truth;8.6;Mar 4, 2014 +85;Dark Souls: Prepare to Die Edition;7.4;Aug 24, 2012 +85;Medieval II: Total War Kingdoms;8.8;Aug 28, 2007 +85;Shovel Knight;7.9;Jun 26, 2014 +85;DmC: Devil May Cry;6.7;Jan 24, 2013 +85;Peggle Deluxe;8.1;Feb 19, 2008 +85;Monopoly Tycoon;8.0;Sep 24, 2001 +85;Indigo Prophecy;8.3;Oct 2, 2005 +85;Prince of Persia: The Two Thrones;8.0;Dec 1, 2005 +85;Sam & Max Episode 204: Chariots of the Dogs;8.1;Mar 13, 2008 +85;Assetto Corsa;8.4;Dec 19, 2014 +85;Machinarium;8.8;Oct 16, 2009 +85;Frozen Synapse;7.7;May 26, 2011 +85;Valkyria Chronicles;8.3;Nov 11, 2014 +85;Freelancer;8.9;Mar 3, 2003 +85;Zenzizenzic;5.9;Jul 23, 2015 +85;The Wolf Among Us: Episode 1 - Faith;9.0;Oct 11, 2013 +85;Mega Man Legacy Collection;7.3;Aug 25, 2015 +85;Warhammer 40,000: Dawn of War II - Chaos Rising;8.7;Mar 11, 2010 +85;Far Cry 2;5.8;Oct 21, 2008 +85;The Walking Dead: Episode 3 - Long Road Ahead;8.4;Aug 29, 2012 +85;AudioSurf;8.8;Feb 15, 2008 +85;BattleBlock Theater;8.0;May 15, 2014 +85;Star Wars: Knights of the Old Republic II - The Sith Lords;8.4;Feb 8, 2005 +85;MVP Baseball 2005;8.1;Feb 22, 2005 +85;The Elder Scrolls III: Bloodmoon;8.5;Jun 3, 2003 +85;Rogue Legacy;7.9;Jun 27, 2013 +85;Chaos Reborn;8.4;Oct 26, 2015 +85;Thief: Deadly Shadows;8.4;May 25, 2004 +85;Football Manager 2014;5.4;Oct 30, 2013 +85;System Shock: Enhanced Edition;7.9;Sep 22, 2015 +85;EverQuest: Gates of Discord;6.8;Feb 9, 2004 +85;FIFA 2001 Major League Soccer;7.3;Oct 30, 2000 +85;Sid Meier's Civilization V: Brave New World;8.6;Jul 9, 2013 +85;Final Fantasy XI;7.5;Oct 28, 2003 +85;Serious Sam: The Second Encounter;8.5;Feb 4, 2002 +85;The Sims: Hot Date;7.9;Nov 12, 2001 +85;American McGee's Alice;8.2;Dec 6, 2000 +85;Trials Evolution: Gold Edition;6.7;Mar 21, 2013 +85;Warhammer 40,000: Dawn of War - Winter Assault;8.3;Sep 21, 2005 +85;Tony Hawk's Underground 2;7.9;Oct 4, 2004 +85;Papers, Please;8.5;Aug 8, 2013 +85;Star Wars: The Old Republic;5.9;Dec 20, 2011 +85;Anarchy Online: Shadowlands;8.7;Sep 8, 2003 +85;Dark Age of Camelot: Shrouded Isles;8.8;Dec 2, 2002 +85;Obsidian;8.3;Dec 31, 1996 +84;The Walking Dead: Episode 2 - Starved for Help;8.6;Jun 29, 2012 +84;Saints Row: The Third;8.1;Nov 15, 2011 +84;Fallout: New Vegas;8.5;Oct 19, 2010 +84;The Movies;8.3;Nov 8, 2005 +84;Neverwinter Nights: Hordes of the Underdark;8.6;Dec 2, 2003 +84;Command & Conquer: Generals;8.3;Feb 10, 2003 +84;Sid Meier's SimGolf;8.2;Jan 23, 2002 +84;Middle-earth: Shadow of Mordor;8.0;Sep 30, 2014 +84;SpaceChem;8.4;Mar 2, 2011 +84;Downwell;6.2;Oct 15, 2015 +84;Pinball FX 2;8.0;Oct 27, 2012 +84;Devil Daggers;6.7;Feb 18, 2016 +84;PlanetSide 2;7.0;Nov 20, 2012 +84;Enter the Gungeon;7.4;Apr 5, 2016 +84;GT Legends;8.6;Jan 23, 2006 +84;Hearthstone: Goblins Vs. Gnomes;6.6;Dec 8, 2014 +84;Space Rangers 2: Rise of the Dominators;9.0;Mar 27, 2006 +84;Tales From The Borderlands: Episode 1 - Zer0 Sum;8.4;Nov 25, 2014 +84;Puzzle Quest: Challenge of the Warlords;8.3;Oct 10, 2007 +84;Heroes of Might and Magic IV;7.6;Mar 29, 2002 +84;Command & Conquer: Red Alert 2;8.9;Oct 21, 2000 +84;Shogun: Total War;8.7;Jun 13, 2000 +84;DiRT;7.2;Jun 19, 2007 +84;Darkest Dungeon;8.0;Jan 19, 2016 +84;Super Street Fighter IV: Arcade Edition;7.8;Jul 13, 2011 +84;Football Manager 2012;8.0;Oct 20, 2011 +84;Guild Wars Factions;8.5;Apr 28, 2006 +84;80 Days (2015);6.1;Sep 29, 2015 +84;Spore;5.2;Sep 7, 2008 +84;Unity of Command;7.2;Nov 15, 2011 +84;Hearthstone: The Grand Tournament;4.0;Aug 24, 2015 +84;Metro Redux;8.0;Aug 26, 2014 +84;Time Gentlemen, Please!;7.6;Jul 2, 2009 +84;Europa Universalis IV: Wealth of Nations;8.4;May 29, 2014 +84;Mass Effect 3: Citadel;7.8;Mar 5, 2013 +84;Disciples II: Dark Prophecy;8.6;Jan 22, 2002 +84;Just Cause 2;7.7;Mar 23, 2010 +84;Crysis Warhead;7.9;Sep 16, 2008 +84;Assassin's Creed IV: Black Flag;7.7;Nov 19, 2013 +84;Age of Mythology: The Titans;8.7;Sep 30, 2003 +84;SimCity 4;8.7;Jan 12, 2003 +84;Microsoft Train Simulator;8.4;May 31, 2001 +84;Rise of Nations: Rise of Legends;8.5;May 9, 2006 +84;TOCA Race Driver 3;7.8;Feb 24, 2006 +84;FTL: Faster Than Light;8.4;Sep 14, 2012 +84;SOMA;8.2;Sep 22, 2015 +84;DEFCON: Everybody Dies;8.3;Mar 26, 2007 +84;Tron 2.0;8.3;Aug 26, 2003 +84;Brothers in Arms: Earned in Blood;7.3;Oct 6, 2005 +84;Grim Fandango Remastered;8.0;Jan 27, 2015 +84;The Lord of the Rings: The Battle for Middle-Earth II;7.5;Mar 2, 2006 +84;Battlefield Vietnam;7.4;Mar 16, 2004 +84;Medieval: Total War - Viking Invasion;8.8;May 7, 2003 +84;Fallout 4;5.4;Nov 10, 2015 +84;Guild Wars Nightfall;8.7;Oct 26, 2006 +84;The Binding of Isaac;8.3;Sep 28, 2011 +84;Enemy Territory: Quake Wars;8.3;Oct 2, 2007 +84;Trine 2;8.4;Dec 7, 2011 +84;Rift;7.3;Mar 1, 2011 +84;The Wolf Among Us: Episode 5 - Cry Wolf;8.8;Jul 8, 2014 +84;Shift 2: Unleashed;6.1;Mar 29, 2011 +84;Sid Meier's Civilization IV: Warlords;8.2;Jul 24, 2006 +84;Battlefield 1942: The Road to Rome;7.9;Feb 2, 2003 +84;Poseidon;8.4;Jun 25, 2001 +84;F1 2010;6.6;Sep 22, 2010 +84;Shatter;7.4;Mar 15, 2010 +84;Darwinia;7.9;Jun 12, 2006 +84;Ultimate General: Gettysburg;8.0;Oct 16, 2014 +83;Final Fantasy XI: Treasures of Aht Urhgan;7.6;Apr 18, 2006 +83;MDK2;8.4;May 31, 2000 +83;Gunpoint;8.4;Jun 3, 2013 +83;Beyond Good & Evil;8.7;Nov 19, 2003 +83;Anno 2070;7.0;Nov 17, 2011 +83;SMITE;8.3;Mar 25, 2014 +83;Halo: Combat Evolved;7.4;Sep 30, 2003 +83;Grim Dawn;8.9;Feb 25, 2016 +83;Silent Storm;8.9;Jan 20, 2004 +83;Command & Conquer: Generals - Zero Hour;9.0;Sep 22, 2003 +83;Homeworld 2;8.3;Sep 16, 2003 +83;Galactic Civilizations;8.1;Mar 26, 2003 +83;EverQuest: The Shadows of Luclin;7.2;Dec 2, 2001 +83;Orcs Must Die!;8.1;Oct 11, 2011 +83;Life is Strange;8.6;Jan 19, 2016 +83;Fable: The Lost Chapters;8.7;Sep 20, 2005 +83;Unreal Tournament III;8.0;Nov 19, 2007 +83;The Blackwell Epiphany;7.6;Apr 24, 2014 +83;The Lord of the Rings Online: Siege of Mirkwood;7.1;Dec 1, 2009 +83;Out of the Park Baseball 10;8.3;Jun 2, 2009 +83;Tomb Raider: Anniversary;8.0;Jun 5, 2007 +83;Need for Speed: Shift;5.7;Sep 15, 2009 +83;Hearts of Iron II;8.6;Jan 4, 2005 +83;FIFA Soccer 11;7.6;Sep 28, 2010 +83;Project CARS;7.0;May 6, 2015 +83;FIFA Soccer 2003;6.8;Nov 2, 2002 +83;Icewind Dale II;8.3;Aug 26, 2002 +83;Age of Empires;8.8;Sep 30, 1997 +83;EverQuest II: Echoes of Faydwer;8.4;Nov 13, 2006 +83;EverQuest II;7.3;Nov 8, 2004 +83;Terraria;8.5;May 16, 2011 +83;Final Fantasy XIV Online: A Realm Reborn;6.7;Aug 27, 2013 +83;Card Hunter (2013);7.9;Sep 12, 2013 +83;Sam & Max: The Devil's Playhouse - Episode 2: The Tomb of Sammun-Mak;7.9;May 18, 2010 +83;This War of Mine;8.4;Nov 14, 2014 +83;Darksiders;7.7;Sep 23, 2010 +83;Tom Clancy's Rainbow Six 3: Raven Shield;8.9;Mar 19, 2003 +83;World of Outlaws: Sprint Cars;7.9;Feb 11, 2003 +83;Colin McRae Rally 2.0;8.4;Feb 14, 2001 +83;Combat Flight Simulator 2: WWII Pacific Theater;8.1;Oct 13, 2000 +83;Orcs Must Die! 2;7.9;Jul 30, 2012 +83;Prey;7.9;Jul 11, 2006 +83;Metal Gear Rising: Revengeance;7.9;Jan 9, 2014 +83;Starseed Pilgrim;6.3;Apr 16, 2013 +83;Age of Conan: Rise of the Godslayer;8.4;May 11, 2010 +83;Alan Wake;8.0;Feb 16, 2012 +83;Tiger Woods PGA Tour 2002;5.0;Feb 24, 2002 +83;Monaco: What's Yours Is Mine;7.7;Apr 24, 2013 +83;Transistor;8.3;May 20, 2014 +83;Helldivers;6.9;Dec 7, 2015 +83;Worldwide Soccer Manager 2009;8.1;Nov 18, 2008 +83;Call of Duty: World at War;7.5;Nov 10, 2008 +83;Torchlight;8.0;Jan 5, 2010 +83;Prison Architect;8.3;Oct 6, 2015 +83;Valdis Story: Abyssal City;8.1;Oct 30, 2013 +83;Crimson Skies;8.2;Sep 17, 2000 +83;RACE 07: Official WTCC Game;9.0;Oct 9, 2007 +83;SUPERHOT;7.6;Feb 25, 2016 +83;EverQuest II: Rise of Kunark;7.9;Nov 13, 2007 +83;Dark Age of Camelot: Catacombs;8.6;Dec 7, 2004 +83;Spore Creature Creator;8.1;Jun 17, 2008 +83;Colin McRae Rally 2005;7.0;Oct 28, 2004 +83;Tom Clancy's Splinter Cell: Conviction;5.2;Apr 27, 2010 +83;Tribes: Vengeance;7.6;Oct 12, 2004 +83;L.A. Noire: The Complete Edition;7.9;Nov 8, 2011 +83;GTR Evolution;8.2;Sep 2, 2008 +83;Life is Strange: Episode 5 - Polarized;8.4;Oct 20, 2015 +83;BROFORCE;8.0;Oct 15, 2015 +83;Independence War 2: Edge of Chaos;8.4;Aug 22, 2001 +83;Myst III: Exile;8.2;May 8, 2001 +83;Superbrothers: Sword & Sworcery EP;6.4;Apr 16, 2012 +83;Sid Meier's Civilization IV: Colonization;6.7;Sep 22, 2008 +83;Europa Universalis III;8.4;Jan 23, 2007 +83;F1 2011;7.2;Sep 20, 2011 +83;Prince of Persia: Warrior Within;8.4;Nov 30, 2004 +83;Danganronpa: Trigger Happy Havoc;7.6;Feb 18, 2016 +83;Counter-Strike: Global Offensive;7.8;Aug 21, 2012 +83;Outland;7.1;Sep 29, 2014 +83;MechWarrior 4: Mercenaries;8.6;Nov 7, 2002 +83;Metal Gear Solid;9.0;Sep 24, 2000 +82;Invisible, Inc.;8.0;May 12, 2015 +82;Dark Souls II: Crown of the Ivory King;7.8;Sep 29, 2014 +82;Red Faction: Guerrilla;7.5;Sep 15, 2009 +82;The Book of Unwritten Tales;8.2;Oct 28, 2011 +82;Capitalism II;9.0;Dec 16, 2001 +82;Rally Trophy;8.5;Nov 20, 2001 +82;Dawn of Discovery;8.8;Jun 17, 2009 +82;City of Villains;8.1;Oct 31, 2005 +82;Kentucky Route Zero - Act II;8.0;May 31, 2013 +82;Tom Clancy's Splinter Cell: Blacklist;7.4;Aug 20, 2013 +82;Act of War: Direct Action;8.5;Mar 15, 2005 +82;Sokobond;7.8;Aug 27, 2013 +82;Sam & Max Episode 105: Reality 2.0;8.4;Mar 29, 2007 +82;Bejeweled 3;8.0;Dec 7, 2010 +82;Dangerous Waters;8.8;Feb 22, 2005 +82;Tomb Raider: Legend;7.8;Apr 11, 2006 +82;Asheron's Call 2: Fallen Kings;8.8;Nov 20, 2002 +82;Gemini Rue;8.4;Feb 24, 2011 +82;Antichamber;8.2;Jan 31, 2013 +82;Neverwinter Nights 2;6.5;Oct 31, 2006 +82;Dragon Age: Origins - Awakening;7.7;Mar 16, 2010 +82;Door Kickers;8.2;Oct 20, 2014 +82;Hearthstone: Blackrock Mountain;6.4;Apr 2, 2015 +82;Rome: Total War Barbarian Invasion;8.4;Sep 27, 2005 +82;Hacknet;7.3;Aug 12, 2015 +82;Tales of Monkey Island Chapter 3: Lair of the Leviathan;7.8;Sep 29, 2009 +82;Neverwinter Nights 2: Mask of The Betrayer;8.8;Oct 9, 2007 +82;Sins of a Solar Empire: Rebellion;7.8;Jun 12, 2012 +82;Broken Sword: The Sleeping Dragon;7.6;Nov 17, 2003 +82;Age of Wonders: Shadow Magic;8.5;Jul 25, 2003 +82;Tom Clancy's Ghost Recon: Desert Siege;8.4;Mar 27, 2002 +82;Warlords Battlecry II;8.5;Mar 11, 2002 +82;Football Manager Live;2.9;Jan 23, 2009 +82;Marvel: Ultimate Alliance;8.3;Oct 24, 2006 +82;The Talos Principle: Road To Gehenna;7.6;Jul 23, 2015 +82;Lara Croft and the Guardian of Light;8.2;Sep 28, 2010 +82;Aquaria;8.3;Dec 7, 2007 +82;Need for Speed: Underground;8.3;Nov 17, 2003 +82;TrackMania Sunrise;8.5;May 6, 2005 +82;King's Quest Chapter 1: A Knight to Remember;7.2;Jul 28, 2015 +82;Dragon Age II;4.4;Mar 8, 2011 +82;Endless Legend;7.9;Apr 24, 2014 +82;Tom Clancy's Ghost Recon: Island Thunder;8.3;Sep 25, 2002 +82;S.T.A.L.K.E.R.: Shadow of Chernobyl;8.4;Mar 20, 2007 +82;Kero Blaster;6.9;May 11, 2014 +82;Monday Night Combat;7.3;Jan 24, 2011 +82;The Wolf Among Us: Episode 3 - A Crooked Mile;8.6;Apr 8, 2014 +82;Airborne Assault: Red Devils Over Arnhem;7.4;Jun 17, 2002 +82;Fallout Tactics: Brotherhood of Steel;7.9;Mar 14, 2001 +82;Need for Speed: Underground 2;8.5;Nov 9, 2004 +82;NHL Eastside Hockey Manager 2005;6.6;Oct 5, 2005 +82;Legend of Grimrock;8.1;Apr 11, 2012 +82;Dominions 3: The Awakening;8.1;Sep 29, 2006 +82;Bulletstorm;7.7;Feb 22, 2011 +82;Borderlands 2: Mr. Torgue's Campaign of Carnage;7.3;Nov 20, 2012 +82;Desktop Dungeons;8.2;Oct 17, 2010 +82;Fallout: New Vegas - Old World Blues;7.8;Jul 19, 2011 +82;Crusader Kings II;8.7;Feb 14, 2012 +82;MVP Baseball 2004;7.9;Mar 9, 2004 +82;Europa 1400: The Guild;8.6;Nov 18, 2002 +82;Battle Realms;8.6;Nov 7, 2001 +82;Warlords Battlecry;8.2;Jul 9, 2000 +82;Sam & Max Episode 201: Ice Station Santa;8.6;Nov 8, 2007 +82;Technobabylon;7.8;May 21, 2015 +82;World of Warcraft: Mists of Pandaria;4.8;Sep 25, 2012 +82;FIFA 15;4.2;Sep 23, 2014 +82;Recettear: An Item Shop's Tale;8.6;Sep 10, 2010 +82;ETHER One;6.9;Mar 25, 2014 +82;The Vanishing of Ethan Carter;8.1;Sep 25, 2014 +82;Flight Simulator X: Acceleration;7.3;Oct 23, 2007 +82;Blood;9.0;May 31, 1997 +82;Command & Conquer: Red Alert 3;6.8;Oct 28, 2008 +82;The Walking Dead: Episode 1 - A New Day;8.4;Apr 24, 2012 +82;Links 2003;6.8;Sep 16, 2002 +82;Earth & Beyond;7.1;Sep 2, 2002 +82;Syberia;8.5;Sep 1, 2002 +82;Virtual Pool 3;7.3;Nov 14, 2000 +82;The Sims: Livin' Large;6.6;Aug 27, 2000 +82;DCS: Black Shark;8.5;Apr 13, 2009 +82;King's Bounty: Armored Princess;8.7;Sep 10, 2010 +82;Age of Wonders III - Golden Realms;8.5;Sep 18, 2014 +82;Strong Bad's Cool Game for Attractive People Episode 5: 8-Bit Is Enough;7.5;Dec 15, 2008 +82;Prince of Persia;7.2;Dec 2, 2008 +82;Joint Operations: Typhoon Rising;8.7;Jun 15, 2004 +82;Xpand Rally;7.4;Apr 20, 2006 +82;Dark Souls II: Crown of the Sunken King;7.3;Jul 22, 2014 +82;Resident Evil HD Remaster;8.2;Jan 20, 2015 +82;Celtic Kings: Rage of War;8.5;Aug 21, 2002 +82;B-17 Flying Fortress: The Mighty 8th;7.3;Dec 13, 2000 +82;EverQuest: The Scars of Velious;7.8;Dec 4, 2000 +82;Metro: Last Light;8.6;May 14, 2013 +82;Rising Storm;8.5;May 30, 2013 +82;Lethal League;7.4;Aug 27, 2014 +82;Botanicula;8.3;Apr 19, 2012 +82;Pro Evolution Soccer 2015;5.8;Nov 13, 2014 +82;Bookworm Adventures Deluxe;7.9;Dec 20, 2006 +82;The Lord of the Rings: The Battle for Middle-Earth;8.6;Dec 6, 2004 +82;Hitman: Blood Money;8.8;May 30, 2006 +82;Need for Speed: Most Wanted;8.5;Nov 15, 2005 +82;OlliOlli2: Welcome to Olliwood;5.2;Aug 11, 2015 +82;WildStar;7.4;Jun 3, 2014 +82;Broken Age: Act 1;7.7;Jan 28, 2014 +82;Divinity II: The Dragon Knight Saga;8.2;Nov 5, 2010 +82;Out of the Park Baseball 9;7.4;Jun 1, 2008 +82;The Simpsons: Hit & Run;8.0;Nov 13, 2003 +82;America's Army;6.1;Aug 28, 2002 +82;Star Trek Bridge Commander;8.1;Feb 27, 2002 +82;The Last Express;8.9;Mar 31, 1997 +81;Quake 4;7.5;Oct 11, 2005 +81;Nidhogg;7.0;Jan 13, 2014 +81;Battlefield 4;6.0;Oct 29, 2013 +81;To the Moon;8.9;Sep 7, 2012 +81;The Sims 3: World Adventures;8.0;Nov 16, 2009 +81;Painkiller;8.0;Apr 12, 2004 +81;Airborne Assault: Highway to the Reich;6.1;Dec 10, 2003 +81;Nancy Drew: Danger on Deception Island;7.7;Oct 1, 2003 +81;Shadowrun: Hong Kong;7.7;Aug 20, 2015 +81;Supreme Commander: Forged Alliance;8.9;Nov 6, 2007 +81;Sunless Sea;7.4;Jul 1, 2014 +81;The Walking Dead: Season Two Episode 3 - In Harm's Way;8.3;May 13, 2014 +81;Marvel Heroes 2015;7.9;Jun 4, 2014 +81;Football Manager 2016;6.4;Nov 13, 2015 +81;VVVVVV;8.1;Jan 11, 2010 +81;Darksiders II;7.9;Aug 14, 2012 +81;Wolfenstein: The New Order;8.2;May 20, 2014 +81;Lone Survivor;7.2;Apr 23, 2012 +81;Alien: Isolation;8.4;Oct 6, 2014 +81;The Witcher;8.8;Oct 30, 2007 +81;Kentucky Route Zero - Act I;7.5;Jan 7, 2013 +81;Jade Empire: Special Edition;8.3;Feb 26, 2007 +81;SWAT 3: Elite Edition;8.4;Oct 6, 2000 +81;Asheron's Call;8.8;Oct 31, 1999 +81;Unravel;8.1;Feb 9, 2016 +81;Midnight Club II;8.0;Jun 30, 2003 +81;Chessmaster 10th Edition;7.4;Aug 12, 2004 +81;Age of Empires III;7.7;Oct 18, 2005 +81;Tales of Monkey Island Chapter 5: Rise of the Pirate God;8.4;Dec 8, 2009 +81;Castlevania: Lords of Shadow Ultimate Edition;7.3;Aug 27, 2013 +81;Strong Bad's Cool Game for Attractive People Episode 2: Strong Badia the Free;8.2;Sep 15, 2008 +81;The Cat Lady;8.7;Dec 4, 2013 +81;Vessel;7.9;Mar 1, 2012 +81;Metro 2033;8.1;Mar 16, 2010 +81;OutRun 2006: Coast 2 Coast;7.8;Jun 27, 2006 +81;Blur;7.3;May 25, 2010 +81;Empires: Dawn of the Modern World;8.2;Oct 21, 2003 +81;Chessmaster 9000;7.7;Aug 31, 2002 +81;Gothic;8.6;Nov 23, 2001 +81;Arcanum: Of Steamworks and Magick Obscura;8.9;Aug 22, 2001 +81;NASCAR Heat;8.6;Sep 27, 2000 +81;Company of Heroes 2: Ardennes Assault;6.1;Nov 17, 2014 +81;PlanetSide;7.3;May 20, 2003 +81;Tales From The Borderlands: Episode 3 - Catch A Ride;8.4;Jun 23, 2015 +81;The Walking Dead: Season Two Episode 2 - A House Divided;8.6;Mar 4, 2014 +81;Kingdoms of Amalur: Reckoning;6.6;Feb 7, 2012 +81;Sam & Max: The Devil's Playhouse - Episode 1: The Penal Zone;8.5;Apr 15, 2010 +81;Borderlands;7.8;Oct 26, 2009 +81;DG2: Defense Grid 2;6.7;Sep 23, 2014 +81;Napoleon: Total War;7.9;Feb 23, 2010 +81;Overlord;8.1;Jun 26, 2007 +81;Firewatch;7.2;Feb 9, 2016 +81;Victoria II: Heart of Darkness;8.7;Apr 16, 2013 +81;Waveform;7.6;Jan 25, 2013 +81;The Elder Scrolls IV: Knights of the Nine;7.5;Nov 21, 2006 +81;Red Orchestra: Ostfront 41-45;8.6;Mar 14, 2006 +81;Stronghold;8.9;Oct 21, 2001 +81;Strong Bad's Cool Game for Attractive People Episode 4: Dangeresque 3: The Criminal Projective;8.5;Nov 17, 2008 +81;Rochard;8.0;Nov 15, 2011 +81;Fallout 3: Broken Steel;7.3;May 5, 2009 +81;Tiger Woods PGA Tour 06;8.1;Sep 20, 2005 +81;RollerCoaster Tycoon 3;4.9;Oct 26, 2004 +81;Dragon's Dogma: Dark Arisen;8.3;Jan 15, 2016 +81;Guild Wars 2: Heart of Thorns;7.3;Oct 23, 2015 +81;AaaaaAAaaaAAAaaAAAAaAAAAA!!! - A Reckless Disregard for Gravity;7.2;Sep 3, 2009 +81;The Sims 2 University;7.8;Feb 28, 2005 +81;Far Cry 3: Blood Dragon;8.1;May 1, 2013 +81;Sid Meier's Civilization: Beyond Earth;5.5;Oct 24, 2014 +81;Disney's Toontown Online;8.7;Oct 6, 2005 +81;Combat Mission 3: Afrika Korps;8.4;Dec 3, 2003 +81;EverQuest: The Planes of Power;8.2;Oct 28, 2002 +81;Rails Across America;8.0;Sep 18, 2001 +81;Wasteland 2;7.3;Sep 19, 2014 +81;Jamestown: Legend of the Lost Colony;7.5;Jun 8, 2011 +81;Call of Duty: Black Ops;5.1;Nov 9, 2010 +81;Kohan II: Kings of War;7.9;Sep 20, 2004 +81;The Age of Decadence;7.9;Oct 15, 2015 +81;Samorost 3;8.3;Mar 24, 2016 +81;Order of Battle: Pacific;6.4;Apr 30, 2015 +81;Empire Earth;8.3;Nov 12, 2001 +81;Star Trek: Deep Space Nine: The Fallen;7.9;Nov 15, 2000 +81;Sam & Max Episode 101: Culture Shock;8.7;Oct 18, 2006 +81;Mirror's Edge (2008);8.1;Jan 12, 2009 +81;TrackMania 2 Canyon;7.7;Sep 14, 2011 +81;Sleeping Dogs;8.2;Aug 14, 2012 +81;Star Wars Jedi Knight: Jedi Academy;8.6;Sep 17, 2003 +81;Mortal Kombat Komplete Edition;8.7;Aug 6, 2013 +81;Shadowrun: Dragonfall;8.3;Feb 27, 2014 +81;Eets;6.4;Mar 29, 2006 +81;World of Warships;6.6;Sep 17, 2015 +81;TOCA Race Driver 2: The Ultimate Racing Simulator;8.0;Apr 15, 2004 +81;Wargame: European Escalation;8.2;Feb 22, 2012 +81;Dungeon Defenders;7.3;Oct 18, 2011 +81;Sam & Max: The Devil's Playhouse - Episode 5: The City That Dares Not Sleep;7.9;Aug 30, 2010 +81;Age of Empires III: The Asian Dynasties;8.5;Oct 23, 2007 +81;Defense Grid: The Awakening;8.8;Jul 29, 2009 +81;Codename: Panzers, Phase One;8.8;Sep 30, 2004 +81;FIFA 16;4.4;Sep 22, 2015 +81;Europa Universalis IV: Conquest of Paradise;7.7;Jan 14, 2014 +81;Ghost Master;8.0;Aug 26, 2003 +81;Divine Divinity;8.5;Sep 22, 2002 +80;The Book of Unwritten Tales 2;7.7;Feb 20, 2015 +80;Galactic Civilizations III;6.6;May 14, 2015 +80;Lovers in a Dangerous Spacetime;7.2;Sep 9, 2015 +80;Age of Conan: Hyborian Adventures;7.3;May 20, 2008 +80;Company of Heroes 2: The Western Front Armies;6.8;Jun 23, 2014 +80;Sid Meier's Civilization V: Gods & Kings;7.7;Jun 19, 2012 +80;Age of Empires III: The WarChiefs;8.1;Oct 17, 2006 +80;Metal Gear Solid V: Ground Zeroes;7.7;Dec 18, 2014 +80;Trials Fusion;6.8;Apr 16, 2014 +80;Syberia II;8.3;Mar 30, 2004 +80;Tom Clancy's Ghost Recon;8.4;Nov 13, 2001 +80;Conquest: Frontier Wars;8.3;Aug 14, 2001 +80;Gabriel Knight 3: Blood of the Sacred, Blood of the Damned;8.8;Oct 5, 1999 +80;Westerado: Double Barreled;7.4;Apr 16, 2015 +80;Anomaly: Warzone Earth;7.3;Apr 8, 2011 +80;Volume;7.2;Aug 18, 2015 +80;GRID 2;5.7;May 27, 2013 +80;The Banner Saga;7.9;Jan 14, 2014 +80;Sam & Max Episode 202: Moai Better Blues;7.7;Jan 10, 2008 +80;Age of Wonders III - Eternal Lords;8.4;Apr 14, 2015 +80;Pro Evolution Soccer 2013;6.8;Sep 25, 2012 +80;Osmos;7.5;Aug 18, 2009 +80;Dungeon Siege II;7.9;Aug 16, 2005 +80;Dead Island;6.8;Sep 6, 2011 +80;Sam & Max Episode 104: Abe Lincoln Must Die!;7.8;Feb 22, 2007 +80;Deus Ex: Invisible War;6.3;Dec 2, 2003 +80;The Sims: Makin' Magic;8.6;Oct 28, 2003 +80;Tom Clancy's Splinter Cell: Double Agent;5.7;Nov 7, 2006 +80;Medal of Honor: Pacific Assault;7.4;Nov 4, 2004 +80;Assassin's Creed: Revelations;7.4;Nov 29, 2011 +80;Grandia II Anniversary Edition;7.6;Aug 24, 2015 +80;Assassin's Creed III;6.2;Nov 20, 2012 +80;Madden NFL 07;7.3;Aug 22, 2006 +80;Outlast;8.4;Sep 4, 2013 +80;The Chronicles of Riddick: Assault on Dark Athena;8.0;Apr 7, 2009 +80;Hearts of Iron II: Doomsday;8.8;Apr 7, 2006 +80;Dishonored: The Brigmore Witches;8.5;Aug 13, 2013 +80;Codename: Panzers, Phase Two;8.0;Jul 25, 2005 +80;Full Spectrum Warrior;7.0;Sep 21, 2004 +80;AI War: Fleet Command;8.4;May 14, 2009 +80;Freedom Fighters;8.3;Oct 1, 2003 +80;NBA Live 2003;8.3;Nov 14, 2002 +80;The Elder Scrolls III: Tribunal;8.2;Nov 6, 2002 +80;Elite: Dangerous;6.4;Dec 16, 2014 +80;Pure;6.9;Sep 16, 2008 +80;Goodbye Deponia;8.1;Oct 17, 2013 +80;SWAT 4: The Stetchkov Syndicate;8.3;Feb 28, 2006 +80;Dropsy;7.3;Sep 10, 2015 +80;Company of Heroes 2: The British Forces;5.9;Sep 3, 2015 +80;Ground Control II: Operation Exodus;8.8;Jun 23, 2004 +80;NBA Live 2004;9.0;Nov 11, 2003 +80;Brutal Legend;7.8;Feb 26, 2013 +80;Tomb Raider: Underworld;7.6;Nov 18, 2008 +80;Oxenfree;7.7;Jan 15, 2016 +80;Titan Quest: Immortal Throne;8.7;Mar 5, 2007 +80;La-Mulana (Remake);7.1;Jul 13, 2012 +80;X-Men Legends II: Rise of Apocalypse;8.4;Sep 20, 2005 +80;SpellForce 2: Shadow Wars;7.6;May 5, 2006 +80;Fritz 8 Deluxe;7.8;Dec 1, 2004 +80;Trine;8.2;Sep 11, 2009 +80;Dishonored: The Knife of Dunwall;8.1;Apr 16, 2013 +80;Company of Heroes 2;2.0;Jun 25, 2013 +80;Natural Selection 2;8.4;Oct 30, 2012 +80;Read Only Memories;7.2;Oct 5, 2015 +80;The Sims 3: Into the Future;5.4;Oct 22, 2013 +80;Borderlands 2: Captain Scarlett and Her Pirate's Booty;7.4;Oct 16, 2012 +80;FATE;8.3;Sep 19, 2006 +80;2002 FIFA World Cup;7.9;Apr 30, 2002 +80;Asheron's Call Dark Majesty;8.1;Nov 4, 2001 +80;The Bug Butcher;8.2;Jan 19, 2016 +80;Dragonshard;7.4;Oct 2, 2005 +80;Icewind Dale: Enhanced Edition;7.6;Oct 30, 2014 +80;The Magic Circle;7.3;Jul 9, 2015 +80;Far Cry 4;6.6;Nov 18, 2014 +80;Super Time Force Ultra;6.6;Aug 25, 2014 +80;Day of Defeat: Source;9.1;Feb 7, 2006 +80;Battlefield 2142;6.8;Oct 17, 2006 +80;World of Tanks;3.8;Sep 6, 2011 +80;Vampire: The Masquerade - Bloodlines;9.0;Nov 16, 2004 +80;Dark Souls II: Scholar of the First Sin;7.4;Apr 1, 2015 +80;Warhammer 40,000: Dawn of War II - Retribution;7.8;Mar 1, 2011 +80;Panzer Corps;7.5;Jul 11, 2011 +80;Men of War;8.1;Mar 16, 2009 +80;Fallen Enchantress: Legendary Heroes;7.7;May 22, 2013 +80;The Walking Dead: Episode 4 - Around Every Corner;8.5;Oct 10, 2012 +80;Tales of Monkey Island Chapter 4: The Trial and Execution of Guybrush Threepwood;8.4;Oct 30, 2009 +80;Penny Arcade Adventures: Episode Two;7.7;Nov 7, 2008 +80;Time Commando;8.9;Jul 31, 1996 +80;Sins of a Solar Empire: Entrenchment;8.1;Feb 25, 2009 +80;F1 2012;6.9;Sep 18, 2012 +80;Luftrausers;6.8;Mar 18, 2014 +80;Naruto Shippuden: Ultimate Ninja Storm 3 Full Burst;7.9;Oct 24, 2013 +80;Stealth Bastard Deluxe;8.3;Nov 28, 2012 +80;Tom Clancy's Ghost Recon Advanced Warfighter;7.7;May 3, 2006 +80;LEGO Batman: The Videogame;7.9;Sep 23, 2008 +80;Stacking;7.9;Mar 6, 2012 +80;Age of Wonders III;7.8;Mar 31, 2014 +80;Life is Strange: Episode 3 - Chaos Theory;9.0;May 19, 2015 +80;The Legend of Heroes: Trails in the Sky SC;8.4;Oct 29, 2015 +80;Proteus;5.6;Jan 30, 2013 +80;Robin Hood: The Legend of Sherwood;8.3;Nov 14, 2002 +80;Soldier of Fortune II: Double Helix;7.3;May 20, 2002 +80;RollerCoaster Tycoon: Loopy Landscapes;9.0;Sep 30, 2000 +80;Toki Tori;7.9;Jan 28, 2010 +80;RoboBlitz;8.3;Nov 7, 2006 +80;Wargame: AirLand Battle;8.1;May 29, 2013 +80;Football Manager 2015;6.0;Nov 7, 2014 +80;The Suffering;8.2;Jun 8, 2004 +80;Gish;7.2;Sep 17, 2004 +80;Axiom Verge;8.2;May 14, 2015 +80;Driver: San Francisco;7.0;Sep 27, 2011 +80;The Corporate Machine;7.5;Jul 14, 2001 +80;Dungeons & Dragons: Chronicles of Mystara;6.7;Jun 18, 2013 +80;Disciples II: Rise of the Elves;8.1;Nov 25, 2003 +80;MechCommander 2;8.3;Jul 18, 2001 +80;Waterloo: Napoleon's Last Battle;7.5;Mar 25, 2001 +80;Chessmaster 8000;6.4;Nov 14, 2000 +80;Circle of Blood;8.6;Sep 30, 1996 +80;BioShock Infinite: Burial at Sea - Episode Two;8.5;Mar 25, 2014 +80;S.T.A.L.K.E.R.: Call of Pripyat;8.7;Feb 2, 2010 +80;The Walking Dead: Season Two - A Telltale Games Series;8.3;Dec 17, 2013 +80;FLY'N;8.2;Nov 9, 2012 +80;Total War: Attila;7.3;Feb 17, 2015 +80;The Wolf Among Us;8.8;Oct 11, 2013 +80;Nancy Drew: Secret of the Old Clock;8.1;Jul 26, 2005 +80;ArcheAge;3.6;Sep 16, 2014 +80;CAPSIZED;7.1;Apr 29, 2011 +80;Microsoft Flight Simulator X;7.6;Oct 17, 2006 +80;Myst V: End of Ages;7.8;Sep 19, 2005 +80;Railroad Tycoon 3;7.7;Oct 23, 2003 +80;Hostile Waters: Antaeus Rising;8.1;Jun 13, 2001 +79;Dustforce;7.9;Jan 17, 2012 +79;Empire Earth II;7.0;Apr 26, 2005 +79;Fallout 3: Point Lookout;7.8;Jun 23, 2009 +79;Test Drive Unlimited;8.1;Mar 20, 2007 +79;Dying Light: The Following;8.3;Feb 9, 2016 +79;The Path;7.0;Mar 18, 2009 +79;Dungeon of the Endless;8.0;Oct 27, 2014 +79;Revenge of the Titans;7.6;May 24, 2010 +79;Bookworm Adventures: Volume 2;7.6;Jul 30, 2009 +79;F1 2001;7.5;Oct 14, 2001 +79;Brothers in Arms: Hell's Highway;7.9;Oct 7, 2008 +79;Star Wars: Empire at War;8.4;Feb 15, 2006 +79;Dariusburst: Chronicle Saviours;8.3;Dec 3, 2015 +79;Europa Universalis: Rome - Vae Victis;8.6;Nov 19, 2008 +79;Silent Hunter: Wolves of the Pacific;6.5;Mar 20, 2007 +79;Pillars of Eternity: The White March - Part 2;6.7;Feb 16, 2016 +79;1701 A.D.;8.3;Nov 6, 2006 +79;Stasis;7.6;Aug 31, 2015 +79;Pro Evolution Soccer 2009;7.4;Nov 12, 2008 +79;Return to Mysterious Island;8.5;Nov 2, 2004 +79;Jotun;7.0;Sep 29, 2015 +79;Else Heart.Break();7.5;Sep 24, 2015 +79;Kohan: Ahriman's Gift;8.7;Nov 5, 2001 +79;Emperor: Battle for Dune;8.3;Jun 12, 2001 +79;Trackmania Turbo;6.9;Mar 24, 2016 +79;Cart Life;5.9;Jul 29, 2010 +79;Sword of the Stars: Born of Blood;8.1;Jun 5, 2007 +79;Worms Reloaded;6.7;Aug 26, 2010 +79;Warhammer: End Times - Vermintide;7.9;Oct 23, 2015 +79;Euro Truck Simulator 2;8.7;Jan 16, 2013 +79;Tropico 3;8.2;Oct 20, 2009 +79;Cities: Skylines - After Dark;7.9;Sep 24, 2015 +79;Runaway: A Twist of Fate;8.5;Apr 21, 2011 +79;Tales of Monkey Island Chapter 1: Launch of the Screaming Narwhal;8.2;Jul 7, 2009 +79;Bloodline Champions;8.0;Jan 13, 2011 +79;The Sims: Superstar;8.2;May 12, 2003 +79;NBA Live 2005;8.5;Oct 26, 2004 +79;Valiant Hearts: The Great War;8.6;Jun 25, 2014 +79;Payday 2;3.4;Aug 13, 2013 +79;Dungeons of Dredmor;7.8;Jul 13, 2011 +79;Geometry Wars 3: Dimensions;6.2;Nov 25, 2014 +79;Assassin's Creed: Director's Cut Edition;7.5;Apr 8, 2008 +79;Puzzle Dimension;7.6;Jun 21, 2010 +79;Split/Second;8.2;May 18, 2010 +79;Sang-Froid: Tales of Werewolves;7.9;Apr 5, 2013 +79;The Incredible Adventures of Van Helsing: Final Cut;7.2;Oct 7, 2015 +79;Hitman: Absolution;7.0;Nov 19, 2012 +79;Call of Juarez: Gunslinger;8.2;May 22, 2013 +79;Rome: Total War Alexander;7.6;Jun 19, 2006 +79;Strong Bad's Cool Game for Attractive People Episode 3: Baddest of the Bands;8.1;Oct 27, 2008 +79;Sam & Max Episode 102: Situation: Comedy;7.9;Dec 20, 2006 +79;Tropico 3: Absolute Power;7.7;May 17, 2010 +79;Sam & Max Episode 106: Bright Side of the Moon;7.3;Apr 26, 2007 +79;Day of Defeat;9.3;May 6, 2003 +79;Space Empires: IV;8.3;Nov 6, 2000 +79;Resident Evil 4: Ultimate HD Edition;7.7;Feb 27, 2014 +79;Sam & Max Episode 203: Night of the Raving Dead;8.2;Feb 12, 2008 +79;FlatOut: Ultimate Carnage;7.6;Sep 2, 2008 +79;Guitar Hero III: Legends of Rock;7.2;Nov 13, 2007 +79;Sid Meier's Civilization: Beyond Earth - Rising Tide;5.9;Oct 9, 2015 +79;Memoria;8.5;Aug 29, 2013 +79;The Last Door;7.8;May 20, 2014 +79;Shadowgrounds Survivor;7.8;Dec 6, 2007 +79;Gothic II;8.8;Oct 28, 2003 +79;Port Royale;8.2;Jun 4, 2003 +79;Deadly Dozen: Pacific Theater;7.9;Oct 31, 2002 +79;Shattered Galaxy;8.3;Aug 21, 2001 +79;Close Combat: Invasion: Normandy;8.2;Oct 10, 2000 +79;King's Bounty: The Legend;8.6;Sep 23, 2008 +79;Rage;5.1;Oct 4, 2011 +79;The Misadventures of P.B. Winterbottom;8.3;Apr 20, 2010 +79;Uru: Ages Beyond Myst;7.4;Nov 11, 2003 +79;Guild Wars: Eye of the North;8.6;Aug 28, 2007 +79;Tales From The Borderlands: Episode 4 - Escape Plan Bravo;8.4;Aug 18, 2015 +79;EverQuest: Lost Dungeons of Norrath;7.0;Sep 8, 2003 +79;Battlefield 1942: Secret Weapons of WWII;8.5;Sep 4, 2003 +79;The Sims: Unleashed;8.0;Sep 23, 2002 +79;Race the Sun;7.5;Aug 19, 2013 +79;The Sims 3: Pets;6.1;Oct 18, 2011 +79;Prototype;7.9;Jun 10, 2009 +79;Stick it to the Man!;7.2;Dec 13, 2013 +79;Street Fighter X Tekken;6.4;May 11, 2012 +79;Frozen Cortex;6.5;Feb 19, 2015 +79;Free Realms;6.4;Apr 29, 2009 +79;Homeworld: Deserts of Kharak;8.0;Jan 20, 2016 +79;Don't Starve;8.3;Apr 23, 2013 +79;Assault Android Cactus;7.0;Sep 23, 2015 +79;Trainz;7.2;Feb 10, 2002 +79;King Arthur: The Role-Playing Wargame;7.9;Nov 24, 2009 +79;Chivalry: Medieval Warfare;7.8;Oct 16, 2012 +79;Overlord II;8.1;Jun 23, 2009 +79;F.E.A.R. 2: Project Origin;7.8;Feb 10, 2009 +79;Tom Clancy's Rainbow Six Siege;6.9;Dec 1, 2015 +79;The Settlers 7: Paths to a Kingdom;5.2;Mar 23, 2010 +79;RollerCoaster Tycoon 3: Soaked!;2.9;Jun 23, 2005 +79;Dark Souls II: Crown of the Old Iron King;7.6;Aug 26, 2014 +79;TrackMania 2 Valley;8.3;Jul 4, 2013 +79;State of Decay;6.8;Nov 5, 2013 +79;LEGO Harry Potter: Years 1-4;7.8;Jun 29, 2010 +79;Rift: Storm Legion;7.8;Nov 13, 2012 +79;Crayon Physics Deluxe;7.6;Jan 7, 2009 +79;Nancy Drew: Legend of the Crystal Skull;8.5;Oct 8, 2007 +79;EverQuest II: Desert of Flames;7.8;Sep 12, 2005 +79;SimCity 4: Rush Hour;8.6;Sep 22, 2003 +79;Uncommon Valor: Campaign for the South Pacific;7.6;Dec 2, 2002 +79;Global Operations;8.3;Mar 25, 2002 +78;Apotheon;7.8;Feb 3, 2015 +78;Need for Speed: Most Wanted - A Criterion Game;4.4;Oct 30, 2012 +78;Star Wars: Battlefront II;8.8;Oct 31, 2005 +78;The Walking Dead: Season Two Episode 1 - All That Remains;8.5;Dec 17, 2013 +78;The Journey Down: Chapter Two;7.1;Aug 25, 2014 +78;Star Trek: Elite Force II;7.6;Jun 25, 2003 +78;Zuma's Revenge!;7.9;Sep 15, 2009 +78;Baldur's Gate: Enhanced Edition;7.0;Nov 28, 2012 +78;Doom 3: Resurrection of Evil;6.0;Apr 4, 2005 +78;LEGO Indiana Jones: The Original Adventures;7.7;Jun 3, 2008 +78;NASCAR Thunder 2004;7.5;Sep 16, 2003 +78;Transformers: Fall of Cybertron;7.8;Aug 21, 2012 +78;FIFA Soccer 06;6.7;Oct 4, 2005 +78;DeadCore;6.8;Oct 17, 2014 +78;The Walking Dead: Season Two Episode 5 - No Going Back;8.5;Aug 26, 2014 \ No newline at end of file diff --git a/sources/src/main/resources/pr2/threads/beenden/background-0.jpg b/sources/src/main/resources/pr2/threads/beenden/background-0.jpg new file mode 100644 index 0000000..f7e6d6d Binary files /dev/null and b/sources/src/main/resources/pr2/threads/beenden/background-0.jpg differ diff --git a/sources/src/main/resources/pr2/threads/beenden/background-1.jpg b/sources/src/main/resources/pr2/threads/beenden/background-1.jpg new file mode 100644 index 0000000..33199cc Binary files /dev/null and b/sources/src/main/resources/pr2/threads/beenden/background-1.jpg differ diff --git a/sources/src/main/resources/pr2/threads/beenden/background-2.jpg b/sources/src/main/resources/pr2/threads/beenden/background-2.jpg new file mode 100644 index 0000000..227f427 Binary files /dev/null and b/sources/src/main/resources/pr2/threads/beenden/background-2.jpg differ diff --git a/sources/src/main/resources/pr2/threads/beenden/background-3.jpg b/sources/src/main/resources/pr2/threads/beenden/background-3.jpg new file mode 100644 index 0000000..4100ec1 Binary files /dev/null and b/sources/src/main/resources/pr2/threads/beenden/background-3.jpg differ diff --git a/sources/src/main/resources/pr2/threads/beenden/explosion.png b/sources/src/main/resources/pr2/threads/beenden/explosion.png new file mode 100644 index 0000000..2b16da8 Binary files /dev/null and b/sources/src/main/resources/pr2/threads/beenden/explosion.png differ diff --git a/sources/src/main/resources/pr2/threads/beenden/red-button.png b/sources/src/main/resources/pr2/threads/beenden/red-button.png new file mode 100644 index 0000000..e16da1b Binary files /dev/null and b/sources/src/main/resources/pr2/threads/beenden/red-button.png differ diff --git a/sources/src/main/resources/pr2/threads/beenden/spaceship.png b/sources/src/main/resources/pr2/threads/beenden/spaceship.png new file mode 100644 index 0000000..a868ade Binary files /dev/null and b/sources/src/main/resources/pr2/threads/beenden/spaceship.png differ diff --git a/sources/src/main/resources/pr2/threads/beenden/ufo.png b/sources/src/main/resources/pr2/threads/beenden/ufo.png new file mode 100644 index 0000000..5f95856 Binary files /dev/null and b/sources/src/main/resources/pr2/threads/beenden/ufo.png differ diff --git a/sources/src/main/resources/pr2/threads/runnable/background-0.jpg b/sources/src/main/resources/pr2/threads/runnable/background-0.jpg new file mode 100644 index 0000000..f7e6d6d Binary files /dev/null and b/sources/src/main/resources/pr2/threads/runnable/background-0.jpg differ diff --git a/sources/src/main/resources/pr2/threads/runnable/background-1.jpg b/sources/src/main/resources/pr2/threads/runnable/background-1.jpg new file mode 100644 index 0000000..33199cc Binary files /dev/null and b/sources/src/main/resources/pr2/threads/runnable/background-1.jpg differ diff --git a/sources/src/main/resources/pr2/threads/runnable/background-2.jpg b/sources/src/main/resources/pr2/threads/runnable/background-2.jpg new file mode 100644 index 0000000..227f427 Binary files /dev/null and b/sources/src/main/resources/pr2/threads/runnable/background-2.jpg differ diff --git a/sources/src/main/resources/pr2/threads/runnable/background-3.jpg b/sources/src/main/resources/pr2/threads/runnable/background-3.jpg new file mode 100644 index 0000000..4100ec1 Binary files /dev/null and b/sources/src/main/resources/pr2/threads/runnable/background-3.jpg differ diff --git a/sources/src/main/resources/pr2/threads/runnable/ufo.png b/sources/src/main/resources/pr2/threads/runnable/ufo.png new file mode 100644 index 0000000..17eab93 Binary files /dev/null and b/sources/src/main/resources/pr2/threads/runnable/ufo.png differ diff --git a/sources/src/main/resources/pr2/threads/vereinigen/background-0.jpg b/sources/src/main/resources/pr2/threads/vereinigen/background-0.jpg new file mode 100644 index 0000000..f7e6d6d Binary files /dev/null and b/sources/src/main/resources/pr2/threads/vereinigen/background-0.jpg differ diff --git a/sources/src/main/resources/pr2/threads/vereinigen/background-1.jpg b/sources/src/main/resources/pr2/threads/vereinigen/background-1.jpg new file mode 100644 index 0000000..33199cc Binary files /dev/null and b/sources/src/main/resources/pr2/threads/vereinigen/background-1.jpg differ diff --git a/sources/src/main/resources/pr2/threads/vereinigen/background-2.jpg b/sources/src/main/resources/pr2/threads/vereinigen/background-2.jpg new file mode 100644 index 0000000..227f427 Binary files /dev/null and b/sources/src/main/resources/pr2/threads/vereinigen/background-2.jpg differ diff --git a/sources/src/main/resources/pr2/threads/vereinigen/background-3.jpg b/sources/src/main/resources/pr2/threads/vereinigen/background-3.jpg new file mode 100644 index 0000000..4100ec1 Binary files /dev/null and b/sources/src/main/resources/pr2/threads/vereinigen/background-3.jpg differ diff --git a/sources/src/main/resources/pr2/threads/vereinigen/explosion.png b/sources/src/main/resources/pr2/threads/vereinigen/explosion.png new file mode 100644 index 0000000..2b16da8 Binary files /dev/null and b/sources/src/main/resources/pr2/threads/vereinigen/explosion.png differ diff --git a/sources/src/main/resources/pr2/threads/vereinigen/red-button.png b/sources/src/main/resources/pr2/threads/vereinigen/red-button.png new file mode 100644 index 0000000..e16da1b Binary files /dev/null and b/sources/src/main/resources/pr2/threads/vereinigen/red-button.png differ diff --git a/sources/src/main/resources/pr2/threads/vereinigen/spaceship.png b/sources/src/main/resources/pr2/threads/vereinigen/spaceship.png new file mode 100644 index 0000000..a868ade Binary files /dev/null and b/sources/src/main/resources/pr2/threads/vereinigen/spaceship.png differ diff --git a/sources/src/main/resources/pr2/threads/vereinigen/ufo.png b/sources/src/main/resources/pr2/threads/vereinigen/ufo.png new file mode 100644 index 0000000..5f95856 Binary files /dev/null and b/sources/src/main/resources/pr2/threads/vereinigen/ufo.png differ diff --git a/sources/src/main/resources/pr2/threads/wait_notify/background-0.jpg b/sources/src/main/resources/pr2/threads/wait_notify/background-0.jpg new file mode 100644 index 0000000..f7e6d6d Binary files /dev/null and b/sources/src/main/resources/pr2/threads/wait_notify/background-0.jpg differ diff --git a/sources/src/main/resources/pr2/threads/wait_notify/background-1.jpg b/sources/src/main/resources/pr2/threads/wait_notify/background-1.jpg new file mode 100644 index 0000000..33199cc Binary files /dev/null and b/sources/src/main/resources/pr2/threads/wait_notify/background-1.jpg differ diff --git a/sources/src/main/resources/pr2/threads/wait_notify/background-2.jpg b/sources/src/main/resources/pr2/threads/wait_notify/background-2.jpg new file mode 100644 index 0000000..227f427 Binary files /dev/null and b/sources/src/main/resources/pr2/threads/wait_notify/background-2.jpg differ diff --git a/sources/src/main/resources/pr2/threads/wait_notify/background-3.jpg b/sources/src/main/resources/pr2/threads/wait_notify/background-3.jpg new file mode 100644 index 0000000..4100ec1 Binary files /dev/null and b/sources/src/main/resources/pr2/threads/wait_notify/background-3.jpg differ diff --git a/sources/src/main/resources/pr2/threads/wait_notify/explosion.png b/sources/src/main/resources/pr2/threads/wait_notify/explosion.png new file mode 100644 index 0000000..2b16da8 Binary files /dev/null and b/sources/src/main/resources/pr2/threads/wait_notify/explosion.png differ diff --git a/sources/src/main/resources/pr2/threads/wait_notify/red-button.png b/sources/src/main/resources/pr2/threads/wait_notify/red-button.png new file mode 100644 index 0000000..e16da1b Binary files /dev/null and b/sources/src/main/resources/pr2/threads/wait_notify/red-button.png differ diff --git a/sources/src/main/resources/pr2/threads/wait_notify/spaceship.png b/sources/src/main/resources/pr2/threads/wait_notify/spaceship.png new file mode 100644 index 0000000..a868ade Binary files /dev/null and b/sources/src/main/resources/pr2/threads/wait_notify/spaceship.png differ diff --git a/sources/src/main/resources/pr2/threads/wait_notify/ufo.png b/sources/src/main/resources/pr2/threads/wait_notify/ufo.png new file mode 100644 index 0000000..5f95856 Binary files /dev/null and b/sources/src/main/resources/pr2/threads/wait_notify/ufo.png differ