Como Embaralhar e Distribuir Cartas?

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Como Embaralhar e Distribuir Cartas?

Mensagem por ronneyt em Seg 22 Mar 2010, 12:30

Ola Pessoal!
Em primeiro lugar, parabéns pelo fórum e muito obrigado por já terem me ajudado bastante por tabela.
hehehe Happy
Essa é minha primeira postagem, mas visito com frequencia o fórum pelo sistema de busca pra tirar dúvidas.

Estou fazendo um jogo de cartas que funciona no estilo do Copas do Windows. (mas não exatamente com cartas de baralho)
Já peguei vários tutoriais na net, desde básicos para comandos iniciais até avançados para criar um ambiente multiplayer.

Só que desta vez eu travei numa outra parte. Na hora de embaralhar e distribuir as cartas iniciais.
No meu jogo só são distribuídas 8 cartas, uma para cada jogador. Dessas 8, 5 são iguais.
Eles já começam com suas cartas viradas para baixo, ou seja, já começam com seus objetos "card_x" com a sprite "verso".

Tenho 8 objetos:
card_one / card_two / card_three / card_four / card_five / card_six / card_seven / card_eight

E tenho 4 sprites:
sprite_a / sprite_b / sprite_c / sprite_d

Também tenho um objeto de controle para (além de outras coisas) sortear as 4 sprites nos 8 objetos.

A ajuda que preciso é aqui:

Como fazer para que esse objeto de controle transforme aleatoriamente a sprite de um dos meus 8 objetos na "sprite_a", depois transforme a de outro tbm aleatoriamente na "sprite_b", depois a de outro tbm aleatoriamente na "sprite_c" e em seguida transforme as sprites dos 5 objetos restantes na "sprite_d"?

A ordem do sorteio tem q ser feita pelas sprites, pois a sprite A, B, C e uma D "PRECISAM" estar no jogo.
O jogo é de 4 à 8 players, então quando tiver 5 players, haverá 2 sprites D, quando tiver 6 players, haverá 3 sprites D, quando tiver 7 players, haverá 4 sprites D e quando tiver os 8 players, haverá 5 sprites D.

Resumo da ópera:
Na verdade eu preciso que o objeto de controle SOMENTE sorteie as sprites A, B e C entre os objetos e depois desse sorteio, transforme o restante na sprite D.

A solução que consegui pensar (com as poucas funções que conheço) funciona pq testei um pedaço, mas ficou imensa e tanto vai demorar pra fazer quanto pode deixar o jogo pesado demais por bobeira.

Tbm já vasculhei o fórum e só achei esse tópico que se aproxima, mas ainda não resolve meu caso:
http://www.gamemakerbrasil.com/perguntas-respostas-f8/random-5-veses-sem-repetir-o-mesmo-valor-t1102.htm?highlight=random

Valew Galera!
Abraços!

ronneyt

Número de Mensagens : 6
Idade : 29
Data de inscrição : 22/03/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://ronneyt.deviantart.com

Voltar ao Topo Ir em baixo

Re: Como Embaralhar e Distribuir Cartas?

Mensagem por Sannin Kyuubi em Seg 22 Mar 2010, 14:22

Sua dúvida até que é simples, só precisa de calculos, por post é dificil explicar então fazerei uma engine, ao termina-la postarei.

Sannin Kyuubi

Número de Mensagens : 192
Idade : 21
Data de inscrição : 12/02/2010
Reputação : 2
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Como Embaralhar e Distribuir Cartas?

Mensagem por ronneyt em Seg 22 Mar 2010, 16:00

Sannin Kyuubi escreveu:Sua dúvida até que é simples, só precisa de calculos, por post é dificil explicar então fazerei uma engine, ao termina-la postarei.

Pow, valew mesmo pela disposição!
Imaginei que tivesse algum jeito mais simples... como fui aprendendo fuçando, tem mtas funções que não conheço, daí às vzs pra fazer uma coisinha simples, eu até faço, mas dou uma volta enorme. hahahahahaha

Mas blz. Eu espero a engine então.
Por post é meio complicadinho de explicar mesmo... até a dúvida eu tive que escrever bastante pra ficar claro. hehehehe

ronneyt

Número de Mensagens : 6
Idade : 29
Data de inscrição : 22/03/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://ronneyt.deviantart.com

Voltar ao Topo Ir em baixo

Re: Como Embaralhar e Distribuir Cartas?

Mensagem por Sannin Kyuubi em Seg 22 Mar 2010, 16:39

Tive que sair mais to de volta. Só falta arrumar umas coisas aqui, terminando eu do edit como o download.

Ta ai o link:

http://www.4shared.com/file/246989432/b5d47ce6/engine_cartas.html

Só editar para ficar como você quer, qualquer dúvida ou problema só falar.

Sannin Kyuubi

Número de Mensagens : 192
Idade : 21
Data de inscrição : 12/02/2010
Reputação : 2
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Como Embaralhar e Distribuir Cartas?

Mensagem por ronneyt em Seg 22 Mar 2010, 18:04

Sannin Kyuubi escreveu:Tive que sair mais to de volta. Só falta arrumar umas coisas aqui, terminando eu do edit como o download.

Ta ai o link:

http://www.4shared.com/file/246989432/b5d47ce6/engine_cartas.html

Só editar para ficar como você quer, qualquer dúvida ou problema só falar.

Blzinha meu velho!
To indo pra casa agora e já vou abrir pra ver a engine.
Se eu não conseguir, dou um toque aqui no forum.

Obrigadão aí pelo trampo que teve, heim! Very Happy

ronneyt

Número de Mensagens : 6
Idade : 29
Data de inscrição : 22/03/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://ronneyt.deviantart.com

Voltar ao Topo Ir em baixo

Re: Como Embaralhar e Distribuir Cartas?

Mensagem por PedroX em Seg 22 Mar 2010, 18:43

Tipo vc coloca no objeto controle pra quando for sortear(apertar um botao) ativar uma variavel global "global.sortear=true"
Ai vc coloca em cada objeto card, tipo:

Código:
if global.sortear=true
{
sprite_index=choose(sprite_a,sprite_b,sprite_c,sprite_d)
}//

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Como Embaralhar e Distribuir Cartas?

Mensagem por Sannin Kyuubi em Seg 22 Mar 2010, 19:15

O código do Pedro Henrique está melhor, não conhecia este comando chose.... Como dizem, é vivendo e aprendendo Smile

Sannin Kyuubi

Número de Mensagens : 192
Idade : 21
Data de inscrição : 12/02/2010
Reputação : 2
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Como Embaralhar e Distribuir Cartas?

Mensagem por Igor KinGamer em Seg 22 Mar 2010, 20:03

Mas esse código não vai fazer toda aquela seletividade que você quer (escolhe um sprite pra cada carta, e depois repete o sprite_d)...

Igor KinGamer

Número de Mensagens : 890
Idade : 21
Data de inscrição : 26/09/2008
Reputação : 11
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Como Embaralhar e Distribuir Cartas?

Mensagem por ronneyt em Seg 22 Mar 2010, 20:41

Igor KinGamer escreveu:Mas esse código não vai fazer toda aquela seletividade que você quer (escolhe um sprite pra cada carta, e depois repete o sprite_d)...

É verdade...
Eu tentei aqui e o sorteio funcionou em partes.
Acaba saindo mais de um player com a sprite A, por exemplo.

Mas observando a engine e o post eu tive uma idéia.

E se eu mandar o objeto Controle criar uma variável "sprite_a" sorteando o valor dela de 1 à 8.
Depois colocar no card_one: if global.sprite_a=1 {sprite_index=sprite_a}
no card_two: if global.sprite_a=2 {sprite_index=sprite_a}
no card_three: if global.sprite_a=3 {sprite_index=sprite_a}
(...) até o card_eight.
E depois eu criar uma variável pra sprite_b e outra no mesmo esquema pra sprite_c.
????

To viajando mto? Acho q ficou grande demais, deve ter alguma função que resuma esse trabalho, não?

E mesmo se eu fizer isso, ainda preciso que as variáveis sprite_a, b e c tenham valores diferentes, ou seja: se der 2 na variável A, o card_two muda o sprite pra sprite_a, sendo assim, a variável B não pode dar 2 também.

Ou se der, tem que sortear novamente.

E outro problema que fica:
Como depois vou fazer pra que os 5 objetos restantes que não viraram sprite A, nem B, nem C se transformem na sprite_d ?

ronneyt

Número de Mensagens : 6
Idade : 29
Data de inscrição : 22/03/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://ronneyt.deviantart.com

Voltar ao Topo Ir em baixo

CONSEGUI!!!

Mensagem por ronneyt em Ter 23 Mar 2010, 00:37

Ae Galera, consegui!
Pegando as dicas e engines aqui postadas e em outros tópicos eu montei um esquema como o que eu queria.
Ainda acredito que deva ter um jeito mais prático pra isso, mas esse pelo menos resolveu o problema.
Vou postar aqui pra caso alguém precise.
Talvez não sirva pra jogos de baralho em si, mas enfim, qualquer situação parecida... pode ser útil.

O jogo se inicia assim:

- Cada player com seu objeto e mesma sprite
Player 1Player 2Player 3Player 4
card_onecard_twocard_threecard_four
sprite_versosprite_versosprite_versosprite_verso
Player 5Player 6Player 7Player 8
card_fivecard_sixcard_sevencard_eight
sprite_versosprite_versosprite_versosprite_verso

Como é um jogo multiplayer, criei uma variável que copia o número de jogadores que estão conectados. Esta chama-se "numplayers"

Existe outro objeto, o que vai sortear as cartas. Este não é visível. O sorteio começa por ele:
- No evento create:
Código:

global.spritea=ceil(random(global.numplayers))

{
  do
  {
  global.spriteb=ceil(random(global.numplayers))
  }
  until (global.spriteb<>global.spritea)
}

{
  do
  {
  global.spritec=ceil(random(global.numplayers))
  }
  until (global.spritec<>global.spriteb)&(global.spritec<>global.spritea)
}

global.endchoose=true

Agora em cada objeto, vc cria um evento create e joga um alarme. (coloquei isso porque se eu jogasse o código direto no create, dava erro dizendo que as variáveis globais ainda não existiam)

1º objeto - card_one:
- No evento alarme 0
Código:

if sprite_index = sprite_verso
if global.endchoose=true
{
sprite_index = sprite_d
}

if global.spritea=1
{
sprite_index=sprite_a
}
if global.spriteb=1
{
sprite_index=sprite_b
}
if global.spritec=1
{
sprite_index=sprite_c
}

Copiando e colando esses procedimentos nos outros 7 objetos, depois é só trocar os números "1" do código para os números dos players, assim:
card_two - trocar por 2
card_three - trocar por 3
card_four - trocar por 4
card_five - trocar por 5
card_six - trocar por 6
card_seven - trocar por 7
card_eight - trocar por 8

Com tudo isso, se o jogo tiver com 4 players online, cada um deles terá uma carta diferente, com 5 players 2 deles terão a carta D, com 6 players 3 deles terão a D e assim por diante.

Esse tipo de sorteio funciona pra jogos com o princípio do famoso "Detetive" (ou "polícia e ladrão"). Aquele em que piscamos pra matar as vítimas e tals.
Assim como nesse jogo, quanto mais players além dos principais, mais "vítimas" são inclusas no jogo.

Valew Galera!
Mais um pedido aí para os craques:
Se souberem de um jeito mais simples de fazer, deixa aí pro pessoal que precisar poder pesquisar.
Um forte abraço pra todos aí do fórum!
E obrigadão aí pela atenção, heim!=D

ronneyt

Número de Mensagens : 6
Idade : 29
Data de inscrição : 22/03/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://ronneyt.deviantart.com

Voltar ao Topo Ir em baixo

Re: Como Embaralhar e Distribuir Cartas?

Mensagem por PedroX em Ter 23 Mar 2010, 16:14

era so vc usar meu sistema e fazer isso:
Código:

with(all)
{if other.sprite_index=sprite_index{
sprite_index=choose(sprite_a,sprite_b,sprite_c,sprite_d)
}}

Edit: Eu tentei e nao funcionou ele troca de sprite sem parar.
Malz

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Como Embaralhar e Distribuir Cartas?

Mensagem por ronneyt em Qua 24 Mar 2010, 00:09

Pedro Henrique escreveu:era so vc usar meu sistema e fazer isso:
Código:

with(all)
{if other.sprite_index=sprite_index{
sprite_index=choose(sprite_a,sprite_b,sprite_c,sprite_d)
}}

Edit: Eu tentei e nao funcionou ele troca de sprite sem parar.
Malz

Ah, então... eu tinha tentado oq vc mandou e tbm a engine, além de ver o outro tópico...
só eles sorteavam, mas nenhum do jeito que eu precisava certinho.
Daí dei uma misturada nas informações que vcs me deram e consegui montar um frankstein... hahahahahaha

ronneyt

Número de Mensagens : 6
Idade : 29
Data de inscrição : 22/03/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://ronneyt.deviantart.com

Voltar ao Topo Ir em baixo

Re: Como Embaralhar e Distribuir Cartas?

Mensagem por Conteúdo patrocinado Hoje à(s) 02:05


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum