GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» Servidor de Discord do fórum?
por Super Games Sáb 18 maio 2024, 01:27

» Problemas com a caixa de diálogo, ela é pequena e as letras não cabem dentro
por Rukasu777 Qui 16 maio 2024, 18:10

» Problemas com particulas
por RastaMaan Dom 12 maio 2024, 17:03

» Problema ao entrar por uma porta e voltar por ela
por aminaro Seg 06 maio 2024, 10:08

» Alguém aqui já ganha dinheiro com seus games?
por theguitarmester Ter 30 Abr 2024, 11:43

» Colisões não funcionando
por theguitarmester Ter 30 Abr 2024, 10:16

» Como ajustar velocidade de cada frame da animação no game maker
por pequetux Sex 26 Abr 2024, 16:45

» Preciso de ajuda
por AftonDuGrau Dom 21 Abr 2024, 20:18

» Como faz o evento drawn GUI, não se repetir?
por aminaro Sex 19 Abr 2024, 20:30

» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07

» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45

» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51

» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31

» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11

» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42


[Duvida]Evitar cartas repetidas em um baralho.

5 participantes

Ir para baixo

[Duvida]Evitar cartas repetidas em um baralho. Empty [Duvida]Evitar cartas repetidas em um baralho.

Mensagem por Scare Sáb 22 Jun 2013, 19:11

Boa noite, estou estudando a mecanica de jogos de cartas, e queria fazer um pôquer bem simples, aonde surgiria cinco cartas dentro da room e ele mostrasse o nome das combinações, porém, ja estou tendo dificuldades para evitar que as cartas se repitam, não sei se usei o array de forma errada ali embaixo, abaixo tem os detalhes do projeto.
Versão do software: Game Maker Studio Free Edition v1.1.1044

Edit: Troquei o while pelo repeat e continua repetindo as cartas.

Sprites que estou utilizando no projeto:
Para as cartas: playingcards_strip54
Para o baralho de onde ira surgir as cartas: backs_strip10

Dentro do projeto:

Sprites:
Sprites:

Objetos:
Objetos:
Scare
Scare

Data de inscrição : 06/03/2012
Reputação : 1
Número de Mensagens : 10
Prêmios : [Duvida]Evitar cartas repetidas em um baralho. Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Duvida]Evitar cartas repetidas em um baralho. Empty Re: [Duvida]Evitar cartas repetidas em um baralho.

Mensagem por Isaque Onix Sáb 22 Jun 2013, 20:12

nunca tentei isso, mais acho que as arrays e o comando for podem te ajudar, vou te passar minha ideia:

são 13 cartas de cada nipe, 2 coringas , e são 4 nipes
seria algo assim:
1: ouro 
2: copa 
3: espada 
4: pé de pinto
Carta[NIPE,NUMERO DA CARTA]
Carta[1,1]=0//nesse caso a carta A de ouro esta desativada em Jogo
Carta[1,1]=1//nesse caso a carta A de ouro esta ativada em Jogo

para inicializar, seria algo assim:
for(i=1; i<13; i+=1){
Carta[1,i]=0
Carta[2,i]=0
Carta[3,i]=0
Carta[4,i]=0
}

o coringa eu não adicionei, mais acho que se você intender essa funcionalidade você consegue adc os coringas, flwz
Isaque Onix
Isaque Onix

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 15/08/2010
Reputação : 147
Número de Mensagens : 1625
Prêmios : [Duvida]Evitar cartas repetidas em um baralho. Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker 8.0 ou 8.1
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0
  • Unity
  • C#
  • Outros


http://spyreserver.16mb.com

Ir para o topo Ir para baixo

[Duvida]Evitar cartas repetidas em um baralho. Empty Re: [Duvida]Evitar cartas repetidas em um baralho.

Mensagem por Scare Sáb 22 Jun 2013, 21:54

Tentarei aplicar isso e ja venho com a resposta.
Scare
Scare

Data de inscrição : 06/03/2012
Reputação : 1
Número de Mensagens : 10
Prêmios : [Duvida]Evitar cartas repetidas em um baralho. Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Duvida]Evitar cartas repetidas em um baralho. Empty Re: [Duvida]Evitar cartas repetidas em um baralho.

Mensagem por Scare Dom 23 Jun 2013, 17:42

Parece que descobri a lógica, eu fiz algo parecido com o que tu me falou.
Primeiro criei um um novo objeto, obj_control, a função dele é dar valor as arrays, mas além de usar matriz, apenas usei vetor, o valor das cartas usarei uma outra variavel que usarei futuramente.
Esse obj_control possui apenas um create, pois dara o valor ao array apenas uma vez, o código é o seguinte:


Código:
for(i=0; i<54; i+=1){
global.imagecard[i]=0;
}
Voltei ao objeto obj_card e alterei seu create da seguinte maneira:


Código:
card=0;
image_speed=0;
image_index=53;
//Contador
card=round(random(53));
repeat (global.imagecard[card]==0){
 image_index=card;
 global.imagecard[card]=1;
}


Agora o problema parece estar no comando de repetição, toda vez que tem uma carta repetida, além dele verificar de novo como pede a condição do loop, ele coloca a image53, e quando tiro aquele "image_index=53", o programa da erro falando que existe um conflito. Perdão o doublepost.

@Edit: Fiz a seguinte alteração no create do obj_card, só que invés de repetir, agora esta retornando image0.


Código:
card=0;
image_speed=0;
//Contador
card=round(random(53));
while (global.imagecard[card]==0){
 if global.imagecard[card]==1{
 card=round(random(53));
  }else{
 image_index=card;
 global.imagecard[card]=1;}
}
Scare
Scare

Data de inscrição : 06/03/2012
Reputação : 1
Número de Mensagens : 10
Prêmios : [Duvida]Evitar cartas repetidas em um baralho. Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Duvida]Evitar cartas repetidas em um baralho. Empty Re: [Duvida]Evitar cartas repetidas em um baralho.

Mensagem por Isaque Onix Seg 24 Jun 2013, 09:15

o erro ta aqui: 



Código:
for(i=0; i<54; i+=1){
global.imagecard[i]=0;
}
 ao invéz de colocar 54, coloque 55 e tenta de novo
Isaque Onix
Isaque Onix

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 15/08/2010
Reputação : 147
Número de Mensagens : 1625
Prêmios : [Duvida]Evitar cartas repetidas em um baralho. Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker 8.0 ou 8.1
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0
  • Unity
  • C#
  • Outros


http://spyreserver.16mb.com

Ir para o topo Ir para baixo

[Duvida]Evitar cartas repetidas em um baralho. Empty Re: [Duvida]Evitar cartas repetidas em um baralho.

Mensagem por saim Seg 24 Jun 2013, 10:26

Quando eu me meti a fazer um jogo de cartas, eu fiz o seguinte:
- Ao invés de uma array, usei uma ds_list. De uma dimensão, apenas. Cada carta recebia um "valor" igual à posição na ds_list.
- As cartas eram alinhadas nessa ds_list. Os naipes e valores eram definidos em função da posição na list (naipe := posição div 13; valor := posição mod 13; cor := posição div 26).
- Quando ia começar o jogo, eu criava uma cópia da ds_list original e embaralhava ela. A cada carta, eu tirava o primeiro valor da ds_list embaralhada e eliminava ele da ds_list.

Nunca terminei o jogo, então pode ser que surjam problemas a partir dessa lógica. Mas isso de eliminar a carta que já foi distribuída da ds_list garante que as cartas não se repitam sem ter que verificar pelos índices que já foram sorteados.
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : [Duvida]Evitar cartas repetidas em um baralho. Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Duvida]Evitar cartas repetidas em um baralho. Empty Re: [Duvida]Evitar cartas repetidas em um baralho.

Mensagem por PedroX Seg 24 Jun 2013, 11:40

Se tiver dificuldade com ds_list, pode usar strings mesmo.

Só que o número 10 precisa ser trocado por uma letra qualquer. Vamos usar 'X'.


Código:
cartas = "";


Ao sair uma carta, adicione-a na variável.

Exemplos:

Código:
cartas += "AZ"; // A de zap
cartas += "XC"; // 10 de copas
cartas += "KE"; // K de espadilha
cartas += "5O"; // 5 de ouros


Para ver se uma carta ainda não foi jogada:

Código:
if (!string_pos('AZ', cartas))
{
//ainda não foi lançada na mesa a carta A de zap
}

_________________


Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.

Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.

Aprenda a calcular a velocidade de suas animações


Entre para o Clube do Inglês:
PedroX
PedroX

Games Ranking : Nota B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6087
Prêmios : [Duvida]Evitar cartas repetidas em um baralho. Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para baixo

[Duvida]Evitar cartas repetidas em um baralho. Empty Re: [Duvida]Evitar cartas repetidas em um baralho.

Mensagem por Scare Seg 24 Jun 2013, 18:40

Isaque Onix escreveu:o erro ta aqui: 



Código:
for(i=0; i<54; i+=1){
global.imagecard[i]=0;
}
 ao invéz de colocar 54, coloque 55 e tenta de novo
Tentei e da a mesma coisa. "/

PedroX escreveu:Se tiver dificuldade com ds_list, pode usar strings mesmo.

Só que o número 10 precisa ser trocado por uma letra qualquer. Vamos usar 'X'.


Código:
cartas = "";


Ao sair uma carta, adicione-a na variável.

Exemplos:

Código:
cartas += "AZ"; // A de zap
cartas += "XC"; // 10 de copas
cartas += "KE"; // K de espadilha
cartas += "5O"; // 5 de ouros


Para ver se uma carta ainda não foi jogada:

Código:
if (!string_pos('AZ', cartas))
{
//ainda não foi lançada na mesa a carta A de zap
}
No caso, eu teria que criar 53 ifs encadeados?
saim escreveu:Quando eu me meti a fazer um jogo de cartas, eu fiz o seguinte:
- Ao invés de uma array, usei uma ds_list. De uma dimensão, apenas. Cada carta recebia um "valor" igual à posição na ds_list.
- As cartas eram alinhadas nessa ds_list. Os naipes e valores eram definidos em função da posição na list (naipe := posição div 13; valor := posição mod 13; cor := posição div 26).
- Quando ia começar o jogo, eu criava uma cópia da ds_list original e embaralhava ela. A cada carta, eu tirava o primeiro valor da ds_list embaralhada e eliminava ele da ds_list.

Nunca terminei o jogo, então pode ser que surjam problemas a partir dessa lógica. Mas isso de eliminar a carta que já foi distribuída da ds_list garante que as cartas não se repitam sem ter que verificar pelos índices que já foram sorteados.

Essa ds_list funciona como um banco de dados? Cada ds_list funcionara como uma tabela, ou seja, em um ds_list posso armazenar uma linha de informação(No caso o numero e naipe da carta?), e ao decorrer do jogo posso escolher a linha que quero excluir?
Scare
Scare

Data de inscrição : 06/03/2012
Reputação : 1
Número de Mensagens : 10
Prêmios : [Duvida]Evitar cartas repetidas em um baralho. Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Duvida]Evitar cartas repetidas em um baralho. Empty Re: [Duvida]Evitar cartas repetidas em um baralho.

Mensagem por PedroX Seg 24 Jun 2013, 19:04

No caso, eu teria que criar 53 ifs encadeados?

Não. Você deverá colocar algo assim:

Código:

while (1)
{
a = choose('A', '2', '3', '4', '5', '6', '7', '8', '9', 'X', 'Q', 'J', 'K');
b = choose('Z', 'C', 'E', 'O');
if (!string_pos(a+b, cartas)) {cartas+=a+b; break;}
}

Isso fará com que uma carta que ainda não tenha sido sorteada seja gerada.

No meu teste, gerou: 'JO', ou seja J de ouros.

_________________


Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.

Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.

Aprenda a calcular a velocidade de suas animações


Entre para o Clube do Inglês:
PedroX
PedroX

Games Ranking : Nota B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6087
Prêmios : [Duvida]Evitar cartas repetidas em um baralho. Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para baixo

[Duvida]Evitar cartas repetidas em um baralho. Empty Re: [Duvida]Evitar cartas repetidas em um baralho.

Mensagem por Scare Seg 24 Jun 2013, 23:48

Bom, primeiro tentarei o ds_list, ja que pesquisei por ele e achei interessante eu dominar esse sistema, mas a lógica do PedroX é interessante e pretendo estuda-la futuramente.
Bom, as alterações fiz em base de ds_list, o projeto se encontra assim:

obj_control:
Create:
Código:

obj_card
Create
Código:

obj_deck
Create
Spoiler:

Step
Spoiler:

Mas agora retorna o seguinte erro:

Código:
############################################################################################
FATAL ERROR in
action number 1
of  Step Event0
for object obj_deck:

Push :: Execution Error - Variable Get -1.card(100001, 0)
 at gml_Object_obj_deck_Step_0 (line 7) - if !ds_list_empty(card){
############################################################################################
Scare
Scare

Data de inscrição : 06/03/2012
Reputação : 1
Número de Mensagens : 10
Prêmios : [Duvida]Evitar cartas repetidas em um baralho. Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Duvida]Evitar cartas repetidas em um baralho. Empty Re: [Duvida]Evitar cartas repetidas em um baralho.

Mensagem por GameMakerTutoriais Qui 27 Jun 2013, 21:45



Eu acho que o jeito mais fácil é usar um array simples (unidimensional) com um número específico pra cada carta.

As cartas seriam de 0 a 12 para Ouros, 13 a 25 para Espadas, 26 a 38 para Paus e 39 a 51 para Copas. O naipe seria o número da carta dividido pela quantidade de cartas em cada naipe, que é 13 (de 0 a 12). Então, ficaria fácil assim:

Código:

carta := numero mod 13; // Valor da carta
naipe := carta div 13; // 0 = Ouros, 1 = Espadas, 2 = Paus, 3 = Copas

Acho que 'ds_list' é uma boa se você usar com um 'ds_queue' (ou ds_stack) pra regrar o jogo. Você pode usar a função 'ds_list_shuffle' pra embaralhar os valores das cartas ou então retirar cartas do deck com 'ds_list_delete'. Com 'ds_queue' você pode verificar as jogadas e saber quais cartas estão dentro ou fora da jogada ou do deck.

Dê uma pesquisada no fórum sobre 'ds_list' e 'ds_queue' (ou ds_stack). Abraços.
avatar
GameMakerTutoriais

Data de inscrição : 29/01/2011
Reputação : 26
Número de Mensagens : 800
Prêmios : [Duvida]Evitar cartas repetidas em um baralho. Empty

Medalhas x 0 Tutoriais x 4 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Duvida]Evitar cartas repetidas em um baralho. Empty Re: [Duvida]Evitar cartas repetidas em um baralho.

Mensagem por saim Sex 28 Jun 2013, 09:38

Quase isso, brendan, mas as cores dos naipes devem estar juntas também. Em muitos jogos, a cor estar intercalada é importante, independente do naipe, portanto é uma informação relevante. Aí,
brendan604 escreveu:As cartas seriam de 0 a 12 para Ouros, 13 a 25 para Espadas, 26 a 38 para Paus e 39 a 51 para Copas.
Muda para:
As cartas seriam de 0 a 12 para Ouros, 13 a 25 para Copas, 26 a 38 para Paus e 39 a 51 para Espadas.
E
Código:
carta := numero mod 13; // Valor da carta
naipe := carta div 13; // 0 = Ouros, 1 = Espadas, 2 = Paus, 3 = Copas
Muda para
Código:
carta := numero mod 13; // Valor da carta
naipe := numero div 13; // 0 = Ouros, 1 = Copas, 2 = Paus, 3 = Espadas
cor := numero div 26; // 0 = vermelha, 1 = preta
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : [Duvida]Evitar cartas repetidas em um baralho. Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Duvida]Evitar cartas repetidas em um baralho. Empty Re: [Duvida]Evitar cartas repetidas em um baralho.

Mensagem por GameMakerTutoriais Sex 28 Jun 2013, 12:48



Tem razão! Eu não tinha lido tudo, mas agora vi que a sua ideia também era essa, além de incluir os naipes no cálculo. Eu nunca fiz um jogo de cartas, mas penso que usar essa forma seria bem mais simples do que grids, por exemplo...

Num jogo tipo "paciência", talvez ficasse fácil coordenar em qual coluna cada carta entra usando um ds_stack. Já com os queues facilitaria pôr ou retirar cartas da jogada e funcionaria como regra de jogo para entrar com o valor no ds_stack.

Talvez, com o mesmo projeto, fosse possível fazer vários outros jogos apenas mudando as regras do queue. Mas eu só conheço 'paciência'...
avatar
GameMakerTutoriais

Data de inscrição : 29/01/2011
Reputação : 26
Número de Mensagens : 800
Prêmios : [Duvida]Evitar cartas repetidas em um baralho. Empty

Medalhas x 0 Tutoriais x 4 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Duvida]Evitar cartas repetidas em um baralho. Empty Re: [Duvida]Evitar cartas repetidas em um baralho.

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos