HTML: <td align="center" valign="top" width="85%" bgcolor="#E6EFF7"> <font face="Verdana" size="2"><script type="text/javascript" src="/plugins/question/game.js"></script> <style> .PLAYER { text-align: center; border-width: 3px; background-color: yellow; border-style: outset; paddings: 3px; cursor:hand } </style> <iframe id="gameframe" style="width:0px;height:0px;border:none"></iframe> <script><!-- addPoints(1,-5); 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 +" победил!!!"); if (n == '1') { addPoints(1,10); } } function CompMove( i ) { var j = MoveAble[i]; var CompCell = NumCols*( NumRows - j - 1 ) + i; fGame = 1; ClickCell( GameField.cells[ CompCell ], i, j ); } function TestWin( target, x, y ) { var i, j; // по вертикали for( i=1; i<4 && !( y<i || Cell[y-i][x] != target ); i++ ); if( i == 4 ) return 1; // по горизонтали for( i=1; i<4 && !( x<i || Cell[y][x-i] != target); i++ ); for( j=1; j<4 && !( (x+j==NumCols) || Cell[y][x+j] != target ); j++ ); if( i+j > 4 ) return 1; // по диагонали "/" for( i=1; i<4 && !( x<i || y<i || Cell[y-i][x-i] != target); i++ ); for( j=1; j<4 && !( (x+j==NumCols) || (y+j==NumRows) || Cell[y+j][x+j] != target ); j++ ); if( i+j > 4 ) return 1; // "\" for( i=1; i<4 && !( x<i || (y+i==NumRows) || Cell[y+i][x-i] != target); i++ ); for( j=1; j<4 && !( (x+j==NumCols) || y<j || Cell[y-j][x+j] != target ); j++ ); if( i+j > 4 ) return 1; return 0; } function CanMove( x, y ) { return ( !Cell[y][x] && (!y || (y>0 && Cell[y-1][x])) ); } function OverCell( obj ) { if( PageLoaded ) { X = obj.cellIndex; Y = (NumRows-1)-Math.floor( (obj.sourceIndex-FirstCellIndex)/(NumCols+1) ); if( fGame && CanMove(X,Y) ) { obj.bgColor = (Player1)? ColorActive1 : ColorActive2; } } } function InputName( obj ) { var s = prompt( "Введите имя:",obj.innerText ); if( s ) obj.innerText = s; } function CompCheckBox( obj ) { var c1 = d.Player1.CompCheck.checked; var c2 = d.Player2.CompCheck.checked; if( c1 && c2 ) { if( confirm("Комп мочит компа?!") ) Computer = 2 else obj.checked=0; } else if( !c1 && !c2 ) Computer = 0; else Computer = ((Player1 && c1) || (!Player1 && c2))? 3: 1; if( fGame && Computer > 1 ) CompAttack(); } function DisplayRules() { alert( "Цель: поставить подряд 4 кирпича одного цвета\n" + "(по вертикали, горизонтали или диагонали).\n" + "Заполнение поля идет СНИЗУ ВВЕРХ. То есть вы не\n" + "можете поставить кирпич, если под ним пусто.\n\n" + "Интереснее играть вдвоем, т.е. против другого человека.\n" + "Чтобы поменять имя игрока, надо просто ткнуть на его имя.\n\n" + "Чтобы посмотреть демонстрацию, выберите задержку\n" + "равной 1 сек и отметьте две галочки Computer.\n\n" + "Алгоритм не доработан, поэтому комп туповатый. :)\n\n" + "Шевели мозгами, и все получится." ); } // Cookie function setCookie(name, value) { var expi=new Date(); expi.setDate( expi.getDate() + 1000 ) document.cookie = name + "=" + escape(value) + ';expires='+expi.toGMTString() } function getCookie(name) { var c = new String( document.cookie ) var prefix = name + "=" var start = c.indexOf( prefix ) if( start == -1 ) return null var end = c.indexOf( ";", start+prefix.length ) if( end == -1 ) end = c.length var value = c.substring( start + prefix.length, end ) return unescape( value ) } //--> </script> </head> <!-- ***************************( BODY )*************************** --> <body onload="Initialize()"> <div align="center"> <table id=first_tbl border="0" cellpadding="0" width="100%" height="20%"> <tr><td width="100%" valign="middle"><H1 align="center"><font color="#0000FF">Игра - Кирпичики</font></h1></tr> </table> <table border="0" cellpadding="0" width="100%"> <tr> <td width="25%" align="center" valign="top" style="padding-right: 30"> <p id="Name1" class="PLAYER" style="border-color: blue" onclick="InputName(this);setCookie(cook_name1,this.innerText)">Ты</p> <form name="Player1"><input type="hidden" name="CompCheck" onclick="CompCheckBox(this)" value="ON" id=c1><label for=c1>Ты синими</label></form> </td> <td width="50%" valign="top"> <table ID="field" width="100%" border="1" cellpadding="0" cellspacing="0"> <script language="JavaScript"> var w = d.all.first_tbl.clientWidth/(2*NumCols) for( var i=0; i < NumRows; i++ ) { document.write( "<tr>" ); for( var j=0; j < NumCols; j++ ) { document.write( "<td width=", w, " height=", w, " onMouseOver=OverCell(this)", " onMouseOut='if( !Cell[Y][X] ) this.bgColor=\"\";'", " onClick=ClickCell(this)> </td>" ); } document.write( "</tr>" ); } </script> </table> </td> <td width="25%" align="center" valign="top" style="padding-left: 30"> <p id="Name2" class="PLAYER" style="border-color: red" onclick="InputName(this);setCookie(cook_name2,this.innerText)">Комп</p> <form name="Player2"><input type="hidden" name="CompCheck" onclick="CompCheckBox(this)" checked value="ON" id=c2><label for=c2>computer</label></form> </td> </table> <table border="0" cellpadding="0" width="100%" height="18%" cellspacing="0"> <tr> <td width="33%" align="left" valign="bottom"> <form name="Rules"> <input class=btn type="button" value="Правила" onclick="DisplayRules()"></form> </td> <td width="33%" align="center" valign="bottom"> <form name="NewGame"><input class=btn type="button" value="Новая игра" onclick="StartGame(); addPoints(1,-5);"></form> </td> <td width="33%" align="right" valign="bottom"> <form>Задержка: <select class=btn style="background:white;cursor:default" name="DelayList" onchange="Delay=this.options[this.selectedIndex].value"> <option value="0" selected>0 <option value="500">0.5 <option value="1000">1 <option value="1500">1.5 <option value="2000">2 <option value="5000">5</select> сек. </form> </td> В общем проблема... работает только на ишаке ( Как исправить??? Если сделаете буду ОЧЕНЬ благодарен... ЗЫ... есть еще парочка таких скриптов...
Мдя... Проще повеситься... 1. начало: <td>...<font>...<script>, а в строке 266: </head> - это вообще как? 2. Никаких d.all.tags... юзайте d.getElementById, d.getElementsByTagName. 3. Что находится здесь - /plugins/question/game.js ? 4. Заменить innerText хотя бы на innerHTML Все, больше ниасилил. Вот ссылка.