Задача: Сапер
Исходник: Сапер, язык: javascript [code #119, hits: 17104]
автор: - [добавлен: 13.05.2006]
  1. <HTML><HEAD><TITLE>Сапер</TITLE><style>body{scrollbar-base-color: #4444FF}</style></HEAD>
  2.  
  3. <BODY BGCOLOR="#002040">
  4.  
  5.  
  6.  
  7. <CENTER>
  8.  
  9.  
  10. <BR>
  11. <BR>
  12.  
  13. <TABLE BGCOLOR=#CCCCAA BORDER=1>
  14. <TR>
  15. <TD><A HREF='#' NAME=1 onClick="Move(0,0)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  16. <TD><A HREF='#' NAME=2 onClick="Move(1,0)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  17. <TD><A HREF='#' NAME=3 onClick="Move(2,0)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  18. <TD><A HREF='#' NAME=4 onClick="Move(3,0)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  19. <TD><A HREF='#' NAME=5 onClick="Move(4,0)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  20. <TD><A HREF='#' NAME=6 onClick="Move(5,0)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  21. <TD><A HREF='#' NAME=7 onClick="Move(6,0)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  22. <TD><A HREF='#' NAME=8 onClick="Move(7,0)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  23. <TD><A HREF='#' NAME=9 onClick="Move(8,0)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  24. </TR>
  25.  
  26. <TR>
  27. <TD><A HREF='#' NAME=10 onClick="Move(0,1)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  28. <TD><A HREF='#' NAME=11 onClick="Move(1,1)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  29. <TD><A HREF='#' NAME=12 onClick="Move(2,1)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  30. <TD><A HREF='#' NAME=13 onClick="Move(3,1)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  31. <TD><A HREF='#' NAME=14 onClick="Move(4,1)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  32. <TD><A HREF='#' NAME=15 onClick="Move(5,1)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  33. <TD><A HREF='#' NAME=16 onClick="Move(6,1)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  34. <TD><A HREF='#' NAME=17 onClick="Move(7,1)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  35. <TD><A HREF='#' NAME=18 onClick="Move(8,1)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  36. </TR>
  37.  
  38. <TR>
  39. <TD><A HREF='#' NAME=19 onClick="Move(0,2)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  40. <TD><A HREF='#' NAME=20 onClick="Move(1,2)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  41. <TD><A HREF='#' NAME=21 onClick="Move(2,2)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  42. <TD><A HREF='#' NAME=22 onClick="Move(3,2)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  43. <TD><A HREF='#' NAME=23 onClick="Move(4,2)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  44. <TD><A HREF='#' NAME=24 onClick="Move(5,2)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  45. <TD><A HREF='#' NAME=25 onClick="Move(6,2)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  46. <TD><A HREF='#' NAME=26 onClick="Move(7,2)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  47. <TD><A HREF='#' NAME=27 onClick="Move(8,2)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  48. </TR>
  49.  
  50. <TR>
  51. <TD><A HREF='#' NAME=28 onClick="Move(0,3)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  52. <TD><A HREF='#' NAME=29 onClick="Move(1,3)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  53. <TD><A HREF='#' NAME=30 onClick="Move(2,3)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  54. <TD><A HREF='#' NAME=31 onClick="Move(3,3)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  55. <TD><A HREF='#' NAME=32 onClick="Move(4,3)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  56. <TD><A HREF='#' NAME=33 onClick="Move(5,3)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  57. <TD><A HREF='#' NAME=34 onClick="Move(6,3)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  58. <TD><A HREF='#' NAME=35 onClick="Move(7,3)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  59. <TD><A HREF='#' NAME=36 onClick="Move(8,3)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  60. </TR>
  61.  
  62. <TR>
  63. <TD><A HREF='#' NAME=37 onClick="Move(0,4)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  64. <TD><A HREF='#' NAME=38 onClick="Move(1,4)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  65. <TD><A HREF='#' NAME=39 onClick="Move(2,4)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  66. <TD><A HREF='#' NAME=40 onClick="Move(3,4)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  67. <TD><A HREF='#' NAME=41 onClick="Move(4,4)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  68. <TD><A HREF='#' NAME=42 onClick="Move(5,4)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  69. <TD><A HREF='#' NAME=43 onClick="Move(6,4)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  70. <TD><A HREF='#' NAME=44 onClick="Move(7,4)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  71. <TD><A HREF='#' NAME=45 onClick="Move(8,4)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  72. </TR>
  73.  
  74. <TR>
  75. <TD><A HREF='#' NAME=46 onClick="Move(0,5)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  76. <TD><A HREF='#' NAME=47 onClick="Move(1,5)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  77. <TD><A HREF='#' NAME=48 onClick="Move(2,5)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  78. <TD><A HREF='#' NAME=49 onClick="Move(3,5)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  79. <TD><A HREF='#' NAME=50 onClick="Move(4,5)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  80. <TD><A HREF='#' NAME=51 onClick="Move(5,5)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  81. <TD><A HREF='#' NAME=52 onClick="Move(6,5)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  82. <TD><A HREF='#' NAME=53 onClick="Move(7,5)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  83. <TD><A HREF='#' NAME=54 onClick="Move(8,5)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  84. </TR>
  85.  
  86. <TR>
  87. <TD><A HREF='#' NAME=55 onClick="Move(0,6)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  88. <TD><A HREF='#' NAME=56 onClick="Move(1,6)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  89. <TD><A HREF='#' NAME=57 onClick="Move(2,6)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  90. <TD><A HREF='#' NAME=58 onClick="Move(3,6)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  91. <TD><A HREF='#' NAME=59 onClick="Move(4,6)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  92. <TD><A HREF='#' NAME=60 onClick="Move(5,6)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  93. <TD><A HREF='#' NAME=61 onClick="Move(6,6)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  94. <TD><A HREF='#' NAME=62 onClick="Move(7,6)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  95. <TD><A HREF='#' NAME=63 onClick="Move(8,6)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  96. </TR>
  97.  
  98. <TR>
  99. <TD><A HREF='#' NAME=64 onClick="Move(0,7)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  100. <TD><A HREF='#' NAME=65 onClick="Move(1,7)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  101. <TD><A HREF='#' NAME=66 onClick="Move(2,7)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  102. <TD><A HREF='#' NAME=67 onClick="Move(3,7)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  103. <TD><A HREF='#' NAME=68 onClick="Move(4,7)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  104. <TD><A HREF='#' NAME=69 onClick="Move(5,7)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  105. <TD><A HREF='#' NAME=70 onClick="Move(6,7)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  106. <TD><A HREF='#' NAME=71 onClick="Move(7,7)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  107. <TD><A HREF='#' NAME=72 onClick="Move(8,7)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  108. </TR>
  109.  
  110. <TR>
  111. <TD><A HREF='#' NAME=73 onClick="Move(0,8)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  112. <TD><A HREF='#' NAME=74 onClick="Move(1,8)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  113. <TD><A HREF='#' NAME=75 onClick="Move(2,8)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  114. <TD><A HREF='#' NAME=76 onClick="Move(3,8)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  115. <TD><A HREF='#' NAME=77 onClick="Move(4,8)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  116. <TD><A HREF='#' NAME=78 onClick="Move(5,8)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  117. <TD><A HREF='#' NAME=79 onClick="Move(6,8)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  118. <TD><A HREF='#' NAME=80 onClick="Move(7,8)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  119. <TD><A HREF='#' NAME=81 onClick="Move(8,8)"><IMG SRC="Saper/POLE.jpg"></A></TD>
  120. </TR>
  121. </TABLE
  122.  
  123. </CENTER>
  124.  
  125. <BR>
  126.  
  127. <FORM>
  128. <BUTTON STYLE="{font-size:24px;background-color:#002040;border-width:0;color:red" onClick="NewGameForSer()">НОВАЯ ИГРА</BUTTON>
  129. </FORM>
  130.  
  131. <SCRIPT>
  132.  
  133. var massivA = new Array (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  134. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  135. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  136. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
  137.  
  138. // дополнительный массив для поиска пути
  139. var massivB = new Array (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  140. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  141. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  142. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
  143.  
  144. var Nomer = 0;
  145.  
  146. //вызов новой игры
  147. NewGameForSer();
  148.  
  149.  
  150. //------------------------------------------------------------------------ Функция прорисовки клетки
  151. function Draw(x1, y1)
  152. {
  153. if (massivA[ 9 * y1 + x1]>19) document.images[ 9 * y1 + x1 ].src='Saper/MINE.jpg'
  154. else
  155. document.images[ 9 * y1 + x1 ].src='Saper/'+massivA[ 9 * y1 + x1]+'.jpg';
  156. }
  157.  
  158.  
  159. //------------------------------------------------------------------------ Новая игра
  160. function NewGameForSer()
  161. {
  162.  
  163. Nomer = 0;
  164.  
  165. //очистка массивов
  166. for (var x = -2; x<= 11; x++)
  167. for (var y = -2; y<= 11; y++)
  168. {
  169. massivA[ 9 * y + x ] = 0;
  170. massivB[ 9 * y + x ] = 0;
  171. }
  172.  
  173. for (var x = 0; x<= 8; x++)
  174. for (var y = 0; y<= 8; y++)
  175. document.images[ 9 * y + x ].src = 'Saper/POLE.jpg';
  176.  
  177. //расстановка мин на поле
  178. var i = 1;
  179.  
  180. while (i<14)
  181. {
  182. x = Math.floor(Math.random()*9);
  183. y = Math.floor(Math.random()*9);
  184. if (massivA[ 9 * y + x ]==20) continue;
  185. massivA[ 9 * y + x ] = 20;
  186. i++;
  187. }
  188.  
  189. //расстановка цифр вокруг мин
  190. for (x = 0; x<=8; x++)
  191. for (y = 0; y<=8; y++)
  192. if (massivA[ 9 * y + x ]>19)
  193. {
  194.  
  195. if ((x - 1 >= 0) && ( x - 1 <=8 ))
  196. massivA[ 9 * y + x -1 ]++;
  197.  
  198. if ((x - 1 >= 0) && ( x - 1 <=8 ) && (y - 1 >= 0) && (y - 1 <= 8))
  199. massivA[ 9 * (y - 1) + x -1 ]++;
  200.  
  201. if ((y - 1 >= 0) && ( y - 1 <=8 ))
  202. massivA[ 9 * (y - 1) + x ]++;
  203.  
  204. if ((x + 1 >= 0) && ( x + 1 <=8 ) && (y - 1 >= 0) && (y - 1 <= 8))
  205. massivA[ 9 * (y - 1) + x + 1 ]++;
  206.  
  207. if ((x + 1 >= 0) && (x + 1 <=8 ))
  208. massivA[ 9 * y + x + 1 ]++;
  209.  
  210. if ((x + 1 >= 0) && ( x + 1 <=8 ) && (y + 1 >= 0) && (y + 1 <= 8))
  211. massivA[ 9 * (y + 1) + x + 1 ]++;
  212.  
  213. if ((y + 1 >= 0) && (y + 1 <=8 ))
  214. massivA[ 9 * (y + 1) + x ]++;
  215.  
  216. if ((x - 1 >= 0) && ( x - 1 <=8 ) && (y + 1 >= 0) && (y + 1 <= 8))
  217. massivA[ 9 * (y + 1) + x - 1 ]++;
  218. }
  219. }
  220.  
  221.  
  222. //------------------------------------------------------------------------ Выбор клетки
  223. function Move(x1,y1)
  224. {
  225. if (massivA[ 9 * y1 + x1 ]>19)
  226. {
  227. Draw( x1, y1);
  228. alert(' Вы проиграли! ');
  229. NewGameForSer();
  230. }
  231. else
  232. {
  233. if (massivB[ 9 * y1 + x1 ] == 0 )
  234. {
  235. massivB[ 9 * y1 + x1 ] = 1;
  236. Nomer++;
  237. Draw(x1, y1);
  238. if (Nomer==68) GamesWin();
  239. if (massivA[ 9 * y1 + x1 ] == 0 ) FindZero(x1, y1);
  240. }
  241. }
  242. }
  243.  
  244.  
  245.  
  246. // --------------------------------------------- Функция для поиска пустоты
  247. function FindZero(x1, y1)
  248. {
  249.  
  250. for (var Colonka = x1 - 1; Colonka <= x1 + 1; Colonka++)
  251. for (var Stolbik = y1 - 1; Stolbik <= y1 + 1; Stolbik++)
  252. {
  253.  
  254. if (Nomer==68) GamesWin();
  255.  
  256. if ((Colonka >= 0) && (Colonka <9) && (Stolbik >= 0)
  257. && (Stolbik <9) && (massivB[ 9 * Stolbik + Colonka ]==0))
  258. {
  259.  
  260. if ((Colonka == x1-1) && (Stolbik == y1-1) && (massivA[ 9 * (y1 - 1) + x1 -1 ] == 0)) continue;
  261. if ((Colonka == x1+1) && (Stolbik == y1-1) && (massivA[ 9 * (y1 - 1) + x1 + 1] == 0)) continue;
  262. if ((Colonka == x1+1) && (Stolbik == y1+1) && (massivA[ 9 * (y1 + 1) + x1 + 1 ] == 0)) continue;
  263. if ((Colonka == x1-1) && (Stolbik == y1+1) && (massivA[ 9 * (y1 + 1) + x1 - 1 ] == 0)) continue;
  264.  
  265. if (massivA[ 9 * Stolbik + Colonka ]==0)
  266. {
  267. Draw(Colonka, Stolbik);
  268. Nomer++;
  269. massivB[ 9 * Stolbik + Colonka ] = 1;
  270. FindZero(Colonka, Stolbik);
  271. }
  272. else
  273. {
  274. Nomer++;
  275. massivB[ 9 * Stolbik + Colonka ] = 1;
  276. Draw(Colonka, Stolbik);
  277. }
  278.  
  279. }
  280. }
  281. }
  282.  
  283.  
  284.  
  285.  
  286. //----------------------------------- Обработка выигрыша
  287. function GamesWin()
  288. {
  289.  
  290. for (x = 0; x<=8; x++)
  291. for (y = 0; y<=8; y++)
  292. if (massivA[ 9 * y + x ]>19) document.images[ 9 * y + x ].src = 'Saper/FLAG.jpg';
  293.  
  294. alert(' Вы выиграли! ');
  295.  
  296. NewGameForSer();
  297. }
  298.  
  299.  
  300.  
  301.  
  302.  
  303. </SCRIPT>
  304.  
  305. </BODY>
  306. </HTML>
Автор <a href="mailto:forser@xakep.ru">Волков Сергей</a>
В папке где размещается этот html-файл, открываемый браузером должна быть папка Saper с прилагающимися изображениями.
Вообщем, полную версию с картинками качаем <a href="/data/tasks/51/File/Saper.rar" class="link">тут в архиве(~9кб)</a>
Тестировалось на: IE 6.0 SP2, Mozilla FF 1.5, Opera 8.5

+добавить реализацию