[Projekt] Devader

Hier könnt ihr euch selbst, eure Homepage, euren Entwicklerstammtisch, Termine oder eure Projekte vorstellen.
Forumsregeln
Bitte Präfixe benutzen. Das Präfix "[Projekt]" bewirkt die Aufnahme von Bildern aus den Beiträgen des Themenerstellers in den Showroom. Alle Bilder aus dem Thema Showroom erscheinen ebenfalls im Showroom auf der Frontpage. Es werden nur Bilder berücksichtigt, die entweder mit dem attachement- oder dem img-BBCode im Beitrag angezeigt werden.

Die Bildersammelfunktion muss manuell ausgeführt werden, die URL dazu und weitere Details zum Showroom sind hier zu finden.

This forum is primarily intended for German-language video game developers. Please don't post promotional information targeted at end users.

[Projekt] Devader

Beitragvon marcgfx » 19.10.2010, 00:27

Devader ist ein Shoot'em Up mit strategischen Elementen.
http://falkenbrew.com

Der Weg dahin war aber alles andere als gerade.

Angefangen hat alles mit Cyberlympics... (die links werden leider kaum noch funktionieren)

http://data.cyberlympics.com/html/nav.html (dieser link ist aktualisiert / 2015)

Nostalgie
Erinnert sich noch wer an CodeWars? Ähnliches habe ich jetzt auch programmiert, nur läuft das ganze in Javascript in eurem Webbrowser. Man kann die KI für einen kleinen Panzer schreiben mit dem Ziel den Feind zu vernichten und selbst natürlich am leben zu bleiben. Falls sich jemand noch an SCAW erinnert, die Grafiken konnten mit nur kleinen Anpassungen wieder verwendet werden.

Die Aufgabe
Die KI wird in Javascript programmiert, in einem Online-Editor. Man kann bei den aktuellen Spielen 1-50 Panzer gleichzeitig steuern. Sobald mehrere eigene Einheiten im Spiel sind, sollte man auch berücksichtigen was die Kumpel so treiben und nicht blind drauf los ballern. Bislang habe ich nur eine KI geschrieben die dies berücksichtigt. Mit etwas Taktik dürften alle existierenden Intelligenzen zu besiegen sein.
Die verwendeten Einheiten sind kleine Panzer die auf 4 Kugelrädern rumdüsen. Dank den Kugelrädern lassen sie sich in jede Richtung frei bewegen, haben aber auch eine gewisse Trägheit was relativ realistische Bewegungen erzeugt. Ich nenne sie Quads, weil ich sie immer so nannte :) ...
Bild

Öffentliche Turniere
Ich möchte Preisgeld für die Sieger von Monatlichen Finalturnieren anbieten, bin mir aber noch nicht im klaren mit was für Beträgen ich da arbeiten sollte ;) ... Vorschläge? Die Turniere werden aufgezeichnet und die einzelnen Kämpfe können als "Video" später betrachtet werden. Jeder der einen Browser besitzt kann sich diese Turniere anschauen (sogar mit dem doofen IE8). Es gibt bereits schon einige Kämpfe online, es lohnt sich aber nicht alle anzuschauen, da es immer wieder die selben Bots sind.

Screenshots
Habe ich mal gemacht, aber eigentlich sind die Sinnlos. Die Screenshots sind teilweise grösser als sich direkt ein Video anzuschauen. Geht einfach auf die Webseite klickt mal ein Turnier und ein Match an. Live Demo ;) , ist doch viel besser...

Registration
Registration bei Onlito ist ein muss um eine AI speichern und eintragen zu können. Onlito ist auch ein Projekt von mir, es war somit die einfachste Lösung für mich.

Browser
Am besten funktionierts bei mir Chrome. Safari und Firefox machens gut, mit Opera gibts kleinere optische Probleme und ich hatte auch schon komische "hüpfer". IE ist die schlechteste Wahl mit den wenigsten Features, hat mich aber insgesamt trotzdem am meisten Zeit gekostet um es zum laufen zu bringen. Das muss Liebe sein.

Future
Weitere Aufgaben und Preisgeld, mal sehen ob ich Sponsoren finden kann, sonst muss ich selber blechen... Dank SCAW habe ich eine sehr sehr grosse Palette an Reserve-Einheiten, die auch schon funktionieren würden. Nur muss ich noch sinnvolle Aufgaben entwickeln und auch die Einheiten-Stats sind nicht so einfach einzustellen. Praktisch abgeschlossen habe ich bereits ein Cart-Fussball, bei dem die implementierte Physik gut zur Geltung kommt. User-Games sind ebenfalls in Planung, dann kann man mit Maus oder Tastatur selber in den Kampf ziehen oder auf dem virtuellen Fussballfeld Tore schiessen ;) ...
BildBild

Ich würd mich echt über Kommentare freuen. Falls was nicht klar ist, ich brauch das Feedback! Wenn es detailierte Fragen zur Programmierung von Bots sind, wäre ich froh wenn ihr bei mir ins Forum schreiben könntet.
Zuletzt geändert von marcgfx am 21.11.2016, 12:12, insgesamt 6-mal geändert.
Benutzeravatar
marcgfx
 
Beiträge: 1031
Registriert: 18.10.2010, 23:26

Re: [Projekt] Cyberlympics

Beitragvon joeydee » 20.10.2010, 13:37

Stell doch mal AI-Beispiele ins Forum oder ins Wiki. Oder hierher. Würde mich interessieren wie das bei dir aussieht.
joeydee
 
Beiträge: 490
Registriert: 23.04.2003, 15:29

Re: [Projekt] Cyberlympics

Beitragvon marcgfx » 20.10.2010, 19:59

Das folgende beispiel zeigt die default AI. Also jeder bot der keine AI hat, bekommt diese AI :) ...

Code: Ansicht erweitern :: Alles auswählen
//default generic AI, works for any kind of unit
//marcgfx 2010

//get the distance between two objects
function getDist(a,b){
var x=b.get("x")-a.get("x");
var y=b.get("y")-a.get("y");
var d=Math.sqrt(x*x+y*y);
return {d:d,x:x,y:y};
}

//determines the angle between two objects
function getAngle(a,b){
var d = getDist(a,b);
if(!d.d){ return 0;}
var angle=Math.acos(d.x/d.d);
if(d.y<0){ angle = PI2-angle;}
return angle;
}

//find closest target
function getTarget(){
var min = 999999999;
var best = 0;
//loop through all foes/enemies
for(var i=0;i<world.foe.length;i++){
var obj = world.foe[i];
//if opponent still has energy/health, h=health
if(obj.get("h")>0){
var dist = getDist(me,obj);
//if the distance is smaller than the currently closest object,
//a new best solution has been found, for equal distances use luck
if(dist.d<min || (dist.d==min && Math.random()<0.5)){
min=dist.d;
best = obj;
}
}
}
return best;
}

//fire weapon of object, if component angle and target angle line up enough
//both angles must be absolute
function fire(obj,ca,ta){
var dif=Math.abs(ca-ta);
while(dif>PI2){ dif-=PI2;}
if(dif>PI){ dif=PI2-dif;}
if(dif<0.3){
//fire all weapons of object
obj.fire();
}
}

//run component, aim at target
function run(p,target){
var ta = getAngle(p,target);
var ca = p.get("ca");
var a = p.get("a");

//fire weapon if properly aligned to target
fire(p,ca,ta);
//set rotation direction to
//current relative angle + difference between target angle and absolute angle
p.set("a",a+(ta-ca),10);

//if componentent has subcomponents, use recursion
if(p.sub){
for(var i=0;i<p.sub.length;i++){
run(p.sub[i],target);
}
}
}

//get target
var target = getTarget();

//handle chassis/base
//if no target was found or no weapon is attached to base, random movement
if(!target || !me.getweapon()){
//about 1% of the time do
if(Math.random()<0.01){

//set random angle
me.set("a",Math.random()*PI2,Math.random()*6-3);

//set random velocity
var v = Math.random()*200-50;
me.set("v",v*Math.random()*PI2,v);
}
}else{
//target and weapon exist, move in direction of target

//small randomization
var ta = getAngle(me,target)+Math.random()*0.1;

//set angle, impulse 10
me.set("a",ta,10);

//set velocity to 500, ranomized impulse
me.set("v",500,80+20*Math.random());

//fire weapon if facing target
fire(me,me.get("a"),ta);
}

//handle all turrets
if(me.sub && target){
for(var i=0;i<me.sub.length;i++){
run(me.sub[i],target);
}
}

//handle shielding, load shield if 90% energy is available
if(me.get("e")>me.get("ep")*0.9 && !me.loadshield){
me.loadshield=1;
}
//stop loading shield if more than 50% of energy has been used
else if(me.get("e")<me.get("ep")*0.5 && me.loadshield){
me.loadshield=0;
}

//if shield must be loaded, set shield impulse
if(me.loadshield){
me.set("s",me.get("sp"),400);
}
else{
me.set("s",me.get("sp"),0);
}​


mich haben die ganzen get und set aufrufe ziemlich bald gestört, also habe ich eine vereinfachung eingeführt.
so kann statt me.get('a') auch me@a geschrieben werden. intern wird dann mit einer regular-expression das ganze wieder in ein getter gewandelt.

samples gibts aktuell sonst keine. muss ich noch unbedingt machen :)
Benutzeravatar
marcgfx
 
Beiträge: 1031
Registriert: 18.10.2010, 23:26

Re: [Projekt] Cyberlympics

Beitragvon Despotist » 21.10.2010, 09:45

Wenn du dich im Zusammenhang KI auch für Künstliche Neuronale Netze interessierst ist das Programm Smart Sweepers inkl. Code vielleicht ganz interessant für dich. Da fahren auch kleine Panzer rum ;). Die könntest du ja als Default-Bot anbieten an denen sich die Spieler messen müssen. Dabei können verschiedene Lernstufen verschiedene Schwierigkeitsgrade repräsentieren.
Despotist
 
Beiträge: 394
Registriert: 19.02.2008, 17:33

Re: [Projekt] Cyberlympics

Beitragvon marcgfx » 21.10.2010, 12:07

werd ich mir auf alle fälle anschauen, danke. ich vermute aber dass ich noch was dazubauen muss, bevor neuronale-netze implementiert werden können. soweit ich mich erinnern kann, wird mit gewichtungen gearbeitet und diese müssten auch noch gespeichert werden können. Eine ablagemöglichkeit von infos auf der DB habe ich aber sowieso schon vorgesehen, damit wäre auch der anreiz da es umzusetzen. generell will ich aber eigentlich nicht massiv viele "default"-bots erstellen. schön wäre halt schon user-content ;) ...
Benutzeravatar
marcgfx
 
Beiträge: 1031
Registriert: 18.10.2010, 23:26

Re: [Projekt] Cyberlympics

Beitragvon marcgfx » 10.11.2010, 19:02

bin weiterhin auf der Suche nach AI-Gegnern :) ... gibt es eine Schwelle, die den Eintritt erschwert die ich vielleicht reduzieren kann?
Benutzeravatar
marcgfx
 
Beiträge: 1031
Registriert: 18.10.2010, 23:26

Re: [Projekt] Cyberlympics

Beitragvon marcgfx » 03.01.2011, 16:48

so richtig klappen wills nicht mit den AI-gegnern. vielleicht ist es zu schwierig? hat schon einige registrationen gegeben, danach haben sich nur noch wenige damit befasst, oder befassen können.

ich hatte jedenfalls selbst auch nicht gerade so viel zeit daran zu arbeiten und wenn dann hab ichs mit feature einbau vertrödelt... wenns spass macht ist es ja erlaubt :) . zu den features die nicht veröffentlich sind gehören manuelles steuern der einheiten über die tastatur, explosionen richten im umkreis schaden an, bremsen ist als funktion verfügbar (davor musste man in die gegenrichtung "fahren"), ...

die neuste "brilliante" idee die ich umsetze ist eine rennstrecke. natürlich nicht eine fixe sondern eine zufällig erstellte rennstrecke, wär ja sonst langweilig. damit der zufall aber berechenbar bleibt habe ich mich entschlossenen mit seeded random zu arbeiten. wär ja schade wenn ne tolle strecke nie mehr aufzufinden wäre. eine rennstrecke umzusetzen ist mit html nicht so leicht, deshalb bin ich auf SVG ausgewichen, etwas das ich schon länger probieren wollte. leider nicht ganz einfach cross-browser umzusetzen, bislang läuft es erstmals nur in firefox und chrome.

dann hab ich noch tonnenweise alte szenenobjekte wie bäume und steinbrocken aus scaw wieder gefunden und musste das mal mit der strecke kombinieren. allerdings ist das noch photoshop, ich denke es lässt sich aber noch im browser realisieren. das bild ist auf 50% runterskaliert worden. die rennstrecke ist svg und der rest sind png bilder. die querbalken represäntieren das was ich mir als checkpoints vorstelle.
preview110103.jpg
streckengenerator
Benutzeravatar
marcgfx
 
Beiträge: 1031
Registriert: 18.10.2010, 23:26

Re: [Projekt] Cyberlympics

Beitragvon marcgfx » 10.02.2011, 02:57

preview110210.jpg

der random-strecken-generator wurde um das hinzufügen von bäumen erweitert. also das was im letzten bild noch fiktion war, wird realität :)
die bäume werfen schatten, in den meisten fällen siehts auch glaubhaft aus, als ob der schatten auf die autos fallen würde.
Benutzeravatar
marcgfx
 
Beiträge: 1031
Registriert: 18.10.2010, 23:26

Re: [Projekt] Cyberlympics

Beitragvon joggel » 10.02.2011, 10:56

Wie hast Du die Schatten gemacht?
Also welche Technik verwendest du? Auch das Schatten auf den Autos ist.
Mir fiel auf, das fast jeder Baum seinen Schatten in eine andere Richtung wirft, is bestimmt nicht beabsichtigt.
...
Benutzeravatar
joggel
 
Beiträge: 1172
Registriert: 06.11.2007, 19:06
Wohnort: Dresden

Re: [Projekt] Cyberlympics

Beitragvon marcgfx » 10.02.2011, 11:29

sind mit schatten gerenderte 3D bäume, also 2D Bilder mit unterschiedlichem z-index (anzeigereihenfolge). die schatten sind garantiert alle in der selben richtung :) ... dass der schatten auf den autos landet liegt einfach daran dass das bild für den baum darüber gezeichnet wird.
Benutzeravatar
marcgfx
 
Beiträge: 1031
Registriert: 18.10.2010, 23:26

Re: [Projekt] Cyberlympics

Beitragvon joggel » 10.02.2011, 12:21

Mhhh.. ich meine diese Schatten zum Beispiel:
Dateianhänge
preview110210.jpg
...
Benutzeravatar
joggel
 
Beiträge: 1172
Registriert: 06.11.2007, 19:06
Wohnort: Dresden

Re: [Projekt] Cyberlympics

Beitragvon marcgfx » 10.02.2011, 12:30

die obere markierung betrifft 2 bäume, die überlappen sich dort etwas. vielleicht liegt es an der überlappung, dass es falsch auf dich wirkt. am besten gehst du vom baumstrunk aus, dort sollte sichtbar sein dass der schatten in die selbe richtung fällt. oder du glaubst mir einfach :) die bäume werden alle im selben projekt erzeugt und hintereinander mit der identischen lichteinstellung gerendert (wie auch alle anderen objekte auch). mir reicht das zumindest als beweis :)
Benutzeravatar
marcgfx
 
Beiträge: 1031
Registriert: 18.10.2010, 23:26

Re: [Projekt] Cyberlympics

Beitragvon joggel » 10.02.2011, 12:40

Mh... ich glaube dir mal :D
...
Benutzeravatar
joggel
 
Beiträge: 1172
Registriert: 06.11.2007, 19:06
Wohnort: Dresden

Re: [Projekt] Cyberlympics

Beitragvon Eisflamme » 10.02.2011, 21:36

Sieht cool aus. Schöne Szenen einfach, die Bildchen für Bäume und Steine und die schlichten Böden mag ich irgendwie sehr.
www.mihahome.de - mit Updates zu Elypson3D
Eisflamme
 
Beiträge: 412
Registriert: 26.05.2002, 17:42
Wohnort: Köln

Re: [Projekt] Cyberlympics

Beitragvon marcgfx » 11.02.2011, 12:14

Danke Eisflamme, bin eigentlich auch sehr zufrieden mit dem Style. Relativ schlicht aber nicht auf den ersten Blick repetitiv oder langweilig. Es werden noch andere Umgebungen definiert werden, bin mir nur noch nicht ganz im klaren wie ich das am besten löse. Ich muss mir ne Art Umgebungspakete zusammenstellen. Bäume und andere Objekte habe ich jedenfalls zu hauf schon generiert :) . Was definitiv fehlt sind halt Elemente wie kleine Hütten, Türme oder alles andere was von Menschenhand erschaffen wird (eben auch von einem Graphiker).
Benutzeravatar
marcgfx
 
Beiträge: 1031
Registriert: 18.10.2010, 23:26

Nächste

Zurück zu Vorstellungsbereich

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast