Tic Tac Toe

mAu

Erfahrenes Mitglied
Hey Leute,

mir war gestern auf der Arbeit langweilig und da hab ich einfach mal angefangen, mit JS das Spiel Tic Tac Toe zu schreiben.
Das ist natürlich kein Problem, funktioniert auch soweit, aber ich frage mich, ob es nicht ein schöneren Algorithmus zum Prüfen eines eventuellen Sieges gibt.
Zur Zeit prüfe ich per for-Schleife durch, ob in den drei horizontalen oder den drei vertikalen Reihen ein Spieler alle Felder belegt hat und die zwei Diagonalen noch extra. Eine andere Lösung einen Gewinner zu ermitteln, ist mir nicht eingefallen, mir scheint aber, dass es eine geben müsste ...
 
Naja, obs schöner ist, liegt im Auge des Betrachters, hier mal nen anderer Lösungsansatz.

Code:
<html>
<head>
<title>Test</title>
<script type="text/javascript">
<!--
function dec2bin(intInt)
{
    return intInt.toString(2);
}
players=new Array();
players['x']=0;
players['o']=0;
player='x';
j=9;
function ticTacToe(e)
{
  o=(window.event)?e.srcElement:e.target;
  if(o.tagName!='TD'||o.title.match(/\D/))return;
  players[player]+=o.title*1;j--;
  if(dec2bin(players[player]).match(/((111(|.{3}|.{6})$)|1..1..1|1...1...1$|1.1.1..$)/) ||!j)
    {
      if(j){alert(player+ ' hat gewonnen');}location.reload();
    }
  o.title=o.innerHTML=player;
  player=(player=='x')?'o':'x';
  document.getElementsByTagName('strong')[0].innerHTML=player
}
//-->
</script>
<style type="text/css">
<!--
td{cursor:pointer;width:20px;height:20px;font-weight:bold}
-->
</style>
</head>
<body>
<h1><strong>x</strong> am Zug</h1>
<table border="1" onclick="ticTacToe(event)">
  <tr>
    <td title="1">&nbsp;</td>
    <td title="2">&nbsp;</td>
    <td title="4">&nbsp;</td>
  </tr>
  <tr>
    <td title="8">&nbsp;</td>
    <td title="16">&nbsp;</td>
    <td title="32">&nbsp;</td>
  </tr>
  <tr>
    <td title="64">&nbsp;</td>
    <td title="128">&nbsp;</td>
    <td title="256">&nbsp;</td>
  </tr>
</body>
</html>

Es wird quasi jedes Feld mit einem Byte "versehen".
Klickt ein Spieler auf das Feld, wird ihm dieses Byte "gutgeschrieben".

Ob die nötigen Bytes für einen Sieg gesetzt sind, wird dann per RegExp geprüft :-(
 

Neue Beiträge

Zurück