Advertisement
Guest User

Untitled

a guest
Dec 3rd, 2017
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.91 KB | None | 0 0
  1. //var flag = 0; // 1 PC & 0 User
  2. var turn = 1;
  3. var wait = 1;
  4. var nim = 0;
  5. var mode = 0;
  6. var size = 0;
  7. var game;
  8. var rack;
  9. var stack = 0;
  10. var pieces = 0;
  11. var user;
  12. var pass;
  13. var k = 0;
  14. //var online = 0; usar no leave
  15.  
  16. //--------------------------------------------------------
  17. // CHECK LOGIN //
  18. //--------------------------------------------------------
  19. function checkLogin() {
  20. var nameRegex = /^[a-zA-Z0-9\_]+$/;
  21. var username_teste = document.getElementById('user').value;
  22. var password_teste = document.getElementById('pass').value;
  23. var match = document.getElementById('user').value.match(nameRegex);
  24.  
  25. if (username_teste.length === 0) {
  26. alert("Your username is empty!");
  27. return false;
  28. }
  29.  
  30. if (match === null) {
  31. alert("Your username is not valid. Only characters A-Z, a-z and '_' are acceptable.");
  32. return false;
  33. }
  34.  
  35. if (username_teste.length > 15) {
  36. alert("You have more than 15 characters on username!");
  37. return false;
  38. }
  39.  
  40. if (password_teste.length === 0) {
  41. alert("Your password is empty!");
  42. return false;
  43. }
  44.  
  45. if (password_teste.length < 4) {
  46. alert("Your password is too small!");
  47. return false;
  48. }
  49.  
  50. document.getElementById('user').innerHTML = username_teste;
  51. return true;
  52. }
  53.  
  54. //------------------------------------------------------------
  55. // REGISTER //
  56. //------------------------------------------------------------
  57. function register() {
  58. var user = document.getElementById("user").value;
  59. var pass = document.getElementById("pass").value;
  60.  
  61. if (checkLogin()) {
  62.  
  63. var xhr = new XMLHttpRequest();
  64. xhr.open("POST", "http://twserver.alunos.dcc.fc.up.pt:8008/register",
  65. true);
  66. xhr.onreadystatechange = function() {
  67.  
  68. if (xhr.readyState < 4)
  69. return;
  70. if (xhr.status == 200) { //faz login
  71. var resposta = JSON.parse(xhr.responseText);
  72. username = name;
  73. password = pass;
  74. document.getElementById('painel_login').style.display = 'none';
  75. document.getElementById('jogo_on').style.display = 'none';
  76. document.getElementById('login').style.display = 'none';
  77. document.getElementById('registo').style.display = 'none';
  78.  
  79. document.getElementById('painel_jogo').style.display = 'block';
  80. } else {
  81. alert("Password errada!");
  82. document.getElementById("my_login").reset();
  83. }
  84. }
  85. xhr.send(JSON.stringify({
  86. "nick" : user,
  87. "pass" : pass
  88. }));
  89. } else {
  90. document.getElementById("my_login").reset();
  91. }
  92. }
  93. //------------------------------------------------------------
  94. // JOIN //
  95. //------------------------------------------------------------
  96. function join() {
  97.  
  98. var group = "19";
  99. user = document.getElementById("user").value;
  100. pass = document.getElementById("pass").value;
  101. size = document.getElementById("numb_on").value;
  102.  
  103.  
  104.  
  105. console.log("Username: " + user + "| Password: " + pass);
  106.  
  107. var xhr = new XMLHttpRequest();
  108.  
  109. xhr.open("POST", "http://twserver.alunos.dcc.fc.up.pt:8008/join", true);
  110. xhr.onreadystatechange = function() {
  111.  
  112. if (xhr.readyState < 4)
  113. return;
  114. if (xhr.status == 200) {
  115. var game_ash = JSON.parse(xhr.responseText);
  116. game = game_ash.game;
  117. update(user, game);
  118. wait = 1;
  119. }
  120. }
  121. xhr.send(JSON.stringify({
  122. "group" : group,
  123. "nick" : user,
  124. "pass" : pass,
  125. "size" : size
  126. }));
  127. }
  128. //------------------------------------------------------------
  129. // UPDATE //
  130. //------------------------------------------------------------
  131. function update(user, game) {
  132. var xhr = new XMLHttpRequest();
  133. console.log("ON UPDATE");
  134. xhr.open("GET", 'http://twserver.alunos.dcc.fc.up.pt:8008/update?nick='
  135. + user + '&game=' + game, true);
  136. var eventSource = new EventSource(
  137. 'http://twserver.alunos.dcc.fc.up.pt:8008/update?' + 'nick=' + user
  138. + '&game=' + game);
  139. var flag = 0;
  140. eventSource.onmessage = function(event) {
  141. var evdata = JSON.parse(event.data);
  142. console.log("WINNER: " + evdata.winner);
  143. rack = evdata.rack;
  144. if (rack != undefined)
  145. rack = rack.reverse();
  146. console.log(evdata);
  147. if (evdata.turn !== undefined) {
  148. if (evdata.turn === user) {
  149. turn = 1;
  150. } else
  151. turn = 0;
  152.  
  153. if (wait == 1) {
  154. mode = 1;
  155.  
  156. gerar_tab(evdata.rack);
  157. wait = 0;
  158. } else {
  159. update_tab(rack);
  160.  
  161. console.log(evdata);
  162.  
  163. }
  164. }
  165.  
  166. if (evdata.winner != undefined) {
  167. winner(evdata.winner);
  168. //alert(evdata.winner + " venceu!");
  169.  
  170. }
  171.  
  172. }
  173. }
  174.  
  175. //------------------------------------------------------------
  176. // NOTIFY //
  177. //------------------------------------------------------------
  178. function notify(stack_2, pieces_2) {
  179. user = document.getElementById("user").value;
  180. pass = document.getElementById("pass").value;
  181. stack = stack_2;
  182. pieces = pieces_2;
  183.  
  184. var xhr = new XMLHttpRequest();
  185. //var game_ash = JSON.parse(xhr.responseText);
  186. //var game=game_ash.game;
  187. xhr.open("POST", "http://twserver.alunos.dcc.fc.up.pt:8008/notify", true);
  188. xhr.onreadystatechange = function() {
  189. if (xhr.readyState < 4)
  190. return;
  191. if (xhr.status == 200) {
  192. var notify = JSON.parse(xhr.responseText);
  193. }
  194.  
  195. }
  196. xhr.send(JSON.stringify({
  197. "nick" : user,
  198. "pass" : pass,
  199. "game" : game,
  200. "stack" : stack,
  201. "pieces" : pieces
  202. }));
  203. }
  204.  
  205. //------------------------------------------------------------
  206. // RANKING //
  207. //------------------------------------------------------------
  208.  
  209.  
  210. //------------------------------------------------------------
  211. // LEAVE //
  212. //------------------------------------------------------------
  213. function leave() {
  214. user = document.getElementById("user").value;
  215. console.log("TURN MO LEAVE" + turn);
  216. var xhr = new XMLHttpRequest();
  217.  
  218. xhr.open("POST", "http://twserver.alunos.dcc.fc.up.pt:8008/leave", true);
  219. xhr.onreadystatechange = function() {
  220.  
  221. if (xhr.readyState < 4)
  222. return;
  223. if (xhr.status == 200) {
  224. var leave = JSON.parse(xhr.responseText);
  225. console.log(leave);
  226. }
  227. }
  228. xhr.send(JSON.stringify({
  229. "game" : game,
  230. "pass" : pass,
  231. "nick" : user
  232. }));
  233. }
  234. //------------------------------------------------------------
  235. // GERA TAB //
  236. //------------------------------------------------------------
  237. function gerar_tab(rack) {
  238. if (mode == 0) {
  239. document.getElementById('tabuleiro').style.display = 'block';
  240. document.getElementById('play').style.display = 'inline-block';
  241. document.getElementById('quit').style.display = 'inline-block';
  242.  
  243. nim = tam * tam;
  244. var table = document.getElementById('tableclass');
  245. console.log("= " + tam);
  246. for (var i = 0; i < tam; i++) {
  247. var row = table.insertRow();
  248. row.classList.add('tr');
  249.  
  250. for (var j = 0; j < tam; j++) {
  251. var td = row.insertCell();
  252. td.classList.add('td');
  253. cell_onclick(td, i, j);
  254. }
  255. }
  256. if (flag != 0)
  257. setTimeout(pc_play, 100);
  258.  
  259. } else {
  260. rack.reverse(); //sai invertido 1,2,3...
  261. console.log("IN GERA TAB");
  262. document.getElementById('jogo_on').style.display = 'none';
  263. document.getElementById('gerar_tab').style.display = 'block';
  264. document.getElementById('tabuleiro').style.display = 'block';
  265. document.getElementById('quit').style.display = 'inline-block';
  266. console.log("length: " + rack);
  267.  
  268. nim = rack.length * rack.length;
  269. var table = document.getElementById('tableclass');
  270. for (var i = 0; i < rack.length; i++) {
  271. var row = table.insertRow();
  272. row.classList.add('tr');
  273. console.log("row " + i + " ");
  274. for (var j = 0; j < rack[i]; j++) {
  275. var td = row.insertCell();
  276. td.classList.add('td');
  277. cell_onclick(td, i, j);
  278. }
  279. }
  280. console.log("NO FIM DO CELL" + rack);
  281.  
  282. /*
  283. for (var i = 0; i < rack.length; i++) {
  284.  
  285. console.log("row " + i+" ");
  286.  
  287. for (var j =0; j <rack[i]; j++) {
  288. cell_onclick(td, j, i);
  289. }
  290. }*/
  291. //update(user,game);
  292. //rack.reverse();
  293. }
  294.  
  295. }
  296. function winner(winner) {
  297. document.getElementById('tabuleiro').style.display = 'none';
  298. document.getElementById('gerar_tab').style.display = 'none';
  299. document.getElementById('modo_jogo').style.display = 'none';
  300. document.getElementById('play').style.display = 'none';
  301. document.getElementById('quit').style.display = 'none';
  302. alert(winner+" venceu o jogo!")
  303. document.getElementById('painel_init').style.display = 'block';
  304.  
  305. }
  306.  
  307. function gerar_tab2() {
  308. var table = document.getElementById('tabelaclassificacao');
  309.  
  310. for (var i = 0; i < 11; i++) {
  311. var row = table.insertRow();
  312. row.classList.add('tr_1');
  313.  
  314. for (var j = 0; j < 2; j++) {
  315. var td = row.insertCell();
  316. td.classList.add('td_1');
  317.  
  318. }
  319. }
  320. var n = "Nome";
  321. var t = "Tempo";
  322. document.getElementById("tabelaclassificacao").rows[0].cells[0].innerHTML = n;
  323. document.getElementById("tabelaclassificacao").rows[0].cells[1].innerHTML = t;
  324.  
  325. for (i = 1; i <= 10; i++) {
  326. var player_class = i + 'º -------------- ';
  327. var player_time = "-- / -- / --";
  328. console.log(player_class);
  329. document.getElementById("tabelaclassificacao").rows[i].cells[0].innerHTML = player_class;
  330. document.getElementById("tabelaclassificacao").rows[i].cells[1].innerHTML = player_time;
  331.  
  332. }
  333.  
  334. }
  335.  
  336. function getCell(l, c) {
  337. var boardElement = document.getElementById("tableclass");
  338. return boardElement.rows[l].cells[c];
  339. }
  340.  
  341. function pc_play() {
  342. document.getElementById('demo_3').style.display = 'none';
  343.  
  344. var x, y;
  345. var cell;
  346. // alert(nim);
  347.  
  348. if (nim <= 0)
  349. return;
  350.  
  351. do {
  352. x = Math.floor((Math.random() * tam));
  353. y = Math.floor((Math.random() * tam));
  354. // console.log(x + " " + y + " " + tam);
  355. } while (getCell(x, y).className != "td");
  356.  
  357. for (var i = x; i >= 0; i--) {
  358. var cell_vizinha = getCell(i, y);
  359. if (cell_vizinha.className == "inactive")
  360. break;
  361. cell_vizinha.className = "temporario";
  362.  
  363. }
  364.  
  365. setTimeout(function() {
  366. for (var i = x; i >= 0; i--) {
  367. var cell_vizinha = getCell(i, y);
  368. if (cell_vizinha.className == "inactive")
  369. break;
  370. cell_vizinha.className = "inactive";
  371. nim--;
  372.  
  373. }
  374. winner();
  375.  
  376. flag = 0;
  377. }, 1000);
  378. }
  379.  
  380. function winner_off() {
  381. if (nim <= 0) {
  382. if (flag == 0) {
  383. alert("Parabéns, ganhaste!");
  384.  
  385. } else {
  386. alert("Perdeste, tente de novo!");
  387.  
  388. }
  389.  
  390. document.getElementById('tabuleiro').style.display = 'none';
  391. document.getElementById('gerar_tab').style.display = 'none';
  392. // document.getElementById('myFunction').style.display = 'none';
  393. document.getElementById('quit').style.display = 'none';
  394. document.getElementById('play').style.display = 'none';
  395. document.getElementById('try_again').style.display = 'block';
  396.  
  397. return;
  398. }
  399. }
  400. function update_tab(rack) {
  401. var tab = document.getElementById('tableclass');
  402. var count = 0;
  403. for (var i = 0; i < rack.length - 1; i++) {
  404. count = 1;
  405. for (var j = size - 1; j >= 0; j--) {
  406. console.log("i " + i + "j " + j);
  407. if (count > rack[i]) {
  408. //adioncar classe inativo
  409. if (getCell(j, i) !== undefined) {
  410. getCell(j, i).className = "inactive";
  411. getCell(j, i).onmouseover = undefined;
  412. getCell(j, i).onmouseout = undefined;
  413. }
  414. } else {
  415. count++;
  416. }
  417. }
  418. }
  419.  
  420. }
  421.  
  422. function cell_onclick(cell, l, c) {
  423.  
  424. // rack.reverse();
  425. console.log("RACK NO CELL " + rack);
  426. var data = [];
  427. var length = size; // user defined length
  428.  
  429. for (var i = 0; i < length; i++) {
  430. data.push(i);
  431. }
  432.  
  433. cell.onclick = function() {
  434. if (turn === 1) {
  435. if (cell.className == "td") {
  436. k = data[c];
  437. for (var i = l; i >= k; i--) {
  438.  
  439. var cell_vizinha = getCell(i, c);
  440. console.log("CELL ON L E c" + l + " " + i + " ");
  441.  
  442. if (cell_vizinha.className == "inactive")
  443. break;
  444.  
  445. cell_vizinha.className = "inactive";
  446. nim--;
  447. //console.log("RACK NO CELL no fim " + rack);
  448.  
  449. }
  450. // nim = nim - (l + 1);
  451.  
  452. //winner();
  453.  
  454. //flag = 1;
  455. //if(mod==0)
  456. //setTimeout(pc_play, 3);
  457. }
  458.  
  459. stack = size - c - 1;
  460. pieces = size - l - 1;
  461. notify(stack, pieces);
  462. } else
  463. alert("Não é a tua vez!");
  464. }
  465.  
  466. cell.onmouseover = function() {
  467. if (cell.className !== "inactive" && cell.className !== "temporario")
  468. for (var i = l; i >= 0; i--) {
  469. var cell_vizinha = getCell(i, c);
  470. if (cell_vizinha !== undefined) {
  471. if (cell_vizinha.className == "inactive"
  472. || cell_vizinha.className == "temporario")
  473. break;
  474. cell_vizinha.className = "active";
  475. }
  476. }
  477. }
  478.  
  479. cell.onmouseout = function() {
  480. if (cell.className !== "inactive" && cell.className !== "temporario")
  481.  
  482. for (var i = size - 1; i >= 0; i--) {
  483. var cell_vizinha = getCell(i, c);
  484. if (cell_vizinha !== undefined) {
  485.  
  486. if (cell_vizinha.className == "inactive"
  487. || cell_vizinha.className == "temporario")
  488. break;
  489. cell_vizinha.className = "td";
  490. }
  491. }
  492. }
  493.  
  494. }
  495.  
  496. function clearBoard() {
  497.  
  498. var i;
  499. for (i = 0; i < size; i++) {
  500. if (document.getElementById("tableclass").rows.length != 0)
  501. document.getElementById("tableclass").deleteRow(0);
  502. }
  503. }
  504. function clearBoard_rank() {
  505.  
  506. var i;
  507. for (i = 0; i < 10; i++) {
  508. if (document.getElementById("tabelaclassificacao").rows.length != 0)
  509. document.getElementById("tabelaclassificacao").deleteRow(0);
  510.  
  511. }
  512. }
  513.  
  514. function modo_online_jogo() {
  515. document.getElementById('modo_jogo').style.display = 'none';
  516.  
  517. document.getElementById('jogo_on').style.display = 'block';
  518. }
  519.  
  520. function myFunction() {
  521. var x, text;
  522.  
  523. x = document.getElementById("numb").value;
  524. document.getElementById('demo_3').style.display = 'none';
  525.  
  526. document.getElementById('gerar_tab').style.display = 'block';
  527. tam = x;
  528. //clearBoard();
  529. gerar_tab();
  530. }
  531.  
  532. function first_play() {
  533. document.getElementById('demo').style.display = 'none';
  534. document.getElementById('demo_2').style.display = 'block';
  535.  
  536. flag = 0// user
  537.  
  538. }
  539. function first_play_pc() {
  540. document.getElementById('demo').style.display = 'none';
  541. document.getElementById('demo_2').style.display = 'block';
  542.  
  543. flag = 1; // pc
  544.  
  545. }
  546.  
  547. function dif_play() {
  548. document.getElementById('demo_2').style.display = 'none';
  549. document.getElementById('demo_3').style.display = 'block';
  550.  
  551. }
  552. function registar() {
  553. document.getElementById('header_painel2').style.display = 'none';
  554. document.getElementById('painel_login').style.display = 'block';
  555. }
  556.  
  557. function login() {
  558. document.getElementById('painel_rank').style.display = 'none';
  559. document.getElementById('painel_instrucoes').style.display = 'none';
  560. document.getElementById('gerar_tab').style.display = 'none';
  561. document.getElementById('painel_jogo').style.display = 'none';
  562. document.getElementById('tabuleiro').style.display = 'none';
  563. document.getElementById('painel_init').style.display = 'none';
  564. document.getElementById('painel_login').style.display = 'block';
  565. }
  566. function login_wData() {
  567. document.getElementById('painel_login').style.display = 'none';
  568. document.getElementById('painel_init').style.display = 'block';
  569. }
  570. function config() {
  571. clearBoard();
  572. document.getElementById('painel_login').style.display = 'none';
  573. document.getElementById('painel_rank').style.display = 'none';
  574. document.getElementById('painel_init').style.display = 'none';
  575. document.getElementById('painel_instrucoes').style.display = 'none';
  576. document.getElementById('gerar_tab').style.display = 'none';
  577. document.getElementById('painel_jogo').style.display = 'block';
  578. document.getElementById('tabuleiro').style.display = 'none';
  579.  
  580. }
  581. function modo_jogo() {
  582. document.getElementById('gerar_tab').style.display = 'none';
  583. document.getElementById('modo_jogo').style.display = 'none';
  584. document.getElementById('demo').style.display = 'block';
  585. }
  586. function instrucoes() {
  587. document.getElementById('gerar_tab').style.display = 'none';
  588. document.getElementById('painel_jogo').style.display = 'none';
  589. document.getElementById('painel_login').style.display = 'none';
  590. document.getElementById('painel_init').style.display = 'none';
  591. document.getElementById('painel_rank').style.display = 'none';
  592. document.getElementById('painel_instrucoes').style.display = 'block';
  593.  
  594. }
  595. function rank() {
  596. document.getElementById('gerar_tab').style.display = 'none';
  597. document.getElementById('painel_jogo').style.display = 'none';
  598. document.getElementById('painel_login').style.display = 'none';
  599. document.getElementById('painel_init').style.display = 'none';
  600. document.getElementById('painel_instrucoes').style.display = 'none';
  601. document.getElementById('gerar_tab').style.display = 'none';
  602. clearBoard_rank();
  603. document.getElementById('painel_rank').style.display = 'block';
  604. gerar_tab2();
  605. document.getElementById('tabelaclassificacao').style.display = 'block';
  606.  
  607. }
  608.  
  609. function home() {
  610. clearBoard();
  611. document.getElementById('tabuleiro').style.display = 'none';
  612. document.getElementById('quitgame').style.display = 'none';
  613. document.getElementById('gerar_tab').style.display = 'none';
  614. document.getElementById('painel_jogo').style.display = 'none';
  615. document.getElementById('painel_instrucoes').style.display = 'none';
  616. document.getElementById('painel_login').style.display = 'none';
  617. document.getElementById('painel_rank').style.display = 'none';
  618. document.getElementById('painel_init').style.display = 'block';
  619. //document.getElementById('demo').style.display = 'block';
  620.  
  621. }
  622. function table_click() {
  623. var boardElement = document.getElementById("tabuleiro");
  624. alert(boardElement.rows[l].cells[c]);
  625. }
  626.  
  627. function try_again() {
  628. clearBoard();
  629. document.getElementById('try_again').style.display = 'none';
  630. document.getElementById('demo').style.display = 'block';
  631. }
  632. function playbutton() {
  633. document.getElementById('painel_login').style.display = 'none';
  634. document.getElementById('painel_rank').style.display = 'none';
  635. document.getElementById('painel_init').style.display = 'none';
  636. document.getElementById('painel_instrucoes').style.display = 'none';
  637. document.getElementById('gerar_tab').style.display = 'block';
  638. document.getElementById('painel_jogo').style.display = 'block';
  639. document.getElementById('tabuleiro').style.display = 'block';
  640. }
  641. function quitbutton() {
  642. document.getElementById('play').style.display = 'none';
  643. document.getElementById('quit').style.display = 'none';
  644. document.getElementById('painel_jogo').style.display = 'none';
  645. document.getElementById('gerar_tab').style.display = 'none';
  646. document.getElementById('tabuleiro').style.display = 'none';
  647. document.getElementById('quitgame').style.display = 'block';
  648. //leave();
  649. }
  650. function yes() {
  651. clearBoard();
  652. document.getElementById('tabuleiro').style.display = 'none';
  653. document.getElementById('quitgame').style.display = 'none';
  654. document.getElementById('painel_jogo').style.display = 'none';
  655. document.getElementById('painel_init').style.display = 'block';
  656. document.getElementById('demo').style.display = 'block';
  657. leave();
  658.  
  659. }
  660. function quitfunction() {
  661. document.getElementById('play').style.display = 'inline-block';
  662. document.getElementById('quitgame').style.display = 'none';
  663. document.getElementById('quit').style.display = 'inline-block';
  664. document.getElementById('painel_jogo').style.display = 'block';
  665. document.getElementById('tabuleiro').style.display = 'block';
  666. document.getElementById('gerar_tab').style.display = 'block';
  667.  
  668. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement