Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2013, 18:14   #1
Izobara
Форумчанин
 
Аватар для Izobara
 
Регистрация: 26.12.2012
Сообщений: 227
По умолчанию JS работает только в IE - заставить и в Opera

Есть код игрушки 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#... Программисты-музыканты-полиглоты поймут
Izobara вне форума Ответить с цитированием
Старый 03.03.2013, 18:15   #2
Izobara
Форумчанин
 
Аватар для Izobara
 
Регистрация: 26.12.2012
Сообщений: 227
По умолчанию

Код:
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("Идея не моя. Ну и ладно...\n\n"
+ "Цель: поставить подряд 4 кирпича одного цвета\n"
+ "(по вертикали, горизонтали или диагонали).\n"
+ "Заполнение поля идет СНИЗУ ВВЕРХ. То есть вы не\n"
+ "может поставить кирпич, если под ним пусто.\n\n"
+ "Интереснее играть вдвоем, т.е. против другого человека.\n"
+ "Чтобы поменять имя игрока надо просто ткнуть на его имя.\n\n"
+ "Чтобы посмотреть демонстрацию выберите задержку\n"
+ "равной 0.5 сек и отметьте две галочки 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>Fastmind</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="checkbox" name="CompCheck" onclick="CompCheckBox(this)" value="ON" id=c1><label for=c1>computer</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)>&nbsp;</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)">CPU</p>
<form name="Player2"><input type="checkbox" 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">&nbsp; <input type="button" value="Правила" onclick="DisplayRules()"></form>
</td>
<td width="33%" align="center" valign="bottom">
<form name="NewGame"><input type="button" value="Новая игра" onclick="StartGame()"></form>
</td>
<td width="33%" align="right" valign="bottom">
<form>Задержка:&nbsp; <select 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="15000">5</select> сек.&nbsp;&nbsp;
</form>
</td>
</tr>
</table>
</body>
</html>
"I believe I can fly" - C++, "What do you want from me" - Delphi, "Yesterday" - Pascal, "Let it be" - C#... Программисты-музыканты-полиглоты поймут
Izobara вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает функция click() в Opera, как исправить? Arassir JavaScript, Ajax 8 24.05.2012 16:34
Google Adsense + Opera Mini не работает misher Свободное общение 9 24.04.2011 11:43
Сайт не отображается в IE и Opera. Отображается только в FireFox. Roman_K HTML и CSS 3 03.02.2011 22:32
Opera не работает! Masim Помощь студентам 3 01.02.2011 17:32
Комментарии. Только при пин-коде. Почему работает только 1 пи код? Bushel PHP 1 23.10.2010 18:21