Вход Регистрация
* Удален

Игра `Крестики нолики` на бесконечном поле на JS

  1. <script type="text/javascript">
  2. var TOTLIN, ATFAC, PLAYER, OPPON, IGROK, PROGR, WINLINE, GAMEEND;
  3. var IGT, X, Y, LX, LY, OTMENA=false;
  4. var BOARD, VALUE, LINP, WEIGHT = new Array(0, 0, 4, 20, 100, 500, 0);
  5. function sgn(T) {
  6. if (T<0) T=-1;
  7. else if (T>0) T=1;
  8. else T=0;
  9. return T;
  10. }
  11. function INICIAL() {
  12. var I, J, tr;
  13. var f = '<table id="f" style="border: none; border-collapse:collapse;">';
  14. BOARD = new Array();
  15. VALUE = new Array();
  16. LINP = new Array();
  17. for (I=0;I<=20;I++) {
  18. if (I>0 && I<20) tr='<tr>';
  19. BOARD[I] = new Array();
  20. VALUE[I] = new Array();
  21. LINP[I] = new Array();
  22. for (J=0; J<=20; J++) {
  23. if (I*J>0 && I<20 && J<20) tr += '<td id="c-'+I+'-'+J+'" onclick="ANAKEY(this);" style="font-family: Tahoma, Helvetica, Sans Serif; border: 1px dotted #00a; cursor: pointer; width: 20px; font-weight: bold; text-align: center; vertical-align: middle; font-size: 16px; line-height: 20px">&nbsp;</td>';
  24. VALUE[I][J] = new Array();
  25. LINP[I][J] = new Array();
  26. for(C=1;C<3;C++) { LINP[I][J][C] = new Array(); }
  27. }
  28. if (I>0 && I<20) { tr += '</tr>'; f += tr; }
  29. }
  30. f += '</table>';
  31. document.write(f);
  32. PROGR=0;
  33. IGROK=0;
  34. }
  35. function ANAKEY(a) {
  36. X = a.id.replace(/c-/,'').replace(/-.*/,'');
  37. Y = a.id.replace(/c-/,'').replace(/.*-/,'');
  38. if (BOARD[X][Y] == 0) {
  39. BOARD[X][Y]=1; MOVEXOD();
  40. if (GAMEEND) {
  41. IGROK += 1;
  42. MESSAG('Поздравляем! Вы выиграли!');
  43. }
  44. else {PRGMAK();}
  45. }
  46. }
  47. function NEWGAME() {
  48. var I, J, C, D;
  49. if (OTMENA) {
  50. alert('Игра не закончена!');
  51. return false;
  52. }
  53. for(I=1;I<=19;I++)
  54. for(J=1;J<=19;J++) {
  55. geid('c-'+I+'-'+J).innerHTML='&nbsp;';
  56. geid('c-'+I+'-'+J).className='';
  57. BOARD[I][J]=0;
  58. for(C=1;C<3;C++) {
  59. VALUE[I][J][C] = 0;
  60. for(D=0;D<4;D++) LINP[I][J][C][D] = 0;
  61. }
  62. }
  63. geid('txt').innerHTML='Ваш ход';
  64. geid('prg').innerHTML=PROGR;
  65. geid('igr').innerHTML=IGROK;
  66. PLAYER=1;
  67. OTMENA=true;
  68. TOTLIN=(19*(19-4)+(19-4)*(19-4))*4; LX=1; LY=1;
  69. X=10;
  70. Y=X;
  71. ATFAC=parseInt(IGROK/2);
  72. if (ATFAC >15) ATFAC=15;
  73. for(I=1;I<20;I++)
  74. for(J=1;J<20;J++) {
  75. IGT = BOARD[I][J];
  76. DRAMOV(I,J);
  77. }
  78. }
  79. function DRAMOV(XX, YY) {
  80. var idt;
  81. LX=XX;
  82. LY=YY;
  83. idt='c-'+XX+'-'+YY;
  84. if (IGT == 1) {
  85. geid(idt).innerHTML='x';
  86. }
  87. else if (IGT == 2) {
  88. geid(idt).className='red';
  89. geid(idt).innerHTML='o';
  90. }
  91. }
  92. function MOVEXOD() {
  93. var T, K, L, X1, Y1, X11, Y11, DX, DY, NUM, LIO, LIP, TTT, idt;
  94. WINLINE = 0;
  95. OPPON = 3 - PLAYER;
  96. GAMEEND = false;
  97. idt='c-'+LX+'-'+LY; geid(idt).className='';
  98. for (T=0;T<4;T++)
  99. for(K=0;K<5;K++) {
  100. X1 = parseInt(X) + sgn(T - 2) * K;
  101. Y1 = Y - sgn(T) * K;
  102. switch(T) {
  103. case 0: TTT = X1 > 0 && X1 < 16; break;
  104. case 1: TTT = (X1 > 0 && X1 < 16) && (Y1 > 0 & Y1 < 16); break;
  105. case 2: TTT = Y1 > 0 && Y1 < 16; break;
  106. case 3: TTT = (X1 > 4 && X1 < 20) && (Y1 > 0 && Y1 < 16); break;
  107. default:;
  108. }
  109. if(TTT) {
  110. NUM = LINP[X1][Y1][PLAYER][T];
  111. NUM = NUM + 1;
  112. if (NUM == 1) TOTLIN--;
  113. else if (NUM == 5) GAMEEND = true;
  114. LINP[X1][Y1][PLAYER][T] = NUM;
  115. if (GAMEEND && (WINLINE == 0)) WINLINE = T + 1;
  116. LIP = LINP[X1][Y1][PLAYER][T];
  117. LIO = LINP[X1][Y1][OPPON][T];
  118. for(L=0;L<5;L++) {
  119. X11 = X1 - sgn(T - 2) * L;
  120. Y11 = parseInt(Y1) + sgn(T) * L;
  121. if (LIO == 0) VALUE[X11][Y11][PLAYER]=VALUE[X11][Y11][PLAYER] + WEIGHT[LIP + 1] - WEIGHT[LIP];
  122. else
  123. if (LIP == 1) VALUE[X11][Y11][OPPON] = VALUE[X11][Y11][OPPON] - WEIGHT[LIO + 1];
  124. }
  125. }
  126. }
  127. BOARD[X][Y] = PLAYER;
  128. IGT = PLAYER;
  129. if (GAMEEND) {
  130. switch(WINLINE) {
  131. case 1: DX = 1; DY = 0; break; case 2: DX = 1; DY = 1; break;
  132. case 3: DX = 0; DY = 1; break; case 4: DX = -1; DY = 1; break;
  133. default:;
  134. }
  135. do {
  136. X = (X - 0 + DX);
  137. Y = (Y - 0 + DY);
  138. }
  139. while (BOARD[X][Y] == PLAYER);
  140. X -= DX;
  141. Y -= DY;
  142. for(I=1;I<6;I++) {
  143. idt='c-'+X+'-'+Y; geid(idt).className='green';
  144. DRAMOV (X, Y); X = X - DX; Y = Y - DY;
  145. }
  146. }
  147. else {
  148. DRAMOV (X, Y);
  149. PLAYER = OPPON;
  150. }
  151. }
  152. function PRGMAK() {
  153. var I, J, MAX, VALZ;
  154. if (TOTLIN <= 0) { GAMEEND = true; MESSAG('Tie game!'); }
  155. else {
  156. OPPON = 3 - PLAYER;
  157. MAX = -32767;
  158. X = 10;
  159. Y = 10;
  160. if (BOARD[X][Y] == 0) MAX = 4;
  161. for(I=1;I<20;I++)
  162. for(J=1;J<20;J++) {
  163. if (BOARD[I][J]==0) {
  164. VALZ=parseInt(VALUE[I][J][PLAYER]*(16+ATFAC)/16)+VALUE[I][J][OPPON]+parseInt(Math.random()*4);
  165. if (VALZ>MAX) {
  166. X = I; Y = J;
  167. MAX = VALZ;
  168. }
  169. }
  170. }
  171. MOVEXOD();
  172. if (GAMEEND) {
  173. PROGR++; MESSAG('Компьютер победил!');
  174. }
  175. }
  176. }
  177. function MESSAG(SS) { alert(SS); OTMENA=false; NEWGAME(); }
  178. function geid(i) { return document.getElementById(i); }
  179. </script>
» Описание: Всем известная игра в крестики нолики smile
Цель игры - построить непрерывный ряд из 5 крестиков по
» Время добавления: 25 Мая 2014 в 22:55
» Посмотров: 2590
» textarea
» Рейтинг: [+0 | -1]
Комментарии [1]
Онлайн: 2
Реклама