Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "util.h"
- int Fim_jogo = 0;
- //Continua a nao funcionar
- void Escolhe_jogador(Jogador *Struct_Jogadores, int *flagescolher_jogador){
- int fd,x,i,k,varaux;
- InputJogador input;
- fd = open(FIFO_SERVIDOR_JOGO,O_WRONLY);
- k = 0;
- input.userpid = getpid();
- input.escolher_jogador = 1;
- input.sair_utilizador = 0;
- input.jogar = 0;
- do{
- printw("\n\nJogadores Disponiveis:\n\n");
- for(i=0;i<18;i++){
- if(Struct_Jogadores[i].Humano == 0)
- mvprintw(i,0,"Equipa: %c\t Numero: %c\n",Struct_Jogadores[i].Equipa,
- Struct_Jogadores[i].Numero);
- }
- //refresh();
- //fflush(stdout);
- do{
- printw("\nQual a Equipa do jogador que vai escolher?:");
- scanw(" %c",&input.Equipa);
- input.Equipa = toupper(input.Equipa);
- //refresh();
- if(input.Equipa == 'V' || input.Equipa == 'A')
- varaux = 1;
- }while(varaux != 1);
- do{
- printw("\nQual o Numero?:");
- scanw(" %c",&input.Numero);
- //refresh();
- }while(input.Numero < '1' || input.Numero > '9');
- x = write(fd,&input,sizeof(input));
- sleep(0.11);
- for (i = 0; i < 18; i++)
- if (Struct_Jogadores[i].Equipa == input.Equipa && Struct_Jogadores[i].Numero == input.Numero){
- k = 1;
- *flagescolher_jogador = 1;
- break;
- }
- }while(!k);
- clear();
- refresh();
- close(fd);
- }
- void Introduz_Envia_Input(){
- int fd,x,var_aux;
- InputJogador p;
- int input_aux;
- fd = open(FIFO_SERVIDOR_JOGO,O_WRONLY);
- do{
- do{
- p.userpid = getpid();
- p.jogar = 1;
- p.escolher_jogador = 0;
- p.sair_utilizador = 0;
- var_aux = 0;
- input_aux = getch();
- switch(input_aux){
- case KEY_UP: p.input_teclado = 99; break;//99 a 96
- case KEY_DOWN: p.input_teclado = 98; break;
- case KEY_RIGHT: p.input_teclado = 97; break;
- case KEY_LEFT: p.input_teclado = 96; break;
- case '0': p.input_teclado = 0; break;
- case '1': p.input_teclado = 1; break;
- case '2': p.input_teclado = 2; break;
- case '3': p.input_teclado = 3; break;
- case '4': p.input_teclado = 4; break;
- case '5': p.input_teclado = 5; break;
- case '6': p.input_teclado = 6; break;
- case '7': p.input_teclado = 7; break;
- case '8': p.input_teclado = 8; break;
- case '9': p.input_teclado = 9; break;
- }
- if ((p.input_teclado > 95 && p.input_teclado < 100) || (p.input_teclado >= 0 && p.input_teclado < 10)) {
- var_aux = 1;
- }
- }while(!var_aux);
- x = write(fd,&p,sizeof(p));
- //printf("%d\n",p.input_teclado);
- }while(Fim_jogo == 0);
- close(fd);
- }
- void * Thread_Desenha_Tab(void * Info_Jogo){
- int fim_jogo = 0,i, j, x = 0, y = 0;
- StrThr *ptr_struct;
- ptr_struct = (StrThr *)Info_Jogo;
- init_pair(3, COLOR_GREEN, COLOR_GREEN);
- init_pair(4, COLOR_WHITE, COLOR_WHITE);
- init_pair(5, COLOR_BLUE, COLOR_BLUE);
- init_pair(6, COLOR_RED, COLOR_RED);
- do{
- clear();
- attron(COLOR_PAIR(3)); //Interior do campo
- for (i = 0; i < 21; i++) {
- x = 0;
- for (j = 0; j < 51; j++) {
- mvprintw(y, x, " "); x++;
- }
- mvprintw(y, x, " "); y++;
- }
- attroff(COLOR_PAIR(3));
- attron(COLOR_PAIR(4));
- for (i = 0; i < 51; i++) { mvprintw(0, i, " "); } //Linha cima
- for (i = 0; i < 52; i++) { mvprintw(21, i, " "); } //Linha baixo
- for (i = 0; i < 21; i++) { mvprintw(i, 0, " "); } //Linha esquerda
- for (i = 0; i < 21; i++) { mvprintw(i, 26, " "); } //Linha centro
- for (i = 0; i < 21; i++) { mvprintw(i, 51, " "); } //Linha direita
- attroff(COLOR_PAIR(4));
- attron(COLOR_PAIR(5));
- for (i = 6; i <= 15; i++) { mvprintw(i, 0, " "); } //Baliza esquerda
- attroff(COLOR_PAIR(5));
- attron(COLOR_PAIR(6));
- for (i = 6; i <= 15; i++) { mvprintw(i, 51, " "); } //Baliza direita
- attroff(COLOR_PAIR(6));
- refresh();
- }while(fim_jogo == 0);
- }
- void * Thread_Jogar_Cliente(void * ptr_Struct_Jogadores){
- int fd_res,cli_pid,z,i;
- Jogador *pjogador;
- char jogarfifocli[30];
- pjogador = (Jogador *) ptr_Struct_Jogadores;
- cli_pid = getpid();
- while(access(FIFO_SERVIDOR_JOGO,F_OK) != 0){
- printf("Nao existe ligacao com o servidor de jogo!\n");
- sleep(2);
- }
- sprintf(jogarfifocli,"CLiente%d",cli_pid);
- fd_res = open(jogarfifocli,O_RDWR); //Abre Fifo cliente onde se recebe as structs com info
- //Estruturas dos jogadores a.k.a "Tabuleiro"
- do{
- z = read(fd_res,&pjogador,sizeof(pjogador) * 18);
- }while(Fim_jogo != 1);
- close(fd_res);
- //endwin();
- }
- void fazer_LoginRegisto(Pedido_LoginRegisto * p) {
- int i, k;
- do {
- k = 1;
- printw("Username:");
- scanw(" %s[^\n]", p->username);
- for (i = 0; i < strlen(p->username); i++)
- if (p->username[i] < '0' || (p->username[i] > '9' && tolower(p->username[i]) < 'a') || tolower(p->username[i]) > 'z') {
- k = 0;
- break;
- }
- if (k == 0 || strlen(p->username) > 15)
- printw("[USERNAME INVALIDO]\n(MAX:15 caracteres -> [a-z] [A-Z] [1-10])\n");
- } while (strlen(p->username) > 15 || k != 1);
- do {
- k = 1;
- printw("Password:");
- noecho();
- scanw(" %s[^\n]", p->password);
- echo();
- for (i = 0; i < strlen(p->password); i++)
- if (p->password[i] < '0' || (p->password[i] > '9' && tolower(p->password[i]) < 'a') || tolower(p->password[i]) > 'z') {
- k = 0;
- break;
- }
- if (k == 0 || strlen(p->password) > 15)
- printw("[PASSWORD INVALIDA]\n(MAX:15 caracteres -> [a-z] [A-Z] [1-10])\n");
- } while (strlen(p->password) > 15 || k != 1);
- clear();
- //refresh();
- }
- int main(void) {
- int y,z,x,verifica,fd_ped,fd_res,menu,maxX,maxY;
- int flagEscolher_jogador = 0;
- Bola BALL;
- Pedido_LoginRegisto p;
- Resposta_LoginRegisto r;
- p.cli_pid = getpid();
- Jogador Struct_Jogadores[18];
- Str_campo Inf_Desenho;
- char fifo_cli[30];
- pthread_t Jogar,Desenha_Tab;
- initscr();
- start_color();
- echo();
- cbreak();
- keypad(stdscr,TRUE);
- curs_set(0);
- Inf_Desenho.pj = Struct_Jogadores;
- Inf_Desenho.pb = &BALL;
- //getmaxyx(stdscr,maxY,maxX);
- //echo();
- //Configura e abre o fifo do cliente
- sprintf(fifo_cli,"Cliente%d",p.cli_pid);
- mkfifo(fifo_cli,0600);
- fd_res = open(fifo_cli,O_RDWR);
- //Verifica se o servidor está ligado
- while(access(FIFO_SERVIDOR_LOGIN, F_OK) != 0) {
- printw("Nao existe ligacao ao servidor\n");
- sleep(10);
- }
- //Abre a ligação ao servidor de Login
- fd_ped = open(FIFO_SERVIDOR_LOGIN, O_WRONLY);
- if (fd_ped == -1) {
- printw("Erro na abertura do fifo do cliente \n");
- exit(1);
- }
- do {
- printw("---------Menu Principal---------\n");
- printw("1 - Login\n");
- printw("2 - Registar\n");
- printw("3 - Sair\n");
- printw("Escolha uma opcao:");
- //refresh();
- scanw("%d", &menu);
- clear();
- switch(menu){
- case 1:
- p.login = 1;
- p.registo = 0;
- printw("Introduza os seus dados de login\n");
- fazer_LoginRegisto(&p);
- break;
- case 2:
- p.login = 0;
- p.registo = 1;
- printw("Introduza os seus dados de registo\n");
- fazer_LoginRegisto(&p);
- break;
- case 3:
- p.login = 0;
- p.registo = 0;
- close(fd_ped);
- endwin();
- exit(0);
- default:
- printw("Opcao invalida!\n");
- break;
- }
- z = write(fd_ped, &p, sizeof(p));
- x = read(fd_res, &r, sizeof(r));
- if(r.verifica == 1 && p.login == 1){
- printw("Login efectuado com sucesso!\n");
- //clear();
- y = read(fd_res,&Struct_Jogadores,sizeof(Struct_Jogadores));
- pthread_create(&Jogar,NULL,&Thread_Jogar_Cliente,(void *)&Struct_Jogadores);
- if(flagEscolher_jogador == 0)
- Escolhe_jogador(Struct_Jogadores, &flagEscolher_jogador);
- Introduz_Envia_Input();
- pthread_create(&Desenha_Tab,NULL,&Thread_Desenha_Tab,(void *)&Inf_Desenho);
- pthread_join(Jogar,NULL);
- pthread_join(Desenha_Tab,NULL);
- }
- if(r.verifica == 1 && p.registo == 1){
- printw("Registo efectuado com sucesso!\n");
- printw("Realize o seu login.\n");
- //refresh();
- }
- if(r.verifica == 0 && p.login == 1){
- printw("O login falhou!\n");
- }
- if(r.verifica == 0 && p.registo == 1){
- printw("O registo falhou!\n");
- }
- }while(menu!=3 || menu != 4);
- close(fd_ped);
- close(fd_res);
- unlink(fifo_cli);
- endwin();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement