Solitaire en masm32 pour windows

Description

Et Voilà ! Pile poil pour Noel !
Un programme de jeux sous windows tout en MASM32 !
Le solitaire, vous connaissez ? Une planchette de bois avec 33 trous et 32 cailloux...
Le programme ne verifie pas si le joueur gagne ou perd, de toute façon le joueur, lui, le sait bien ;)

Source / Exemple :


;===================================
;SOLITAIRE.EXE	(c) 2005 RPH-CONCEPT
;===================================
;
;info@rph-concept.com
;
;Les fichiers sont disponible aux addresses suivante:
;
;	http://www.rph-concept.com/download/solitaire_exe.zip	;*** Fichiers Executables
;	http://www.rph-concept.com/download/solitaire_src.zip	;*** Source du fichier EXE
;	http://www.rph-concept.com/download/solitaire_dll.zip	;*** Source du fichier DLL
;
;----------------------------------------------------------------------------------------------------------------------------
;
;LE BUT DU JEUX
;--------------
;
;Je ne crois pas utile de rappeler les règles du Solitaire,
;la seule règle à retenir étant qu'un pion peut sauter par-dessus un pion voisin
;horizontalement ou verticalement (pas en diagonal) Le pion sauté étant alors à enlever.
; 
;Le but ou le challenge principal du Solitaire est d'atteindre l'inverse de la position de départ
;
;On débute avec un plateau remplit sauf le pion du milieu
;et le but est alors d'atteindre le plateau opposé ou inverse:
;c'est à dire un plateau vide sauf le pion du milieu qui doit rester seul. 
;
;
;----------------------------------------------------------------------------------------------------------------------------
;
;SOLITAIRE.DLL	C'est le sac a bitmap de l'application, elle contient les 3 Bitmaps (Format BMP 24 Bits par pixel) utilisés:
;		Les bitmaps sont stockés sans header, dernière ligne en premier, comme dans le fichier BMP.
;		Le code de la DLL ressemble a ça:
;
;		.data
;BM1		DB   B,G,R,B,G,R,B,G,R,...	 1024x768 pixels (1 x 1024x768)		Fond d'écran
;		DB   B,G,R,B,G,R,B,G,R,...	
;		DB   B,G,R,B,G,R,B,G,R,...
;		...
;BM2		DB   B,G,R,B,G,R,B,G,R,...	 208x552 pixels (2 x 3 x 208x92)	Sprites de Menu	
;		DB   B,G,R,B,G,R,B,G,R,...
;		DB   B,G,R,B,G,R,B,G,R,...
;		...
;BM3		DB   B,G,R,B,G,R,B,G,R,...	 64x6144 pixels (32 x 3 x 64x64)	Sprites de jeux
;		DB   B,G,R,B,G,R,B,G,R,...
;		DB   B,G,R,B,G,R,B,G,R,...
;
;		.code
;GetPtrBckGrnd	PROC
;		lea	eax,BM1			;--- Retourne un pointeur sur le fond d'écran
;		ret
;GetPtrBckGrnd	ENDP
;
;GetPtrSwitches PROC
;		lea	eax,BM2			;--- Retourne un pointeur sur les Sprites de Menu
;		ret
;GetPtrSwitches ENDP
;
;GetPtrBalls	PROC
;		lea	eax,BM3			;--- Retourne un pointeur sur les Sprites de Jeux
;		ret
;GetPtrBalls	ENDP
;
;
;
;----------------------------------------------------------------------------------------------------------------------------
;
;SOLITAIRE.EXE	C'est le programme généré par la compilation de solitaire.asm.
;		
;		L'application vas créer une fenêtre et 2 threads, ce qui nous donne 3 routines
;		fonctionnent en parallèle:
;
;		- WndProc
;		- MoniThread
;		- FireThread
;
;		
;		WndProc 	intercèpte les messages WM_MOUSEMOVE, WM_LBUTTONDOWN, WM_LBUTTONUP
;				pour gérer le menu et les Pions. L'évennement WM_LBUTTONDOWN peut 
;				provoquer l'appel de Pion_Click qui gère le jeux.
;
;		MoniThread 	sert de timer, tout les 40/1000èmes de secondes le flag
;				fcount est mis a 1.
;
;		FireThread 	est la routine principale chargée de redessiner l'écran.
;				On alloue tout d'abord un Buffer pour le bitmap de sortie 768x3x768
;				On stocke l'adresse dans bitmap1
;				On initialise ensuite les pointeur de sprite:
;				hBackGround, hSwitchReset, hSwitchQuitt
;				On appelle ResetGame pour finir l'initialisation.
;
;				Ensuite on raffraichit l'écran en boucle 25 fois par seconde:
;				ShowPict est appeler lors-ce-que fcount passe a 1.
;				ShowPict remet a zero fcount.
;
;		Ok, a quoi bon raffraichir l'écran 25 fois par seconde pour un solitaire ?
;		Surement a rien, mais pour d'autre type de jeux... ca peut faire une base ;)
;
;		Les donnée du jeux sont stockées dans SpriteData sous la forme d'un tableau
;		7 x 7 de structure SPRITEINFO:
;
;		X1, Y1, X2, Y2	Position du sprite a l'écran, sert aussi lors de la détection souris
;		Enable		0 si la case ne fait pas partie du jeux, exclut les 16 cases des coins.
;		Selected	0=Normal / 1=Mouse Over / 2=Selectionné
;		hSprite		OFFSET Sprite / 0=Case Vide 
;		OfsDest		Adresse d'offset dans le buffer video
;		col,Row		Coordonnées dans le jeux de -3 à +3
;				La case (0, 0) etant au centre.
;
;		Autre procédures importantes:
;
;		ResetGame	Copie les variables du jeux de SpritesData vers GameData
;				et initialize les pointeurs des pions sur les sprites
;		ShowPict	Appelée 25 fois par seconde, c'est elle qui redessine le
;				BM en mémoire et l'envoie a windows avec SetDIBitsToDevice
;		Pion_Click	Déplace les pions si les Opérations demandées sont valide
;
;----------------------------------------------------------------------------------------------------------------------------

Conclusion :


Pour les mises a jours, faites un tour sur www.rph-concept.com

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.