ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Random, Vetores(ARRAY) ou outros ?

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
xprorush
Novato
Novato


Registrado: Sexta-Feira, 16 de Julho de 2010
Mensagens: 51
Localização: Leme

MensagemEnviada: Qua Ago 04, 2010 1:37 pm    Assunto: Random, Vetores(ARRAY) ou outros ? Responder com Citação

Boa tarde Pessoas. Very Happy

Hoje venho perguntar a voces, trazer uma "situação problema". É o seguinte, vou direto ao ponto sem enrolar muito. Gostaria de saber de como embaralhar as "cartas" que seriam um Timage, para que toda vez que inicializasse a aplicação essas cartas estivessem em lugares totalmente diferentes. Teria como também, fazer com que um TLabel mudasse a propriedade Caption da mesma forma? por exemplo: na primeira vez quando iniciado a aplicação no Label aparece Teste no caption, dai quando eu fechar e abrir pela 2ª, 3° vez ... aparecer outras palavras que eu definir, como se fosse um rodizio de palavras mais que nunca ficam em uma sequencia .


Obrigado pela atenção!

Abraço
Felipe
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
felipecaputo
Colaborador
Colaborador


Registrado: Quinta-Feira, 13 de Mai de 2010
Mensagens: 1719
Localização: Florianópolis / SC

MensagemEnviada: Qua Ago 04, 2010 1:59 pm    Assunto: Responder com Citação

Blz amigo, vamos ver se eu entendi e se eu posso ajudar.

Tipo embaralhar cartas. ok.

Código:
Function RetirarUmaCarta : Integer
var
  carta : Integer;
  ok : Boolean;
begin
  ok := false;
  while not Ok do
  begin
    Randomize;
    carta := Random(54);
    if not cdscartasdadas.locate('cd_carta',carta,[]) then
    begin
      cdscartasdadas.append;
      cdscartasdadascd_cartas.value := cartas;
      cdscartasdadas.post;
      result := cartas;
      ok := true;
    end
    else
      ok := false;
  end;
end;


considerando que o cdscartasdadas é um clientdataset temporário e só possui o campo cd_carta para cotrole das cartas dadas. a cada novo jogo seus dados deve ser reiniciados.
_________________
if Post.State = psResolvido then
Post.Caption := Post.Caption + ' [RESOLVIDO]';
_____________________________________________
O único homem que está isento de erros, é aquele que não arrisca acertar. Albert Einstein
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
BrunoMoreyra
Colaborador
Colaborador


Registrado: Quinta-Feira, 26 de Novembro de 2009
Mensagens: 1398
Localização: Goiânia - GO / Brasília - DF

MensagemEnviada: Qua Ago 04, 2010 1:59 pm    Assunto: Re: Random, Vetores(ARRAY) ou outros ? Responder com Citação

Boa tarde,

pode fazer isso com a randomização, onde ao abrir cada vez preencherá com um valor diferente, com é randomizado, poderá repetir.
É só colocar na criação do formulário para randomizar.

Mas caso queira que não repita, terá que armazenar o valor que foi aberto pelo última vez em arquivo, banco de dados, etc.



xprorush escreveu:
Boa tarde Pessoas. Very Happy

Hoje venho perguntar a voces, trazer uma "situação problema". É o seguinte, vou direto ao ponto sem enrolar muito. Gostaria de saber de como embaralhar as "cartas" que seriam um Timage, para que toda vez que inicializasse a aplicação essas cartas estivessem em lugares totalmente diferentes. Teria como também, fazer com que um TLabel mudasse a propriedade Caption da mesma forma? por exemplo: na primeira vez quando iniciado a aplicação no Label aparece Teste no caption, dai quando eu fechar e abrir pela 2ª, 3° vez ... aparecer outras palavras que eu definir, como se fosse um rodizio de palavras mais que nunca ficam em uma sequencia .


Obrigado pela atenção!

Abraço
Felipe

_________________
Atencisamente,

Bruno Moreira Batista.
http://www.kawek.com.br/BrunoBatista
Skype: Bruno_Batysta
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
xprorush
Novato
Novato


Registrado: Sexta-Feira, 16 de Julho de 2010
Mensagens: 51
Localização: Leme

MensagemEnviada: Qua Ago 04, 2010 6:08 pm    Assunto: Responder com Citação

Bom, vou tentar fazer com esse codigo, daria para aplicar o mesmo para o TLabel ?

Se fosse para armazenar em um DB como seria?

Bom, vou postar aqui o que é e para que preciso.

Meu TCC é sobre educação e para isso estou desenvolvendo um aplicativo para crianças de idiomas diferentes que vai levar o conhecimentos de novas linguas ate eles...

O Game é o seguinte: Em determinado Form tem um TLabel que recebe um nome de um objeto de idioma diferente da que nos usamos, no caso seria ingles espanol e frances( 1° versao) e embaixo do TLabel Umas 10 imagens no TImage, o proposito do jogo é a criança relaciona a palavra e clicar na imagem e assim errando ou acertando o nome que aparece no TLabel muda, e as imagens tambem, claro que sempre que tiver por exemplo escrito carro, vai ter que ter a imagem do carro. Consigo fazer de forma que sempre apareça a mesma sequencia de palavraas e figuras, entao sempre que iniciar o jogo vai estar sempre as mesma palavras e as mesmas imagens deixando assim o jogo chato ou ate que a criança decore oque vai aparecer e nao jogue mais Sad ...

Conversei com Meus 2 professores de Delphi, e disseram que se eu usar a função de vetores(array) iria carregar muito a memoria, entao tenho a opção dada por eles de armazenar tudo em DB, mas como fazer isso? Claro criar o banco de dados eu consigo, mais como puxar do banco para que fique fazendo esse rodizio e se claro tbm for o modo mais facil de fazer isso...

Espero que tenham entendido.
Se expressei-me errado por favor digam oque nao entenderam que tentarei exemplificar melhor.


Felipe
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
felipecaputo
Colaborador
Colaborador


Registrado: Quinta-Feira, 13 de Mai de 2010
Mensagens: 1719
Localização: Florianópolis / SC

MensagemEnviada: Qua Ago 04, 2010 6:25 pm    Assunto: Responder com Citação

cara, muito bacana a ideia, vc teria q ter um banco com o seguinte:

Tabela Palavras
cod_palavra
palavra
cd_idioma
caminho_imagem

Tabela Idiomas
cd_idioma
Idioma

Tabela Usuarios (para fins de placar)
cd_usuario
nome
idade
cd_idioma
usuario
senha

amanha eu te dou uma ideia sobre como fazer blz? mas não vai ser difícil não
_________________
if Post.State = psResolvido then
Post.Caption := Post.Caption + ' [RESOLVIDO]';
_____________________________________________
O único homem que está isento de erros, é aquele que não arrisca acertar. Albert Einstein
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
xprorush
Novato
Novato


Registrado: Sexta-Feira, 16 de Julho de 2010
Mensagens: 51
Localização: Leme

MensagemEnviada: Qui Ago 05, 2010 12:20 am    Assunto: Responder com Citação

Ontem dia 4/08/2010, Tive aula de Delphi 7 e troquei ideia com os professores, sugeriram para criar um BD tambem, porem com um campo para habilitar se ja foi usado ou não, para que em uma rotina WHILE faça com que não repita as palavras...

Bom criei no ACCESS as tabelas com os campos que você sugeriu, vou esperar atencioso pela continuação de seu pensamento...

Abraço
Felipe
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
felipecaputo
Colaborador
Colaborador


Registrado: Quinta-Feira, 13 de Mai de 2010
Mensagens: 1719
Localização: Florianópolis / SC

MensagemEnviada: Qui Ago 05, 2010 9:44 am    Assunto: Responder com Citação

Agora, no caso, o que iremos fazer é mais ou menos akele primeiro post que eu falei, qual o seu nivel de conhecimento de sql?

agora o q vai ser necessário é preparar a interface

mas já realize alguns cadastros no banco talvez até mesmo de forma direta

não se esqueca de fazer o relacionamente entre cd_idiomas e palavras

vc pode também criar uma tabela para armazenar o ranking mas vamos deixar isso para depois.

a idéia é a mesma daquele post só que ao inves de ser compra carta seria mais ou menos assim:

Código:
Function SelecionaPalavra : Integer
var
  palavra : Integer;
  ok : Boolean;
  tmp : TAdoQuery;
begin
  tmp := TAdoQuery.Create(self);
  tmp.Connection := AdoConnection1;
  tmp.sql.text = 'Select cd_palavra, palavra, cd_idiomas from palavras where cd_idioma = ' + inttostr(codigodoidiomaselecionado);
  tmp.open;
  if tmp.eof then
  begin
    result := -1;
    raise exception.create('Nenhuma palavra cadastrada para este idioma');
  end;
  if tmp.recordcount = cdspalavrasmostradas.recordcount then
  begin
    result := -1;
    raise exception.create('Todas as palavras ja foram utilizadas.');
  end;
  ok := false;
  while not Ok do
  begin
    Randomize;
    palavra := Random(tmp.recordcount);
    if not cdspalavrasmostradas.locate('cd_palavra',palavra,[]) then
    begin
      cdspalavrasmostradas.append;
      cdspalavrasmostradascd_palavra.value := palavra;
      cdspalavrasmostradas.post;
      result := palavra;
      ok := true;
    end
    else
      ok := false;
  end;
end;


qualquer duvida é so postar
_________________
if Post.State = psResolvido then
Post.Caption := Post.Caption + ' [RESOLVIDO]';
_____________________________________________
O único homem que está isento de erros, é aquele que não arrisca acertar. Albert Einstein
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
gilsonnrodrigues
Moderador
Moderador


Registrado: Quinta-Feira, 14 de Abril de 2005
Mensagens: 9009
Localização: Governador Valadares-MG

MensagemEnviada: Qui Ago 05, 2010 12:50 pm    Assunto: Responder com Citação

postei algo sobre desordenar lista pra o adrianoservitec
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
felipecaputo
Colaborador
Colaborador


Registrado: Quinta-Feira, 13 de Mai de 2010
Mensagens: 1719
Localização: Florianópolis / SC

MensagemEnviada: Qui Ago 05, 2010 12:51 pm    Assunto: Responder com Citação

para desordenar no caso dele que é o access pode-se usar select campos from tabela order by random que funciona, achei isso muito interessante
_________________
if Post.State = psResolvido then
Post.Caption := Post.Caption + ' [RESOLVIDO]';
_____________________________________________
O único homem que está isento de erros, é aquele que não arrisca acertar. Albert Einstein
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
xprorush
Novato
Novato


Registrado: Sexta-Feira, 16 de Julho de 2010
Mensagens: 51
Localização: Leme

MensagemEnviada: Qui Ago 05, 2010 1:06 pm    Assunto: Responder com Citação

Bom já usei MySQL, no prompt, criei um banco la, sei criar inserir dados apagar dados fazer consulta, bom tenho um nivel de conhecimento rasoavel acredito, e ja usei SQL no VB 2008, programando em .ASP

Bom vou inserir os dados no BD e fazer o Relacionamento, o caminho da imagem vai ser gravado pela interface que for criado né ?

Abraço
Felipe
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
felipecaputo
Colaborador
Colaborador


Registrado: Quinta-Feira, 13 de Mai de 2010
Mensagens: 1719
Localização: Florianópolis / SC

MensagemEnviada: Qui Ago 05, 2010 1:24 pm    Assunto: Responder com Citação

para o caminho utilize

Código:
ExtractFilepath + '\imagens\' + inttostr(cd_palavra)+'.jpg';


Dê uma estudada naquela função q te passei depois disso, vamos supor que a criança terá n opções, neste exemplo 4, para escolher, portanto 1 seria certa e 3 erradas.

Código:
procedure PreencherSorteioTela;
var
  cod_palavra, posicaoresposta, i : integer;
  tmp1, tmp : TAdoQuery;
begin
  cod_palavra := SelecionaPalavra;
  tmp := TadoQuery.Create(self);
  tmp2 := TAdoQuery.Create(Self);
  tmp.Connection := AdoConnection1;
  tmp2.Connection := AdoConnection1;
  tmp.sql.text := 'Select cod_palavra, palavra, cd_idioma, caminhoimagem from palavras where cd_palavras = ' + inttostr(codpalavra);
  tmp.open;
  tmp2.sql.text := 'Select cod_palavra, palavra, cd_idioma, caminhoimagem from palavras where cd_palavras <> ' + inttostr(codpalavra) + ' order by random';
  tmp2.open;
  randomize;
  posicaoresposta := random(4);
  for 1 := 1 to 4 do
  begin
    if i = posicaocorreta then
    begin
      TImage(FindComponent('Imagem'+inttostr(i))).Picture.LoadFromFile(tmp.Fields[3].asString);
      TImage(FindComponent('Imagem'+inttostr(i))).Tag := 10;
    end
    else
    begin
      TImage(FindComponent('Imagem'+inttostr(i))).Picture.LoadFromFile(tmp2.Fields[3].asString);
      TImage(FindComponent('Imagem'+inttostr(i))).Tag := 0;
      tmp2.next;
    end;
  end;
  freeandnil(tmp);
  freeandnil(tmp2);
end;


Fiz o codigo aki no forum mesmo, se tiver alguns erros o importante dele é a lógica. Você vai conseguir saber qual é a resposta certa pelo tag. os labels vc preenche com as 2 queries que eu criei
_________________
if Post.State = psResolvido then
Post.Caption := Post.Caption + ' [RESOLVIDO]';
_____________________________________________
O único homem que está isento de erros, é aquele que não arrisca acertar. Albert Einstein
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
xprorush
Novato
Novato


Registrado: Sexta-Feira, 16 de Julho de 2010
Mensagens: 51
Localização: Leme

MensagemEnviada: Qui Ago 05, 2010 8:20 pm    Assunto: Responder com Citação

Não estou conseguindo entender onde por esses codigos, nao consigo acompanhar seu raciocinio...
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
felipecaputo
Colaborador
Colaborador


Registrado: Quinta-Feira, 13 de Mai de 2010
Mensagens: 1719
Localização: Florianópolis / SC

MensagemEnviada: Sex Ago 06, 2010 10:41 am    Assunto: Responder com Citação

são todas procedures e functions independes que depois vc pode usá-las onde for necessário, note que na procedure PreencherSorteioTela eu utilizo a Function SelecionaPalavra. com isso q eu te passei ja ta quase que o programa todo. Não posso fazer mais senão quem vai fazer o seu TCC vou ser eu né?

em resumo

    Function SelecionaPalavra : Busca uma palavra que ainda não foi utilizada

    procedure PreencherSorteioTela : Utilizando 4 compontentes TImage com nomes Imagem1, Imagem2, Imagem3, Imagem4 preencher uma aleatória com a imagem correta e as outras 3 com a imagem errada e ainda marcar com tag = 10 a certa para q seja feita a verificação

_________________
if Post.State = psResolvido then
Post.Caption := Post.Caption + ' [RESOLVIDO]';
_____________________________________________
O único homem que está isento de erros, é aquele que não arrisca acertar. Albert Einstein
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
xprorush
Novato
Novato


Registrado: Sexta-Feira, 16 de Julho de 2010
Mensagens: 51
Localização: Leme

MensagemEnviada: Sáb Ago 07, 2010 12:33 am    Assunto: Responder com Citação

Poxa vida, nunca usei Query, tenho so uns 7 meses que estou usando delphi, entao quase nao sei nada tao aprofundado, bom mesmo assim muito obrigado pela ajuda.

Ajudo bastante se preocupando com todo esse projeto
Vlw
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
felipecaputo
Colaborador
Colaborador


Registrado: Quinta-Feira, 13 de Mai de 2010
Mensagens: 1719
Localização: Florianópolis / SC

MensagemEnviada: Seg Ago 09, 2010 11:05 am    Assunto: Responder com Citação

Amigo, vamos começar do princípio, o q você ja tem do programa?
_________________
if Post.State = psResolvido then
Post.Caption := Post.Caption + ' [RESOLVIDO]';
_____________________________________________
O único homem que está isento de erros, é aquele que não arrisca acertar. Albert Einstein
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB