;****************************
;*                          *
;*   JEU DU NOMBRE SECRET   *
;*  (c)JEUDY S.-26/11/1994  *
;*                          *
;****************************

;Constantes Système:

ExecBase = 4
OpenLib = -408  ; librairies
CloseLib = -414
Open = -30	; fenêtre
Close = -36	; fenêtre
Write = -48	; écran
Read = -42	; clavier

;Constantes personnelles:

;Préparatifs:

Start	move.l	execbase,a6
	lea	dosname,a1
	moveq	#0,d0
	jsr	OpenLib(a6)
	move.l	d0,dosbase

;Ouverture de la fenêtre de travail:

	move.l	dosbase,a6
	move.l	#nomfen,d1
	move.l	#1005,d2
	jsr	Open(a6)
	move.l	d0,handle

;Zone de Programmation:
;-------------------------------------------------------------------------

Debut	jsr	Titre
	
	jsr	Tirage		;Lance le tirage aléatoire
	move.l	d4,d5

	jsr	Cls
	jsr	Rem

	move.b	#$30,coups+1	;coups=00 (sur 2 octets en ASCII)
	move.b	#$30,coups

Essai	jsr	Saisie		;Saisie d'un essai
	move.l	d4,d6

	cmp.l	d5,d6		;Teste le résultat
	bgt	TG
	blt	TP
	beq	Trouve

Fin

;-------------------------------------------------------------------------
;Fermeture de la fenêtre de travail & Fin:

	move.l	handle,d1
	jsr	Close(a6)
	rts

;Sous-Programmes:

;Personnels:
;-------------------------------------------------------------------------

Cls	move.l	handle,d1	;Efface l'écran
	move.l	#cls1,d2
	move.l	#1,d3
	jsr	Write(a6)
	rts

Titre	move.l	handle,d1	;Affichage du titre
	move.l	#titre1,d2
	move.l	#titre2-titre1,d3
	jsr	Write(a6)
	rts

Rem	move.l	handle,d1	;Affichage de Quitter
	move.l	#rem1,d2
	move.l	#rem2-rem1,d3
	jsr	Write(a6)
	rts

Tirage				;Tirage aléatoire
Zero	clr.l	d4		;Dans d4 : nbre tiré en décimal
Boucle1	cmp.l	#999,d4		;1 < nbre < 999
	beq.s	Zero
	add.l	#1,d4
	btst	#6,$bfe001	;Teste bouton gauche de la souris
	bne.s	Boucle1		;Fin tirage si cliqué
	rts

Saisie	clr.l	buffer		;Dans buffer : nbre saisi au clavier
	clr.l	d0		;Dans d0 : nbre saisi en ASCII
	clr.l	d4		;Dans d4 : nbre converti en décimal
	move.l	handle,d1
	move.l	#mes1,d2
	move.l	#mes2-mes1,d3
	jsr	Write(a6)
	move.l	handle,d1	;Saisie du nombre au clavier
	move.l	#buffer,d2
	move.l	#255,d3
	jsr	Read(a6)
	move.l	buffer,d0	;buffer->d0
	add.b	#1,coups+1	;coups=coups+1
	cmp.b	#$39,coups+1	;Gestion du nombre de coups en ASCII
	ble.s	Boucle2
	move.b	#$30,coups+1	;Unité à 0
	add.b	#1,coups	;Dizaine + 1
Boucle2	ror.l	#8,d0		;Rotation : pour que le nombre saisi
	cmp.b	#$0a,d0		;(en car.) occupe correctement d0
	bne.s	Boucle2		;c.a.d. par les bits de poids faible
	cmp.w	#$510a,d0	;Teste si Quitter (par Q+RETURN)
	beq	Fin
	jsr	Convert		;* CONVERSION DU NOMBRE ASCII->DEC *
	move.l	d7,d4		;Unité dans d4
	jsr	Convert
	mulu	#10,d7
	add.l	d7,d4		;Dizaine dans d4
	jsr	Convert
	mulu	#100,d7
	add.l	d7,d4		;Centaine dans d4
Fsaisie	rts

Convert	clr.l	d7		;Dans d7 : chiffre en décimal
	lsr.l	#8,d0		;Décalage pour nouveau chiffre
	cmp.b	#$30,d0		;Teste si chiffre en ASCII
	blt.s	Fsaisie
	sub.b	#$30,d0		;ASCII->DEC
	move.b	d0,d7		;Mise du chiffre décimal dans d7
	rts

TG	move.l	handle,d1	;Si trop grand
	move.l	#mes1tg,d2
	move.l	#mes2tg-mes1tg,d3
	jsr	Write(a6)
	jmp	Essai		;Nouvel essai

TP	move.l	handle,d1	;Si trop petit
	move.l	#mes1tp,d2
	move.l	#mes2tp-mes1tp,d3
	jsr	Write(a6)
	jmp	Essai		;Nouvel essai

Trouve	move.l	handle,d1	;Si trouvé
	move.l	#mes1tr,d2
	move.l	#mes2tr-mes1tr,d3
	jsr	Write(a6)
	move.l	handle,d1	;Affichage du nombre de coups
	move.l	#coups,d2
	move.l	#2,d3
	jsr	Write(a6)
	move.l	handle,d1
	move.l	#mes2tr,d2
	move.l	#mes3tr-mes2tr,d3
	jsr	Write(a6)
	move.l	handle,d1	;Attente RETURN pour recommencer
	move.l	#buffer,d2
	move.l	#255,d3
	jsr	Read(a6)
	jmp	Debut

;Messages:

cls1	dc.b	$0c

titre1	dc.b	$0c
	dc.b	'          ****************************',$0d,$0a
	dc.b	'          *                          *',$0d,$0a
	dc.b	'          *   JEU DU NOMBRE SECRET   *',$0d,$0a
	dc.b	'          *  (c)JEUDY S.-26/11/1994  *',$0d,$0a
	dc.b	'          *                          *',$0d,$0a
	dc.b	'          ****************************',$0d,$0a
	dc.b	$0d,$0a,'Règle :'
	dc.b	$0d,$0a,'-------',$0d,$0a,$0d,$0a
	dc.b	'Le jeu consiste à trouver un nombre tiré aléa-'
	dc.b	$0d,$0a
	dc.b	'toirement par l''ordinateur en un minimum de'
	dc.b	$0d,$0a
	dc.b	'coups.',$0d,$0a
	dc.b	$0d,$0a,'Cliquez pour commencer...'
titre2

rem1	dc.b	'(Q+RETURN pour Quitter !)',$0d,$0a,$0d,$0a
rem2

mes1	dc.b	'>Entrez un nombre compris entre 1 et 999 : '
mes2

mes1tg	dc.b	'TROP GRAND !',$0d,$0a
mes2tg

mes1tp	dc.b	'TROP PETIT !',$0d,$0a
mes2tp

mes1tr	dc.b	$0d,$0a,'BRAVO ! En '
mes2tr	dc.b	' coups ! (Tapez RETURN...)'
mes3tr

;Variables personnelles:

coups	blk.b	2,0

;Système (variables+constantes):
;-------------------------------------------------------------------------

dosname	dc.b	'dos.library',0,0

dosbase	blk.l	1

handle	blk.l	1

buffer	blk.b	255,0

nomfen	dc.b	'CON:20/20/400/200/-*- JEU DU NOMBRE SECRET -*-',0

