PageRenderTime 49ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/script.js

https://bitbucket.org/Spuntagano/chess
JavaScript | 762 lines | 625 code | 131 blank | 6 comment | 446 complexity | 93b0e287b98af8405d546dcf6ec70ad8 MD5 | raw file
  1. (function($) {
  2. Chess = {
  3. grid : 8,
  4. tiles : [],
  5. Piece : function(x, y, color, alive, type){
  6. this.x = x;
  7. this.y = y;
  8. this.color = color;
  9. this.alive = alive;
  10. this.type = type;
  11. },
  12. init : function(){
  13. var gridstr = "";
  14. gridstr += "<table>";
  15. for (var i=0; i<this.grid; i++){
  16. gridstr += "<tr>";
  17. for (var j=0; j<this.grid; j++){
  18. gridstr += "<td class='tile' id="+j+"-"+i+" data-x="+j+" data-y="+i+"></td>";
  19. }
  20. gridstr += "</tr>";
  21. }
  22. gridstr += "</table>"
  23. $("#wrapper").append(gridstr);
  24. for (var i=0; i<this.grid; i++){
  25. this.tiles[i] = new Array();
  26. }
  27. this.tiles[0][0] = new this.Piece(0,0,"black",true, "rook");
  28. this.tiles[7][0] = new this.Piece(7,0,"black",true, "rook");
  29. this.tiles[0][7] = new this.Piece(0,7,"white",true, "rook");
  30. this.tiles[7][7] = new this.Piece(7,7,"white",true, "rook");
  31. this.tiles[1][0] = new this.Piece(1,0,"black",true, "knight");
  32. this.tiles[6][0] = new this.Piece(6,0,"black",true, "knight");
  33. this.tiles[1][7] = new this.Piece(1,7,"white",true, "knight");
  34. this.tiles[6][7] = new this.Piece(6,7,"white",true, "knight");
  35. this.tiles[2][0] = new this.Piece(2,0,"black",true, "bishop");
  36. this.tiles[5][0] = new this.Piece(5,0,"black",true, "bishop");
  37. this.tiles[2][7] = new this.Piece(2,7,"white",true, "bishop");
  38. this.tiles[5][7] = new this.Piece(5,7,"white",true, "bishop");
  39. this.tiles[3][0] = new this.Piece(3,0,"black",true, "queen");
  40. this.tiles[3][7] = new this.Piece(3,7,"white",true, "queen");
  41. this.tiles[4][0] = new this.Piece(4,0,"black",true, "king");
  42. this.tiles[4][7] = new this.Piece(4,7,"white",true, "king");
  43. for (var i=0; i<this.grid; i++){
  44. for(var j=0; j<this.grid; j++){
  45. if (i == 1){
  46. this.tiles[j][i] = new this.Piece(j,1,"black",true, "pawn");
  47. }
  48. if (i == this.grid-2){
  49. this.tiles[j][i] = new this.Piece(j,this.grid-2,"white",true, "pawn");
  50. }
  51. if (this.tiles[j][i] == undefined){
  52. this.tiles[j][i] = "empty";
  53. }
  54. }
  55. }
  56. Chess.HTMLsync();
  57. },
  58. HTMLsync : function(){
  59. $(".white").removeClass("white");
  60. $(".black").removeClass("black");
  61. $("td").html("").unbind();
  62. for (i in Chess.tiles){
  63. if (Chess.tiles[i] != undefined){
  64. for (j in Chess.tiles[i]){
  65. if (Chess.tiles[i][j] != undefined){
  66. if (Chess.tiles[i][j].alive == true && Chess.tiles[i][j].type == "pawn"){
  67. Chess.syncPawn(Chess.tiles[i][j]);
  68. //console.log(this.tiles[i][j]);
  69. }
  70. if (Chess.tiles[i][j].alive == true && Chess.tiles[i][j].type == "rook"){
  71. Chess.syncRook(Chess.tiles[i][j]);
  72. //console.log(this.tiles[i][j]);
  73. }
  74. if (Chess.tiles[i][j].alive == true && Chess.tiles[i][j].type == "knight"){
  75. Chess.syncKnight(Chess.tiles[i][j]);
  76. //console.log(this.tiles[i][j]);
  77. }
  78. if (Chess.tiles[i][j].alive == true && Chess.tiles[i][j].type == "bishop"){
  79. Chess.syncBishop(Chess.tiles[i][j]);
  80. //console.log(this.tiles[i][j]);
  81. }
  82. if (Chess.tiles[i][j].alive == true && Chess.tiles[i][j].type == "queen"){
  83. Chess.syncQueen(Chess.tiles[i][j]);
  84. //console.log(this.tiles[i][j]);
  85. }
  86. if (Chess.tiles[i][j].alive == true && Chess.tiles[i][j].type == "king"){
  87. Chess.syncKing(Chess.tiles[i][j]);
  88. //console.log(this.tiles[i][j]);
  89. }
  90. }
  91. }
  92. }
  93. }
  94. },
  95. syncPawn : function(piece){
  96. Chess.getTileHTML(piece.x, piece.y).html("pawn").addClass("pawn");
  97. if (piece.color == "white"){
  98. Chess.getTileHTML(piece.x, piece.y).addClass("white");
  99. }
  100. if (piece.color == "black"){
  101. Chess.getTileHTML(piece.x, piece.y).addClass("black");
  102. }
  103. Chess.getTileHTML(piece.x, piece.y).on('click', function(){
  104. if (piece.color == "white"){
  105. Chess.getTileHTML(piece.x, piece.y-1).addClass("move");
  106. if (Chess.tiles[piece.x+1] != undefined){
  107. if (Chess.tiles[piece.x+1][piece.y-1] != undefined){
  108. if (Chess.tiles[piece.x+1][piece.y-1].color == "black" && Chess.tiles[piece.x+1][piece.y-1].alive){
  109. Chess.getTileHTML(piece.x+1,piece.y-1).addClass("kill");
  110. }
  111. }
  112. }
  113. if (Chess.tiles[piece.x-1] != undefined){
  114. if (Chess.tiles[piece.x-1][piece.y-1] != undefined){
  115. if (Chess.tiles[piece.x-1][piece.y-1].color == "black" && Chess.tiles[piece.x-1][piece.y-1].alive){
  116. Chess.getTileHTML(piece.x-1, piece.y-1).addClass("kill");
  117. }
  118. }
  119. }
  120. if (Chess.tiles[piece.x] != undefined){
  121. if (Chess.tiles[piece.x][piece.y-1] != undefined){
  122. if (Chess.tiles[piece.x][piece.y-1].alive){
  123. Chess.getTileHTML(piece.x, piece.y-1).removeClass("move");
  124. }
  125. }
  126. }
  127. }
  128. else if (piece.color == "black"){
  129. Chess.getTileHTML(piece.x, piece.y+1).addClass("move");
  130. if (Chess.tiles[piece.x+1] != undefined){
  131. if (Chess.tiles[piece.x+1][piece.y+1] != undefined){
  132. if (Chess.tiles[piece.x+1][piece.y+1].color == "white" && Chess.tiles[piece.x+1][piece.y+1].alive){
  133. Chess.getTileHTML(piece.x+1, piece.y+1).addClass("kill");
  134. }
  135. }
  136. }
  137. if (Chess.tiles[piece.x-1] != undefined){
  138. if (Chess.tiles[piece.x-1][piece.y+1] != undefined){
  139. if (Chess.tiles[piece.x-1][piece.y+1].color == "white" && Chess.tiles[piece.x-1][piece.y+1].alive){
  140. Chess.getTileHTML(piece.x-1, piece.y+1).addClass("kill");
  141. }
  142. }
  143. }
  144. if (Chess.tiles[piece.x] != undefined){
  145. if (Chess.tiles[piece.x][piece.y+1] != undefined){
  146. if (Chess.tiles[piece.x][piece.y+1].alive){
  147. Chess.getTileHTML(piece.x, piece.y+1).removeClass("move");
  148. }
  149. }
  150. }
  151. }
  152. $(".tile").on('click', function(){
  153. if ($(this).hasClass("move")){
  154. Chess.movePieces(piece, $(this).attr("data-x"), $(this).attr("data-y"));
  155. }
  156. else if ($(this).hasClass("kill")){
  157. Chess.destroyPieces(Chess.tiles[$(this).attr("data-x")][$(this).attr("data-y")]);
  158. Chess.movePieces(piece, $(this).attr("data-x"), $(this).attr("data-y"));
  159. }
  160. else{
  161. Chess.HTMLsync();
  162. }
  163. $(".move").removeClass("move");
  164. $(".kill").removeClass("kill");
  165. })
  166. })
  167. },
  168. syncRook : function(piece){
  169. Chess.getTileHTML(piece.x, piece.y).html("rook").addClass("rook");
  170. if (piece.color == "white"){
  171. Chess.getTileHTML(piece.x, piece.y).addClass("white");
  172. }
  173. if (piece.color == "black"){
  174. Chess.getTileHTML(piece.x, piece.y).addClass("black");
  175. }
  176. Chess.getTileHTML(piece.x, piece.y).on('click', function(){
  177. var i = piece.x;
  178. var j = piece.y;
  179. i++;
  180. while(Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && Chess.tiles[i][j] == "empty"){
  181. Chess.getTileHTML(i, j).addClass("move");
  182. i++;
  183. }
  184. if (Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && piece.color != Chess.tiles[i][j].color){
  185. Chess.getTileHTML(i, j).addClass("kill");
  186. }
  187. i = piece.x;
  188. j = piece.y;
  189. i--;
  190. while(Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && Chess.tiles[i][j] == "empty"){
  191. Chess.getTileHTML(i, j).addClass("move");
  192. i--;
  193. }
  194. if (Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && piece.color != Chess.tiles[i][j].color){
  195. Chess.getTileHTML(i, j).addClass("kill");
  196. }
  197. i = piece.x;
  198. j = piece.y;
  199. j++;
  200. while(Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && Chess.tiles[i][j] == "empty"){
  201. Chess.getTileHTML(i, j).addClass("move");
  202. j++;
  203. }
  204. if (Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && piece.color != Chess.tiles[i][j].color){
  205. Chess.getTileHTML(i, j).addClass("kill");
  206. }
  207. i = piece.x;
  208. j = piece.y;
  209. j--;
  210. while(Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && Chess.tiles[i][j] == "empty"){
  211. Chess.getTileHTML(i, j).addClass("move");
  212. j--;
  213. }
  214. if (Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && piece.color != Chess.tiles[i][j].color){
  215. Chess.getTileHTML(i, j).addClass("kill");
  216. }
  217. $(".tile").on('click', function(){
  218. if ($(this).hasClass("move")){
  219. Chess.movePieces(piece, $(this).attr("data-x"), $(this).attr("data-y"));
  220. }
  221. else if ($(this).hasClass("kill")){
  222. Chess.destroyPieces(Chess.tiles[$(this).attr("data-x")][$(this).attr("data-y")]);
  223. Chess.movePieces(piece, $(this).attr("data-x"), $(this).attr("data-y"));
  224. }
  225. else{
  226. Chess.HTMLsync();
  227. }
  228. $(".move").removeClass("move");
  229. $(".kill").removeClass("kill");
  230. })
  231. })
  232. },
  233. syncKnight : function(piece){
  234. Chess.getTileHTML(piece.x, piece.y).html("knight").addClass("knight");
  235. if (piece.color == "white"){
  236. Chess.getTileHTML(piece.x, piece.y).addClass("white");
  237. }
  238. if (piece.color == "black"){
  239. Chess.getTileHTML(piece.x, piece.y).addClass("black");
  240. }
  241. Chess.getTileHTML(piece.x, piece.y).on('click', function(){
  242. if (Chess.tiles[piece.x+2] != undefined){
  243. if (Chess.tiles[piece.x+2][piece.y+1] != undefined){
  244. if (Chess.tiles[piece.x+2][piece.y+1] == "empty"){
  245. Chess.getTileHTML(piece.x+2, piece.y+1).addClass("move");
  246. }
  247. else if (Chess.tiles[piece.x+2][piece.y+1].color != piece.color){
  248. Chess.getTileHTML(piece.x+2, piece.y+1).addClass("kill");
  249. }
  250. }
  251. }
  252. if (Chess.tiles[piece.x+1] != undefined){
  253. if (Chess.tiles[piece.x+1][piece.y+2] != undefined){
  254. if (Chess.tiles[piece.x+1][piece.y+2] == "empty"){
  255. Chess.getTileHTML(piece.x+1, piece.y+2).addClass("move");
  256. }
  257. else if (Chess.tiles[piece.x+1][piece.y+2].color != piece.color){
  258. Chess.getTileHTML(piece.x+1, piece.y+2).addClass("kill");
  259. }
  260. }
  261. }
  262. if (Chess.tiles[piece.x-2] != undefined){
  263. if (Chess.tiles[piece.x-2][piece.y-1] != undefined){
  264. if (Chess.tiles[piece.x-2][piece.y-1] == "empty"){
  265. Chess.getTileHTML(piece.x-2, piece.y-1).addClass("move");
  266. }
  267. else if (Chess.tiles[piece.x-2][piece.y-1].color != piece.color){
  268. Chess.getTileHTML(piece.x-2, piece.y-1).addClass("kill");
  269. }
  270. }
  271. }
  272. if (Chess.tiles[piece.x-1] != undefined){
  273. if (Chess.tiles[piece.x-1][piece.y-2] != undefined){
  274. if (Chess.tiles[piece.x-1][piece.y-2] == "empty"){
  275. Chess.getTileHTML(piece.x-1, piece.y-2).addClass("move");
  276. }
  277. else if (Chess.tiles[piece.x-1][piece.y-2].color != piece.color){
  278. Chess.getTileHTML(piece.x-1, piece.y-2).addClass("kill");
  279. }
  280. }
  281. }
  282. if (Chess.tiles[piece.x-2] != undefined){
  283. if (Chess.tiles[piece.x-2][piece.y+1] != undefined){
  284. if (Chess.tiles[piece.x-2][piece.y+1] == "empty"){
  285. Chess.getTileHTML(piece.x-2, piece.y+1).addClass("move");
  286. }
  287. else if (Chess.tiles[piece.x-2][piece.y+1].color != piece.color){
  288. Chess.getTileHTML(piece.x-2, piece.y+1).addClass("kill");
  289. }
  290. }
  291. }
  292. if (Chess.tiles[piece.x-1] != undefined){
  293. if (Chess.tiles[piece.x-1][piece.y+2] != undefined){
  294. if (Chess.tiles[piece.x-1][piece.y+2] == "empty"){
  295. Chess.getTileHTML(piece.x-1, piece.y+2).addClass("move");
  296. }
  297. else if (Chess.tiles[piece.x-1][piece.y+2].color != piece.color){
  298. Chess.getTileHTML(piece.x-1, piece.y+2).addClass("kill");
  299. }
  300. }
  301. }
  302. if (Chess.tiles[piece.x+2] != undefined){
  303. if (Chess.tiles[piece.x+2][piece.y-1] != undefined){
  304. if (Chess.tiles[piece.x+2][piece.y-1] == "empty"){
  305. Chess.getTileHTML(piece.x+2, piece.y-1).addClass("move");
  306. }
  307. else if (Chess.tiles[piece.x+2][piece.y-1].color != piece.color){
  308. Chess.getTileHTML(piece.x+2, piece.y-1).addClass("kill");
  309. }
  310. }
  311. }
  312. if (Chess.tiles[piece.x+1] != undefined){
  313. if (Chess.tiles[piece.x+1][piece.y-2] != undefined){
  314. if (Chess.tiles[piece.x+1][piece.y-2] == "empty"){
  315. Chess.getTileHTML(piece.x+1, piece.y-2).addClass("move");
  316. }
  317. else if (Chess.tiles[piece.x+1][piece.y-2].color != piece.color){
  318. Chess.getTileHTML(piece.x+1, piece.y-2).addClass("kill");
  319. }
  320. }
  321. }
  322. $(".tile").on('click', function(){
  323. if ($(this).hasClass("move")){
  324. Chess.movePieces(piece, $(this).attr("data-x"), $(this).attr("data-y"));
  325. }
  326. else if ($(this).hasClass("kill")){
  327. Chess.destroyPieces(Chess.tiles[$(this).attr("data-x")][$(this).attr("data-y")]);
  328. Chess.movePieces(piece, $(this).attr("data-x"), $(this).attr("data-y"));
  329. }
  330. else{
  331. Chess.HTMLsync();
  332. }
  333. $(".move").removeClass("move");
  334. $(".kill").removeClass("kill");
  335. })
  336. })
  337. },
  338. syncBishop : function(piece){
  339. Chess.getTileHTML(piece.x, piece.y).html("bishop").addClass("bishop");
  340. if (piece.color == "white"){
  341. Chess.getTileHTML(piece.x, piece.y).addClass("white");
  342. }
  343. if (piece.color == "black"){
  344. Chess.getTileHTML(piece.x, piece.y).addClass("black");
  345. }
  346. Chess.getTileHTML(piece.x, piece.y).on('click', function(){
  347. var i = piece.x;
  348. var j = piece.y;
  349. i++;
  350. j++;
  351. while(Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && Chess.tiles[i][j] == "empty"){
  352. Chess.getTileHTML(i, j).addClass("move");
  353. i++;
  354. j++;
  355. }
  356. if (Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && piece.color != Chess.tiles[i][j].color){
  357. Chess.getTileHTML(i, j).addClass("kill");
  358. }
  359. i = piece.x;
  360. j = piece.y;
  361. i--;
  362. j--;
  363. while(Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && Chess.tiles[i][j] == "empty"){
  364. Chess.getTileHTML(i, j).addClass("move");
  365. i--;
  366. j--;
  367. }
  368. if (Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && piece.color != Chess.tiles[i][j].color){
  369. Chess.getTileHTML(i, j).addClass("kill");
  370. }
  371. i = piece.x;
  372. j = piece.y;
  373. i--;
  374. j++;
  375. while(Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && Chess.tiles[i][j] == "empty"){
  376. Chess.getTileHTML(i, j).addClass("move");
  377. i--;
  378. j++;
  379. }
  380. if (Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && piece.color != Chess.tiles[i][j].color){
  381. Chess.getTileHTML(i, j).addClass("kill");
  382. }
  383. i = piece.x;
  384. j = piece.y;
  385. i++
  386. j--;
  387. while(Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && Chess.tiles[i][j] == "empty"){
  388. Chess.getTileHTML(i, j).addClass("move");
  389. i++;
  390. j--;
  391. }
  392. if (Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && piece.color != Chess.tiles[i][j].color){
  393. Chess.getTileHTML(i, j).addClass("kill");
  394. }
  395. $(".tile").on('click', function(){
  396. if ($(this).hasClass("move")){
  397. Chess.movePieces(piece, $(this).attr("data-x"), $(this).attr("data-y"));
  398. }
  399. else if ($(this).hasClass("kill")){
  400. Chess.destroyPieces(Chess.tiles[$(this).attr("data-x")][$(this).attr("data-y")]);
  401. Chess.movePieces(piece, $(this).attr("data-x"), $(this).attr("data-y"));
  402. }
  403. else{
  404. Chess.HTMLsync();
  405. }
  406. $(".move").removeClass("move");
  407. $(".kill").removeClass("kill");
  408. })
  409. })
  410. },
  411. syncQueen : function(piece){
  412. Chess.getTileHTML(piece.x, piece.y).html("queen").addClass("queen");
  413. if (piece.color == "white"){
  414. Chess.getTileHTML(piece.x, piece.y).addClass("white");
  415. }
  416. if (piece.color == "black"){
  417. Chess.getTileHTML(piece.x, piece.y).addClass("black");
  418. }
  419. Chess.getTileHTML(piece.x, piece.y).on('click', function(){
  420. var i = piece.x;
  421. var j = piece.y;
  422. i++;
  423. j++;
  424. while(Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && Chess.tiles[i][j] == "empty"){
  425. Chess.getTileHTML(i, j).addClass("move");
  426. i++;
  427. j++;
  428. }
  429. if (Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && piece.color != Chess.tiles[i][j].color){
  430. Chess.getTileHTML(i, j).addClass("kill");
  431. }
  432. i = piece.x;
  433. j = piece.y;
  434. i--;
  435. j--;
  436. while(Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && Chess.tiles[i][j] == "empty"){
  437. Chess.getTileHTML(i, j).addClass("move");
  438. i--;
  439. j--;
  440. }
  441. if (Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && piece.color != Chess.tiles[i][j].color){
  442. Chess.getTileHTML(i, j).addClass("kill");
  443. }
  444. i = piece.x;
  445. j = piece.y;
  446. i--;
  447. j++;
  448. while(Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && Chess.tiles[i][j] == "empty"){
  449. Chess.getTileHTML(i, j).addClass("move");
  450. i--;
  451. j++;
  452. }
  453. if (Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && piece.color != Chess.tiles[i][j].color){
  454. Chess.getTileHTML(i, j).addClass("kill");
  455. }
  456. i = piece.x;
  457. j = piece.y;
  458. i++;
  459. j--;
  460. while(Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && Chess.tiles[i][j] == "empty"){
  461. Chess.getTileHTML(i, j).addClass("move");
  462. i++;
  463. j--;
  464. }
  465. if (Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && piece.color != Chess.tiles[i][j].color){
  466. Chess.getTileHTML(i, j).addClass("kill");
  467. }
  468. i = piece.x;
  469. j = piece.y;
  470. i++;
  471. while(Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && Chess.tiles[i][j] == "empty"){
  472. Chess.getTileHTML(i, j).addClass("move");
  473. i++;
  474. }
  475. if (Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && piece.color != Chess.tiles[i][j].color){
  476. Chess.getTileHTML(i, j).addClass("kill");
  477. }
  478. i = piece.x;
  479. j = piece.y;
  480. i--;
  481. while(Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && Chess.tiles[i][j] == "empty"){
  482. Chess.getTileHTML(i, j).addClass("move");
  483. i--;
  484. }
  485. if (Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && piece.color != Chess.tiles[i][j].color){
  486. Chess.getTileHTML(i, j).addClass("kill");
  487. }
  488. i = piece.x;
  489. j = piece.y;
  490. j++;
  491. while(Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && Chess.tiles[i][j] == "empty"){
  492. Chess.getTileHTML(i, j).addClass("move");
  493. j++;
  494. }
  495. if (Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && piece.color != Chess.tiles[i][j].color){
  496. Chess.getTileHTML(i, j).addClass("kill");
  497. }
  498. i = piece.x;
  499. j = piece.y;
  500. j--;
  501. while(Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && Chess.tiles[i][j] == "empty"){
  502. Chess.getTileHTML(i, j).addClass("move");
  503. j--;
  504. }
  505. if (Chess.tiles[i] != undefined && Chess.tiles[i][j] != undefined && piece.color != Chess.tiles[i][j].color){
  506. Chess.getTileHTML(i, j).addClass("kill");
  507. }
  508. $(".tile").on('click', function(){
  509. if ($(this).hasClass("move")){
  510. Chess.movePieces(piece, $(this).attr("data-x"), $(this).attr("data-y"));
  511. }
  512. else if ($(this).hasClass("kill")){
  513. Chess.destroyPieces(Chess.tiles[$(this).attr("data-x")][$(this).attr("data-y")]);
  514. Chess.movePieces(piece, $(this).attr("data-x"), $(this).attr("data-y"));
  515. }
  516. else{
  517. Chess.HTMLsync();
  518. }
  519. $(".move").removeClass("move");
  520. $(".kill").removeClass("kill");
  521. })
  522. })
  523. },
  524. syncKing : function(piece){
  525. Chess.getTileHTML(piece.x, piece.y).html("king").addClass("king");
  526. if (piece.color == "white"){
  527. Chess.getTileHTML(piece.x, piece.y).addClass("white");
  528. }
  529. if (piece.color == "black"){
  530. Chess.getTileHTML(piece.x, piece.y).addClass("black");
  531. }
  532. Chess.getTileHTML(piece.x, piece.y).on('click', function(){
  533. i = piece.x;
  534. j = piece.y;
  535. if (Chess.tiles[i+1] != undefined && Chess.tiles[i+1][j] != undefined){
  536. if (Chess.tiles[i+1][j] == "empty"){
  537. Chess.getTileHTML(i+1, j).addClass("move");
  538. }
  539. else if (Chess.tiles[i+1][j].color != piece.color){
  540. Chess.getTileHTML(i+1, j).addClass("kill");
  541. }
  542. }
  543. if (Chess.tiles[i+1] != undefined && Chess.tiles[i+1][j+1] != undefined){
  544. if (Chess.tiles[i+1][j+1] == "empty"){
  545. Chess.getTileHTML(i+1, j+1).addClass("move");
  546. }
  547. else if (Chess.tiles[i+1][j+1].color != piece.color){
  548. Chess.getTileHTML(i+1, j+1).addClass("kill");
  549. }
  550. }
  551. if (Chess.tiles[i] != undefined && Chess.tiles[i][j+1] != undefined){
  552. if (Chess.tiles[i][j+1] == "empty"){
  553. Chess.getTileHTML(i, j+1).addClass("move");
  554. }
  555. else if (Chess.tiles[i][j+1].color != piece.color){
  556. Chess.getTileHTML(i, j+1).addClass("kill");
  557. }
  558. }
  559. if (Chess.tiles[i-1] != undefined && Chess.tiles[i-1][j] != undefined){
  560. if (Chess.tiles[i-1][j] == "empty"){
  561. Chess.getTileHTML(i-1, j).addClass("move");
  562. }
  563. else if (Chess.tiles[i-1][j].color != piece.color){
  564. Chess.getTileHTML(i-1, j).addClass("kill");
  565. }
  566. }
  567. if (Chess.tiles[i-1] != undefined && Chess.tiles[i-1][j+1] != undefined){
  568. if (Chess.tiles[i-1][j+1] == "empty"){
  569. Chess.getTileHTML(i-1, j+1).addClass("move");
  570. }
  571. else if (Chess.tiles[i-1][j+1].color != piece.color){
  572. Chess.getTileHTML(i-1, j+1).addClass("kill");
  573. }
  574. }
  575. if (Chess.tiles[i-1] != undefined && Chess.tiles[i-1][j-1] != undefined){
  576. if (Chess.tiles[i-1][j-1] == "empty"){
  577. Chess.getTileHTML(i-1, j-1).addClass("move");
  578. }
  579. else if (Chess.tiles[i-1][j-1].color != piece.color){
  580. Chess.getTileHTML(i-1, j-1).addClass("kill");
  581. }
  582. }
  583. if (Chess.tiles[i+1] != undefined && Chess.tiles[i+1][j-1] != undefined){
  584. if (Chess.tiles[i+1][j-1] == "empty"){
  585. Chess.getTileHTML(i+1, j-1).addClass("move");
  586. }
  587. else if (Chess.tiles[i+1][j-1].color != piece.color){
  588. Chess.getTileHTML(i+1, j-1).addClass("kill");
  589. }
  590. }
  591. if (Chess.tiles[i] != undefined && Chess.tiles[i][j-1] != undefined){
  592. if (Chess.tiles[i][j-1] == "empty"){
  593. Chess.getTileHTML(i, j-1).addClass("move");
  594. }
  595. else if (Chess.tiles[i][j-1].color != piece.color){
  596. Chess.getTileHTML(i, j-1).addClass("kill");
  597. }
  598. }
  599. $(".tile").on('click', function(){
  600. if ($(this).hasClass("move")){
  601. Chess.movePieces(piece, $(this).attr("data-x"), $(this).attr("data-y"));
  602. }
  603. else if ($(this).hasClass("kill")){
  604. Chess.destroyPieces(Chess.tiles[$(this).attr("data-x")][$(this).attr("data-y")]);
  605. Chess.movePieces(piece, $(this).attr("data-x"), $(this).attr("data-y"));
  606. }
  607. else{
  608. Chess.HTMLsync();
  609. }
  610. $(".move").removeClass("move");
  611. $(".kill").removeClass("kill");
  612. })
  613. })
  614. },
  615. movePieces : function(piece, x, y){
  616. this.tiles[piece.x][piece.y] = "empty";
  617. piece.x = parseInt(x, 10);
  618. piece.y = parseInt(y, 10);
  619. this.tiles[piece.x][piece.y] = piece;
  620. this.HTMLsync();
  621. },
  622. destroyPieces : function(piece){
  623. piece.alive = false;
  624. this.HTMLsync;
  625. },
  626. getTileHTML : function(x, y){
  627. return $("#"+x+"-"+y);
  628. }
  629. }
  630. })(jQuery);
  631. Chess.init();