Schach: Bewegungsradius der Figuren abchecken?!?
Übersicht

![]() |
BtbNBetreff: Schach: Bewegungsradius der Figuren abchecken?!? |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzBasic: [AUSKLAPPEN] Function ZugLegal(figur,vonX,vonY,zuX,zuY) Also, mein Problem liegt bei den Figuren, die bis zur Nächsten figur gehen können, und das nur auf einer Gerade Linie(Turm,Läufer,Dame). Wie ihr seht, habe ich beim Turm meinen Probleme. Die Funktionsweise der Funktion: Man gibt ihr die Nummer der Figur, ihren aktuellen Standpukt und den Zielort an. Und dann bekommt men Ture zurück, wenn sie dort hin darf, False, wenn nicht. Aber wie soll ichs anstellen, dass der Turm nur bis zur nächsten figur gehen kann, und diese, Wenn feindlich auch schlagen kann? |
||
KHORN |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ganz einfach...
Als erstes solltest du lieber Zahlen zurückgeben ... 0. Wenn er nicht dorthin gehen kann, 1 Wenn er dorthin gehen kann, 2 Wenn dort ein Gegner ist. Aber das reicht ja nicht ^^ Du musst dir eine Funktion coden die überprüft ob an einer bestimmten Position eine Figur ist. Und diese Funktion soll auch Zahlen zurückgeben. 0: Wenn dort keine Figur steht, 1: Wenn dort eine Figur steht, die nicht vom Gegner ist und 2: Wenn dort eine feindliche Figur steht. Dann überprüfst du einfach in der Funktion "ZugLegal" ob die stelle Frei ist oder nicht und gibst die entsprechende Zahl zurück ![]() Hoffe du hast was verstanden ...^^ MfG KHORN |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
In dem Array row(7,7) habe ich das komplette Feld gespeichert.
Weiße Figuren haben die Nummern 1-6, die Schwarzen 7 bis 12. Und null, wenn dort keine Figur is. Folglich hab ich bereits eine solche Funktion ^^ Aber wenn ich einfach nur überprüfe, ob das Feld frei ist, könnte jde figur ja auf jedes Feld! Also kommt das nicht in Frage. Währ ja auch zu Einfach... |
||
KHORN |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
dann mach :
BlitzBasic: [AUSKLAPPEN] If(SelectedFigurId = 1) (Ich rechne damit, das 1 ein normaler Bauer ist) Das einzige was du tun musst ist, die ausgewählte Figur, also dessen id in ein er Variable zu speichern. Ich denke das dürfte nicht alzu schwer sein. Gruß KHORN |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Verstehst du mein Problem nicht?
naja, ok: Ein Schachfeld 2 : Turm 1: andere gengnerische Figur 0: Eigene Figur ######## ###1#### ######## ######## ###2#### ######## ###0#### ######## So, wie stell ichs jetzt an, dass der Turm nur bis AUF das Feld mit der 1 kann, und bis ein Feld VOR der eigenen Figur. Edit: Ich sollte vieleicht jetzt noch was zu meinem System sagen: Ich habe ein Array row(x,y), in dem ich für jede X/Y koordinate speicher, was da für eine Figur steht. |
||
#pointer#Gast |
![]() Antworten mit Zitat |
|
---|---|---|
ich code auch gerade an einem Schachspiel.
Bisher können sich nur Bauern, Pferd und König bewegen, sind ja auch die einfachen ![]() aber die restlichen Figuren werden bald folgen, das ist ja dann nur noch Formsache. du kannst dich ja mal bei mir melden (am besten per ICQ) dann zeig ich dir mal meine Funktion. mfg #pointer# |
||
KHORN |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Doch ich verstehe sehr wohl dein problem.
Es ist nur schwer zu erklären :/ Ich glaub ich Code auch aus fun ein Schachspiel ^^ (OpenSource ![]() hmm... Ich kanns einfach nicht so gut erklären ![]() Oder du verstehst es nicht *fg* Gruß KHORN |
||
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzBasic: [AUSKLAPPEN]
habs nich getestet. aber das prinzip : du testet einfach die felder in der richtung in die der turm ziehen will, solange bis eben ein feld kommt welches nicht null ist ... |
||
A Cray is the only computer that runs an endless loop in less than four hours. |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
ok, hab jetzt auch selbst geschaft.
Hier meine Lösung: BlitzBasic: [AUSKLAPPEN] min = -1 Im Prizip das selbe ^^ Aber jetzt bin ich beim Läufer, für Vorschläge bin ich immer offen! |
||
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
ist es so viel komplizierter die diagonalen zu testen? | ||
A Cray is the only computer that runs an endless loop in less than four hours. |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
jep, ist es ^^
Vor dem Problem stehe ich gerade... Edit: Ich hab gerade gemerkt, das dein Prinzip nicht in meine Funktion past, sorry. |
||
![]() |
Xaron |
![]() Antworten mit Zitat ![]() |
---|---|---|
BORNtobeNAMELESS hat Folgendes geschrieben: jep, ist es ^^
Ist es nicht. Du musst doch nur x _und_ y erhöhen, anstatt nur x _oder_ y. ![]() Gruß - Xaron |
||
Cerberus X - Monkey X Reloaded! |
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
wenn mein prinzip nicht in deine funktion passt, dann ist eben deine funktion kacke... machs so wie ichs gesagt habe, hör auf xaron und alles wird gut. | ||
A Cray is the only computer that runs an endless loop in less than four hours. |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habs jetzt geschaft, mit im im Prizip schon dein Prinzip, nur anders umgesetzt.
Die funktion habe ich bei Rapidshare hochgeladen, flas sie ma wer begutachten will. http://rapidshare.de/files/376...on.bb.html Achtung: Die funktion funktioniert nicht , wenn man sie in sein Spiel kopiert! Sie ist speziell auf meine Engine zugeschnitten. Das nächste Problem ist die Rochade, das sollte aber kein alzugroßes Problem sein. Für Vorschläge bin ich aber immer offen ^^ |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group