Guest User

Untitled

a guest
Jan 10th, 2018
26
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.87 KB | None | 0 0
  1. #include "header.h"
  2.  
  3.  
  4. int efetuaLogin(char * fifoCliente){
  5. int fdLoginPedido, fdLoginResposta, pedServ, respServ;
  6.  
  7. pedidoLogin p;
  8. servidor serv;
  9.  
  10. while(access(FIFO_SERV_LOGIN,F_OK) != 0){
  11. printw("Nao existe ligacao ao servidor...\n");
  12. refresh();
  13. sleep(5);
  14. }
  15.  
  16. fdLoginPedido = open(FIFO_SERV_LOGIN, O_WRONLY);
  17. if(fdLoginPedido == -1){
  18. printw("Erro no fifo do servidor!\n");
  19. close(fdLoginPedido);
  20. return 0;
  21. }
  22.  
  23.  
  24. //Cria fifo do cliente com identificação
  25. fdLoginResposta = open(fifoCliente,O_RDWR);
  26. if(fdLoginResposta == -1)
  27. printw("Erro no fifo do cliente!\n");
  28.  
  29.  
  30. printw("Introduza o seu username: ");
  31. scanw(" %49[^\n]", p.username);
  32.  
  33. noecho();
  34. printw("Introduza a sua password: ");
  35. scanw(" %49[^\n]", p.password);
  36. echo();
  37.  
  38. p.clientePid = getpid();
  39.  
  40. //Manda a informaçao para o servidor
  41. pedServ = write(fdLoginPedido, &p, sizeof(p));
  42. //printf("%s\t%s\n", p.username, p.password);
  43.  
  44.  
  45. //Recebe resposta do servidor (0 ou 1)
  46. respServ = read(fdLoginResposta, &serv, sizeof(serv));
  47. //printf("Recebe ------> %d\t%d\n\n", serv.flagLogin, serv.servidorPid);
  48. pidServidor = serv.servidorPid;
  49.  
  50. if(serv.flagLogin == 0)
  51. printw("Erro ao efetuar login, tente novamente!\n");
  52. else if(serv.flagLogin == 1)
  53. printw("Login efetuado com sucesso!\n");
  54. else if(serv.flagLogin == 2)
  55. printw("Utilizador ja efetuou login!\n");
  56.  
  57.  
  58. close(fdLoginPedido);
  59. close(fdLoginResposta);
  60.  
  61. return serv.flagLogin;
  62. }
  63.  
  64.  
  65.  
  66. void * ThreadDesenhaLabirinto(){
  67.  
  68. int i, j, fdCliente, userPid, intRead, fim=0;
  69. char newFifo[TAM];
  70. labirinto l;
  71.  
  72.  
  73. WINDOW * janela;
  74. janela = newwin(25,55,1,1);
  75. init_pair(1, COLOR_WHITE, COLOR_WHITE); //parede inquebravel
  76. init_pair(2, COLOR_WHITE, COLOR_BLACK); //parede quebravel
  77. init_pair(3, COLOR_BLUE, COLOR_BLACK); //bomberman
  78. init_pair(4, COLOR_RED, COLOR_BLACK); //inimigos
  79. init_pair(5, COLOR_YELLOW, COLOR_WHITE); //objectos
  80. init_pair(6, COLOR_BLACK, COLOR_BLACK); //passagem
  81.  
  82.  
  83.  
  84.  
  85.  
  86. userPid = getpid();
  87. sprintf(newFifo, "cliente%d", userPid);
  88. fdCliente = open(newFifo, O_RDWR );
  89. if(fdCliente == -1){
  90. printw("Erro ao abrir newFifo\n");
  91. refresh();
  92. }
  93.  
  94.  
  95.  
  96.  
  97. do{
  98. clear();
  99.  
  100. //recebe campo
  101. intRead = read(fdCliente, &l, sizeof(l));
  102. mvprintw(2, 55, "Mega Bombas: \n");
  103. mvprintw(3, 55, "Bombinhas: \n");
  104.  
  105.  
  106. for(i = 0; i < 20; i++){
  107. for(j = 0; j < 50; j++){
  108.  
  109.  
  110. if(l.campo[i][j] == 0){
  111.  
  112. wattron(janela, COLOR_PAIR(6));
  113. mvwaddch(janela, i+1, j+2, ACS_CKBOARD);
  114. }
  115.  
  116. if(l.campo[i][j] == 1){
  117.  
  118. wattron(janela, COLOR_PAIR(2));
  119. mvwaddch(janela, i+1, j+2, ACS_CKBOARD);
  120. }
  121.  
  122. if(l.campo[i][j] == 2){
  123.  
  124. wattron(janela, COLOR_PAIR(1));
  125. mvwaddch(janela, i+1, j+2, ACS_CKBOARD);
  126. }
  127.  
  128. if(l.campo[i][j] == 4){
  129.  
  130. wattron(janela, COLOR_PAIR(3));
  131. mvwaddch(janela, i+1, j+2, ACS_DIAMOND);
  132. }
  133.  
  134.  
  135.  
  136. //printw("%d", l.campo[i][j]);
  137. }
  138. printw("\n");
  139. }
  140.  
  141.  
  142.  
  143. wrefresh(janela);
  144. usleep(33);//30 tick por segundo
  145. }while(true);
  146.  
  147. wattroff(janela, COLOR_PAIR(1));
  148. wattroff(janela, COLOR_PAIR(2));
  149. wattroff(janela, COLOR_PAIR(3));
  150. wattroff(janela, COLOR_PAIR(4));
  151. wattroff(janela, COLOR_PAIR(5));
  152. wattroff(janela, COLOR_PAIR(6));
  153. wrefresh(janela);
  154. wclear(janela);
  155. }
  156.  
  157.  
  158.  
  159. void jogo(){
  160.  
  161. int input, userPid, fdCliente, fdServidor, intRead, intWrite, fim=0;
  162. char fifoCliente[TAM];
  163. cliente Jogador;
  164.  
  165. pthread_t desenhaLabirinto;
  166. curs_set(0);
  167.  
  168.  
  169. while(access(FIFO_SERV_JOGO, F_OK) != 0){
  170. printw("Nao existe ligacao ao servidor de jogo\n");
  171. refresh();
  172. sleep(2);
  173. }
  174.  
  175.  
  176. fdServidor = open(FIFO_SERV_JOGO, O_WRONLY);
  177. if(fdServidor == -1){
  178. printw("Erro ao abrir FIFO de jogo do servidor\n");
  179. refresh();
  180. }
  181.  
  182.  
  183. userPid = getpid();
  184. sprintf(fifoCliente,"cliente%d", userPid);
  185.  
  186.  
  187. fdCliente = open(fifoCliente, O_RDWR);
  188. if(fdCliente == -1){
  189. printw("Erro ao abrir fifo cliente\n");
  190. refresh();
  191. sleep(2);
  192. }
  193.  
  194. intWrite = write(fdServidor, &userPid, sizeof(int));
  195. //printw("USERPID no cliente: %d\n", userPid);
  196.  
  197. //lança thread do campo
  198. pthread_create(&desenhaLabirinto, NULL, ThreadDesenhaLabirinto, NULL);
  199.  
  200.  
  201. do{
  202. noecho();
  203. input = getch();
  204.  
  205. refresh();
  206.  
  207. if(input == KEY_UP)
  208. input = 1;
  209. else if(input == KEY_DOWN)
  210. input = 2;
  211. else if(input == KEY_LEFT)
  212. input = 3;
  213. else if(input == KEY_RIGHT)
  214. input = 4;
  215. else if(input == KEY_BACKSPACE){
  216. input = 0;
  217. clear();
  218. }
  219.  
  220. else
  221. input = -1; //INVALIDO;
  222.  
  223. if(input == 0){
  224. intWrite = write(fdServidor, &input, sizeof(int));
  225. break;
  226. }
  227. else
  228. intWrite = write(fdServidor, &input, sizeof(int));
  229.  
  230. //printw("INPUT CLIENTE: %d\n", input);
  231. usleep(33); //30 tick por segundo
  232. }while(fim == 0);
  233.  
  234.  
  235. close(fdCliente);
  236. close(fdServidor);
  237.  
  238. pthread_join(desenhaLabirinto, NULL);
  239. }
  240.  
  241.  
  242.  
  243. void menu(char * fcliente){
  244.  
  245. int op, returnLogin = 0;
  246.  
  247. refresh();
  248.  
  249. do{
  250. printw("\n***** MENU PRINCIPAL *****\n");
  251. if(returnLogin != 1)
  252. printw("1 - Login\n");
  253. printw("2 - Jogar\n");
  254. printw("3 - Sair\n");
  255. printw("Escolha uma opcao: ");
  256. scanw("%d", &op);
  257. clear();
  258.  
  259. switch(op){
  260.  
  261. case 1: if(returnLogin != 1)
  262. returnLogin = efetuaLogin(fcliente);
  263. else
  264. printw("opcao invalida!\n");
  265. break;
  266.  
  267. case 2: //if(returnLogin == 1)
  268. jogo();
  269. //else
  270. // printw("Efetue login primeiro!\n");
  271. break;
  272.  
  273.  
  274. case 3: printw("A encerrar o jogo...\n");
  275. kill(pidServidor, SIGUSR1);
  276. unlink(fcliente);
  277. endwin();
  278. exit(0);
  279.  
  280. default: printw("Opcao invalida!\n");
  281. }
  282.  
  283. }while(op > 0 && op < 4);
  284. }
  285.  
  286.  
  287.  
  288.  
  289. void recebeSinal(int sig){
  290.  
  291. if(sig == SIGUSR1){
  292. printw("\nO jogo vai encerrar...\n");
  293. refresh();
  294. sleep(2);
  295. endwin();
  296. char fifoClienteTmp[TAM];
  297. sprintf(fifoClienteTmp, "cliente%d", getpid());
  298. unlink(fifoClienteTmp);
  299. exit(0);
  300. }
  301. if(sig == SIGUSR2){
  302. printw("\nFoi kickado do jogo!\n");
  303. refresh();
  304. sleep(2);
  305. endwin();
  306. char fifoClienteTmp[TAM];
  307. sprintf(fifoClienteTmp, "cliente%d", getpid());
  308. unlink(fifoClienteTmp);
  309. exit(0);
  310. }
  311. }
  312.  
  313.  
  314. int main(void){
  315.  
  316. int pid;
  317. char fifoCliente[TAM];
  318.  
  319. initscr(); //inicializa as ncurses
  320. keypad(stdscr, TRUE); //teclas direcionais
  321. start_color();
  322. clear();
  323.  
  324.  
  325. signal(SIGUSR1, recebeSinal);
  326. signal(SIGUSR2, recebeSinal);
  327.  
  328. pid = getpid();
  329. sprintf(fifoCliente, "cliente%d", pid);
  330. mkfifo(fifoCliente, 0600);
  331.  
  332.  
  333. menu(fifoCliente);
  334.  
  335.  
  336. endwin();
  337. return 0;
  338. }
  339.  
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369.  
  370. /*
  371. int tabuleiro(){
  372.  
  373. int i,j,x=0, nInimigos = 0, nObjectos = 0;
  374. labirinto lab1;
  375. lab1.tamX = 20;
  376. lab1.tamY = 30;
  377. lab1.nObjectos = 50;
  378. lab1.nInimigos = 20;
  379. lab1.campo = (int **)malloc(lab1.tamX * sizeof(int *));
  380.  
  381. if(lab1.campo == NULL){
  382. printf ("Erro: Memoria Insuficiente");
  383. return 0;
  384. }
  385.  
  386. for(i=0;i<lab1.tamY;i++){
  387. lab1.campo[i] = (int *) malloc(lab1.tamY * sizeof(int));
  388. if (lab1.campo[i] == NULL) {
  389. printf ("Erro: Memoria Insuficiente");
  390. return 0;
  391. }
  392. }
  393.  
  394. //Campo inicial
  395. for(i=0;i<lab1.tamX;i++){
  396. for(j=0;j<lab1.tamY;j++){
  397. if(i==(lab1.tamX-1) || j==(lab1.tamY-1) || i==0 || j==0){
  398. lab1.campo[i][j] = 2;
  399. }
  400. else if(i%2==0 && j%2==0){
  401. lab1.campo[i][j] = 2;
  402. }
  403. else{
  404. x = rand() % 101;
  405. //system("pause");
  406. if(x>=50)
  407. lab1.campo[i][j] = 0;
  408. else if(x<50)
  409. lab1.campo[i][j] = 1;
  410. }
  411.  
  412. printf("%d", lab1.campo[i][j]);
  413. }
  414. printf("\n");
  415. }
  416. nInimigos = lab1.nInimigos;
  417. nObjectos = lab1.nObjectos;
  418. //campo com objectos e inimigos
  419. do{
  420. for(i=0;i<lab1.tamX;i++){
  421. for(j=0;j<lab1.tamY;j++){
  422. if(lab1.campo[i][j]==0){
  423. x = rand() % 101;
  424.  
  425. if(x>=0 && x<=5 && nInimigos>0){
  426. lab1.campo[i][j] = 4;
  427. nInimigos--;
  428. }
  429. else if(x>5 && x<= 15 && nObjectos >0){
  430. lab1.campo[i][j] = 3;
  431. nObjectos--;
  432. }
  433. }
  434. }
  435. }
  436. }while(nObjectos>0 && nInimigos>0);
  437. printf("\n\n\n");
  438. //Imprime campo
  439. for(i=0;i<lab1.tamX;i++){
  440. for(j=0;j<lab1.tamY;j++){
  441. printf("%d", lab1.campo[i][j]);
  442. }
  443. printf("\n");
  444. }
  445. return 0;
  446. }
  447. */
Add Comment
Please, Sign In to add comment