Othello/Reversi

hallo leute, ich hänge mal wieder und kann mir nich erklärn was falsch ist, wäre nett wenn mir jmd helfen könnte :)

ich hab als hausaufgabe das spiel Reversi oder auch Othello genannt zu schreiben aufbekommen.

ich muss vom mouseover feld alle richtungen überprüfen, ob es möglich ist dem gegner steine abzunehmen und somit ob der spielzug möglich wäre.
die nord richtung wird bereits überprüft.. es funktioniert auch.
bei der nordwest richtung funktioniert es nicht obwohl ich nach dem gleichen schema vorgehe. ich kann es mir nciht erklären ... vllt sitz ich auch schon zulange vor dem rechner :)

hier also der src

Code:
<?xml version="1.0" encoding="iso-8859-1"?>
<html>
<head>
<title></title>
<meta name="author" content="admin">

<SCRIPT LANGUAGE="JavaScript">
<!--
var WHITE=64;
var BLACK=65;
var CLEAN=66;
var MARK=67;

var db=0;
var directions = new Array(8);

function over(y,x)
{
var n = (y*8)+x;
db = docheck(db,x,y,n);

if (db)
{
if (document.images[n].src == document.images[CLEAN].src)
document.images[n].src = "mark.jpg";
}
}

function out(y,x)
{
var n = (y*8)+x;
if (document.images[n].src == document.images[MARK].src)
{
document.images[n].src = "clean.jpg";
db=0;
}
}

function doclick(y,x)
{
var n = (y*8)+x;
if (document.images[n].src == document.images[MARK].src)
{
document.images[n].src = "white.jpg";
if(directions[0]>0)
{
var k=1;
while(document.images[((y-k)*8)+x].src == document.images[BLACK].src)
{
document.images[((y-k)*8)+x].src = "white.jpg";
k++;
}
}
if(directions[1]>0)
{
var k=1;
while(document.images[((y-k)*8)+(x-k)].src == document.images[BLACK].src)
{
document.images[((y-k)*8)+(x-k)].src = "white.jpg";
k++;
}
}
}
}

function docheck(db,x,y,p)
{
var vfield = new Array(8);
vfield[0] = new Array(8);
vfield[1] = new Array(8);
vfield[2] = new Array(8);
vfield[3] = new Array(8);
vfield[4] = new Array(8);
vfield[5] = new Array(8);
vfield[6] = new Array(8);
vfield[7] = new Array(8);

var n=0;

for(var i=0;i<8;i++)
{
for(var j=0;j<8;j++)
{
vfield[i][j] = document.images[n].src;
n++;
}
}

// var directions = new Array(8);
// var sp = (p/8) += "";

// NORD
if(vfield[x][y-1] !== undefined && vfield[x][y-1] == document.images[CLEAN].src)
{
directions[0]=0;
}
else
{

if(vfield[x][y-1] == document.images[BLACK].src)
{
for(var k=2;k<7;k++)
{
if(vfield[x][y-k] !== undefined && vfield[x][y-k] == document.images[WHITE].src)
{
directions[0]=1;
}
}
}
else
{
directions[0]=0;
}
}

// NORD WEST
if(vfield[x-1][y-1] !== undefined && vfield[x-1][y-1] == document.images[CLEAN].src)
{
directions[1]=0;
}
else
{
if(vfield[x-1][y-1] !== undefined && vfield[x-1][y-1] == document.images[BLACK].src)
{
for(var l=2;l<7;l++)
{
if(vfield[x-l][y-l] !== undefined && vfield[x-l][y-l] == document.images[WHITE].src)
{
directions[1]=1;
}
}
}
else
{
directions[1]=0;
}
}

if((directions[0]+directions[1])>0)
{
db = 1;
return db;
}
}
//-->
</SCRIPT>
</head>

<body id="booty" text="#000000" bgcolor="#CCCCCC" link="#FF0000" alink="#FF0000" vlink="#FF0000">

<img src="clean.jpg" Id="f00" onMouseOver="over(0,0);" onMouseOut="out(0,0);" onClick="doclick(0,0);">
<img src="clean.jpg" Id="f01" onMouseOver="over(0,1);" onMouseOut="out(0,1);" onClick="doclick(0,1);">
<img src="clean.jpg" Id="f02" onMouseOver="over(0,2);" onMouseOut="out(0,2);" onClick="doclick(0,2);">
<img src="clean.jpg" Id="f03" onMouseOver="over(0,3);" onMouseOut="out(0,3);" onclick="doclick(0,3);">
<img src="clean.jpg" Id="f04" onMouseOver="over(0,4);" onMouseOut="out(0,4);" onclick="doclick(0,4);">
<img src="clean.jpg" Id="f05" onMouseOver="over(0,5);" onMouseOut="out(0,5);" onclick="doclick(0,5);">
<img src="clean.jpg" Id="f06" onMouseOver="over(0,6);" onMouseOut="out(0,6);" onclick="doclick(0,6);">
<img src="clean.jpg" Id="f07" onMouseOver="over(0,7);" onMouseOut="out(0,7);" onclick="doclick(0,7);">
<br>
<img src="clean.jpg" Id="f10" onMouseOver="over(1,0);" onMouseOut="out(1,0);" onclick="doclick(1,0);">
<img src="clean.jpg" Id="f11" onMouseOver="over(1,1);" onMouseOut="out(1,1);" onclick="doclick(1,1);">
<img src="clean.jpg" Id="f12" onMouseOver="over(1,2);" onMouseOut="out(1,2);" onclick="doclick(1,2);">
<img src="clean.jpg" Id="f13" onMouseOver="over(1,3);" onMouseOut="out(1,3);" onclick="doclick(1,3);">
<img src="clean.jpg" Id="f14" onMouseOver="over(1,4);" onMouseOut="out(1,4);" onclick="doclick(1,4);">
<img src="clean.jpg" Id="f15" onMouseOver="over(1,5);" onMouseOut="out(1,5);" onclick="doclick(1,5);">
<img src="clean.jpg" Id="f16" onMouseOver="over(1,6);" onMouseOut="out(1,6);" onclick="doclick(1,6);">
<img src="clean.jpg" Id="f17" onMouseOver="over(1,7);" onMouseOut="out(1,7);" onclick="doclick(1,7);">
<br>
<img src="clean.jpg" Id="f20" onMouseOver="over(2,0);" onMouseOut="out(2,0);" onclick="doclick(2,0);">
<img src="clean.jpg" Id="f21" onMouseOver="over(2,1);" onMouseOut="out(2,1);" onclick="doclick(2,1);">
<img src="clean.jpg" Id="f22" onMouseOver="over(2,2);" onMouseOut="out(2,2);" onclick="doclick(2,2);">
<img src="white.jpg" Id="f23" onMouseOver="over(2,3);" onMouseOut="out(2,3);" onclick="doclick(2,3);">
<img src="clean.jpg" Id="f24" onMouseOver="over(2,4);" onMouseOut="out(2,4);" onclick="doclick(2,4);">
<img src="clean.jpg" Id="f25" onMouseOver="over(2,5);" onMouseOut="out(2,5);" onclick="doclick(2,5);">
<img src="clean.jpg" Id="f26" onMouseOver="over(2,6);" onMouseOut="out(2,6);" onclick="doclick(2,6);">
<img src="clean.jpg" Id="f27" onMouseOver="over(2,7);" onMouseOut="out(2,7);" onclick="doclick(2,7);">
<br>
<img src="clean.jpg" Id="f30" onMouseOver="over(3,0);" onMouseOut="out(3,0);" onclick="doclick(3,0);">
<img src="clean.jpg" Id="f31" onMouseOver="over(3,1);" onMouseOut="out(3,1);" onclick="doclick(3,1);">
<img src="clean.jpg" Id="f32" onMouseOver="over(3,2);" onMouseOut="out(3,2);" onclick="doclick(3,2);">
<img src="white.jpg" Id="f33" onMouseOver="over(3,3);" onMouseOut="out(3,3);" onclick="doclick(3,3);">
<img src="black.jpg" Id="f34" onMouseOver="over(3,4);" onMouseOut="out(3,4);" onclick="doclick(3,4);">
<img src="clean.jpg" Id="f35" onMouseOver="over(3,5);" onMouseOut="out(3,5);" onclick="doclick(3,5);">
<img src="clean.jpg" Id="f36" onMouseOver="over(3,6);" onMouseOut="out(3,6);" onclick="doclick(3,6);">
<img src="clean.jpg" Id="f37" onMouseOver="over(3,7);" onMouseOut="out(3,7);" onclick="doclick(3,7);">
<br>
<img src="clean.jpg" Id="f40" onMouseOver="over(4,0);" onMouseOut="out(4,0);" onclick="doclick(4,0);">
<img src="clean.jpg" Id="f41" onMouseOver="over(4,1);" onMouseOut="out(4,1);" onclick="doclick(4,1);">
<img src="clean.jpg" Id="f42" onMouseOver="over(4,2);" onMouseOut="out(4,2);" onclick="doclick(4,2);">
<img src="black.jpg" Id="f43" onMouseOver="over(4,3);" onMouseOut="out(4,3);" onclick="doclick(4,3);">
<img src="white.jpg" Id="f44" onMouseOver="over(4,4);" onMouseOut="out(4,4);" onclick="doclick(4,4);">
<img src="clean.jpg" Id="f45" onMouseOver="over(4,5);" onMouseOut="out(4,5);" onclick="doclick(4,5);">
<img src="clean.jpg" Id="f46" onMouseOver="over(4,6);" onMouseOut="out(4,6);" onclick="doclick(4,6);">
<img src="clean.jpg" Id="f47" onMouseOver="over(4,7);" onMouseOut="out(4,7);" onclick="doclick(4,7);">
<br>
<img src="clean.jpg" Id="f50" onMouseOver="over(5,0);" onMouseOut="out(5,0);" onclick="doclick(5,0);">
<img src="clean.jpg" Id="f51" onMouseOver="over(5,1);" onMouseOut="out(5,1);" onclick="doclick(5,1);">
<img src="clean.jpg" Id="f52" onMouseOver="over(5,2);" onMouseOut="out(5,2);" onclick="doclick(5,2);">
<img src="clean.jpg" Id="f53" onMouseOver="over(5,3);" onMouseOut="out(5,3);" onclick="doclick(5,3);">
<img src="clean.jpg" Id="f54" onMouseOver="over(5,4);" onMouseOut="out(5,4);" onclick="doclick(5,4);">
<img src="clean.jpg" Id="f55" onMouseOver="over(5,5);" onMouseOut="out(5,5);" onclick="doclick(5,5);">
<img src="clean.jpg" Id="f56" onMouseOver="over(5,6);" onMouseOut="out(5,6);" onclick="doclick(5,6);">
<img src="clean.jpg" Id="f57" onMouseOver="over(5,7);" onMouseOut="out(5,7);" onclick="doclick(5,7);">
<br>
<img src="clean.jpg" Id="f60" onMouseOver="over(6,0);" onMouseOut="out(6,0);" onclick="doclick(6,0);">
<img src="clean.jpg" Id="f61" onMouseOver="over(6,1);" onMouseOut="out(6,1);" onclick="doclick(6,1);">
<img src="clean.jpg" Id="f62" onMouseOver="over(6,2);" onMouseOut="out(6,2);" onclick="doclick(6,2);">
<img src="clean.jpg" Id="f63" onMouseOver="over(6,3);" onMouseOut="out(6,3);" onclick="doclick(6,3);">
<img src="clean.jpg" Id="f64" onMouseOver="over(6,4);" onMouseOut="out(6,4);" onclick="doclick(6,4);">
<img src="clean.jpg" Id="f65" onMouseOver="over(6,5);" onMouseOut="out(6,5);" onclick="doclick(6,5);">
<img src="clean.jpg" Id="f66" onMouseOver="over(6,6);" onMouseOut="out(6,6);" onclick="doclick(6,6);">
<img src="clean.jpg" Id="f67" onMouseOver="over(6,7);" onMouseOut="out(6,7);" onclick="doclick(6,7);">
<br>
<img src="clean.jpg" Id="f70" onMouseOver="over(7,0);" onMouseOut="out(7,0);" onclick="doclick(7,0);">
<img src="clean.jpg" Id="f71" onMouseOver="over(7,1);" onMouseOut="out(7,1);" onclick="doclick(7,1);">
<img src="clean.jpg" Id="f72" onMouseOver="over(7,2);" onMouseOut="out(7,2);" onclick="doclick(7,2);">
<img src="clean.jpg" Id="f73" onMouseOver="over(7,3);" onMouseOut="out(7,3);" onclick="doclick(7,3);">
<img src="clean.jpg" Id="f74" onMouseOver="over(7,4);" onMouseOut="out(7,4);" onclick="doclick(7,4);">
<img src="clean.jpg" Id="f75" onMouseOver="over(7,5);" onMouseOut="out(7,5);" onclick="doclick(7,5);">
<img src="clean.jpg" Id="f76" onMouseOver="over(7,6);" onMouseOut="out(7,6);" onclick="doclick(7,6);">
<img src="clean.jpg" Id="f77" onMouseOver="over(7,7);" onMouseOut="out(7,7);" onclick="doclick(7,7);">
<br>
<br>
<br>
<img src="white.jpg" Id="white">
<img src="black.jpg" Id="black">
<img src="clean.jpg" Id="clean">
<img src="mark.jpg" Id="mark">
<br><br>
<a href="http://nopaste.php-q.net/193127">JS Source(click me)</a>
<br><a href="http://test.chancers-berlin.de/test/index2.html">Optik Version(click me)</a>
</body>
</html>

danke im vorraus, das ding hier zerstört langsam meine gehirnwindungen :>

ich seh grad die tabs wurden nicht übernommen hier nochmal schöner : sRc
 
Achja, Othello... hab ich auch mal in JS umgesetzt *g

Dein Algorithmus hat aber auch ein logisches Problem. Du schaust, ob das benachbarte Feld dem Gegenspieler gehört und in der Reihe dahinter irgendwo ein eigenes Feld ist... allerdings müsstest du bereits beim ersten Leerfeld dahinter abbrechen.

Und wieso verpasst du den Feldern nicht fortlaufende IDs? Die Rechnung y*8+x aus Zeile 19 haut so nämlich nicht hin, wenn du nur von 1-7, 10-17 usw. nummerierst.
 
danke dir das mit dem logikfehler stimmt soweit, hab das eben geändert:

Code:
                                                 // NORD WEST
                                                 if(vfield[x-1][y-1] == "NULL" || vfield[x-1][y-1] == document.images[CLEAN].src)
                                                 {
                                                 	directions[1]=0;
                                                 }
                                                 	else
                                                         {
                                                         	if(vfield[x-1][y-1] != "NULL" && vfield[x-1][y-1] == document.images[BLACK].src)
                                                                 {
                                                                 	var m=2;
                                                                         while(vfield[x-m][y-m] != "NULL" && vfield[x-m][y-m] != document.images[CLEAN].src)
                                                                         {
                                                                 		if(vfield[x-m][y-m] != "NULL" && vfield[x-m][y-m] == document.images[WHITE].src)
                                                                         	{
                                                                                 	directions[1]=1;
                                                                                 }
                                                                                 m++;
                                                                         }
                                                                 }
                                                                 else
                                                                 {
                                                                 	directions[1]=0;
                                                                 }
                                                         }

n = y*8+x funktioniert hier weil ich per document.images[n] auf 64 IMGs zugreifen kann. bei mouseover übergeben die bilder ihre eigenen koordinaten
Code:
<img src="clean.jpg" Id="f00" onMouseOver="over(0,0);".....
die id hat garnix zu sagen ;>

leider funktiniert das nochnich. außerdem sind züge möglich die eigendlich illegal sind.
ich prüfe erst ob das nächste feld in der jeweiligen richtung clean oder NULL (nicht existent) ist. wenn nicht, dann wird überprüft ob es schwarz ist. wenn ja, wird nach einem weißen feld nach dem schwarzen gesucht. wenn eins gefunden wurde(und kein feld dazwischen unbesetzt oder NULL ist) ist die richtung möglich und der zug legal ... ichsehe kein problem, hab ich nen denkfehler ? oder ist was an der struktur nicht in ordnung ? .. das blöde ist nur wenn ich das morgen meinem IT lehrer zeige kann mir der höchstwarscheinlich nichma sagen wo der fehler ist-.-

danke nochmal für deine hilfe :))
 
Zurück
Oben