Есть код игрушки Fastmind (со Stamina-ой шла, еси слышали). Написана давненько. Сейчас работает только в Ослике. Мне надо заставить ее заработать и в Опере. С JS не сталкивался. Кто поможет/подскажет?
Код:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Fastmind</title>
<style>
.PLAYER
{ text-align: center; border-widths: 4pt; background-color: yellow; border-style: outset; paddings: 4pt; }
</style>
<script><!--
d = document
NumCols = 10
NumRows = 8
ColorPlayer1 = "blue"
ColorPlayer2 = "red"
ColorActive1 = "#AAAAFF"
ColorActive2 = "#FFAAAA"
Player1 = new Boolean(true); // ходит первый игрок (тот, что слева)
Computer = 1; // 0, 1, 2 - число компьютерных игроков; 3 => сейчас ход компа
fGame = 1;
Delay = 0; // Время (мс) ответа компа
Cell = new Array( NumRows );
for( var i=0; i < NumRows; i++ )
Cell[i] = new Array( NumCols );
MoveAble = new Array( NumCols );
Prioritets = new Array( NumCols );
cook_name1 = "user_1"
cook_name2 = "user_2"
PageLoaded = false;
function Initialize()
{ PageLoaded = true;
// читаем имена из куков
var value = getCookie(cook_name1)
if( value ) Name1.innerText = value
value = getCookie(cook_name2)
if( value ) Name2.innerText = value
GameField = d.all.tags("table")["field"];
FirstCellIndex = GameField.cells[0].sourceIndex;
StartGame(); }
function StartGame()
{ for( var i=0; i < NumRows; i++ )
for( var j=0; j < NumCols; j++ )
Cell[i][j] = 0;
for( var k=0; k < NumRows*NumCols; k++ )
GameField.cells[k].bgColor="";
fGame = 1;
if( Computer > 1 )
CompAttack(); }
function SetPrioritet( col )
{ var enemy = (Player1)? 2: 1;
var my = (Player1)? 1: 2;
var row = MoveAble[col];
if( row == NumRows )
{ Prioritets[col] = 0; return; }
if( row+1 < NumRows )
if( TestWin(enemy,col,row+1) )
{ Prioritets[col] = 1; return; }
SetRelativePr( enemy, col, 0 )
SetRelativePr( my, col, 1 )
}
function SetRelativePr( target, col, bonus )
{ var row = MoveAble[col];
Cell[row][col] = target;
for( var i=0; i<NumCols; i++ )
if( MoveAble[i] < NumRows )
if( TestWin(target,i,MoveAble[i]) )
{ Prioritets[col]++; Prioritets[i]++; }
Cell[row][col] = 0; }
function CompAttack()
{ var i, j;
// выбираем возможные ходы
for( i=0; i<NumCols; i++ )
{
for( j=0; j<NumRows && !CanMove(i,j); j++ );
// "шаг до победы"
if( (MoveAble[i]=j) != NumRows )
if( TestWin((Player1)?1:2, i, MoveAble[i]) )
{ CompMove( i ); return; }
}
// "шаг до поражения"
for( i=0; i<NumCols; i++ )
if( MoveAble[i] != NumRows )
if( TestWin((Player1)?2:1, i, MoveAble[i]) )
{ CompMove( i ); return; }
for( i=0; i < NumCols; i++ )
Prioritets[i] = 5;
for( i=0; i < NumCols; i++ )
SetPrioritet(i);
// выбираем один из столбцов с макс. приоритетом
var Max=0, NumMax=0;
for( i=0; i < NumCols; i++ )
{
if( Prioritets[i] > Max )
{ Max = Prioritets[i]; NumMax = 0; }
if( Prioritets[i] == Max )
NumMax++;
}
if( !Max )
{
alert("Ничья!");
return;
}
var Maxest = 1 + GetRandom( NumMax );
for( i=0; Maxest > 0; i++ )
if( Prioritets[i] == Max )
Maxest--;
CompMove( --i ); }
function GetRandom( max )
{ return( Math.floor( Math.random()*max ) ); }
function ClickCell( obj, x, y )
{ if( ClickCell.arguments.length == 1 ) {
x=X; y=Y; }
if( !fGame || !CanMove(x,y) )
return;
Cell[y][x] = (Player1)? 1: 2;
obj.bgColor = (Player1)? ColorPlayer1 : ColorPlayer2;
if( TestWin( (Player1)?1:2, x, y ) )
Win();
Player1=!Player1;
if( Computer && Computer !=2 )
Computer = (Computer==1)? 3: 1;
if( fGame && Computer > 1 )
{
fGame = 0;
setTimeout( "CompAttack()", Delay );
}
}
function Win()
{
fGame = 0;
var n = (Player1)? 1: 2;
alert( d.all.tags("p")["Name"+n].innerText +" победил!!!")
}
function CompMove( i )
{
var j = MoveAble[i];
var CompCell = NumCols*( NumRows - j - 1 ) + i;
fGame = 1;
ClickCell( GameField.cells[ CompCell ], i, j );
}
... Продолжение...
"I believe I can fly" - C++, "What do you want from me" - Delphi, "Yesterday" - Pascal, "Let it be" - C#... Программисты-музыканты-полиглоты поймут