За последние 24 часа нас посетили 19399 программистов и 1629 роботов. Сейчас ищут 1115 программистов ...

Помогите выправить несколько скриптов... Игры :))

Тема в разделе "JavaScript и AJAX", создана пользователем EvelRus, 20 фев 2008.

  1. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    HTML:
    1. <td align="center" valign="top" width="85%" bgcolor="#E6EFF7">
    2. <font face="Verdana" size="2"><script type="text/javascript" src="/plugins/question/game.js"></script>
    3. .PLAYER
    4. {
    5.     text-align: center;
    6.     border-width: 3px;
    7.     background-color: yellow;
    8.     border-style: outset;
    9.     paddings: 3px;
    10.     cursor:hand
    11. }
    12. <iframe id="gameframe" style="width:0px;height:0px;border:none"></iframe>
    13. <script><!--
    14. addPoints(1,-5);
    15. d = document
    16. NumCols = 10
    17. NumRows = 8
    18. ColorPlayer1 = "blue"
    19. ColorPlayer2 = "red"
    20. ColorActive1 = "#AAAAFF"
    21. ColorActive2 = "#FFAAAA"
    22. Player1  = new Boolean(true);   // ходит первый игрок (тот, что слева)
    23. Computer = 1;       // 0, 1, 2 - число компьютерных игроков; 3 => сейчас ход компа
    24. fGame = 1;
    25. Delay = 0;      // Время (мс) ответа компа
    26. Cell = new Array( NumRows );
    27. for( var i=0; i < NumRows; i++ )
    28.     Cell[i] = new Array( NumCols );
    29.    
    30. MoveAble = new Array( NumCols );
    31. Prioritets = new Array( NumCols );
    32. cook_name1 = "user_1"
    33. cook_name2 = "user_2"
    34. PageLoaded = false;
    35. function Initialize()
    36. {
    37.     PageLoaded = true;
    38.     // читаем имена из куков
    39.     var value = getCookie(cook_name1)
    40.     if( value ) Name1.innerText = value
    41.     value = getCookie(cook_name2)
    42.     if( value ) Name2.innerText = value
    43.     GameField = d.all.tags("table")["field"];
    44.     FirstCellIndex = GameField.cells[0].sourceIndex;
    45.     StartGame();
    46. }
    47. function StartGame()
    48. {
    49.     for( var i=0; i < NumRows; i++ )
    50.         for( var j=0; j < NumCols; j++ )
    51.             Cell[i][j] = 0;
    52.     for( var k=0; k < NumRows*NumCols; k++ )
    53.         GameField.cells[k].bgColor="";
    54.     fGame = 1;
    55.     if( Computer > 1 )
    56.         CompAttack();
    57. }
    58. function SetPrioritet( col )
    59. {
    60.     var enemy = (Player1)? 2: 1;
    61.     var my = (Player1)? 1: 2;
    62.     var row = MoveAble[col];
    63.     if( row == NumRows )
    64.     { Prioritets[col] = 0; return; }
    65.     if( row+1 < NumRows )
    66.         if( TestWin(enemy,col,row+1) )
    67.         { Prioritets[col] = 1; return; }
    68.     SetRelativePr( enemy, col, 0 )
    69.     SetRelativePr(    my, col, 1 )
    70. }
    71. function SetRelativePr( target, col, bonus )
    72. {
    73.     var row = MoveAble[col];
    74.     Cell[row][col] = target;
    75.     for( var i=0; i<NumCols; i++ )
    76.         if( MoveAble[i] < NumRows )
    77.             if( TestWin(target,i,MoveAble[i]) )
    78.             {
    79.                 Prioritets[col]++;
    80.                 Prioritets[i]++;
    81.             }
    82.     Cell[row][col] = 0;
    83. }
    84. function CompAttack()
    85. {
    86.     var i, j;
    87.     // выбираем возможные ходы
    88.     for( i=0; i<NumCols; i++ )
    89.     {
    90.         for( j=0; j<NumRows && !CanMove(i,j); j++ );
    91.         // "шаг до победы"
    92.         if( (MoveAble[i]=j) != NumRows )
    93.             if( TestWin((Player1)?1:2, i, MoveAble[i]) )
    94.                 { CompMove( i ); return; }
    95.     }
    96.            
    97.     // "шаг до поражения"
    98.     for( i=0; i<NumCols; i++ )
    99.         if( MoveAble[i] != NumRows )
    100.             if( TestWin((Player1)?2:1, i, MoveAble[i]) )
    101.                 { CompMove( i ); return; }
    102.     for( i=0; i < NumCols; i++ )
    103.         Prioritets[i] = 5;
    104.     for( i=0; i < NumCols; i++ )
    105.         SetPrioritet(i);
    106.     // выбираем один из столбцов с макс. приоритетом
    107.     var Max=0, NumMax=0;
    108.     for( i=0; i < NumCols; i++ )
    109.     {
    110.         if( Prioritets[i] > Max )
    111.             { Max = Prioritets[i]; NumMax = 0; }
    112.         if( Prioritets[i] == Max )
    113.             NumMax++;
    114.     }
    115.     if( !Max )
    116.     {  
    117.         alert("Ничья!");
    118.         return;
    119.     }
    120.     var Maxest = 1 + GetRandom( NumMax );
    121.     for( i=0; Maxest > 0; i++ )
    122.         if( Prioritets[i] == Max )
    123.             Maxest--;
    124.     CompMove( --i );
    125. }
    126. function GetRandom( max )
    127. {
    128.     return( Math.floor( Math.random()*max ) );
    129. }
    130. function ClickCell( obj, x, y )
    131. {
    132.     if( ClickCell.arguments.length == 1 )   {
    133.         x=X; y=Y;
    134.     }
    135.     if( !fGame || !CanMove(x,y) )
    136.         return;
    137.     Cell[y][x] = (Player1)? 1: 2;
    138.     obj.bgColor = (Player1)? ColorPlayer1 : ColorPlayer2;
    139.     if( TestWin( (Player1)?1:2, x, y ) )
    140.         Win();
    141.     Player1=!Player1;
    142.    
    143.     if( Computer && Computer !=2 )
    144.         Computer = (Computer==1)? 3: 1;
    145.     if( fGame && Computer > 1 )
    146.     {
    147.         fGame = 0;
    148.         setTimeout( "CompAttack()", Delay );
    149.     }
    150. }
    151. function Win()
    152. {
    153.     fGame = 0;
    154.     var n = (Player1)? 1: 2;
    155.     alert( d.all.tags("p")["Name"+n].innerText +" победил!!!");
    156.         if (n == '1')
    157.          {
    158.            addPoints(1,10);
    159.          }
    160. }
    161. function CompMove( i )
    162. {
    163.     var j = MoveAble[i];
    164.     var CompCell = NumCols*( NumRows - j - 1 ) + i;
    165.     fGame = 1;
    166.     ClickCell( GameField.cells[ CompCell ], i, j );
    167. }
    168. function TestWin( target, x, y )
    169. {
    170.     var i, j;
    171.     // по вертикали
    172.     for( i=1; i<4 && !( y<i || Cell[y-i][x] != target ); i++ );
    173.     if( i == 4 ) return 1;
    174.     // по горизонтали
    175.     for( i=1; i<4 && !( x<i || Cell[y][x-i] != target); i++ );
    176.     for( j=1; j<4 && !( (x+j==NumCols) || Cell[y][x+j] != target ); j++ );
    177.     if( i+j > 4 ) return 1;
    178.     // по диагонали "/"
    179.     for( i=1; i<4 && !( x<i || y<i || Cell[y-i][x-i] != target); i++ );
    180.     for( j=1; j<4 && !( (x+j==NumCols) || (y+j==NumRows) || Cell[y+j][x+j] != target ); j++ );
    181.     if( i+j > 4 ) return 1;
    182.     // "\"
    183.     for( i=1; i<4 && !( x<i || (y+i==NumRows) || Cell[y+i][x-i] != target); i++ );
    184.     for( j=1; j<4 && !( (x+j==NumCols) || y<j || Cell[y-j][x+j] != target ); j++ );
    185.     if( i+j > 4 ) return 1;
    186.     return 0;
    187. }
    188. function CanMove( x, y )
    189. {
    190.     return ( !Cell[y][x] && (!y || (y>0 && Cell[y-1][x])) );
    191. }
    192. function OverCell( obj )
    193. {
    194.     if( PageLoaded )
    195.     {
    196.         X = obj.cellIndex;
    197.         Y = (NumRows-1)-Math.floor( (obj.sourceIndex-FirstCellIndex)/(NumCols+1) );
    198.         if( fGame && CanMove(X,Y) )
    199.         {
    200.             obj.bgColor = (Player1)? ColorActive1 : ColorActive2;
    201.         }
    202.     }
    203. }
    204. function InputName( obj )
    205. {
    206.     var s = prompt( "Введите имя:",obj.innerText );
    207.     if( s ) obj.innerText = s;
    208. }
    209. function CompCheckBox( obj )
    210. {
    211.     var c1 = d.Player1.CompCheck.checked;
    212.     var c2 = d.Player2.CompCheck.checked;
    213.     if( c1 && c2 )
    214.     {
    215.         if( confirm("Комп мочит компа?!") )
    216.             Computer = 2
    217.         else
    218.             obj.checked=0;
    219.     }
    220.     else
    221.     if( !c1 && !c2 )
    222.         Computer = 0;
    223.     else
    224.         Computer = ((Player1 && c1) || (!Player1 && c2))? 3: 1;
    225.     if( fGame && Computer > 1 )
    226.         CompAttack();
    227. }
    228. function DisplayRules()
    229. {
    230.     alert(
    231.       "Цель: поставить подряд 4 кирпича одного цвета\n"
    232.     + "(по вертикали, горизонтали или диагонали).\n"
    233.     + "Заполнение поля идет СНИЗУ ВВЕРХ. То есть вы не\n"
    234.     + "можете поставить кирпич, если под ним пусто.\n\n"
    235.     + "Интереснее играть вдвоем, т.е. против другого человека.\n"
    236.     + "Чтобы поменять имя игрока, надо просто ткнуть на его имя.\n\n"
    237.     + "Чтобы посмотреть демонстрацию, выберите задержку\n"
    238.     + "равной 1 сек и отметьте две галочки Computer.\n\n"
    239.     + "Алгоритм не доработан, поэтому комп туповатый. :)\n\n"   
    240.     + "Шевели мозгами, и все получится."
    241.     );
    242. }
    243. //  Cookie
    244. function setCookie(name, value)
    245. {
    246.     var expi=new Date();
    247.     expi.setDate( expi.getDate() + 1000 )
    248.     document.cookie = name + "=" + escape(value) + ';expires='+expi.toGMTString()
    249. }
    250. function getCookie(name)
    251. {
    252.     var c = new String( document.cookie )
    253.     var prefix = name + "="
    254.     var start = c.indexOf( prefix )
    255.     if( start == -1 )   return null
    256.    
    257.     var end = c.indexOf( ";", start+prefix.length )
    258.     if( end == -1 ) end = c.length
    259.     var value = c.substring( start + prefix.length, end )  
    260.     return unescape( value )
    261. }
    262. //-->
    263. </head>
    264. <!-- ***************************(    BODY   )*************************** -->
    265. <body onload="Initialize()">
    266. <div align="center">
    267.  
    268. <table id=first_tbl border="0" cellpadding="0" width="100%" height="20%">
    269. <tr><td width="100%" valign="middle"><H1 align="center"><font color="#0000FF">Игра - Кирпичики</font></h1></tr>
    270. <table border="0" cellpadding="0" width="100%">
    271. <tr>
    272.     <td width="25%" align="center" valign="top" style="padding-right: 30">
    273.         <p id="Name1" class="PLAYER" style="border-color: blue" onclick="InputName(this);setCookie(cook_name1,this.innerText)">Ты</p>
    274.         <form name="Player1"><input type="hidden" name="CompCheck" onclick="CompCheckBox(this)" value="ON" id=c1><label for=c1>Ты синими</label></form>
    275.     </td>
    276.     <td width="50%" valign="top">
    277.  
    278.     <table ID="field" width="100%" border="1" cellpadding="0" cellspacing="0">
    279.     <script language="JavaScript">
    280.     var w = d.all.first_tbl.clientWidth/(2*NumCols)
    281.     for( var i=0; i < NumRows; i++ )
    282.     {
    283.         document.write( "<tr>" );
    284.         for( var j=0; j < NumCols; j++ )
    285.         {
    286.             document.write( "<td width=", w, " height=", w,
    287.                     " onMouseOver=OverCell(this)",
    288.                     " onMouseOut='if( !Cell[Y][X] ) this.bgColor=\"\";'",
    289.                     " onClick=ClickCell(this)>&nbsp;</td>" );
    290.         }
    291.         document.write( "</tr>" );
    292.     }
    293.     </script>
    294.     </table>
    295.     </td>
    296.     <td width="25%" align="center" valign="top" style="padding-left: 30">
    297.         <p id="Name2" class="PLAYER" style="border-color: red" onclick="InputName(this);setCookie(cook_name2,this.innerText)">Комп</p>
    298.         <form name="Player2"><input type="hidden" name="CompCheck" onclick="CompCheckBox(this)" checked value="ON" id=c2><label for=c2>computer</label></form>
    299.  
    300.     </td>
    301. <table border="0" cellpadding="0" width="100%" height="18%" cellspacing="0">
    302. <tr>
    303.     <td width="33%" align="left" valign="bottom">
    304.     <form name="Rules">&nbsp; <input class=btn type="button" value="Правила" onclick="DisplayRules()"></form>
    305.     </td>
    306.     <td width="33%" align="center" valign="bottom">
    307.     <form name="NewGame"><input class=btn type="button" value="Новая игра" onclick="StartGame(); addPoints(1,-5);"></form>
    308.     </td>
    309.  
    310.     <td width="33%" align="right" valign="bottom">
    311.     <form>Задержка:&nbsp; <select class=btn style="background:white;cursor:default" name="DelayList" onchange="Delay=this.options[this.selectedIndex].value">
    312.         <option value="0" selected>0
    313.         <option value="500">0.5
    314.         <option value="1000">1
    315.         <option value="1500">1.5
    316.         <option value="2000">2
    317.         <option value="5000">5</select> сек.&nbsp;&nbsp;
    318.     </form>
    319.  
    320.     </td>
    В общем проблема... работает только на ишаке :(( Как исправить??? Если сделаете буду ОЧЕНЬ благодарен...
    ЗЫ... есть еще парочка таких скриптов...
     
  2. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Посмотреть здесь:
    www.vowik.ru
    test:testtest
     
  3. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    дайте ктонибудь ссылку на способы доступа к дом-объектам
     
  4. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    armadillo че?
     
  5. Ивашка

    Ивашка Активный пользователь

    С нами с:
    29 авг 2007
    Сообщения:
    96
    Симпатии:
    0
    Адрес:
    Щёкино/Тула
    Мдя... Проще повеситься...
    1. начало: <td>...<font>...<script>, а в строке 266: </head> - это вообще как? o_O
    2. Никаких d.all.tags... юзайте d.getElementById, d.getElementsByTagName.
    3. Что находится здесь - /plugins/question/game.js ?
    4. Заменить innerText хотя бы на innerHTML

    Все, больше ниасилил. Вот ссылка.