Laden...

SpaceWarrior - Programmierungsspiel in Silverlight 4

Erstellt von cjub vor 13 Jahren Letzter Beitrag vor 13 Jahren 8.580 Views
C
cjub Themenstarter:in
10 Beiträge seit 2010
vor 13 Jahren
SpaceWarrior - Programmierungsspiel in Silverlight 4

Ich habe mein erstes Silverlight Spiel erstellt und moechte es euch vorstellen. Es heißt SpaceWarrior und eigentlich ist kein regelmäßiges Spiel. Die Aufgabe des Spielers ist ein Algorithmus für ein Raumschiff zu implementieren und mit anderen Krieger zu kämpfen. Programmieren kann man in C# oder VB.Net aber dazu braucht man nur einen Webbrowser mit Silverlight. Alles ist so organisiert, dass man nur gegen 30 Sekunden braucht um seinen ersten Krieger zu schaffen.
Registrierung ist frei und dauert auch 30 Sekunden
Ich freue mich auf ihre Kommentaren und Verbesserungsvorschläge.

www.spacewarrior.net

screenshots:
http://spacewarrior.net/screenshot1.jpg
http://spacewarrior.net/screenshot2.jpg

A
118 Beiträge seit 2009
vor 13 Jahren

Hallo,

Da ich solche Art "Spiele" liebe, hab ich mich gleich angemeldet und schon den ersten Fehler gehabt. Ich kann den Code zwar kompilieren und es kommt auch die Meldung "build successfull", aber der "Play"- Button ist immer noch disabled.

Gruss Aratar

2.298 Beiträge seit 2010
vor 13 Jahren

Ich hab dann auch einen Bug gefunden, nach einer Weile war mein Schiff für ein paar Momente verschwunden. - Nachdem es wieder da war, hat es nicht mehr das ausgeführt, was ich angegeben habe. - Und auch nicht mehr geschossen.

// Edit:

InFlams2kSSpaceShip throws new NullReferenceException. 😃

// Edit:

Es werden auch nicht alle Methoden ausgeführt die ich angebe. - Zum Teil fliegt das Schiff nur vorwärts und schießt, das obwohl meine Klasse so ziemlich was anderes sagt.

Siehe:


using System;
using SpaceWarrior;

public class InFlames2kSSpaceShip : AbstractSpaceship
{
	public override void action()
	{	   
	     TurnLeftAndShoot();
	     RotateAndShootMissile();
	     TurnRightAndShoot();
	     accelerate();
	     TurnRightAndShoot();
	     TurnLeftAndShootMissile();
	     TurnLeftAndShoot();
	     RotateAndShootMissile();
	}
	
	private void TurnLeftAndShoot()
	{
	    turnLeft();
	    fire();	    
	}
	
	private void TurnRightAndShoot()
	{
	    turnRight();
	    fire();
	}
	
	private void RotateAndShoot()
	{
	    turnLeft();
	    turnLeft();
	    fire();
	}
	
	private void TurnLeftAndShootMissile()
	{
	    turnLeft();
	    launchHomingMissile();
	}
	
	private void TurnRightAndShootMissile()
	{
	    turnRight();
	    launchHomingMissile();
	}
	
	private void RotateAndShootMissile()
	{
	    turnLeft();
	    turnLeft();
	    launchHomingMissile();
	}
}



Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

C
cjub Themenstarter:in
10 Beiträge seit 2010
vor 13 Jahren

@Aratar
Welche Betriebsystem und Webbrowser benutzt Du? Angeblich gibt es Probleme mit Linux, aber mit Windows hat mir noch niemand so was gemelted

@inflames
zum Verschwinden des Schiffs, muss ich nachgucken...
zum zweiten Punkt, das Verhalten ist richtig. In einem Aufruf von action() kann man etweder links oder rechts abbiegen, und nur einmal schiessen. Ansonsten koennte man so was machen

for (int i = 0; i< 10000; i++) {
  fire();
}

und dann wuerde die Browser haengen, weil gleichzeitig zu viele Objekten hinzugefuegt wuerden.

ps. Sorry fuer mein Deutch 😉

A
118 Beiträge seit 2009
vor 13 Jahren

Mein OS ist Win 7 64-Bit. Der Fehler ist bei Opera und Chrome aufgetreten.

Gruss Aratar

2.298 Beiträge seit 2010
vor 13 Jahren

Ok, da weis ich bescheid warum das nich so wollte. ^^

Und seh ich das richtig, dass die NullReferenceException mit Absicht nicht gefangen wird?^^

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

C
cjub Themenstarter:in
10 Beiträge seit 2010
vor 13 Jahren

Die Exceptions werden absichtlich nicht gefangen. Wiederum, aus Sicherheitsgründen. Aber das betrifft nur Exceptions ausgelöst durch Code des Warriors. Vielleicht Dein NullPointer ist verursacht von einen Bug. Ist er reproduzierbar?

Ich habe gestern eine Facebook Seite erstellt. Dort kann man auch diskutieren (auf Deutsch oder Englisch) und es würde für mehrere Leute zugänglich. Aber wenn so Euch bequemer ist, dann können wir hier bleiben.

http://www.facebook.com/pages/SpaceWarrior/139801119405071

2.298 Beiträge seit 2010
vor 13 Jahren

Reproduzieren kann ich ihn nicht wirklich, der tritt halt zufällig mal auf wenn ich spiele. - Unabhängig was ich für Code hinter meinem Schiff stehen habe.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

C
cjub Themenstarter:in
10 Beiträge seit 2010
vor 13 Jahren

Ich habe gerade eine Debug-Konsole im Training Mode hinzugefügt. Wenn ihr etwas ausschreiben möchtet, benutzt die Methode
debug(string message)
aber nicht in jedem Aufruf von action(), da die ganze Application langsamer laufen wird.

Zum Thema NullReference muss ich morgen nachgucken. Ich vermute dass entweder MyData oder OpponentData manchmal null ist.

inflames2k, wenn es bei Dir oft passiert, kannst Du Dein Code mit try catch umfassen, und wenn es auftritt, die Werte den Properties in der Konsole ausschreiben?

1.130 Beiträge seit 2007
vor 13 Jahren

1.) Ich habe nur an einem ort null-reference-exceptions bekommen: beim auswählen des gegbners, wenn ich nichts gewählt habe.
2.) wenn man was geschrieben hat und gleich auf play geht, ohne zu compalieren, sind die änderunegn nach dem spiel weg.
3.) ein paar mehr Vektorfunktionen, die man auf punkte anwenden kann wären für mich hilfreich: add,mul, sub, dot, length, dist, angleOf,...
4.) es fehlt eine angabe, das der winkel in bogengrade gemessen wird bei dir und du solltest vielleicht den winkel "normalisieren", da er bei dir bis ins unendlich steigt, wennn man immer in die gleiche richtung kurven dreht. einfach gegebenenfalls 2*PI abziehen, bzw addieren:


public double NormalizeAngle(double angle)
    {
        while (angle > Math.PI) angle -= 2 * Math.PI;
        while (angle < -Math.PI) angle += 2 * Math.PI;
        return angle;
    }
  1. das schiff ist manchmal verschwunden, das ist verwirrend. bei getarnten schiffen vielleicht mit transparenz zeichnen statt ganz weg.

6. ich bräuchte für einige berechnungen dringend konstaten über die geschwindigkeiten von projektilen und die spielfeldabmessungen und maximalgeschwindigkeiten von schiffen!!!!
7. bei unerwarteten fehlern bitte (zumindest im trainingsmode) etwas mehr informationen ausgeben:
ex.GetType().Name
ex.Message
ex.StackTrace
außerdem genügend zeit zum durchlesen lassen.

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

C
cjub Themenstarter:in
10 Beiträge seit 2010
vor 13 Jahren
  1. kann man machen
  2. Konstanten sind da. Zum Beispiel Constants.BATTLEFIELD_WIDTH oder WeaponConstants.BULLET_OUTPUT_SPEED. Die ganze Liste kann man im Manual finden. Heute früh konnte man es nicht herunterladen, ich hab es aber schon behoben.

die Fehler korrigiere ich sobald ich Zeit habe

A
118 Beiträge seit 2009
vor 13 Jahren

Wegen dem Winkel noch was. Was soll das überhaupt für ein Winkelmass sein, dass du jetzt verwendest? 180° sind etwa 3.01 "deiner" Einheit.

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Aratar,

dann hast du wohl falsch gemessen. 😃 180 muss genau gleich 3,1415... sein, denn das verwendete Winkelmaß ist natürlich Bogenmaß, also 360° sind 2*PI.

herbivore

1.378 Beiträge seit 2006
vor 13 Jahren

Also als erstes muss ich dir mal zu dem tollen Spiel gratulieren. Macht echt Spaß! 😃

Und was mir aufgefallen ist: Man kann sich vor Ende einer Runde "retten" indem man einfach den Kampf abbricht. Hier sollten die Punkte meiner Meinung nach dem Gegner zugeschrieben werden.

Lg XXX

//Edit: Wenn eines der beiden Raumschiffe invisible ist, fliegen beide blind durchs All, was glaub ich nicht ganz korrekt ist.

//Edit²: Mir geht beim MyData Objekt die aktuelle Health-Eigenschaft ab ohne der weiß kann man nicht feststellen ob man eher ein Health Boni braucht oder doch weiter attackieren soll.

//Edit³: Bei einem Levelwechsel (im Tainingsmode) wird die Klasse nicht neu erzeugt sondern weiterverwendet. Dadurch werden aber Membervariablen nicht zurückgesetzt.

C
cjub Themenstarter:in
10 Beiträge seit 2010
vor 13 Jahren

danke für deine Bemerkungen. Ich denke dass ich den Quit-Button im Regular Mode einfach entferne. Zwar wird man sich sowieso retten können durch Aktualisieren der Seite, aber damit kann ich nichts tun.
Die Fehler korrigiere ich bald.

1.378 Beiträge seit 2006
vor 13 Jahren

Ich habs nicht probiert aber es scheint so als wären Hacks durch Reflection relativ leicht möglich? Wenn man den Gegner "o.o" anschaut kommt einem der Verdacht schon mal auf. 😃

T
109 Beiträge seit 2008
vor 13 Jahren

Hi,

erstmal:

Sehr geiles Projekt.
Ich habe viel AntMe! gespielt, die sind aber seit einiger Zeit down, so das ich keine neuen Anreize aus dem forum bekomme, bzw weiter an der OpenAnt! arbeiten kann.
Jetzt sowas neues zu haben mit neuen Herausforderungen und vor allem Rangliste, finde ich genial. Respekt.

Allerdings habe ich gleich mal ne Frage:

Ich bin jetzt noch am Testen und Spielen und hab noch kein normales Spiel gemacht, allerdings scheint es möglich zu sein, mich als Gegner auszuwählen (Sorry hab mir nen Spielacc dafür gemacht).
Vll wäre eine Option, für Kampf freigeben, möglich, sodass man erst mit fertigem Schiff angefochten werden kann.

Gruß

Torley

C
cjub Themenstarter:in
10 Beiträge seit 2010
vor 13 Jahren

@Torley
Ich will so was machen, dass man entscheiden kann, ob man nur im Training Mode oder auch im Regular spielen will. Morgen oder Übermorgen soll entsprechende Einstellung da sein.

Zum Reflection, offensichtlich habt ihr recht.

T
109 Beiträge seit 2008
vor 13 Jahren

Hi,

habe da noch so eine Idee:

Statt einfach den Gegner auszusuchen, könnte man ein herausforderungssystem implementieren.
soll heißen:

a: ich würde gerne gegen dich spielen
b: ok
a: starten game
b: kann sich später video (möglicherweise auch nur daten woraus eine art video erstellt wird) ansehen

Vorteile:
so sehen beide wie sie sich geschlagen haben und können gegebenenfalls ihre Taktik korrigieren.

Nachteile:
Man kann nicht direkt gegen andere Spieler testen und muss warten bis sie angenommen haben.

Gruß

Torley

T
109 Beiträge seit 2008
vor 13 Jahren

Ich finde das Projekt braucht unbedingt noch ein eigenes Forum. vll sogar in der Anwendung mit drin.

Ich denke mal später kommt sicherlcih jemand auf die idee tutorials zu schreiben oder mal ein gemeinschafts schiff zu gestalten und da ist ein eigenes Forum ein müss für.

Gruß

Torley

C
cjub Themenstarter:in
10 Beiträge seit 2010
vor 13 Jahren

ich freue mich über so eine Diskussion über das Projekt 😉

Zum Forum, ich habe eine Facebook Seite angelegt darauf man auch diskutieren kann, bisher hat sich aber nur eine Person registriert. Um sich über normale Forum zu kümmern habe ich momentan keine Zeit.

C
cjub Themenstarter:in
10 Beiträge seit 2010
vor 13 Jahren

hallo Leute,
ich habe ein paar neue Sachen hinzugefügt, u.a. einen Checkbox 'Play only in Training Mode' in Account Settings, und einen neuen Bonus, Teleport. Kriegt man ihn, kann man sich einmal in beliebigen Ort teleportieren, mittels Methode teleport(int x, int y, double Angle).
Viel Spaß 😉