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


Cartas na mão organizadas [Sistema de Cadeados]

4 participantes

Ir para baixo

sistema - Cartas na mão organizadas [Sistema de Cadeados] Empty Cartas na mão organizadas [Sistema de Cadeados]

Mensagem por Felipe Reis Magno 2 Sex 27 Mar 2015, 11:17

Sistema de Cadeados
Olá galera do gmbr!!!
Hoje não estou aqui para fazer perguntas, mas pela pela primeira vez para ajudar!
Happy
Arrumei uma dor de cabeça enquanto estava tentando organizar as cartas na mão do player de modo parecido com o Yu-Gi-Oh!!! Meu objetivo era concentrar as cartas em ordem de chegada na mão do jogador!

Como estava difícil, prefiri fazer testes com uma engine particular para poder fazer as alterações necessárias até chegar a uma solução e finalmente consegui, criando um sistema simples que eu nomeei de Sistema de Cadeados!
Aviso, isso não é um Tutorial completo

Eu não sei se já existe algo do tipo, mas gostaria de compartilhar com vocês, pois pra mim foi muito difícil criar algo assim, tive que rachar o crânio para criar algo simples.
Por isso resolvi abri os códigos e a estrutura que eu criei para aqueles que desejam criar um jogo de cartas e estão meio perdidos.
É uma lógica simples de se interpretar, por isso espero que estudem e a consigam transforma-lá para criar outras espécies de listas:

sistema - Cartas na mão organizadas [Sistema de Cadeados] 2wn7gu9

Vamos então aos códigos:
Na estrutura que eu criei existem 4 objetos:

obj_cartas
obj_mao
obj}_baralho
obj_controle_mao


No obj_cartas tenho um sprite de 7 subimagens.
Em seu Create:
Código:

///Controle inicial da carta

//imagem de índice e sua respectiva velocidade em frames por segundo
image_speed=0;
randomize();
image_index=random(7);

//Variáveis principais
posicao=0;//declara a variável "posicao"
cadeado_interno="trancado";//o Sistema de Cadeados interno começa trancado
global.cartas_na_mao+=1;//aumenta uma carta na mão
//Estas variáveis servem para confirmar a variável "posicao"

//Este código condicional abaixo define a "posicao" do objeto carta na mão do jogador quando a carta é criada na room
if global.cartas_na_mao==1
{
posicao=1;
}

if global.cartas_na_mao==2
{
posicao=2;
}

if global.cartas_na_mao==3
{
posicao=3;
}

if global.cartas_na_mao==4
{
posicao=4;
}

if global.cartas_na_mao==5
{
posicao=5;
}

if global.cartas_na_mao==6
{
posicao=6;
}

Como está comentado, eu não me aprofundarei rs

No Step do obj_cartas:
Código:

///Controle constante de sua posição na mão [Sistema de Cadeados]

//Controle primário:
if posicao==1
{
x = obj_controle_mao.x+32;
y = obj_controle_mao.y;
}

if posicao==2
{
x = obj_controle_mao.x+174;
y = obj_controle_mao.y;
}

if posicao==3
{
x = obj_controle_mao.x+316;
y = obj_controle_mao.y;
}

if posicao==4
{
x = obj_controle_mao.x+458;
y = obj_controle_mao.y;
}

if posicao==5
{
x = obj_controle_mao.x+600;
y = obj_controle_mao.y;
}

if posicao==6
{
x = obj_controle_mao.x+742;
y = obj_controle_mao.y;
}
//(o controle primário irá verificar constantemente se a carta mudou de posição na mão do jogador)

//Controle secundário:
//(usando cadeados)
if posicao==2
if global.carta_atual==1
if cadeado_interno=="aberto"
{
posicao=1;
cadeado_interno="trancado";
}

if posicao==3
if global.carta_atual==1
if cadeado_interno=="aberto"
{
posicao=2;
cadeado_interno="trancado";
}

if posicao==3
if global.carta_atual==2
if cadeado_interno=="aberto"
{
posicao=2;
cadeado_interno="trancado";
}

if posicao==4
if global.carta_atual==1
if cadeado_interno=="aberto"
{
posicao=3;
cadeado_interno="trancado";
}

if posicao==4
if global.carta_atual==2
if cadeado_interno=="aberto"
{
posicao=3;
cadeado_interno="trancado";
}

if posicao==4
if global.carta_atual==3
if cadeado_interno=="aberto"
{
posicao=3;
cadeado_interno="trancado";
}

if posicao==5
if global.carta_atual==1
if cadeado_interno=="aberto"
{
posicao=4;
cadeado_interno="trancado";
}

if posicao==5
if global.carta_atual==2
if cadeado_interno=="aberto"
{
posicao=4;
cadeado_interno="trancado";
}

if posicao==5
if global.carta_atual==3
if cadeado_interno=="aberto"
{
posicao=4;
cadeado_interno="trancado";
}

if posicao==5
if global.carta_atual==4
if cadeado_interno=="aberto"
{
posicao=4;
cadeado_interno="trancado";
}

if posicao==6
if global.carta_atual==1
if cadeado_interno=="aberto"
{
posicao=5;
cadeado_interno="trancado";
}

if posicao==6
if global.carta_atual==2
if cadeado_interno=="aberto"
{
posicao=5;
cadeado_interno="trancado";
}

if posicao==6
if global.carta_atual==3
if cadeado_interno=="aberto"
{
posicao=5
cadeado_interno="trancado";
}

if posicao==6
if global.carta_atual==4
if cadeado_interno=="aberto"
{
posicao=5;
cadeado_interno="trancado";
}

if posicao==6
if global.carta_atual==5
if cadeado_interno=="aberto"
{
posicao=5;
cadeano_interno="trancado";
}
//O sistema de cadeados internos servirá unicamente para evitar que sua posiçõa se altere várias vezes num mesmo loop
//Assim que a variável "posicao" e "global.carta_atual" forem verificadas com o cadeado aberto, a carta avançará uma posição na mão do jogador e o cadeado será fechado para que os outros condicionais do objeto não se acionem
//Fim do Sistema de Cadeado

No Event de clicar com o mouse no obj_cartas:
Código:

alarm[0]=30;

No Alarm1 do obj_cartas:
Código:

///Controle de morte da carta [Ativando Sistema de Cadeados]
//Se por exemplo, a carta destruida for a primeira da mão (posicao==1):
if posicao==1
{
global.cartas_na_mao-=1;//diminui uma carta da mão do jogador
global.carta_atual=1;//a carta destruída atualmente que será alterada somente na próxima carta destruída
obj_cartas.cadeado_interno="aberto";//a variável interna "cadeado_interno" é acionado, abrindo o Sistema de Cadeados em todas as cartas da room
instance_destroy();//Esta instância será destruída
}

if posicao==2
{
global.cartas_na_mao-=1;
global.carta_atual=2
obj_cartas.cadeado_interno="aberto";
instance_destroy();
}

if posicao==3
{
global.cartas_na_mao-=1;
global.carta_atual=3;
obj_cartas.cadeado_interno="aberto";
instance_destroy();
}

if posicao==4
{
global.cartas_na_mao-=1;
global.carta_atual=4;
obj_cartas.cadeado_interno="aberto";
instance_destroy();
}

if posicao==5
{
global.cartas_na_mao-=1;
global.carta_atual=5;
obj_cartas.cadeado_interno="aberto";
instance_destroy();
}

if posicao==6
{
global.cartas_na_mao-=1;
global.carta_atual=6;
obj_cartas.cadeado_interno="aberto";
instance_destroy();
}

Agora vamos tratar do obj_mao

No Create do obj_mao coloque:
Código:

///Mão do jogador

//Variável principal do game:
global.cartas_na_mao=0;
global.carta_atual=0;

instance_create(x+468,y-180,obj_controle_mao);

No Draw do obj_mao:
Código:

draw_sprite(spr_mao,0,x,y);
draw_set_color(c_black);
draw_text(32,32,"Voce tem "+string(global.cartas_na_mao)+" carta(s) em sua mao.");

Agora vamos tratar do obj_baralho:

No press do obj_baralho:
Código:

//O jogador só pode ter seis cartas na mão
if global.cartas_na_mao<6
instance_create(x,y,obj_cartas);
//Após isso este objeto irá parar de criar cartas

Agora vamos tratar do último objeto, o obj_controle_mao:

No Step do obj_controle_mao
Código:

///Controlar posição visual das cartas na mão de acordo com a quantidade de cartas
if global.cartas_na_mao==0
{
x = obj_mao.x+468;
}

if global.cartas_na_mao==1
{
x = obj_mao.x+468;
}

if global.cartas_na_mao==2
{
x = obj_mao.x+350;
}

if global.cartas_na_mao==3
{
x = obj_mao.x+288;
}

if global.cartas_na_mao==4
{
x = obj_mao.x+226;
}

if global.cartas_na_mao==5
{
x = obj_mao.x+167;
}

if global.cartas_na_mao==6
{
x = obj_mao.x+103;
}

Bem gente, este foi o código que eu usei para organizar as cartas na mão do player sem usar ds_list, ds_grid ou arrays, apenas controlando as variáveis internas através de variáveis globais!

Razz Happy Happy

Bem, se vocês acharam que esta postagem foi útil, comentem e me deem joinha.
Testem e depois deem sua opinião!
Obrigado!!!
Felipe Reis Magno 2
Felipe Reis Magno 2

Games Ranking : Nota E

Notas recebidas : E
Data de inscrição : 08/08/2014
Reputação : 2
Número de Mensagens : 43
Prêmios : sistema - Cartas na mão organizadas [Sistema de Cadeados] 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

sistema - Cartas na mão organizadas [Sistema de Cadeados] Empty Re: Cartas na mão organizadas [Sistema de Cadeados]

Mensagem por Kapoty Sex 27 Mar 2015, 11:47

Vamos lá,

Spoiler:
Se resume em:
Código:
posicao=global.cartas_na_mao;

Spoiler:
Se resume em:
Código:
x = obj_controle_mao.x+32+(posicao-1)*142;
y = obj_controle_mao.y;

Spoiler:
Se resume em:
Código:
if (global.carta_atual<posicao and cadeado_interno=="aberto")
{
posicao-=1;
cadeado_interno="trancado";
}

Spoiler:
Se resume em:
Código:
global.cartas_na_mao-=1;
global.carta_atual=posicao;
obj_cartas.cadeado_interno="aberto";
instance_destroy();
Entre outros...
A intenção do tutorial foi boa, mas o código está bastante 'poluído'.
Kapoty
Kapoty

Games Ranking : Nota B

Notas recebidas : E + D + C + B + D +B + A
Data de inscrição : 05/11/2011
Reputação : 22
Número de Mensagens : 635
Prêmios : sistema - Cartas na mão organizadas [Sistema de Cadeados] Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 1

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

Ir para o topo Ir para baixo

sistema - Cartas na mão organizadas [Sistema de Cadeados] Empty Re: Cartas na mão organizadas [Sistema de Cadeados]

Mensagem por theguitarmester Sex 27 Mar 2015, 12:01

É como o Kapoty mostrou, é sempre bom automatizar os códigos usando voltas/loops(e nesse nem precisou de loops/voltas), até para ficar mais fácil de editar e de expandir o sistema.


Mas a engine e o código são válidos, e sua ideia em compartilhar é boa.

Não sei se tem muito sistemas desses mesmo, enfim, não entendi bem o cadeado, mas, é para enquanto as cartas não foram redistribuídas, elas se permanecerem no mesmo lugar, certo?
theguitarmester
theguitarmester

Games Ranking : Nota C

Notas recebidas : B + C
Data de inscrição : 28/02/2012
Reputação : 139
Número de Mensagens : 2211
Prêmios : sistema - Cartas na mão organizadas [Sistema de Cadeados] Empty

Medalhas x 0 Tutoriais x 4 Moedas x 0

Ouro x 2 Prata x 2 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Plataformas :
  • Unity


http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Ir para o topo Ir para baixo

sistema - Cartas na mão organizadas [Sistema de Cadeados] Empty Re: Cartas na mão organizadas [Sistema de Cadeados]

Mensagem por Willy Sex 27 Mar 2015, 12:04

Rapaz, tu fez uma senhora gambiarra ai. Suspect
Meu objetivo era concentrar as cartas em ordem de chegada na mão do jogador!
Você poderia ter feito usando um sistema de stack ou de queue (não me lembro ao certo qual dos dois é correto para sua situação). Esse estruturador de dados serve justamente para respeitar uma ordem de chegada e saída.
A partir da stack/queue, você pode manipular o conteúdo e organizar a posição x das cartas simplesmente usando a posição da carta na stack/queue multiplicando pela largura da sua carta (142, certo?).
Se bem que, você poderia usar ds_list também, já que ela também respeita a ordem de chegada.

Bom, não me aprofundei no seu código, portanto realmente pode não servir para você, mas, de acordo com meu pensamento lógico, easa é a forma mais simples e fácil de fazer manutenções futuras.

No mais, parabéns por solucionar seu problema, é gratificante quebrar a cabeça por horas e por um fim no problema.

Flws... blz
Willy
Willy

Games Ranking : Nota A

Notas recebidas : C + B + A + A
Data de inscrição : 08/06/2009
Reputação : 264
Número de Mensagens : 1890
Prêmios : sistema - Cartas na mão organizadas [Sistema de Cadeados] Empty

Medalhas x 0 Tutoriais x 2 Moedas x 0

Ouro x 2 Prata x 1 Bronze x 1

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

http://willy-gmbr.blogspot.com/

Ir para o topo Ir para baixo

sistema - Cartas na mão organizadas [Sistema de Cadeados] Empty Re: Cartas na mão organizadas [Sistema de Cadeados]

Mensagem por Felipe Reis Magno 2 Sex 27 Mar 2015, 22:53

Gambiarra kkkkkkkkkkkkkkkkkk
Gostei desse comentário! rs

Bem gente, eu tentei né, mas eu gostei das simplificações aplicadas, reduziu os códigos em 80% deixando mais leve de se rodar e inserir outras utilidades! Muito obrigado Kapoty! Happy

Theguitarmester, o sistema é para organizar centralizado na room as cartas seja qual for a quantidade delas pra ficar bonito e organizado. No instance_destroy ou antes, o programador inseri qualquer código para que a carta seja lançada no campo, dai vai do critério do programador.

Fiz este código pois eu si que muita gente também é fascinado por jogos de cartas! Obrigado por cada comentário gente!
Felipe Reis Magno 2
Felipe Reis Magno 2

Games Ranking : Nota E

Notas recebidas : E
Data de inscrição : 08/08/2014
Reputação : 2
Número de Mensagens : 43
Prêmios : sistema - Cartas na mão organizadas [Sistema de Cadeados] 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

sistema - Cartas na mão organizadas [Sistema de Cadeados] Empty Re: Cartas na mão organizadas [Sistema de Cadeados]

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