Conectar-se

Esqueci minha senha

Últimos assuntos
» [Duvida] O que aprender
Ontem à(s) 23:03 por Fubukki

» [DÚVIDA] Colisão de objeto afetar apenas um
Ontem à(s) 22:32 por Dragonrod

» colisão de queda após outra colisão dando problema
Ter 27 Jun 2017, 20:18 por Willy

» BUILD FAILED: Cannot find BUILD.xml
Seg 26 Jun 2017, 14:50 por ReisBlender

» Nota de esclarecimento - GMBR voltou!
Sex 23 Jun 2017, 20:33 por Willy

» Regras do Fórum
Sex 23 Jun 2017, 19:02 por GMBR

» Retorno da GMBR!!!
Ter 24 Jan 2017, 15:43 por GMBR

» Jogo Dengue HTML
Seg 30 Nov 2015, 16:17 por guga

» Criando IA Simples para inimigos
Qua 25 Nov 2015, 19:22 por DJDAVYD

» Ordenar variavel em ordem decrescente
Sex 28 Ago 2015, 21:09 por Kodained

» Crio Trilha Sonora para Games!
Qui 27 Ago 2015, 13:50 por Isaias Malafaia

» Problema com Colisão
Qui 27 Ago 2015, 12:30 por The_Game

» Quem quer Uma Engine, e de Quê?
Qui 27 Ago 2015, 09:22 por theguitarmester

» [RESOLV]Como adicionar 2 objetos na mesma posição?
Qua 26 Ago 2015, 11:38 por Bhryenno Kelvyn Carlson

» Sistema de porta!!!
Ter 25 Ago 2015, 21:29 por theguitarmester

» Venda de objetos em Inventário - Multiplicado
Seg 24 Ago 2015, 18:33 por AG Hydra

» Atirar na direção certa
Seg 24 Ago 2015, 09:03 por theguitarmester

» Western Duels
Seg 24 Ago 2015, 07:47 por theguitarmester

» Problemas na compilação android
Dom 23 Ago 2015, 23:43 por Zero.

» Dúvida sobre strings, lendo txt
Sab 22 Ago 2015, 20:31 por Pai véi

» Como estabilizar um som
Sab 22 Ago 2015, 19:03 por Isquilo_Roedor

» Janela Modal
Sab 22 Ago 2015, 09:23 por Pai véi

» Sobre instance Creation Code
Sab 22 Ago 2015, 08:39 por Pai véi

» LudumDare #33
Sex 21 Ago 2015, 21:17 por WellingtonBecker

» Como fazer um temporizador
Sex 21 Ago 2015, 19:02 por Isquilo_Roedor

Quem está conectado
23 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 23 Visitantes

Nenhum

[ Ver toda a lista ]


O recorde de usuários online foi de 324 em Ter 05 Out 2010, 13:36

Cartas na mão organizadas [Sistema de Cadeados]

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

Cartas na mão organizadas [Sistema de Cadeados]

Mensagem por Felipe Reis Magno 2 em 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:



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!!!
avatar
Felipe Reis Magno 2

Ranking : Nota E
Notas recebidas : E
Data de inscrição : 08/08/2014
Número de Mensagens : 43
Insígnias de JAM :

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

Ver perfil do usuário

Voltar ao Topo Ir em baixo

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

Mensagem por Kapoty em Sex 27 Mar 2015, 11:47

Vamos lá,

Spoiler:
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;
}
Se resume em:
Código:
posicao=global.cartas_na_mao;

Spoiler:
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;
}
Se resume em:
Código:
x = obj_controle_mao.x+32+(posicao-1)*142;
y = obj_controle_mao.y;

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

Spoiler:
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();
}
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'.
avatar
Kapoty

Ranking : Nota B
Notas recebidas : E + D + C + B + D +B + A
Data de inscrição : 05/11/2011
Número de Mensagens : 635
Insígnias de JAM :

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

Prêmios
   : 1
   : 0
   : 1

Ver perfil do usuário

Voltar ao Topo Ir em baixo

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

Mensagem por theguitarmester em 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?
avatar
theguitarmester

Ranking : Sem avaliações
Notas recebidas : B
Data de inscrição : 28/02/2012
Número de Mensagens : 1908
Insígnias de JAM :

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

Prêmios
   : 2
   : 2
   : 1

Ver perfil do usuário http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

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

Mensagem por Willy em 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

_________________


Engines, tutoriais e projetos? Clique no banner!



Atenção:
Comporte-se, senão você vai levar a cintada do Willy no meio da bunda! bravo

avatar
Willy

Ranking : Nota A
Notas recebidas : C + B + A + A
Data de inscrição : 08/06/2009
Número de Mensagens : 1814
Insígnias de JAM :

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

Prêmios
   : 2
   : 1
   : 1

Ver perfil do usuário http://willy-gmbr.blogspot.com/

Voltar ao Topo Ir em baixo

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

Mensagem por Felipe Reis Magno 2 em 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!
avatar
Felipe Reis Magno 2

Ranking : Nota E
Notas recebidas : E
Data de inscrição : 08/08/2014
Número de Mensagens : 43
Insígnias de JAM :

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

Ver perfil do usuário

Voltar ao Topo Ir em baixo

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

Mensagem por Conteúdo patrocinado


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