/** Funcao que nos permite movimentar o jogador no tabuleiro */ void print_move(ESTADO e, int dx,int dy){ int x =e.jog.x +dx; int y = e.jog.y +dy; /*estado para qual o jogo transita ao clicar no link*/ ESTADO ne=e; if(e.goal.x==x && e.goal.y==y){ ne.acao=1; printf("<a xlink:href=http://127.0.0.1/cgi-bin/jogo?%s>\n",estado2str(ne)); print_goal(e); printf("</a >\n"); }else{ if(posvalida(e,x,y)==0){ ne.jog.x=x; ne.jog.y=y; printf("<a xlink:href=http://127.0.0.1/cgi-bin/jogo?%s>\n",estado2str(ne)); print_enemies(e); printf("</a >\n"); }else{ ne.jog.x=x; ne.jog.y=y; printf("<a xlink:href=http://127.0.0.1/cgi-bin/jogo?%s>\n",estado2str(ne)); print_square(x,y,TAM); printf("</a >\n"); } } }
/** Esta função tem como objetivo imprimir as cartas no tabuleiro. Se a carta a apresentar se encontre na mão do jogador (mao toma o valor de 0 e o actual_jogador no estado for igual a 0), e caso a carta seja selecionada é então adicionada ao highlight. Se já se encontrar no highlight, então é removida de lá. Caso contrário, se a carta se encontrar na mão de um bot, é imprimido o verso de uma carta, caso contrário a carta já foi jogada por um bot logo é mostrada a carta correspondente. @param path O path. @param x Coordenada HTML. @param y Coordenada HTML. @param e O estado atual. @param mao Número de um jogador. @param naipe O naipe da carta (inteiro entre 0 e 3). @param valor O valor da carta (inteiro entre 0 e 12). */ void imprime_carta(char *path, int x, int y, ESTADO e, int mao, int naipe, int valor) { char *suit = NAIPES; char *rank = VALORES; char script[10240]; ESTADO novo = e; novo.card = 1; if (mao == 0 && e.actual_jogador == 0) { if (carta_existe (novo.highlight, naipe, valor)) { novo.highlight = rem_carta(novo.highlight, naipe, valor); } else { novo.highlight = add_carta(novo.highlight, naipe, valor); } sprintf(script, "%s?%s", SCRIPT, estado2str(novo)); printf("<a xlink:href = \"%s\"><image x = \"%d\" y = \"%d\" height = \"110\" width = \"80\" xlink:href = \"%s/%c%c.svg\" /></a>\n", script, x, y, path, rank[valor], suit[naipe]); } else { if (carta_existe(e.mao[1],naipe,valor) || carta_existe(e.mao[2],naipe,valor) || carta_existe(e.mao[3],naipe,valor)) printf("<image x = \"%d\" y = \"%d\" height = \"110\" width = \"80\" xlink:href = \"%s/11C.png\" />\n", x, y, path); else printf("<image x = \"%d\" y = \"%d\" height = \"110\" width = \"80\" xlink:href = \"%s/%c%c.svg\" />\n", x, y, path, rank[valor], suit[naipe]); } }
void imprime_botao_teste(ESTADO e){ char script[10240]; ESTADO novo = {{0},0,{0},0,0,0,0,-1,0,{0},0,1}; novo.mao[0] = (long long int)262175; novo.mao[1] = (long long int)2147737600; novo.mao[2] = (long long int)17594266419200; novo.mao[3] = (long long int)17042430230560; novo.start = 0; novo.actual_jogador = primeiro_jogar(novo); novo.cartas_bots[novo.actual_jogador] = 1; novo.ultimo_jogador = novo.actual_jogador; novo.layout = 0; novo.cartas[0] = numero_de_cartas(novo.mao[0]); novo.cartas[1] = numero_de_cartas(novo.mao[1]); novo.cartas[2] = numero_de_cartas(novo.mao[2]); novo.cartas[3] = numero_de_cartas(novo.mao[3]); e = bots1(novo); while(e.actual_jogador != 0){ e = bots2(e); } sprintf(script, "%s?%s", SCRIPT, estado2str(e)); printf("<a xlink:href = \"%s\"><image x = \"1050\" y = \"710\" height = \"80\" width = \"80\" xlink:href = \"http://localhost/imagens/test.png\" /></a>\n", script); }
/** A função imprime_botao_clear imprime o botão clear para o browser, o qual vai limpar as cartas do highlight, e retorná-las à nossa mão. @param e O estado actual. */ void imprime_botao_clear(ESTADO e) { char script[10240]; e = clear(e); sprintf(script, "%s?%s", SCRIPT, estado2str(e)); printf("<a xlink:href = \"%s\"><image x = \"710\" y = \"710\" height = \"80\" width = \"80\" xlink:href = \"http://localhost/cards/ClearLI2.png\" /></a>\n", script); }
int main(){ ESTADO e, e1; char str[10240]; int i; for(i=0;i<4;i++){ e.mao[i]=0; e.cartas[i]=0; } e.highlight=0; e.play=e.pass=e.card=0; printf("%s\n", estado2str(e)); scanf("%s", str); e=str2estado(str); e1 = e; e1.play=1; printf("<a xlink:href=\"localhost/cgi-bin/cartas?%s\">asdf</a>\n", estado2str(e1)); }
/* A função imprime_botao_layout imprime um botão que muda a organização inicial das cartas (de naipe para valor). @param e O estado actual. */ void imprime_botao_layout(ESTADO e) { char script[10240]; if (e.layout == 0) { e.layout = 1; } else { e.layout = 0; } sprintf(script, "%s?%s", SCRIPT, estado2str(e)); printf("<a xlink:href = \"%s\"><image x = \"1140\" y = \"710\" height = \"80\" width = \"80\" xlink:href = \"http://localhost/cards/Reset.png\" /></a>\n", script); }
/** A função imprime_botao_sugestao imprime o botão de sugestão para o browser. @param e O estado actual. */ void imprime_botao_sugestao(ESTADO e) { char script[10240]; e = clear(e); e = sugestao(e); if (e.highlight == 0){ e = passar(e); } sprintf(script, "%s?%s", SCRIPT, estado2str(e)); printf("<a xlink:href = \"%s\"><image x = \"40\" y = \"710\" height = \"80\" width = \"80\" xlink:href = \"http://localhost/imagens/sugestaostallman.gif\" /></a>\n", script); }
/* A função imprime_botao_trofeu imprime uma imagem com um trofeu correspondente ao vencedor do jogo no final do mesmo. @param e O estado actual. */ void imprime_botao_trofeu(ESTADO e) { char script[10240]; if (e.cartas[0] == 0) { sprintf(script, "%s?%s", SCRIPT, estado2str(e)); printf("<a xlink:href = \"%s\"><image x = \"260\" y = \"50\" height = \"750\" width = \"750\" xlink:href = \"http://localhost/cards/trofeu.png\" /></a>\n", script); } if (e.cartas[1] == 0) { sprintf(script, "%s?%s", SCRIPT, estado2str(e)); printf("<a xlink:href = \"%s\"><image x = \"260\" y = \"50\" height = \"750\" width = \"750\" xlink:href = \"http://localhost/cards/trofeu2.png\" /></a>\n", script); } if (e.cartas[2] == 0) { sprintf(script, "%s?%s", SCRIPT, estado2str(e)); printf("<a xlink:href = \"%s\"><image x = \"260\" y = \"50\" height = \"750\" width = \"750\" xlink:href = \"http://localhost/cards/trofeu3.png\" /></a>\n", script); } if (e.cartas[3] == 0){ sprintf(script, "%s?%s", SCRIPT, estado2str(e)); printf("<a xlink:href = \"%s\"><image x = \"260\" y = \"50\" height = \"750\" width = \"750\" xlink:href = \"http://localhost/cards/trofeu4.png\" /></a>\n", script); } }
/** A função imprime_botao_exit imprime o botão de exit para o browser, de forma a ser possível recomeçar o jogo, voltando ao menu inicial com o botão start. @param e O estado actual. */ void imprime_botao_exit(ESTADO e) { char script[10240]; if (e.start == 0){ e = bots1(baralhar()); while(e.actual_jogador != 0){ e = bots2(e); } e.start=1; sprintf(script, "%s?%s", SCRIPT, estado2str(e)); printf("<a xlink:href = \"%s\"><image x = \"1140\" y = \"603\" height = \"80\" width = \"100\" xlink:href = \"http://localhost/cards/ExitLI2.png\" /></a>\n", script); } }
/** A função imprime_botao_reset imprime um botão que quando algum dos jogadores ganha a ronda, ou seja, acabam as cartas da sua mão. @param e O estado actual. */ void imprime_botao_reset(ESTADO e) { char script[10240]; if (e.cartas[0] != 0 && e.cartas[1] != 0 && e.cartas[2] != 0 && e.cartas[3] != 0) { } else { e = bots1(baralhar()); while(e.actual_jogador != 0) { e = bots2(e); } sprintf(script, "%s?%s", SCRIPT, estado2str(e)); printf("<a xlink:href = \"%s\"><image x = \"850\" y = \"530\" height = \"220\" width = \"200\" xlink:href = \"http://localhost/cards/playagain.png\" /></a>\n", script); } }
/** A função imprime_botao_start imprime o botão de start do menu inicial para o browser. @param e O estado actual. */ void imprime_botao_start(ESTADO e) { char script[10240]; if (e.start == 1){ e = bots1(baralhar()); while(e.actual_jogador != 0){ e = bots2(e); } e.start=0; sprintf(script, "%s?%s", SCRIPT, estado2str(e)); printf("<rect x = \"0\" y = \"0\" height = \"800\" width = \"1280\" style = \"fill:#000000\"/>\n"); printf("<image x = \"0\" y = \"0\" height = \"800\" width = \"1280\" xlink:href = \"http://localhost/cards/bg.png\" /></a>\n"); printf("<a xlink:href = \"%s\"><image x = \"1080\" y = \"650\" height = \"110\" width = \"150\" xlink:href = \"http://localhost/cards/StartLI2.png\" /></a>\n", script); } }
/** A função imprime_botao_sugestao imprime o botão de sugestão para o browser. @param e O estado actual. */ void imprime_botao_sugestao(ESTADO e) { char script[10240]; e = clear(e); if (e.ultima_jogada == -1) e = sugestao1(e); else{ e = sugestao2(e); if (e.highlight == 0){ e.ultima_jogada = e.ultima_jogada; e.actual_jogador = incrementa_jogador(e); e.pass = 1; } } sprintf(script, "%s?%s", SCRIPT, estado2str(e)); printf("<a xlink:href = \"%s\"><image x = \"40\" y = \"710\" height = \"80\" width = \"80\" xlink:href = \"http://localhost/cards/sugestaostallman.gif\" /></a>\n", script); }
/** Esta função trata de imprimir o botão "PASS" na página HTML. Quando o utilizador não tem nenhuma combinação válida possível em relação a última jogada, é possível usar o botão "PASS". O utilizador pode usar sempre o botão "PASS", excepto quando é o primeiro a jogar (3 de ouros) ou quando todos passam a jogada e este foi o ultimo a jogar uma carta/combinaçao @param e O estado actual. */ void imprime_botao_passar(ESTADO e) { char script[10240]; ESTADO novo = e; if (e.actual_jogador == 0 && e.ultima_jogada != -1 && e.ultimo_jogador != 0) { novo.ultima_jogada = e.ultima_jogada; novo.highlight = 0; novo.actual_jogador = incrementa_jogador(e); novo.pass = 1; sprintf(script, "%s?%s", SCRIPT, estado2str(novo)); printf("<a xlink:href = \"%s\"><image x = \"610\" y = \"710\" height = \"80\" width = \"80\" xlink:href = \"http://localhost/cards/PassLI2.png\" /></a>\n", script); } else { printf("<image x = \"610\" y = \"710\" height = \"80\" width = \"80\" xlink:href = \"http://localhost/cards/PassLI2out.png\" />\n"); } }
/** Esta função trata de imprimir o botão "SUBMIT" na página HTML. Aqui, usamos a função posso_jogar. Se for possível jogar, o botão é clicável, sendo primitida a jogada. Caso contrário, o botão fica mais escuro, não sendo clicável. @param e O estado actual. */ void imprime_botao_jogar(ESTADO e) { char script[10240]; ESTADO novo = e; if (posso_jogar(e) && e.highlight != 0) { novo.ultima_jogada = e.highlight; novo.cartas[0] = e.cartas[0] - (numero_de_cartas(novo.ultima_jogada)); novo.actual_jogador = incrementa_jogador(e); novo.play = 1; novo.ultimo_jogador = 0; sprintf(script, "%s?%s", SCRIPT, estado2str(novo)); printf("<a xlink:href = \"%s\"><image x = \"510\" y = \"710\" height = \"80\" width = \"80\" xlink:href = \"http://localhost/cards/SubmitLI2.png\" /></a>\n", script); } else { printf("<image x = \"510\" y = \"710\" height = \"80\" width = \"80\" xlink:href = \"http://localhost/cards/SubmitLI2out.png\" />\n"); } }