Ir ao conteúdo
  • Cadastre-se
Vitor Bergamaschi Santos

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? 

Compartilhar este post


Link para o post
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...

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!