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
» Como ajustar velocidade de cada frame da animação no game maker
por Ralphed Ontem à(s) 18:28

» 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

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» 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

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21

» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21

» Asteroid Core - Early Acesse Update [0.2.0.0]
por JOZ. Seg 08 Jan 2024, 14:39

» Versionamento de código com GitHub
por GabrielXavier Seg 08 Jan 2024, 07:32

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por kolesovsup Sex 29 Dez 2023, 07:16


Cartas na mão organizadas [Sistema de Cadeados]

4 participantes

Ir para baixo

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:

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

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

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 : 2209
Prêmios : 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

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

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

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