Tic-Tac-Toe
// Online-Spiel TicTacToe (c)2008 dh
var box = new Array(9); // das Spielfeld
var ttt = new Array(8);
ttt[0] = new Array (0,1,2);
ttt[1] = new Array (3,4,5);
ttt[2] = new Array (6,7,8);
ttt[3] = new Array (0,3,6);
ttt[4] = new Array (1,4,7);
ttt[5] = new Array (2,5,8);
ttt[6] = new Array (2,4,6);
ttt[7] = new Array (0,4,8);
function dsum(k) {
s = box[ttt[k][0]] + box[ttt[k][1]] + box[ttt[k][2]];
return s;
}
function dd(m,n) {
danger = ((dsum(m) == 4)&&(dsum(n) == 4)) ? true : false;
return danger;
}
function isGameOver() {
for (k=0; k<=7; k++) {
if ((dsum(k) == 3)||(dsum(k) == 12)) {
gameover = true;
win = k;
}
}
}
var ply = 0; // 0 = Spiel hat noch nicht begonnen
// -1 = Computer ist am Zug
// 1 = Spieler ist am Zug
var image = "";
var iopt = -1;
var win = 0;
var list1 = new Array (0,2,4,7);
var list5 = new Array (2,3,4,8);
var list7 = new Array (1,4,6,8);
var list3 = new Array (0,4,5,6);
var step = 0;
var wait;
function init() {
for (j=0; j<=8; j++)
document.getElementById("b" + j).src = "b00.gif";
for (j=0; j<=8; j++)
box[j] = 0;
step = 0;
gameover = false;
ausgabe ("resultat", "");
}
function computertostart() {
init();
ply = -1;
cset();
}
function usertostart() {
init();
ply = 1;
}
function set(i) {
if ((box[i] == 0)&&(ply == 1)) {
document.getElementById("b" + i).src = "b_x.gif";
box[i] = 4; // Der Wert 4 repräsentiert ein gesetztes Kreuz
step++;
ply = -ply;
wait = window.setTimeout("cset()", 300);
}
}
function cset() {
isGameOver();
if (gameover) { // Der Spieler hat gewonnen
ausgabe ("resultat", "Gratuliere!")
for (k=0; k<=2; k++)
document.getElementById("b" + ttt[win][k]).src = "bxx.gif";
} else {
if (step < 9) {
iopt = -1;
for (k=0; k<=7; k++) {
if (dsum(k) == 2) {
for (l=0; l<=2; l++) {
z = ttt[k][l];
if (box[z] == 0) {
iopt = z;
gameover = true; // Der Computer hat gewonnen
ausgabe ("resultat", "Verloren!");
win = k;
}
}
}
}
if (iopt == -1) {
for (k=0; k<=7; k++) {
if (dsum(k) == 8) {
for (l=0; l<=2; l++) {
z = ttt[k][l];
if (box[z] == 0) iopt = z;
}
}
}
}
if (step == 1) {
if (box[4] == 4) {
z = 2*Math.round(3*Math.random());
if (z == 4) z = 8;
iopt = z;
}
if (box[0] + box[2] + box[6] + box[8] == 4) {
iopt = 4;
}
if (box[1] == 4) {
iopt = list1[Math.round(3*Math.random())];
}
if (box[5] == 4) {
iopt = list5[Math.round(3*Math.random())];
}
if (box[7] == 4) {
iopt = list7[Math.round(3*Math.random())];
}
if (box[3] == 4) {
iopt = list3[Math.round(3*Math.random())];
}
}
if ((step == 3)&&((dsum(6) == 9)||(dsum(7) == 9))) {
if (box[4] == 1) {
iopt = 2*Math.round(3*Math.random()) + 1;
} else {
for (k=0; k<=4; k++) {
if(box[2*k] == 0) iopt = 2*k;
}
}
}
if (iopt == -1) {
if ((box[0] == 0)&&((dd(0,3))||(dd(0,7))||(dd(3,7)))) iopt = 0;
if ((box[1] == 0)&&(dd(0,4))) iopt = 1;
if ((box[2] == 0)&&((dd(0,5))||(dd(0,6))||(dd(5,6)))) iopt = 2;
if ((box[3] == 0)&&(dd(1,3))) iopt = 3;
if ((box[4] == 0)&&((dd(7,6))||(dd(7,1))||(dd(7,4)))) iopt = 4;
if ((box[4] == 0)&&((dd(6,1))||(dd(6,4))||(dd(1,4)))) iopt = 4;
if ((box[5] == 0)&&(dd(1,5))) iopt = 5;
if ((box[6] == 0)&&((dd(2,3))||(dd(2,6))||(dd(3,6)))) iopt = 6;
if ((box[7] == 0)&&(dd(2,4))) iopt = 7;
if ((box[8] == 0)&&((dd(2,7))||(dd(2,5))||(dd(5,7)))) iopt = 8;
}
if ((iopt == -1)&&(step < 8)) {
do z = Math.round(8*Math.random()); while (box[z] != 0);
iopt = z;
}
if (step == 8)
for (k=0; k<=8; k++)
if (box[k] == 0) iopt = k;
document.getElementById("b" + iopt).src = "b_o.gif";
box[iopt] = 1; // Der Wert 1 repräsentiert einen gesetzten Kringel
step++;
if ((step <= 9)&&(!gameover)) ply = -ply;
if (gameover)
for (k=0; k<=2; k++)
document.getElementById("b"+ttt[win][k]).src = "boo.gif";
}
if ((step >= 9)&&(!gameover)) ausgabe ("resultat", "Unentschieden!");
}
}
var defaultNode = document.createTextNode("");
function ausgabe (ST, out) {
// gibt den Wert von out an einer bestimmten Stelle im Dokument aus
with (document.getElementById (ST)) {
outNode = document.createTextNode("");
appendChild (defaultNode);
replaceChild (outNode, document.getElementById(ST).firstChild);
outNode = document.createTextNode(out);
appendChild (defaultNode);
replaceChild (outNode, document.getElementById(ST).firstChild);
}
}
var box = new Array(9); // das Spielfeld
var ttt = new Array(8);
ttt[0] = new Array (0,1,2);
ttt[1] = new Array (3,4,5);
ttt[2] = new Array (6,7,8);
ttt[3] = new Array (0,3,6);
ttt[4] = new Array (1,4,7);
ttt[5] = new Array (2,5,8);
ttt[6] = new Array (2,4,6);
ttt[7] = new Array (0,4,8);
function dsum(k) {
s = box[ttt[k][0]] + box[ttt[k][1]] + box[ttt[k][2]];
return s;
}
function dd(m,n) {
danger = ((dsum(m) == 4)&&(dsum(n) == 4)) ? true : false;
return danger;
}
function isGameOver() {
for (k=0; k<=7; k++) {
if ((dsum(k) == 3)||(dsum(k) == 12)) {
gameover = true;
win = k;
}
}
}
var ply = 0; // 0 = Spiel hat noch nicht begonnen
// -1 = Computer ist am Zug
// 1 = Spieler ist am Zug
var image = "";
var iopt = -1;
var win = 0;
var list1 = new Array (0,2,4,7);
var list5 = new Array (2,3,4,8);
var list7 = new Array (1,4,6,8);
var list3 = new Array (0,4,5,6);
var step = 0;
var wait;
function init() {
for (j=0; j<=8; j++)
document.getElementById("b" + j).src = "b00.gif";
for (j=0; j<=8; j++)
box[j] = 0;
step = 0;
gameover = false;
ausgabe ("resultat", "");
}
function computertostart() {
init();
ply = -1;
cset();
}
function usertostart() {
init();
ply = 1;
}
function set(i) {
if ((box[i] == 0)&&(ply == 1)) {
document.getElementById("b" + i).src = "b_x.gif";
box[i] = 4; // Der Wert 4 repräsentiert ein gesetztes Kreuz
step++;
ply = -ply;
wait = window.setTimeout("cset()", 300);
}
}
function cset() {
isGameOver();
if (gameover) { // Der Spieler hat gewonnen
ausgabe ("resultat", "Gratuliere!")
for (k=0; k<=2; k++)
document.getElementById("b" + ttt[win][k]).src = "bxx.gif";
} else {
if (step < 9) {
iopt = -1;
for (k=0; k<=7; k++) {
if (dsum(k) == 2) {
for (l=0; l<=2; l++) {
z = ttt[k][l];
if (box[z] == 0) {
iopt = z;
gameover = true; // Der Computer hat gewonnen
ausgabe ("resultat", "Verloren!");
win = k;
}
}
}
}
if (iopt == -1) {
for (k=0; k<=7; k++) {
if (dsum(k) == 8) {
for (l=0; l<=2; l++) {
z = ttt[k][l];
if (box[z] == 0) iopt = z;
}
}
}
}
if (step == 1) {
if (box[4] == 4) {
z = 2*Math.round(3*Math.random());
if (z == 4) z = 8;
iopt = z;
}
if (box[0] + box[2] + box[6] + box[8] == 4) {
iopt = 4;
}
if (box[1] == 4) {
iopt = list1[Math.round(3*Math.random())];
}
if (box[5] == 4) {
iopt = list5[Math.round(3*Math.random())];
}
if (box[7] == 4) {
iopt = list7[Math.round(3*Math.random())];
}
if (box[3] == 4) {
iopt = list3[Math.round(3*Math.random())];
}
}
if ((step == 3)&&((dsum(6) == 9)||(dsum(7) == 9))) {
if (box[4] == 1) {
iopt = 2*Math.round(3*Math.random()) + 1;
} else {
for (k=0; k<=4; k++) {
if(box[2*k] == 0) iopt = 2*k;
}
}
}
if (iopt == -1) {
if ((box[0] == 0)&&((dd(0,3))||(dd(0,7))||(dd(3,7)))) iopt = 0;
if ((box[1] == 0)&&(dd(0,4))) iopt = 1;
if ((box[2] == 0)&&((dd(0,5))||(dd(0,6))||(dd(5,6)))) iopt = 2;
if ((box[3] == 0)&&(dd(1,3))) iopt = 3;
if ((box[4] == 0)&&((dd(7,6))||(dd(7,1))||(dd(7,4)))) iopt = 4;
if ((box[4] == 0)&&((dd(6,1))||(dd(6,4))||(dd(1,4)))) iopt = 4;
if ((box[5] == 0)&&(dd(1,5))) iopt = 5;
if ((box[6] == 0)&&((dd(2,3))||(dd(2,6))||(dd(3,6)))) iopt = 6;
if ((box[7] == 0)&&(dd(2,4))) iopt = 7;
if ((box[8] == 0)&&((dd(2,7))||(dd(2,5))||(dd(5,7)))) iopt = 8;
}
if ((iopt == -1)&&(step < 8)) {
do z = Math.round(8*Math.random()); while (box[z] != 0);
iopt = z;
}
if (step == 8)
for (k=0; k<=8; k++)
if (box[k] == 0) iopt = k;
document.getElementById("b" + iopt).src = "b_o.gif";
box[iopt] = 1; // Der Wert 1 repräsentiert einen gesetzten Kringel
step++;
if ((step <= 9)&&(!gameover)) ply = -ply;
if (gameover)
for (k=0; k<=2; k++)
document.getElementById("b"+ttt[win][k]).src = "boo.gif";
}
if ((step >= 9)&&(!gameover)) ausgabe ("resultat", "Unentschieden!");
}
}
var defaultNode = document.createTextNode("");
function ausgabe (ST, out) {
// gibt den Wert von out an einer bestimmten Stelle im Dokument aus
with (document.getElementById (ST)) {
outNode = document.createTextNode("");
appendChild (defaultNode);
replaceChild (outNode, document.getElementById(ST).firstChild);
outNode = document.createTextNode(out);
appendChild (defaultNode);
replaceChild (outNode, document.getElementById(ST).firstChild);
}
}