ApoWomenInvasion

Status
Nicht offen für weitere Antworten.

Apo

Bekanntes Mitglied
Hi,

ich möchte euch kurz mein kleines neues Projekt präsentieren. Es ist ein Test , ob die online Highscoreliste funktioniert oder ob sie noch Probleme macht. Würde mich freuen, wenn ihr es testen könntet und Feedback geben würdet.

Worum geht es?
Ihr seid der letzte Mann auf der Welt und die Frauen wollen euch an die Wäsche. Ihr müsst euch irgendwie verteidigen. Zum Glück werden in der Gegend immer mal glitzernde Bomben abgeworfen. Eurer Ziel ist es, die Frauen dort hin zu führen. Weil Frauen bleiben bei glitzernden Sachen ja stehen. :D =)
Gesteuert wird mit den Cursortasten. Wenn ihr euch nicht mehr bewegen könnt, weil die Damen euch eingekreist haben, dann drückt die Leertaste und ihr werdet schreinen, wodurch die Frauen kurzzeitig weglaufen werden. =)

Falls sich jemand durch die Thematik angegriffen fühlt ... es ist, wie ich glaube, zu merken alles nur Spass und wenn es sein muss ... dürft ihr den Maincharacter "verweiblichen" und vor Männern weglaufen. Aber ich habe gehört, dass das Spiel dann schwerer wird. :D

Wenn alles funktioniert, kann ich wieder an ApoSliding arbeiten, wo ich auch Onlinesachen einbauen möchte. =) Ist nur als Testspiel geplant gewesen, aber größer und besser geworden als erwartet. Deshalb musste ich es vorstellen. =)

Download und Applet: Klick mich

Screenshot:
apo_womeninvasion.jpg
 

Schandro

Top Contributor
lustiges Spiel.

Die Highscore ist aber verdammt einfach zu hacken, wenn man einen decompiler hat xD
(hab das natürlich nur gemacht, um dir die Schwachstelle im System aufzuzeigen...)
 
Zuletzt bearbeitet:

Apo

Bekanntes Mitglied
Hehe du hast recht, wenn man möchte kann man es leicht hacken. Da muss ich mir überlegen wie ich es verbessern kann ... Hat da jemand eine Idee? Das Problem ist die jar-Datei und damit der leicht zu entschlüssende Code. Ok ich könnte ihn durch einen Obfuscator "verschlüsseln". Aber es würde die Sache nur ganz leicht erschweren.

Danke fürs Testen auf jeden Fall.

Verbesserungspunkte wären noch das die Frauen/Männer große Gruppen bilden anstatt von "Linien". =)
 
Zuletzt bearbeitet:

Apo

Bekanntes Mitglied
So ich habe noch auf der Website nun die Highscoreliste hinzugefügt.
Außerdem habe ich das Spiel einen Tick einfacher gemacht. In Level 3, 5, 7 und 9 kommt nun eine Bombe extra hinzu und es kommen am Anfang einen Tick mehr Frauen, sodass die Action gleich beginnt. =)
 

Marco13

Top Contributor
Hab's nochmal getestet - ca. 10000 Punkte, aber die option zum Hochladen kam nicht... oder ich hab's übersehen :rolleyes:
 

Apo

Bekanntes Mitglied
Ist jetzt schon ein bissl ärgerlich, aber du musst es übersehen haben. Bei mir erscheint es auf jeden Fall =)
Danke fürs Testen auf jeden Fall =)
 

icarus2

Top Contributor
Wie ich schonmal gesagt habe, ein cooles Spiel. Die Pfeile sind eine gute Hilfe, um die nächste Bombe zu finden. Auch das Blut am Boden sieht nett aus ;-)

Upload hat auch einwandfrei funktioniert.
 

Quaxli

Top Contributor
In die Highscore-Liste hab' ich's nicht geschafft. Da steht zu oft "Apo" drin :D
Aber auf jeden Fall kam der Dialog zum Upload.

Sonst ein schönes Spiel. :D Wie gewohnt liebevoll programmiert. Die Pfeile sind eine gute Verbesserung, da kann ich zustimmen. Und daß sie langsam verblassen ist auch ein schöner Effekt.
 

Apo

Bekanntes Mitglied
Ich danke euch fürs Testen! *thumbsup*

Ich habe jetzt noch einige kleine Bugs entfernt, die bei der Story auftreten konnten und ein Namensfeld bei den Optionen hinzugefügt.
Als letztes könnte noch hinzugefügt werden, dass die Damen nicht mehr Linienförmig laufen. Aber irgendwie habe ich keine Idee bis jetzt, wie ich das anstelle, ohne alles ändern zu müssen.

Wenn mir keine Idee zur Lösung kommt, wird das die Endversion. =)
 
Zuletzt bearbeitet:

Quaxli

Top Contributor
Och, ich finde dieses linienförmige Laufen eigentlich ganz nett, wenn so eine lange Schlange Mädels hinter dem Spieler her rennt.
 

Marco13

Top Contributor
Das hat aber zur Folge, dass immer mal wieder welche "am Haus hängenbleiben", die einem eigentlich folgen sollten. Abhilfe ist da, im Kreis zu laufen und sie zusammenzutreiben wie eine Herde Schafe, bis eine Glitzerbombe an der passenden Stelle auftaucht, um eine "Annhilation" zu bekommen :hihi: Cool wäre auch, wenn die Highscore-Liste auch die anderen Rekorde erfassen würde, und nicht nur die Punkte (62 killed in one blast und so :D)
 

Apo

Bekanntes Mitglied
Macht sie doch halbwegs :D
Schaut mal hier Highscore
da wird angezeigt wieiviel Kills in einem Spiel gemacht wurde. Wie lange gezockt wurde und welches Level erreicht wurde. Die maximal Anzahl pro Bombe an Kills wird aber noch nicht mit gespeichert.
Das könnte noch eingefügt werden.
 

Apo

Bekanntes Mitglied
Habe jetzt noch einmal kurz es versucht zu erschweren zu cheaten. Ich habe in der php-Datei ein paar Überprüfungen hinzugefügt. Schwer ist es trotzdem nicht würde ich sagen, wenn man wirklich will, man braucht vielleicht unter Umständen nur länger. :D
Congratz @ leibiMatze. Vielleicht sollte ich ein paar Highscores von mir löschen, damit es besser aussieht für die anderen. Aber sie sind wirklich alle fair erspielt worden. Ich laufe einfach immer nur und kreise die Frauen ein. Mehr mache ich gar nicht. :D
 

leibimatZe

Mitglied
in der nächsten frühstückspause hab ich dich! ;D
bin scho platz 8^^ einfach fühlen wie am samstag im club um die "bar kreisen" und bei jedem anderen kerl schaun dass n paar hängen bleiben xD
udn schon funktioniert das spiel^^

die idee echt sau klasse gewesen xD
 

moormaster

Top Contributor
Unter Ubuntu 9.04 machen sowohl das Applet als auch der Download Probleme.

Downloadversion:
- zeigt nur den "Apo-Games"-Banner und wirft eine Exception auf der Console

Code:
Exception in thread "main" java.lang.NullPointerException
	at org.apogames.sound.ApoMidiPlayer.<init>(ApoMidiPlayer.java:45)
	at apoZombie.game.ApoZombieGame.init(ApoZombieGame.java:46)
	at org.apogames.ApoMainBufferedStrategy.setComponent(ApoMainBufferedStrategy.java:99)
	at apoZombie.ApoZombieMain.init(ApoZombieMain.java:26)
	at org.apogames.ApoMainBufferedStrategy.<init>(ApoMainBufferedStrategy.java:56)
	at org.apogames.ApoMainBufferedStrategy.<init>(ApoMainBufferedStrategy.java:27)
	at apoZombie.ApoZombieMain.<init>(ApoZombieMain.java:16)
	at apoZombie.ApoZombieMain.main(ApoZombieMain.java:32)

Applet (im Firefox):
- wirft die gleiche Exception und verhindert, dass das Applet überhaupt irgendetwas anzeigt

Ich benutze das Sun JRE 1.6.0_14
 
Zuletzt bearbeitet:

Apo

Bekanntes Mitglied
Korrekt, es war als Zombiespiel geplant. Aber ich fand die Idee mit den Frauen letztlich besser :D Die Idee kam mir einfach im Bett =)

Zum Midi-Problem. Das müsste nun behoben sein, wenn ich mich nicht irre. Danke für den Bug =)

Zum "Gehproblem" der Frauen. Das war eigentlich so geplant am Anfang. Müsste mal testen, ob es mit A* noch performant genug ist bei 100 Frauen. =)
 
Zuletzt bearbeitet:

Apo

Bekanntes Mitglied
Hattest ausnahmsweise ne Frau statt nem Zombie im Bett, or what? xD

*g* Dazu möchte ich nichts sagen. Außer natürlich ... vielleicht auch andersrum ... ansonsten kommt man doch nicht auf solch eine Idee oder? ;)

Habe jetzt nocheinmal einige kleine Bugs gefunden bei der Highscoreanzeige und diese verbessert. Des Weiteren wird nach dem Spiel nun angezeigt, wenn eine Internetverbindung besteht, der wievielte Platz erreicht wurde mit der Punktzahl.
Außerdem wird nun in der online Highscoreliste mehr angezeigt, als nur der Namen und die Punkte.
Kleinigkeit beim eigenen TextField verbessert.

Ich muss es am Mittwoch oder Donnerstag mal nachprüfen, aber vlt ist das Spiel in der PC Action. Auf mein Youtube Video hat jemand einen Kommentar abgegeben, dass er es aus der neuen PC Action hat. Falls das stimmt, wäre das genial. Wenn nicht ist schade, aber egal. :D
 
S

Spacerat

Gast
Och, ich finde dieses linienförmige Laufen eigentlich ganz nett, wenn so eine lange Schlange Mädels hinter dem Spieler her rennt.
YEEESSSSS... "it's the Benny Hill Show" :lol:
Tolles Spiel... kommentar schreib ich weiter wenn ich mich wieder eingekriegt hab' :toll:
 

Apo

Bekanntes Mitglied
Ich danke dem Spacerat für das Auffüllen der Highscoreliste :D

Mein Leserbrief an die PC-Action wurde wirklich fast in Gänze abgedruckt. Ich bin ja begeistert. Mit Screenshot und Link dazu. Hätte ich nicht erwartet. Mich freuts. =)
 
S

Spacerat

Gast
Ich danke dem Spacerat für das Auffüllen der Highscoreliste :D
Hatte (bzw. habe zwischendurch) halt Zeit... Mal schauen wieviele Denkpausen es braucht, bis ich ganz oben steh'...:D Ist aber auch actionreich und amüsant. Ich vermisse allerdings irgendwie den Sound. Vllt. "Yakety Sax" als Hintergrundmusik und man hat 'n bissl' was vom oben erwähnten:D
 

Apo

Bekanntes Mitglied
Die Idee ist ja goldig. :D
Habe mir mal die Midi zugelegt und werde sie in den nächsten Tagen mal einarbeiten. =)
Dazu könnten noch lustige Explosionssounds kommen und ein Knutschsound, wenn die Damen zu nah sind.
Hatte mich nur vorher noch nie mit Sound so richtig auseinandergesetzt. Wird nun mal Zeit. :D
 

L-ectron-X

Gesperrter Benutzer
In der Applet-Version solltest du in der stop()-Methode den Sound killen.
Wenn ich den Tab im Browser schließe, läuft die Musik weiter.
 
S

Spacerat

Gast
Hmmm... Wurde der Sound überhaupt schon implementiert? Ich sehe zwar, das man ihn unter Optionen einschalten kann, aber ich kann gar nichts verstehen :lol:
Cache geleert; Appletseite geöffnet; unter Optionen Sound eingestellt; Surviver Mode gestartet... kein Ton. Könnte das an dieser Meldung liegen
Code:
network: Keine Zertifikatsinformationen für unsignierte JAR-Datei:
   http://apo-games.de/apoWomenInvasion/ApoWomenInvasion.jar
oder brauch' ich tatsächlich ein Hörgerät? Ok... Nach dem der Chache geleert war gabs anfangs noch so'n paar Exceptions, die besagten, das irgend so eine indexdatei nicht gefunden werden konnte. aber das erschien mir normal bei frisch geleertem Cache. Das bezieht sich im übrigen alles auf FireFox.
 

Apo

Bekanntes Mitglied
Zu der Soundfrage ... ich höre persönlich bis jetzt auch nichts im Applet. Hab aber ka wieso. Ich fange alle Exceptions ab und gebe sie eigentlich auch aus. Egal ich stelle grad das Soundsystem komplett auf ein neues um. Und dann sollte alles funktionieren (so der Plan) :D
Zum Beenden des Sounds beim Applet: Danke für den Bug. Wird in der nächsten Version sofort verbessert.

Screenshot aus der PC-Action: Klick mich. Sorry für die schlechte Qualität, aber ich habe nur mein Handy da. =)
 
Zuletzt bearbeitet:

sparrow

Top Contributor
Code:
sparrow@sparrow:~$ uname -a && lsb_release -a && java -version
Linux sparrow 2.6.28-11-generic #42-Ubuntu SMP Fri Apr 17 01:58:03 UTC 2009 x86_64 GNU/Linux
No LSB modules are available.
Distributor ID:	LinuxMint
Description:	Linux Mint 7 Gloria - x64 Edition
Release:	7
Codename:	Gloria
java version "1.6.0_14"
Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
Java HotSpot(TM) 64-Bit Server VM (build 14.0-b16, mixed mode)
sparrow@sparrow:~$

Hier geht alles bis auf der Ton, der macht aber auch keine Fehlermeldung.
 

Apo

Bekanntes Mitglied
So nun habe ich mal an den Sounds gearbeitet. =)
Es gibt nun einen Explosionssound und ein Knutschsound, wenn ihr auf ein Button klickt.
Im Hintergrund läuft nun die Midi von "Yakety Sax".
Bei mir funktioniert nun alles wunderbar im Applet und in der Application. =)
Und der Sound wird im Applet nun auch gestoppt, wenn das Fenster geschlossen wird.
 
Zuletzt bearbeitet:
S

Spacerat

Gast
Ok... Sound kommt... aber wie... Ich würd's dir ja gerne zeigen. Wenn man Schall sehen könnte, würde ja ein Screenshot genügen. Also bleibt mir nur, es zu Umschreiben. Knutsch- und Explosionssounds sowie den Titel während des Spiels eigentlich so wie es sein soll. Alledings hört man auch ständig ein Maschinengewehr und so eine Art gestörte Funkwellen im Vordergrund. Klingt, als wenn die Sounds zu oft initialisiert werden. Als Anhaltspunkt kommt immer nur der, das das Applet nicht signiert ist. Du arbeitest bei den Sounds nicht zufällig mit Threads? Ist dir die Tatsache bewusst, dass Applets Threads zwar starten aber nicht wieder anhalten können ("interrupt()" -> Access Denied)? Ich hatte da mal (lange vor "concurreny") 'ne Thread-Klasse gebastelt, die dieses Problem umgeht.
Java:
/**
 * Der EThread ist im Prinzip mit "java.lang.Thread" vergleichbar bzw.
 * eigentlich nichts anderes. Entstanden ist EThread aufgrund diverser
 * Tatsachen "java.lang.Thread" betreffend.
 * 1. "java.lang.Thread" kann nicht erneut gestartet werden. Eine
 *    abgelaufene Instanz von "java.lang.Thread" belegt bei unsauberer
 *    Programmierung immer noch Speicher.
 * 2. Aufgrund von Punkt 1 laesst sich "java.lang.Thread" auch nicht im Sinne
 *    von pausieren unterbrechen. "interrupt()" von "java.lang.Thread"
 *    ermoeglicht statt dessen einen sauber beendeten "java.lang.Thread",
 *    was eigentlich dessen "stop()"-Methode von vorne herein haette tun
 *    muessen.
 * 3. "java.lang.Thread" kann zwar von unsignierten Applets gestartet
 *    jedoch nicht auf konventionellem Wege ("interrupt()") beendet
 *    werden.
 * 
 * Ein fuer einen EThread konzipiertes Runnable koennte nun folgenden
 * Grundaufbau haben:
 * 001 public void run()
 * 002 {
 * 003   while((EThread) runner).isRunning()) {
 * 004     if(!((EThread) runner).isPaused()) {
 * 005       //...running code goes here
 * 006     } else {
 * 007       //...paused code goes here
 * 008     }
 * 009     try {
 * 010       Thread.sleep(timeout);
 * 013     } catch(InterruptedException e) {
 * 014       ((EThread) runner).stop();
 * 015     }
 * 016   }
 * 017 }
 * @author 0x0badc0de
 */
public class EThread
{
	/*
	 * Interner Worker-Thread
	 */
	private Thread worker;

	/*
	 * Abzuarbeitendes Runnable
	 */
	private final Runnable runner;

	/*
	 * Status-Flaggen
	 * running => Thread wurde gestartet
	 * paused  => Thread wurde pausiert
	 */
	private boolean running, paused;

	/**
	 * Neue Instanz eines EThreads. Ein Runnable
	 * ist unbedingt Vorraussetzung.
	 * @param runner
	 */
	public EThread(Runnable runner)
	{
		if(runner == null) {
			throw new NullPointerException("runner = null");
		}
		paused = true;
		this.runner = runner;
	}

	/**
	 * Startet einen EThread.
	 */
	public synchronized void start()
	{
		start(false);
	}

	/**
	 * Startet einen EThread pausiert.
	 */
	public synchronized void start(boolean sw)
	{
		pause(sw);
		if(worker == null) {
			running = true;
			worker = new Thread(runner)
			{
				/**
				 * Thread.run() musste ueberschrieben werden,
				 * damit EThread ein Ende des Runnables
				 * mitbekommt.
				 */
				@Override
				public void run()
				{
					runner.run();
					running = false;
					worker = null;
				}
			};
			worker.start();
		}
	}

	/**
	 * Pausiert einen EThread (sw = true) oder laesst ihn
	 * fortfahren (sw = false).
	 * @param sw
	 */
	public synchronized void pause(boolean sw)
	{
		paused = sw;
	}

	/**
	 * Schaltet den Pause-Modus des EThreads um.
	 */
	public synchronized void pause()
	{
		pause(!paused);
	}

	/**
	 * Stopt einen EThread. Die Verwendung des Methodennamens
	 * "stop" soll die diesbezuegliche Verwirrung von
	 * "java.lang.Thread" beenden. Gestoppte EThreads koennen
	 * nicht fortgesetzt werden. Unterbrechen (interrupt)
	 * bedeutet "pausieren".
	 * @see pause(boolean sw)
	 * @see pause()
	 */
	public synchronized void stop()
	{
		if(running) {
			running = false;
		}
	}

	/**
	 * Gibt zurueck, ob der EThread gestartet wurde und
	 * immernoch laeuft. Auch ein pausierter EThread liefet
	 * hier "true".
	 * @return running flag
	 */
	public boolean isRunning()
	{
		return running;
	}

	/**
	 * Gibt zurueck ob ein EThread unterbrochen wurde. Das
	 * ist der Fall, wenn er pausiert oder noch nicht
	 * gestartet wurde.
	 * @return paused flag
	 */
	public boolean isPaused()
	{
		return paused;
	}

	/**
	 * Wartet auf Beendigung des EThreads.
	 * @throws InterruptedException
	 */
	public synchronized void join()
	throws InterruptedException
	{
		if(worker != null) {
			worker.join();
		}
	}

	/**
	 * Wartet die angegebene Zeitspanne auf Beendigung des
	 * ETrheads.
	 * @param timeout
	 * @throws InterruptedException
	 */
	public synchronized void join(long timeout)
	throws InterruptedException
	{
		if(worker != null) {
			worker.join(timeout);
		}
	}
}
 
Zuletzt bearbeitet von einem Moderator:

Apo

Bekanntes Mitglied
Das mit dem Threads im Applet wusste ich noch nicht. Und da ich persönlich nicht das Soundproblem hatte, wäre ich ohne dich auch nie drauf gekommen.
Ich habe es mal implementiert und hoffe, dass es nun bei dir zu keinem Doppelsound mehr kommt =)
Danke für den Hinweis auf jeden Fall.

Ich habe jetzt erstmal wieder Platz 1 gesichert. Mit der richtigen Laufstrategie ist scheinbar noch mehr möglich :D
 
S

Spacerat

Gast
Neee, das Problem existiert weiterhin, leider. Ich könnte mich der Sache ja mal annehmen. Dazu brauch' ich allerdings Quellcode. Wenn er von dir kommt, unterschreibe ich auch 'ne Vertraulichkeitserklärung. Wenn nicht dauerts wegen decompile ein wenig länger :D
@Edit: Ich editiere den EThread noch mal, so wie er anno dazumal ohne dieses ganze wait() und notify() Gedöns war. Ich glaube nämlich fast, das ist recht überflüssig.
 
Zuletzt bearbeitet von einem Moderator:
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben