Random

Salut!!
Dans le cadre de la création d'un jeu de hasard, il me faudrait simuler le lancé d'un dé. Pour cela j'ai besoin d'une fonction random. Bien que connaissant un peu la méthode suivie pour créer un nombre aléatoire, je ne sais pas le faire dans la pratique.

5 réponses

  1. J'ai oublié de présiser que je programme en assembleur.
    1. veuillez preciser le langage dans lequel vous evoluer.
      neanmoins je m'y connait un peu en pascal.
      donc si c'est le cas, faites moi signe et je pourrais vous aider
      1. Moi je sais le faire en JavaScript, en JAVA, en PHP et en PERL... (en ADA j'me rappelle pu trop).
        Ca peut aider ?
        :)

        -= Bobinours =-
    2. il fallait juste lire la première "réponse", qui disait que j'évoluais en assembleur. Sinon, y'a-t-il quelqu'un de plus futé qui pourrait vraiment m'aider?
      1. Un moyen trés facile d'utiliser la fonction random et d'en voir le résultat est d'aller dans l'aide d'excel et de saisir aléatoire, l'exemple donné est justement un dé électronique (6 faces) utilisant dans le code la fameuse fonction random. En plus nombreux sont ceux qui ont ce soft. Pardon pour l'assembleur, mais pour les nouveaux venus en informatique cette remarque peut être intéressante.
        1. Jete un oeil sur ce site...
          http://www.programmersheaven.com/zone5/cat20/index.htm
          Tu devrais trouver ton bonheur (plein de script assembler)
          cherche "random+assembler" y'a un fichier RANDOMGN.ZIP.

          Voici une partie du code qui correspond, mais je ne lis pas trop l'assembler donc...

          page ,132
          ;
          ;This TSR maintains a circular buffer of random numbers. After the TSR is
          ; loaded, it hooks to the multiplex interrupt. To obtain n random numbers,
          ; set al=n ; ah=aeh ; dx = 726eh ; es:di=buffer address for the numbers
          ; INT 2F
          ; Returns with al=ffh (success) or al=00 (not all n values returned)
          ; dx = number of values returned
          ; all other registers unchanged
          ;
          ;The TSR stores one random byte every time the keyboard interrupt (INT9)
          ; is activated. The byte is bits 9-2 of the current Timer 0 value.
          ;Note that n=0 can be used to determine whether or not the TSR has been
          ; loaded
          ;
          ;Written by Joseph R Ahlgren, BBS 703-241-7980, CompuServe 70461,2340
          ; This program is freeware. It may be used without restriction, provided
          ; the original source is acknowledged.
          ; 91/06/28
          ;
          assume cs:cseg,ds:cseg,ss:cseg
          cseg segment para public 'code'
          FirstCode:
          org 100h
          TableBase label byte
          LoadTSR:
          jmp cs:[Last]
          Last dw LastCode
          org 200h
          ByteLoc dw TableBase+00ffh
          LastByte dw Tablebase+00ffh
          Continue9 dd ?
          Continue2F dd ?
          INT9:
          push ax
          push bx
          mov bx,cs:[ByteLoc]
          inc bl
          cmp bx,cs:[LastByte]
          je exit
          xor ax,ax
          out 43h,al
          in al,40h
          mov ah,al
          in al,40h
          xchg al,ah
          shr ax,1
          shr ax,1
          mov cs:[ByteLoc],bx
          mov cs:[bx],al
          exit:
          pop bx
          pop ax
          jmp cs:[continue9]
          INT2F:
          cmp ah,0aeh
          jne exit2f
          cmp dx,726eh ;'rn'
          jne exit2f
          push bx
          push cx
          mov dx,di
          or al,al
          jz DoneOK
          mov cl,al
          xor ch,ch
          Loop1:
          cli
          mov bx,cs:[LastByte]
          cmp bx,cs:[ByteLoc]
          je DoneShort
          inc bl
          mov al,cs:[bx]
          mov cs:[LastByte],bx
          sti
          stosb
          loop loop1
          DoneOK:
          mov al,0ffh
          DoneDone:
          sub di,dx
          xchg dx,di
          pop cx
          pop bx
          iret
          DoneShort:
          xor al,al
          jmp DoneDone
          exit2f:
          jmp cs:[continue2f]
          LastCode:
          mov ax,0ae00h
          mov dx,0726eh
          int 2fh
          cmp al,0ffh
          jnz NotLoaded
          or dx,dx
          jz AlreadyLoaded
          NotLoaded:
          mov ax,3509h
          int 21h ;get int 9
          mov [word ptr Continue9],bx
          mov [word ptr Continue9+2],es
          mov ax,2509h
          mov dx,offset INT9
          int 21h ;link to INT9
          mov ax,352Fh
          int 21h ;get int 2F
          mov [word ptr Continue2F],bx
          mov [word ptr Continue2F+2],es
          mov ax,252Fh
          mov dx,offset INT2F
          int 21h ;link to INT2F
          mov dx,offset Success
          mov ah,9
          int 21h
          mov ax,3100h ;TSR
          mov dx,(LastCode+15-FirstCode)/16
          int 21h ;TSR
          AlreadyLoaded:
          mov dx,offset Already
          mov ah,9
          int 21h
          mov ax,4c01h
          int 21h
          Success db 0dh,0ah,0ah,'RANTSR loaded and linked to INT 2F',0ah,0dh
          db ' Joseph R Ahlgren, BBS 703-241-2661',0ah,0dh,0ah,'$'
          Already db 0dh,0ah,0ah,'RANTSR already loaded',0ah,0dh,0ah,'$'
          cseg ends
          end LoadTSR

          J'espere que tu pourras en faire qqchoz

          -= Bobinours =-
          1. je te remercie pour ton aide. Du fait que je commence l'assembleur, j'ai moi aussi du mal à lire l'assembleur, mais je vais faire en sorte que ta recherche ne serve pas a rien.