Ir ao conteúdo
  • Cadastre-se

Assembly Jogo Genius/Gerador de Número aleatório em Assembly


Posts recomendados

Estou tentando recriar o jogo Genius em assembly para um implementar o software em uma PCI que fiz. O único problema é que não encontro uma maneira eficiente de gerar números aleatórios, mais especificamente aleatorizar a escolha dos números 111111110b, 11111101b, 11111011b, 11110111b. (FEh,FDh,FBh e F7h), e mandar o número escolhido para um local de memória como um Acumulador. Alguém teria alguma dica de como posso fazer isso? 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

voce não especificou qual o microcontrolador que vai ser usado, mas sendo genérico, acho que da pra usar um contador e tipo fazer alguma operação logica E /OU XOR ao numero no contador junto com o valor do program counter. (PC) depois você grava o valor em um registro 8 bits e lê penas o primeiro nibble. a outra metade do numero pode ser somado/subtraído ao PC pra gerar outro numero... 

 

Outra alternativa seria usar o usuário como gerador de numero aleatório, tipo voce faz a primeira rodada sequencial, porém pra cada vez que o usuario pressionar um botão de cor, voce gera uma interrupção e lê o valor de um contador ou timer de 8 bits e usa pra gerar os nibbles usados pra sortear as jogadas seguintes...

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Estou usando o uC AT89S51, e cheguei em algo assim:

setgna:
  
  mov DPTR,#tabgna                               ;Move os elementos(LEDS) possíveis para o DPTR
  mov r0,#4                                      ;Número de elementos a serem "contados"

inigna:
	
  movc A,@A+DPTR                                 ;Move um dos elementos da tabela de na para o Acc
  jnb botini,inigame                             ;O usuário "sorteia" qual dos LEDS irá acender
  inc DPTR                                       
  clr A                                          
  djnz r0,inigna                                  
	
resetgna:
	
  jmp setgna
	
tabgna:
	
  db 11110111b,11111011b,11111101b,11111110b

O código fonte está sendo feito para esta PCI:
985130136_WhatsAppImage2019-07-13at10_14_15.thumb.jpeg.7f80df333f248d268d3387f7c149f6fe.jpeg

 

Quando o usuário apertar o botão de início o DPTR estará "rodando" entre os valores, e como o momento que o usuário irá pressionar o botão é aleatório, o número acaba sendo aleatório também. Acabou dando certo esta parte, só que eu queria que o momento aleatório fosse feito por software também, caso fosse necessário para outros projetos. Mas no caso do genius dá certo pois sempre o usuário estará pressionando algum botão então dá pra usar isso na escolha do nº aleatório.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Creio que pra gerar algo realmente aleatório você precisa de algum hardware externo essencial, tipo um conversor AD monitorando uma media de valores do ruido branco gerado por um diodo, ou outra fonte de fenômenos aleatórios, com software no máximo você chega a um gerador de numero pseudo aleatório, um numero que parece aleatório pra quem não tem acesso ao código, mas que acaba repetindo o padrão em algum ponto...

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...