PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schachspiel



Climhazard
06.01.2005, 19:09
Also wollt mal wissen ob ihr ne Idee hättet wie man ein Schachspiel konstruieren könnte. Ich glaub es könnte so funtzen,
Schachbrett ist ein panorama, so könnte man den Spieler, per change panorama, verschiede Bretter auswählen lassen, die Schachfiguren sind Heros, jeder hat eine bestimmte Zeit zum Warten, soinetwa 2min. Am gegner ist es per Enter Password.
Nun das Problem, das ganze Skript, wie soll ichs Aufbauen, mit Forks ist es fast unmöglich, man müsste über 1000 integrieren? :confused:

dadie
06.01.2005, 19:13
1,Die Figuren sollten Pics sein

2,Möglich ist das nur eine sache ist fast unmöglich bzw. Super Super Schwer
und zwar die Schach regeln einzuhalten ;)

Man müsste das Für jede Figur einzeln Lösen etz. aber Möglich ist es das Ganze kann man Per Keypatch mit Maus Lösen.

Beril
06.01.2005, 19:22
Die Diskussion hatten wir schon mal.
Es ist zwar möglich aber: vergiss es!
Die Gegner KI bekommst du nie gescriptet!
Wenn du ein 2-Player Game draus machen willst, dann ists zwar immernoch viel Arbeit aber... viel Spaß

dadie
06.01.2005, 19:34
Also ich habe Mal Versucht nur ein Schach Brett zu malen
und da ist schon das Erste Problem ein Schachbrett ist 8 x 8 felder

Das heisst damit das einigermassen Gut aussiht muss die Map 20 x 16 Gross sein und dadurch ist immer das achte Feld nur Halb sichtbar naja zum glück gibt es den XP mal sehn was sich da Zaubern Läst :D

EDIT: habe doch eine Möglichkeit gefunden für den RPGMk 2k

EDIT2 :

Ich glaube man kann Sowas sogar mit NPC bauen Ohne Grosse Probleme das Geheimniss liegt im Tera ID die idee kamm mir gerade man kann 16 terra IDs machen jeder steht für ein Feld etz. dann berechne ich per Logo [ne Pillig Programmier Sprache] (entlich aht das mal ein sinn :D ) welche Figur welche Felder überhaupt durchlaufen kann etz. der rest ist nur sehr viel Fork arbeit :D

Dhan
06.01.2005, 19:53
Aaalso... für ein 2 Player Schachspiel:

erstmal, wenn eine Figur ausgewählt wird, muss man prüfen, welche Felder begehbar sind.
Dazu würde ich folgendes machen:
Ein Script fragt, abhängig vom Figurentypen ab, ab wann die Felder blockiert werden (für Figuren ohne längere Reichweite, also Bauer, König und Springer ist das nicht nötig) und erstellt so Funktionen (es müssen 4 verfügbare Funktionen sein mit je 4 Variablen, also 16 Variablen, wie Funktionen funzen schreib ich später) und anschließend werden diese Funktionen eben ermittelt und zwar auf folgende Weise:
Erstmal wird Switch A aktiviert und Variable Runde auf 1 gesetzt und die Position des zu prüfenden Feldes gespeichert

die Erste Figur (mti Figur mein ich alle 32 Stück) hat nun folgendes Script auf einer ziemlich weit hinteren Seite:
Parallel Process
Switch A als Bedingung
Wenn Variable Runde auf 1, dann wird geprüft, ob die Koordinaten der Figur mit den gespeicherten übereinstimmt, wenn ja, wird ausgegeben, welche Farbe die Figur hat (Switch, OFF = schwarz, ON = weiß), wenn nein, dann wird die Variable Runde um 1 erhöht
anschließend natürlich das Anti-Ruckel Wait von 0,0s

die nächste Figur hat dann als abgefragte Variable 2 und so weiter bis 32

so kann man schonmal ausrechnen, wie eine Figur ziehen kann, natürlich braucht man einige Spezialscripte für Aktionen wie Charade, 2 Felder mit dem Bauern ziehen, mit dem Bauern schlagen und einen Bauern schlagen, der grade eben 2 Felder gezogen ist (weiß net genau, wie das heißt, ich bin kein guter Schachspieler)

Soa, jetzt zu den Funktionen. Jede Funktion hat 4 Variablen welche 2 Paare von Koordinaten darstellen.
Erstmal eine Situation (imaginär, jetzt mal nur für die Sache ohne Bezug auf das echte Spiel):
http://dhan.de/queen.png
Die eingefärbten Felder sind die Möglichkeiten der Königin. Jede Farbe symbolisiert eine der 4 Funktionen.
Nun, um zu zeigen, was die Variablen speichern, die betreffenden Koordinaten:
Funktion blau: x1=1 y1=4 x2=7 y2=4
Funktion rot: x1=4 y1=4 x2=5 y2=5
Funktion grün: x1=4 y1=3 x2=4 y2=7
Funktion violett: x1=6 y1=2 x2=1 y2=7
(man könnte grün und blau auch mit 3 Varis machen, aber öhm... was solls ^^)

so, als nächstes das schlagen, hier wird wieder sowas gemacht wie bei der Feldüberprüfung, das Event, das auf dem Feld steht, das angegriffen wird, wird hierbei auf diesselbe Methode herausgefunden und darf nun selber den Switch ändern, der es verschwinden lässt.

So, Im Prinzip wars das schon (ist aber viel Arbeit), nur eins fehlt noch: der König.
Der König verlangt ganz eigene Routinen weil... er darf auf kein Feld, auf dem er geschlagen werden kann!
Ich würde diese Regel fast abschaffen den ansonsten kommt etwas sehr ekliges:
jedes Event muss nach der bekannten Routine durchlaufen nur diesmal mit einer Abfrage, ob es den König auf der neuen Position schlagen könnte!
hat man das dann hinbekommen, kommt die schwerste aller Aufgaben, das Schach Matt.
Hierbei reicht es nicht, zu prüfen, ob der König keinen Zug machen kann sondern ob es einen Zug gibt, der den König schützen kann und... das ist eine Sisyphosarbeit. Ich habs schon oben vorgeschlagen als es noch ging, hier schlage ich es endgültig vor: diese Regel abschaffen und einfach machen, dass man den König schlagen kann. Ich meine, klar, man kann schon aufhören, wenn es unausweichlich ist, bringt aber keinen um (ok den König), den einen Zug zu machen und den König zu stürzen (weiterhin bleibt die Möglichkeit offen, dass man den König am Leben lässt um dem anderen noch eine Chance zu geben für ein spannenderes Spiel)


ok, das ist im Grunde das Wichtigste aber... es ist machbar aber extrem aufwendig, ich hätte dazu jedenfalls keinen Bock (sonst würde ich das hier auch net posten ^^), man braucht einen kühlen Kopf, dem klar ist, was er gerade macht damit man nicht die Übersicht in dem komplexen Gewirre verliert und stahlharte Nerven wenn man hinterher die Bugs jagt (bei sowas großem kommen die unausweichlich)
hat man es aber geschafft... na, dann isses nemmer schwer die Schachmodifikationen wie Räuberschach zu machen ^^

viel Glück, wer auch immer das versuchen will

Climhazard
06.01.2005, 19:59
Schachbrett: Ich mach n Foto von meinem Brett tus als Panorama, also optimale größe, Map 20*15, was soll da net drufpassen? Mit dem Brett kann garnix falsch gehn.
Aber wie jemand gesagt hat, die Regeln zu skripten ist schwer, z.b bei der Rochade, ist aber möglich, mit einer Terrain ID könnte man überprüfen ob die Figuren dazu alle auf dem richtigen platz sind, aber wie kappt es dass das skript checkt dass die Fig. sich noch nicht bewegt haben?
Problem iss uch wie man einstellt dass das Pferd z.b. in einem L springt.
Möglich so im com. event, Fork condition, und Pferd anklicken, was weis ich, wenn linke taste, Pferd Move event ,left, left, left, up, dann wieder Fork...

dadie
06.01.2005, 20:09
Hi ,

Also ich bin nun soweit habe ich Chip gebaut und jeden Feld ne ID gegeben wenn ihr den Selben gedanken gang mit den Feldern habt wie cich hier mein Rolling den diese etwa 40 Felder zu Beschrifft ist leicht Nervig ^^°

http://gdoom.funpic.de/schach.zip

Phönix Tear
06.01.2005, 20:20
Naja, ich kann mich meinen Vorpostern eigentlich nur anschließen.
Ihr habt kaum eine Chance das fertigzubekommen.
Zu der Rochade:
Mach doch einfach beim König und Turm einen Switch, der aktiviert wird, sobald mit ihnen eine Bewegung durchgeführt wird. Versucht man eine Rochade und einer dieser Switches ist on, so kann man die Rochade nicht durchführen. (Das erspart dann auch die ganze Rechenarbeit, wohin man jetzt darf, da wenn sie sich noch nicht bewegt haben auch nichts anderes das Feld blokieren kann. Trotzdem sollte man beachten, das auch wenn ein Turm geschlagen wird der besagte Switch aktiviert wird, da es sonst leicht zu einem Bug kommen kann.)

Theoretisch könnte man das ganze auch mit Switches aufbaun. Für jedes Feld einen Switch. Ist dieser an kann man das Feld nicht betreten, ist dieser off sehr wohl. Dazu dann noch für jedes Feld eine Varable die speichert welche Figur darauf steht (also mit Werten von 1-12 (für beide Seiten jeweils einzeln)) damit man auch angreifen kann.
Ist nun eine Person drann, kann sie sich eine Figur auswählen. Bei dieser wird dann abgefragt, wo sie sich befindet und die "mögliche-Bewegung" Events werden positioniert. (Davon bräuchte man dann so viele dass sich die Königin überallhin bewegen könnte. (Sprich höhe+breite+diagonale+diagonale des Feldes -1 (-1 da die Königin ja selbst ein Feld besetzt))).
Ist zwar ziemlich aufwendig aber theoretisch (aber wirklich THEORETISCH!!!) möglich.
(Ich bin mir zwar irgendwie ziemlich sicher das ich da einen Fehler drin habe aber egal... :rolleyes: )
Hmm, irgendwie bin ich jetzt verwirrt.

Aber wie gesagt. Macht euch keine zu große Hoffnung, das ihr das wirklich schafft. Wenn ich mich irren sollte und euer Schachspiel wirklich gelingt (und es auch halbwegs spielbar ist ^^° ) dann Respekt.

Dhan
06.01.2005, 20:21
@Clim: Ah das hab ich vergessen zu schreiben, ich würde es in folgende Phasen unterteilen:

Figur selektieren
Ziel der Figur auswählen
Schlagen
Rücken
Königsüberprüfung falls vorhanden

dabei wäre das, über das du dich fragst, das Ziel der Figur auswählen. Ich würde einfach machen, dass der Figurtyp gespeichert ist und eben die oben beschriebenen Funktionen. Bei allen Figurentypen außer Bauer, König und Springer werden die Funktionen benutzt, bei den dreien eine eigene Routine
wenn man nun auf ein Feld klickt, schaut eine Routine nach ob das Feld in den Funktionen liegt bzw bei Bauer/König/Springer mit Spezialroutine

fertig, dann zieht das oben beschriebene wieder

@Phönix: vergiss nicht, dass die Felder nicht bedroht sein dürfen ;)

dadie
06.01.2005, 20:28
Jo also so wie es aussiht Krieg ich den Ersten Läufer heute gescriptet :D

Was mir derzeitig fehlt ist Folgendes wie Speicher ich die X und Y Koordinaten von Events ???

Phönix Tear
06.01.2005, 20:41
Jaja, so ist das.
Ich kann euch / dir wirklich nur rate lass(t) es!
Am Anfang denkt man das geht gut und dann. Aber ich denke das brauch ich dir nicht zu sagen :rolleyes:

Geh in "Change Variable" gib als Namen "soundso X" ein und stell unten unter "Event" das Event ein, von welchem du die Koords haben willst. Dahinter dann auf X Koordinate.
Das gleiche dann noch für die Y Koordinate. Fertig.
Zur Verdeutlichung nochmal:
http://www.directupload.net/images/050106/SMgNuZU9.png

Hoffe das hat dir geholfen
mfg
Phönix Tear

dadie
06.01.2005, 21:19
Der Läufer ist fast Feritg !!!

Es ist fast unglaublich wie Komplex das ist für einen Läufer brauch ich 4 Tabs und etwa 6 Variablen :D und um die 10 Forks omfg

Wenn der Läufer Klappt stell ich ihn on :D

dadie
06.01.2005, 21:30
It´s Done

Der Läufer auf der Position 2A ist Fertig :eek:

http://gdoom.funpic.de/schach0-0-1a.zip

Neues Fesnter Öffnen Link Adresse einfügen !!!!!

Ist ein Bischen Krüpelich in der Bewegung aber es war schwer genug es zu Script mein Kopf tuht weh :D

Nun mit eine Gegen Figur :D

Achtung die Können NOCH nicht Kloppen die Bezeichnung Liegt auf Noch :D

hier die neueste Version mit dem Schwarzen :D

http://gdoom.funpic.de/schach0-0-1b.zip

Phönix Tear
06.01.2005, 22:14
Hmm, mach ich da was falsch?
Irgendwie weiß ich jetzt nicht so genau was das sein soll.
Erstens bewegt sich ein Läufer immer diagonal und zweitesn funzt das nicht so ganz http://www.multimediaxis.de/images/smilies/old/s_010.gif

dadie
06.01.2005, 22:16
Hmm, mach ich da was falsch?
Irgendwie weiß ich jetzt nicht so genau was das sein soll.
Erstens bewegt sich ein Läufer immer diagonal und zweitesn funzt das nicht so ganz http://www.multimediaxis.de/images/smilies/old/s_010.gif


Also bei mir Funtz das 1a zumindest die Neueste Version 0.0.1b :D

gleich wird das erste Blut fliessen :D

Maisaffe
06.01.2005, 22:16
schach ist machbar, jedenfalls das grundspiel und grundregeln.
Wer das schafft kann sich zurück lehnen und ein breites Grinsen aufsetzen :D

Wer es jedoch schafft Profi Züge (also vorrausdenkende KI) zu erstellen, ohne ein festes Script, der ist richtig gut...
Nur dann frage ich mich was er am RPG-Maker verloren hat > Wieso nicht mit C++ programmieren?

Aber, auch wenn das Projekt scheitert: Du hast trotzdem etwas davon: Du lernst ;)

Dennis

dadie
06.01.2005, 23:00
Es Fliesst das erste blut http://www.multimediaxis.de/images/smilies/old/s_071.gif }:)

http://gdoom.funpic.de/schach0-0-1c.zip

Wie gehappt neues Fenster öffnen rein Kopieren enter drücken

Laguna the Immortal
06.01.2005, 23:07
toll es gibt auch andere schachspiele, wozu sich vor den maker setzen? zeitverschwenung...

n tip so am rande, letztens hatte jemand auch so ne idee, mahlzeit. wenn ihr professionelle hilfe braucht fragt ihn doch (auch wenn er sein projekt aus ähm zeitgründen gecancelt hat) xDD

dadie
06.01.2005, 23:10
toll es gibt auch andere schachspiele, wozu sich vor den maker setzen? zeitverschwenung...


Was soll man sonst tuhn ? :D

Naja das einzige was mir Angst macht ist das mir die Tabs/Variablen ausgehn können :D

Phönix Tear
07.01.2005, 01:03
n tip so am rande, letztens hatte jemand auch so ne idee, mahlzeit. wenn ihr professionelle hilfe braucht fragt ihn doch (auch wenn er sein projekt aus ähm zeitgründen gecancelt hat) xDD
Deinen Sarkassmus kannst du dir auch sparen... Er ist halt noch jung und kommt manchmal auf die ein oder andere dumme Idee :rolleyes:

Meine eigentliche Frage ist nun allerdings, ob du das mit dem "Schach" (also jetzt nicht das Spiel, sondern wenn der König bedroht wird) einbaun kannst. Meiner Meinung nach ist das nämlich sehr wichtig. Es macht zwar unglaublich viel Arbeit aber wenn man es einfach weglässt fallen viele Taktiken weg, wesshalb das Spiel dann warscheinlich nicht mehr ganz so viel Spaß machen würde.

P.S.
Eine Funktion die die Figuren des Spielers durchsichtig macht, der nicht drann ist wäre sicherlich sinvoll ;)

P.S.2
Ist das nun ein Fehler oder soll man in dieser Version noch nicht angreifen können? (Weil du ja was von Blut schriebst :rolleyes: )

dadie
07.01.2005, 01:07
Ist das nun ein Fehler oder soll man in dieser Version noch nicht angreifen können? (Weil du ja was von Blut schriebst :rolleyes: )


Bisher kann nur der Untere Angreiffen ^^°

Ich werde woll Morgen das Ganze Neuanfangen jedoch bin sich sicher das wird was :D

Dhan
07.01.2005, 10:46
toll es gibt auch andere schachspiele, wozu sich vor den maker setzen? zeitverschwenung...

Es gibt auch andere RPGs ;)

Dave-d
07.01.2005, 11:50
Es gibt auch son Strategiespiel Skript. Ich weiß nimmer wo... Vielleicht bei rpg2000.de oderso. Auf jeden Fall ist das so, dass der Gegner und du Züge machst. Muss man halt bloß noch einstellen, wie weit die gehen können und so...

Gruß
Dave-d

dadie
07.01.2005, 13:04
Hi ,

Also das neue Script ist um einiges besser gecoded doch ich habe ein Problem
ich will nett immer 16 Forks für eine Figur nutzen kann man irgentwie sowas machen

if [Var0001]-[Var0020] = X+1 and [Var0021]-[Var0040] = Y+1

:hehe:ndif

if [Var0001]-[Var0020] = X-1 and [Var0021]-[Var0040] = Y-1

:hehe:ndif


Wie macht man sowas im Maker ?

Dhan
07.01.2005, 13:12
if [Var0001]-[Var0020] = X+1 and [Var0021]-[Var0040] = Y+1

wird zu

Var A = Var 1
Var A = -Var 20
Var A = -1
Var B = Var 21
Var B = -Var 40
Var B = -1
Fork (Var A = X){
Fork (Var B = Y){
blabla
}
}

tja, das ist der Nachteil von DragnDrop, man kann keinen gescheiten kurzen Code eingeben

dadie
07.01.2005, 13:16
if [Var0001]-[Var0020] = X+1 and [Var0021]-[Var0040] = Y+1

wird zu

Var A = Var 1
Var A = -Var 20
Var A = -1
Var B = Var 21
Var B = -Var 40
Var B = -1
Fork (Var A = X){
Fork (Var B = Y){
blabla
}
}

tja, das ist der Nachteil von DragnDrop, man kann keinen gescheiten kurzen Code eingeben

Ich meine das so

Wenn [Var0001] bis [Var0020] gleich (Figur-A2-X minus 1 ) und [Var0021] bis [Var0040] gleich (Figur-A2-Y minus 1 )

so meinte ich das
;)

Dhan
07.01.2005, 13:23
Var A = Var 1
Var C = 2
Label1
Var A = +Var No. C
Var C = +1
fork (Var C <= 20)
{
goto Label1
}
Var A = -1
Var B = Var 21
Var C = 22
Label2
Var A = +Var No. C
Var C = +1
fork (Var C <= 40)
{
goto Label2
}
Var B = -1
Fork (Var A = X){
Fork (Var B = Y){
blabla
}
}


(kann man auch mit Cycles statt mit Gotos lösen... ich finds doof, dass der Maker keine richtigen Whiles hat)


oder meintest du mit bis nicht zusammengezählt sondern alle müssen einzeln die Bedingung erfüllen?

dadie
07.01.2005, 13:26
Var A = Var 1
Var C = 2
Label1
Var A = +Var No. C
Var C = +1
fork (Var C <= 20)
{
goto Label1
}
Var A = -1
Var B = Var 21
Var C = 22
Label2
Var A = +Var No. C
Var C = +1
fork (Var C <= 40)
{
goto Label2
}
Var B = -1
Fork (Var A = X){
Fork (Var B = Y){
blabla
}
}


(kann man auch mit Cycles statt mit Gotos lösen... ich finds doof, dass der Maker keine richtigen Whiles hat)



oder meintest du mit bis nicht zusammengezählt sondern alle müssen einzeln die Bedingung erfüllen?


THX

jetzt wird weiter gecoded :D