Archive for the ‘KolonialKampf’ Category

Beim Aufräumen meiner Platten ist mir was in die Finger gefallen.

Und zwar die Bilder vom 27.08.2004.

Vielleicht erkennt sich ja der eine oder andere dort selbst wieder.

Viel Spaß damit. :)

Hier die noch fehlenden Geschwindigkeitstests der neuen Kampfroutine:

    Testrun: Dice
    
    Duration: 13,834 sec
    Fights total:      22.731.286
    Fights per Second:  1.643.122
    Fightrounds: 39
    
    Testrun: Math
    
    Duration:  2,297 sec
    Fights total:      3.915.308
    Fights per Second: 1.704.022
    Fightrounds: 7

Auf den ersten Blick ist das neue Kampfsystem nur 60.900 Kämpfe schneller, aber wir haben auch nur 7 anstatt 39 Runden benötigt.

Somit haben wir zum einen weniger Datenerzeugt, welche direkt weniger Speicher benötigen, als auch intern weniger Speicheroperationen benötigt.

Ergo… schneller :D

Bleibt abzuwarten, ob die Ergebnisse der Kämpfe brauchbarer sind.

Da das aktuelle Kampfsystem durch den Einsatz von Rollenspielähnlichen Kampfregeln sehr langsam war, habe ich mir mal die Mühe gemacht und ein reines Mathematisches Kampfsystem erstellt.

Hierbei gilt folgende Regel:

    Lebensverlust = Angriffskraft – Rüstung des Verteidigers

Kampfsystem TestGUI v0.7.2.1 (286 KB)

Hier die Änderungen in der aktuellen Version:

========================================================================
Release 0.7.2.1 – 21.09.2008
========================================================================

* Einbau des Mathematischen Kampfsystems

ACHTUNG!

Da das Blog vor einer Weile umgezogen ist, funktioniert das Autoupdate nicht mehr.

Da das aktuelle Kampfsystem durch den Einsatz von Rollenspielähnlichen Kampfregeln sehr langsam war, habe ich mir mal die Mühe gemacht und ein reines Mathematisches Kampfsystem erstellt.

Hierbei gilt folgende Regel:

    Lebensverlust = Angriffskraft – Rüstung des Verteidigers

Es kämpfen jeweils 100 gegen 100 Einheiten. Der Kampf wird bis zum Abbruch durch einen zu hohen Verteidigungsmalus aufgrund Ermüdung, oder dem Auslöschen der Gegnerischen Einheiten berechnet.

Anmerkung:

Die Angreifende Einheit befindet sich auf der X-Achse (Spaltenköpfe), die Verteidigende Einheit auf der Y-Achse (Zeilenköpfe).

Einheiten wie die Armbrustschützen sind reine Fernkämpfer.

Es kann im Moment durchaus passieren, dass die Angriffsstärke nicht ausreicht, um durch die Rüstung des Gegners zu kommen. Dadurch kommen Null-Runden zustande.

Armbrustschütze   Ballista   Bogenschütze   Hellebardier   Kanone   Katapult   Musketier   Schwertkämpfer   Seemann   FightTyp
Armbrustschütze 0   14761   7   13594   0   10   0   269   965   Dice
Armbrustschütze 0   22650   0   18900   0   0   0   800   1000   Math
Ballista 0   0   0   0   0   0   0   0   0   Dice
Ballista 0   0   0   0   0   0   0   0   0   Math
Bogenschütze 0   10191   3   10014   0   9   0   197   727   Dice
Bogenschütze 0   22708   0   19800   0   0   0   900   1100   Math
Hellebardier 0   0   0   0   0   0   0   0   0   Dice
Hellebardier 0   0   0   0   0   0   0   0   0   Math
Kanone 107   14001   356   13038   150   261   90   454   1956   Dice
Kanone 0   22600   0   18470   0   0   0   700   900   Math
Katapult 70   10946   133   9928   80   132   49   275   1502   Dice
Katapult 0   22500   0   17830   0   0   0   600   800   Math
Musketier 128   16925   163   15138   87   136   25   443   1430   Dice
Musketier 0   23004   0   21800   0   0   0   1000   1200   Math
Schwertkämpfer 0   0   0   10483   0   0   0   221   1100   Dice
Schwertkämpfer 0   0   0   21800   0   0   0   1000   1200   Math
Seemann 0   0   0   2398   0   0   0   72   152   Dice
Seemann 0   0   0   17350   0   0   0   500   700   Math

Heute habe ich ein paar Stunden damit verbracht, einen alten Source wieder zum laufen zu bringen.

Der Source stellt eine Implementierung des HttpListener als kleinen Webserver dar.

Bei den Unittests der einzelnen Module lief alles sauber durch. Aber dann beim Aufruf der Testseiten kamen seltsame Reaktionen vom Servermodul.

Das ging von sporadischem Aussteigen, sofortigem beenden und nur teilweisem senden der angeforderten Dateien.

Die Exceptions selbst waren erst einmal eindeutig:

    Objekt: System.Net.HttpListenerResponse
    
    Meldung:
    Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
    Auf das verworfene Objekt kann nicht zugegriffen werden.
    

Ein Tip von TheUndeadable brachte mich auf die Suche nach einem verfrühten, sprich manuellem, Dispose des Objektes.

Nada… Es war nichts zu finden. Auch ein Hochdrehen des Loglevels brachte nichts.

Ok, abgesehen von einem blöden Fehler im Caching, welcher mit diesem Problem aber nichts zu tun hatte, aber auch gleich gefixt wurde.

Beim stöbern in der MSDN, bin ich dann über einen Querlink auf diese Seite gestossen:

Configuring HTTP and HTTPS

Und hier haute die Erinnerung mit einem mächtigen DU DEPP zu.

Klar… beim Einsatz des HttpListener muß man Windows das erstmal mitteilen, dass der Port und die IP-Adresse gebunden werden soll und das ein Listener drauf läuft.

Also flink ein

    netsh http add iplisten ipaddress=0.0.0.0:80

gemacht und siehe da… es funktioniert wieder wie es soll.

Aber wieso Vista dann trotzdem einen Teil der Anfragen weiter geleitet hat… hier bin ich echt ratlos. Theoretisch hätte gar nichts passieren dürfen, oder wenigstens eine Exception geworfen werden müßte nach dem Motto “Access denied” o.ä.

Naja… Windows live ;)

Langsam aber sicher habe ich für fast jede Routine einen Unittest erstellt.

Die Konzeptionierung der Game Engine geht auch gut vorran und ich bin guter Dinge in wenigen Wochen eine Testversion verfügbar zu haben, welche ich dann ausgewählten Personen zuschicken werde.

Die ersten eingebauten Funktionieren werden sich aber dann trotz allem zuerst auf internas beschränken. Es wird zwar ein Registrationsformular geben, man wird sich anmelden können, aber Spieltechnisch sind dann noch keinerlei Routinen vorhanden.

Da ich auf keinen bestehenden Code aufbauen will, muß ich hier viele Dinge selbst erstellen.

Der Dynamic Data Cache funktioniert auch endlich unter Vista und ich kann mich jetzt der Game Engine widmen.

Das Thema Code Security wird von mir getrennt behandelt. Hier stehen noch einige Konzeptionelle Dinge vorher an, welche ich erledigt wissen will, bevor ich was wichtiges später übersehe.

Soderle… ich habe alle Sourcen überarbeitet, was eine ziemliche Arbeit war.

Vista ist viel restriktiver im Vergleich zu XP. Zwar könnte ich es mir einfach machen und im Administrativen Modus arbeiten, aber dann würden mir viele Probleme mit den Rechten erst zu spät auffallen.

Der Webserver läuft, die Template Engine funktioniert, die Sprachroutinen werfen auch keine Fehler mehr aus, das Formularhandling für POST ist rudimentär auch eingebaut.

In den nächsten Wochen werde ich die Game Engine erstellen. Sprich, das eigentliche Spiel.

Alles andere war die Vorarbeit und hatte noch keinerlei Bezug zum eigentlichen Spiel.

Mein erstes Ziel wird die Benutzerverwaltung incl. Login- und Registrationsformular sein.

Parallel dazu werde ich Angriffsszenarien definieren und vorbereiten. Der Spielcode soll später produktiv verwendet werden und nicht bei jedem kleinen Husten von Scriptkiddis umfallen.

Und wieder freue ich mich, daß ich keinen Abgabetermin dafür habe :)

FxCop

FxCop

Wenn nur alles so einfach wäre… FxCop müllt mich mit Unmengen an Warnmeldungen zu. Klar könnte ich die ignorieren, aber ich habe mir fest vorgenommen mich an die Vorgaben von Microsoft zu halten.

211 Problemstellen habe ich noch vor mir. Und das nur im Source vom Webserver und der Template Engine.

Die meißten Stellen hängen aber mit der von mir Anfangs nicht gewählten Spracheinstellung für die Stringoperationen zusammen.

Von den Basisbibliotheken reden wir mal lieber nicht. Aber ich mache mir lieber die Arbeit und erzeuge sauberen Code, welcher später dann wesentlich weniger Wartung benötigt.

Und bevor ich es vergesse… ein Klick auf das kleine Bild bringt die große Version davon zutage.

NUnit

NUnit

Die Unittests hingegen machen mir im Moment keine wirkliche Freude.

Zwei der wichtigsten funktionieren unter Vista einfach nicht mehr und irgendwie kann ich meinen inneren Schweinehund nicht überwinden und mich diesem Problem annehmen.

Dummerweise gehen dadurch auch einige meiner Hilfstools, wie z.B. der SourceCodeCounter, auch nicht mehr. :(

Aber nun ja… mal schaun ob ich mich in meinen freien Tagen diese Woche dazu aufraffen kann, oder ob ich lieber faulenze :)

Und so wie ich mich kenne, werde ich dann nicht nur diese zwei Stellen bereinigen, sondern auch gleich noch ein paar neue Unittests oben drauf legen.

Hatte ich schon erwähnt das ich sauberen Source vorziehe weil er später weniger Arbeit macht? ;)

C&C 3 - Kanes Rache

C&C 3 – Kanes Rache

Und weil es so Spaß machte, habe ich mir die Tage mal C&C 3 – Kanes Rache gekauft. Schade nur, daß es so schnell durchgespielt ist.

Den Welteroberungsmodus mag ich nicht und gegen Menschliche Gegner verliere ich in der Regel. Tjo… Menschen sind nicht so berechenbar wie eine programmierte Angriffsroutine.

Trotzdem freue ich mich auf den Moment wenn Abuzeus seine Packung hat und wir endlich mal wieder loslegen können :D

Age of Conan

Mal so nebenbei… wer plant bei “Age of Conan” im Mai einsteigen zu wollen, der soll mir doch kurz mal Bescheid sagen. Meine AoC Packung liegt hier schon bereit :D

Nein, diesmal pfeif ich auf Raids, Pflichttermine, Farmevents… ich spiele es so lange und so oft wie es mir Spaß macht. Wenn es frustet fliegt es von der Platte. Basta :D

WoW

WoW hat mir gelangt. Nochmal tu ich meiner Familie und mir sowas nicht wieder an.

Meine Collector Editions, zwei normale Spielpackungen und Unmengen an Zeitungen liegen hier noch rum. Wer mir ein gutes Angebot macht, bekommt das Zeugs. Das liegt mir im Wege so langsam.

Da mir im Moment massivst die Zeit fehlt, die restlichen Spieler keine Lust haben neu anzufangen und ich mich auf Berufliche Dinge konzentrieren muß, wird KolonialKampf classic eingestellt.

Ich programmiere lieber an KoKa 2 weiter, als noch weiter den alten versauten Source zu fixen.

Sorry all, aber irgendwo ist der Aufwand für die wenigen welche dableiben wollen doch zu hoch.

Da der Wunsch nach einer größeren Einheitenanzahl aufgekommen ist, habe ich das mal eingebaut.

Kampfsystem TestGUI v0.7.1.1 (284 KB)

Hier die Änderungen in der aktuellen Version:

========================================================================
Release 0.7.1.1 – 02.03.2008
========================================================================

* Erweiterung der Auswahlfelder von 1.000 auf 10.000 Einheiten