Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

Rafaela Pinho

Dúvidas em jogo de cartas

Mensagens Recomendadas

Rafaela Pinho    0
Rafaela Pinho

Olá, boa noite,

tenho um trabalho para entregar este fim de semana, o objetivo do trabalho é fazer o jogo big two usando a linguagem C.

só que eu não sei qual o codigo a escrever para criar um jogador inteligente, ou seja jogadas automaticas feitas pelo pc.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rafaela Pinho    0
Rafaela Pinho

Todo todo nao, falta os jogadores jogarem e as combinaçoes das cartas que se podem jogar.

Editado por Rafaela Pinho

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo    1151
HappyHippyHippo

agora tens vários passos a tomar:

- apresenta o jogo e as suas regras, pois as pessoas do fórum podem não o conhecer (assim como eu)

- apresenta o teu código, pois uma solução está sempre ligada à estrutura que já existe

- tenta ser mais concreto sobre o problema, pois um tópico destes é quase a pedir que lhe resolvam o problema por ele


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rafaela Pinho    0
Rafaela Pinho

agora tens vários passos a tomar:

- apresenta o jogo e as suas regras, pois as pessoas do fórum podem não o conhecer (assim como eu)

- apresenta o teu código, pois uma solução está sempre ligada à estrutura que já existe

- tenta ser mais concreto sobre o problema, pois um tópico destes é quase a pedir que lhe resolvam o problema por ele

aqui está as regras do jogo https://www.pagat.com/climbing/bigtwo.html

mas basicamente para já eu só preciso de escolher uma (ou duas, ou três) carta para jogar e depois os outros jogadores devem jogar também uma carta mas tem que ser superior. por exemplo eu jogo um 4 de ouros, o jogador a seguir deve jogar ou um quatro dos outros naipes ou outra carta mas com valor maior. O 3 e ouros é a carta que vale menos e o 2 de de espadas é o que vale mais. As cartas têm esta ordenação 3,4,5,6,7,8,9,10,J,Q,K,A,2 e os naipes ouros, paus, copas, espadas. Ganha o jogo quem acaba primeiro com as cartas. Nas regras do jogo que está no Link que coloquei fala em combinações de poker mas só preciso que se jogue uma carta um par ou um trio.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define SCRIPT "http://127.0.0.1/cgi-bin/baralho"
#define BARALHO "http://127.0.0.1/cards"
#define NAIPES "DCHS"
#define VALORES "3456789TJQKA2"

const long long int ESTADO_INICIAL = 0xfffffffffffff;

int indice(int naipe, int valor) {
return naipe * 13 + valor;
}

long long int add_carta(long long int ESTADO, int naipe, int valor) {
int idx = indice(naipe, valor);
return ESTADO | ((long long int) 1 << idx);
}

long long int rem_carta(long long int ESTADO, int naipe, int valor) {
int idx = indice(naipe, valor);
return ESTADO & ~((long long int) 1 << idx);
}

int carta_existe(long long int ESTADO, int naipe, int valor) {
int idx = indice(naipe, valor);
return (ESTADO >> idx) & 1;
}

void imprime_carta(char *path, int x, int y, long long int mao[], long long int play[], int i, int naipe, int valor, int uso) {
char *suit = NAIPES;
char *rank = VALORES;
char script[10240];
if(uso==0){ sprintf(script, "%s?q=%lld+%lld+%lld+%lld+%lld+%lld+%lld+%lld", SCRIPT, rem_carta(mao[i], naipe, valor),mao[1],mao[2],mao[3],add_carta(play[i], naipe, valor), play[1], play[2], play[3]);}

else{sprintf(script, "%s?q=%lld+%lld+%lld+%lld+%lld+%lld+%lld+%lld", SCRIPT, add_carta(mao[i], naipe, valor),mao[1],mao[2],mao[3],rem_carta(play[i], naipe, valor), play[1], play[2], play[3]);}

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]);
}

void imprime(char *path, long long int mao[], long long int play[]) {
int n, v;
int r=10, s=500, y=10;
printf("<svg height = \"800\" width = \"800\">\n");
printf("<rect x = \"0\" y = \"0\" height = \"800\" width = \"800\" style = \"fill:#46d246\"/>n");
for( n = 0; n < 4; n++) {
for( v = 0; v < 13; v++)
if(carta_existe(mao[0], n, v)) {
r += 20;
imprime_carta(path, r, y, mao, play, 0, n, v, 0);
}
else{
if(carta_existe( play[0],n,v)){
s +=20;
imprime_carta(path, s, y, mao, play, 0, n, v, 1);
}
}
}

printf("<rect x=\"600\" y=\"150\" rx=\"20\" ry=\"20\" width=\"60\" height=\"60\" style=\"fill:rgb(255,140,0);stroke-width:4;stroke:rgb(0,0,0)\"></rect>");
printf("<text x=\"612\" y=\"183\" fill:rgb (0,0,0)>Play</text>\n");
printf("<rect x=\"45\" y=\"200\" width=\"200\" height=\"70\" style=\"fill:rgb(255, 133, 51);stroke-width:3;stroke:rgb(0,0,0)\"></rect>");
printf("<text x=\"50\" y=\"240\" fill:rgb (0,0,0)>Maria</text>\n");
printf("<rect x=\"45\" y=\"270\" width=\"200\" height=\"70\" style=\"fill:rgb(255, 133, 51);stroke-width:3;stroke:rgb(0,0,0)\"></rect>");
printf("<text x=\"50\" y=\"310\" fill:rgb (0,0,0)>António</text>\n");
printf("<rect x=\"45\" y=\"340\" width=\"200\" height=\"70\" style=\"fill:rgb(255, 133, 51);stroke-width:3;stroke:rgb(0,0,0)\"></rect>");
printf("<text x=\"50\" y=\"380\" fill:rgb (0,0,0)>Susana</text>\n");
printf("</svg>\n");
}

void parse(char *query) {
long long int mao[4] = {0};
long long int play[4]= {0};
if(sscanf(query, "q=%lld+%lld+%lld+%lld+%lld+%lld+%lld+%lld",&mao[0],&mao[1],&mao[2],&mao[3], &play[0],&play[1],&play[2],&play[3]) == 8) {
imprime(BARALHO, mao, play);
}
else {
embaralhar(mao);
imprime(BARALHO, mao, play);
}
}
void embaralhar (long long int mao[]){
int f, v, x;
int contar [4]= {0};
for (f=0; f<4; f++){
for (v=0; v<13; v++){
do {
x = random() %4;
}
while (contar [x]>=13);
mao[x]= add_carta(mao[x],f,v);
contar[x]++;
}
}
}

int main() {

srandom ( time (NULL));
printf("Content-Type: text/html; charset=utf-8\n\n");
printf("<header><title>Exemplo</title></header>\n");
printf("<body>\n");
printf("<h1>BIG TWO</h1>\n");
parse(getenv("QUERY_STRING"));
printf("</body>\n");
return 0;
}

Este código baralha as cartas apresenta a minha mão e faz as cartas se moverem para o lado quando seleciono a carta que quero jogar.

Agora precisava de ter alguma ajuda para por os outros jogadores a jogar pois não sei como fazer um jogador inteligente. Precisava de ter alguma ideia de como se faz, por onde posso começar para conseguir criar isso.

P.s queria por uma imagem aqui para mostrar o aspeto do jogo mas nao sei como fazer.

Editado por thoga31
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rafaela Pinho    0
Rafaela Pinho

porque é que estou a ver HTML como informação de output de uma aplicação simples de C ?

a unica coisa que te sei dizer é que me disseram que tinha que ser assim. deram-me um codigo de exemplo onde aparecia as cartas todas e tive que o alterar para isto.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.