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
» player não consegue andar
por lovn7 Qui 21 Nov 2024, 13:33

» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22

» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31

» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23

» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49

» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58

» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36

» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36

» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33

» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51

» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28

» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18

» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08

» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10

» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16

» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40

» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01

» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45

» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34

» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28

» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48

» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54

» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14

» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50


[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 : 1626
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 : 1626
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


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