Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
SpaceWarrior - Programmierungsspiel in Silverlight 4
cjub
myCSharp.de - Member



Dabei seit:
Beiträge: 11

Themenstarter:

SpaceWarrior - Programmierungsspiel in Silverlight 4

beantworten | zitieren | melden

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.jpghttp://spacewarrior.net/screenshot2.jpg
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von cjub am .
Attachments
private Nachricht | Beiträge des Benutzers
Aratar
myCSharp.de - Member



Dabei seit:
Beiträge: 126

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2340

beantworten | zitieren | melden

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();
	}
}


Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von inflames2k am .
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
cjub
myCSharp.de - Member



Dabei seit:
Beiträge: 11

Themenstarter:

beantworten | zitieren | melden

@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 ;)
private Nachricht | Beiträge des Benutzers
Aratar
myCSharp.de - Member



Dabei seit:
Beiträge: 126

beantworten | zitieren | melden

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

Gruss Aratar
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2340

beantworten | zitieren | melden

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

Und seh ich das richtig, dass die NullReferenceException mit Absicht nicht gefangen wird?^^
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von inflames2k am .
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
cjub
myCSharp.de - Member



Dabei seit:
Beiträge: 11

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2340

beantworten | zitieren | melden

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 | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
cjub
myCSharp.de - Member



Dabei seit:
Beiträge: 11

Themenstarter:

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
Floste
myCSharp.de - Member

Avatar #avatar-2376.jpg


Dabei seit:
Beiträge: 1158
Herkunft: Norddeutschland

beantworten | zitieren | melden

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;
    }
5. 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.
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Floste am .
Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!
private Nachricht | Beiträge des Benutzers
cjub
myCSharp.de - Member



Dabei seit:
Beiträge: 11

Themenstarter:

beantworten | zitieren | melden

5. kann man machen
6. 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
private Nachricht | Beiträge des Benutzers
Aratar
myCSharp.de - Member



Dabei seit:
Beiträge: 126

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
xxxprod
myCSharp.de - Experte

Avatar #avatar-2329.gif


Dabei seit:
Beiträge: 1420
Herkunft: Österreich\Wien

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von xxxprod am .
private Nachricht | Beiträge des Benutzers
cjub
myCSharp.de - Member



Dabei seit:
Beiträge: 11

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
xxxprod
myCSharp.de - Experte

Avatar #avatar-2329.gif


Dabei seit:
Beiträge: 1420
Herkunft: Österreich\Wien

beantworten | zitieren | melden

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. :-)
private Nachricht | Beiträge des Benutzers
Torley
myCSharp.de - Member



Dabei seit:
Beiträge: 181

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
cjub
myCSharp.de - Member



Dabei seit:
Beiträge: 11

Themenstarter:

beantworten | zitieren | melden

@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.
private Nachricht | Beiträge des Benutzers
Torley
myCSharp.de - Member



Dabei seit:
Beiträge: 181

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Torley
myCSharp.de - Member



Dabei seit:
Beiträge: 181

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
cjub
myCSharp.de - Member



Dabei seit:
Beiträge: 11

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
cjub
myCSharp.de - Member



Dabei seit:
Beiträge: 11

Themenstarter:

beantworten | zitieren | melden

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ß ;)
private Nachricht | Beiträge des Benutzers