begin process at 2012 05 27 14:14:36
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > CAVALIERS SUR UN ÉCHIQUIER

CAVALIERS SUR UN ÉCHIQUIER


 Description

Faire passer un cavalier sur toutes les cases d'un échiquier.
Ce programme fonctionne à tous les coups

Source

  • //http://pabbati.free.fr/
  • #include <windows.h>
  • #include <time.h>
  • #include <stdlib.h>
  • #pragma warn -sig
  • //#define CarresMagique
  • #define MAX 8
  • HINSTANCE hInst;
  • HWND hwnd;
  • char szAppName[]="Chevaux";
  • PAINTSTRUCT ps;
  • MSG msg ;
  • WNDCLASS wndclass ;
  • HACCEL hAccel;
  • unsigned char c[MAX][MAX];
  • unsigned char a,b,x,y,z,xx,yy,i,j;
  • char s[50];
  • HDC hdc;
  • SIZE size={16,16};
  • int taille;
  • unsigned char ok(unsigned char i,unsigned char j)
  • {
  • return ((i<MAX)&&(j<MAX)&&(c[i][j]==0));
  • }
  • #define X0 x+2,y-1
  • #define X1 x+2,y+1
  • #define X2 x-2,y-1
  • #define X3 x-2,y+1
  • #define X4 x+1,y-2
  • #define X5 x+1,y+2
  • #define X6 x-1,y-2
  • #define X7 x-1,y+2
  • void essai(unsigned char c,unsigned char x,unsigned char y)
  • {
  • if(b&c)
  • {
  • b-=c;
  • if(ok(x,y))
  • {
  • unsigned char k=ok(X0)+ok(X1)+ok(X2)+ok(X3)+ok(X4)+ok(X5)+ok(X6)+ok(X7);
  • if(k<a)
  • {
  • xx=x;
  • yy=y;
  • a=k;
  • }
  • }
  • }
  • }
  • BOOL choix()
  • {
  • a=9;
  • b=0xFF;
  • do
  • {
  • switch(random(8))
  • {
  • case 0:essai(0x01,X0);break;
  • case 1:essai(0x02,X1);break;
  • case 2:essai(0x04,X2);break;
  • case 3:essai(0x08,X3);break;
  • case 4:essai(0x10,X4);break;
  • case 5:essai(0x20,X5);break;
  • case 6:essai(0x40,X6);break;
  • case 7:essai(0x80,X7);break;
  • }
  • }
  • while(b);
  • return (a<9);
  • }
  • void CaretPos()
  • {
  • unsigned char i,j;
  • for(i=0;i<MAX;i++)
  • for(j=0;j<MAX;j++)
  • if(c[i][j]==z)
  • {
  • SetCaretPos(10+taille*i,5+taille*j);
  • return;
  • }
  • }
  • void init(char k)
  • {
  • static unsigned char i=0,j=0;
  • memset(c,0,sizeof(c));
  • if(k)
  • {
  • if(k<2)if(++i>MAX-1){i=0;if(++j>MAX-1)j=0;}
  • xx=i;
  • yy=j;
  • }
  • else
  • {
  • xx=random(MAX);
  • yy=random(MAX);
  • }
  • z=0;
  • }
  • #ifdef CarresMagique
  • BOOL CarreMagique()
  • {
  • unsigned char i,j;
  • UINT r1,r2,r3,n=0;
  • for(i=0;i<MAX;i++)n+=c[i][i];
  • r3=0;
  • for(i=0;i<MAX;i++)
  • {
  • r3+=c[i][MAX-i-1];
  • r1=r2=0;
  • for(j=0;j<MAX;j++){r1+=c[i][j];r2+=c[j][i];}
  • if((r1!=n)||(r2!=n))return FALSE;
  • }
  • if(r3!=n)return FALSE;
  • return TRUE;
  • }
  • #endif
  • void cherche(char k=0)
  • {
  • unsigned compte=0;
  • encore:
  • init(k);
  • do
  • {
  • x=xx;y=yy;
  • c[x][y]=++z;
  • }
  • while(choix());
  • if(z!=MAX*MAX)
  • {
  • if(compte++<50)goto encore;
  • z=1;
  • CaretPos();
  • InvalidateRect(hwnd,NULL,TRUE);
  • MessageBox(hwnd,"Résultat non trouvé",szAppName,MB_ICONEXCLAMATION);
  • }
  • z=1;
  • CaretPos();
  • #ifdef CarresMagique
  • if(CarreMagique())
  • {
  • InvalidateRect(hwnd,NULL,TRUE);
  • MessageBox(hwnd,"C'est un carré magique",szAppName,MB_ICONEXCLAMATION);
  • }
  • #endif
  • }
  • long FAR PASCAL WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
  • {
  • switch (message)
  • {
  • case WM_SETCURSOR:SetCursor(LoadCursor(NULL,IDC_ARROW));return TRUE;
  • case WM_PAINT:
  • hdc=BeginPaint(hwnd,&ps);
  • for(i=0;i<MAX;i++)
  • {
  • for(j=0;j<MAX;j++)
  • {
  • // if(c[i][j]==z)CaretPos(i,j);
  • wsprintf(s,"%02u",(int)c[i][j]);
  • TextOut(ps.hdc,10+taille*i,5+taille*j,s,lstrlen(s));
  • }
  • }
  • EndPaint(hwnd,&ps);
  • break;
  • case WM_LBUTTONDOWN:PostMessage(hwnd,WM_KEYDOWN,VK_RETURN,0);break;
  • case WM_MBUTTONDOWN:PostMessage(hwnd,WM_KEYDOWN,VK_TAB,0);break;
  • case WM_RBUTTONDOWN:PostMessage(hwnd,WM_KEYDOWN,VK_SPACE,0);break;
  • case WM_KEYDOWN:
  • switch(LOWORD(wParam))
  • {
  • case VK_UP:
  • case VK_RIGHT:if(++z>MAX*MAX)z=1;CaretPos();break;
  • case VK_DOWN:
  • case VK_LEFT:if(--z==0)z=MAX*MAX;CaretPos();break;
  • case VK_ESCAPE:PostMessage(hwnd,WM_CLOSE,0,0);break;
  • case VK_F1:MessageBox(hwnd,"Touches Droite, Gauche, Haut, Bas...\n\nTabulation, Entrée, Espace...",szAppName,MB_ICONINFORMATION);break;
  • case VK_F2:
  • case VK_RETURN:cherche();InvalidateRect(hwnd,NULL,TRUE);break;
  • case VK_F3:
  • case VK_TAB:cherche(1);InvalidateRect(hwnd,NULL,TRUE);break;
  • case VK_F4:
  • case VK_SPACE:cherche(2);InvalidateRect(hwnd,NULL,TRUE);break;
  • }
  • break;
  • case WM_KILLFOCUS:DestroyCaret();break;
  • case WM_SETFOCUS:CreateCaret(hwnd,NULL,size.cx,size.cy);ShowCaret(hwnd);break;
  • case WM_DESTROY:PostQuitMessage(0);break;
  • case WM_CREATE:
  • RemoveMenu(GetSystemMenu(hwnd,FALSE),2,MF_BYPOSITION);
  • RemoveMenu(GetSystemMenu(hwnd,FALSE),3,MF_BYPOSITION);
  • hdc=GetDC(hwnd);
  • GetTextExtentPoint32(hdc,"00",2,&size);
  • ReleaseDC(hwnd,hdc);
  • size.cy>size.cx?taille=size.cy:taille=size.cx;
  • taille+=6;
  • SetWindowPos(hwnd,HWND_TOP,0,0,12+taille*MAX+2*GetSystemMetrics(SM_CXFRAME),5+taille*MAX+GetSystemMetrics(SM_CYCAPTION)+2*GetSystemMetrics(SM_CYFRAME),SWP_NOMOVE|SWP_NOREDRAW|SWP_NOZORDER);
  • PostMessage(hwnd,WM_KEYDOWN,VK_RETURN,0);
  • break;
  • default:return DefWindowProc(hwnd,message,wParam,lParam) ;
  • }
  • return 0;
  • }
  • #pragma argsused
  • int PASCAL WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpszCmd,int nCmdShow)
  • {
  • randomize();
  • hInst=hInstance;
  • wndclass.style = CS_HREDRAW | CS_VREDRAW ;
  • wndclass.lpfnWndProc = (WNDPROC)WndProc ;
  • wndclass.cbClsExtra = 0 ;
  • wndclass.cbWndExtra = 0 ;
  • wndclass.hInstance = hInst;
  • wndclass.hIcon = LoadIcon(hInst,MAKEINTRESOURCE(1));
  • wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
  • wndclass.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
  • wndclass.lpszMenuName = MAKEINTRESOURCE(1);
  • wndclass.lpszClassName = szAppName;
  • RegisterClass (&wndclass) ;
  • hwnd = CreateWindow (
  • szAppName,
  • szAppName,
  • WS_MINIMIZEBOX|WS_SYSMENU|WS_CAPTION|WS_THICKFRAME,
  • CW_USEDEFAULT,
  • CW_USEDEFAULT,
  • CW_USEDEFAULT,
  • CW_USEDEFAULT,
  • NULL,
  • NULL,
  • hInst,
  • NULL);
  • ShowWindow (hwnd, nCmdShow) ;
  • UpdateWindow (hwnd) ;
  • // hAccel = LoadAccelerators( hInstance,MAKEINTRESOURCE(1));
  • while (GetMessage (&msg, NULL, 0, 0))
  • {
  • // if ( !TranslateAccelerator( hwnd, hAccel, &msg ))
  • {
  • TranslateMessage (&msg) ;
  • DispatchMessage (&msg) ;
  • }
  • }
  • // UnregisterClass(szAppName,hInstance);
  • return msg.wParam ;
  • }
//http://pabbati.free.fr/
#include <windows.h>
#include <time.h>
#include <stdlib.h>

#pragma warn -sig
//#define CarresMagique
#define MAX 8
HINSTANCE hInst;
HWND hwnd;
char szAppName[]="Chevaux";
PAINTSTRUCT ps;
MSG         msg ;
WNDCLASS    wndclass ;
HACCEL      hAccel;
unsigned char c[MAX][MAX];
unsigned char a,b,x,y,z,xx,yy,i,j;
char s[50];
HDC hdc;
SIZE size={16,16};
int taille;

unsigned char ok(unsigned char i,unsigned char j)
{
 return ((i<MAX)&&(j<MAX)&&(c[i][j]==0));
}

#define X0 x+2,y-1
#define X1 x+2,y+1
#define X2 x-2,y-1
#define X3 x-2,y+1
#define X4 x+1,y-2
#define X5 x+1,y+2
#define X6 x-1,y-2
#define X7 x-1,y+2
void essai(unsigned char c,unsigned char x,unsigned char y)
{
 if(b&c)
 {
  b-=c;
  if(ok(x,y))
  {
	unsigned char k=ok(X0)+ok(X1)+ok(X2)+ok(X3)+ok(X4)+ok(X5)+ok(X6)+ok(X7);
	if(k<a)
	{
	 xx=x;
	 yy=y;
	 a=k;
	}
  }
 }
}

BOOL choix()
{
 a=9;
 b=0xFF;
 do
 {
  switch(random(8))
  {           
	case 0:essai(0x01,X0);break;
	case 1:essai(0x02,X1);break;
	case 2:essai(0x04,X2);break;
	case 3:essai(0x08,X3);break;
	case 4:essai(0x10,X4);break;
	case 5:essai(0x20,X5);break;
	case 6:essai(0x40,X6);break;
	case 7:essai(0x80,X7);break;
  }
 }
 while(b);
 return (a<9);
}

void CaretPos()
{
 unsigned char i,j;
 for(i=0;i<MAX;i++)
 for(j=0;j<MAX;j++)
 if(c[i][j]==z)
 {
  SetCaretPos(10+taille*i,5+taille*j);
  return;
 }
}

void init(char k)
{
 static unsigned char i=0,j=0;
 memset(c,0,sizeof(c));
 if(k)
 {
  if(k<2)if(++i>MAX-1){i=0;if(++j>MAX-1)j=0;}
  xx=i;
  yy=j;
 }
 else
 {
  xx=random(MAX);
  yy=random(MAX);
 }
 z=0;
}

#ifdef CarresMagique
BOOL CarreMagique()
{
	unsigned char i,j;
	UINT r1,r2,r3,n=0;
	for(i=0;i<MAX;i++)n+=c[i][i];
	r3=0;
	for(i=0;i<MAX;i++)
	{
	 r3+=c[i][MAX-i-1];
	 r1=r2=0;
	 for(j=0;j<MAX;j++){r1+=c[i][j];r2+=c[j][i];}
	 if((r1!=n)||(r2!=n))return FALSE;
	}
	if(r3!=n)return FALSE;
	return TRUE;
}
#endif

void cherche(char k=0)
{
 unsigned compte=0;
 encore:
 init(k);
 do
 {
  x=xx;y=yy;
  c[x][y]=++z;
 }
 while(choix());
 if(z!=MAX*MAX)
 {
  if(compte++<50)goto encore;
  z=1;
  CaretPos();
  InvalidateRect(hwnd,NULL,TRUE);
  MessageBox(hwnd,"Résultat non trouvé",szAppName,MB_ICONEXCLAMATION);
 }
 z=1;
 CaretPos();
#ifdef CarresMagique
 if(CarreMagique())
 {
  InvalidateRect(hwnd,NULL,TRUE);
  MessageBox(hwnd,"C'est un carré magique",szAppName,MB_ICONEXCLAMATION);
 }
#endif
}

long FAR PASCAL WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
 switch (message)
 {
  case WM_SETCURSOR:SetCursor(LoadCursor(NULL,IDC_ARROW));return TRUE;
  case WM_PAINT:
	hdc=BeginPaint(hwnd,&ps);
	for(i=0;i<MAX;i++)
	{
	 for(j=0;j<MAX;j++)
	 {
//	  if(c[i][j]==z)CaretPos(i,j);
	  wsprintf(s,"%02u",(int)c[i][j]);
	  TextOut(ps.hdc,10+taille*i,5+taille*j,s,lstrlen(s));
	 }
	}
	EndPaint(hwnd,&ps);
  break;
  case WM_LBUTTONDOWN:PostMessage(hwnd,WM_KEYDOWN,VK_RETURN,0);break;
  case WM_MBUTTONDOWN:PostMessage(hwnd,WM_KEYDOWN,VK_TAB,0);break;
  case WM_RBUTTONDOWN:PostMessage(hwnd,WM_KEYDOWN,VK_SPACE,0);break;
  case WM_KEYDOWN:
	switch(LOWORD(wParam))
	{
	 case VK_UP:
	 case VK_RIGHT:if(++z>MAX*MAX)z=1;CaretPos();break;
	 case VK_DOWN:
	 case VK_LEFT:if(--z==0)z=MAX*MAX;CaretPos();break;
	 case VK_ESCAPE:PostMessage(hwnd,WM_CLOSE,0,0);break;
	 case VK_F1:MessageBox(hwnd,"Touches Droite, Gauche, Haut, Bas...\n\nTabulation, Entrée, Espace...",szAppName,MB_ICONINFORMATION);break;
	 case VK_F2:
	 case VK_RETURN:cherche();InvalidateRect(hwnd,NULL,TRUE);break;
	 case VK_F3:
	 case VK_TAB:cherche(1);InvalidateRect(hwnd,NULL,TRUE);break;
	 case VK_F4:
	 case VK_SPACE:cherche(2);InvalidateRect(hwnd,NULL,TRUE);break;
	}
  break;
  case WM_KILLFOCUS:DestroyCaret();break;
  case WM_SETFOCUS:CreateCaret(hwnd,NULL,size.cx,size.cy);ShowCaret(hwnd);break;
  case WM_DESTROY:PostQuitMessage(0);break;
  case WM_CREATE:
	RemoveMenu(GetSystemMenu(hwnd,FALSE),2,MF_BYPOSITION);
	RemoveMenu(GetSystemMenu(hwnd,FALSE),3,MF_BYPOSITION);
	hdc=GetDC(hwnd);
	GetTextExtentPoint32(hdc,"00",2,&size);
	ReleaseDC(hwnd,hdc);
	size.cy>size.cx?taille=size.cy:taille=size.cx;
	taille+=6;
	SetWindowPos(hwnd,HWND_TOP,0,0,12+taille*MAX+2*GetSystemMetrics(SM_CXFRAME),5+taille*MAX+GetSystemMetrics(SM_CYCAPTION)+2*GetSystemMetrics(SM_CYFRAME),SWP_NOMOVE|SWP_NOREDRAW|SWP_NOZORDER);
	PostMessage(hwnd,WM_KEYDOWN,VK_RETURN,0);
  break;
  default:return DefWindowProc(hwnd,message,wParam,lParam) ;
 }
 return 0;
}

#pragma argsused
int PASCAL WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpszCmd,int nCmdShow)
{
 randomize();
 hInst=hInstance;
  wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
  wndclass.lpfnWndProc   = (WNDPROC)WndProc ;
  wndclass.cbClsExtra    = 0 ;
  wndclass.cbWndExtra    = 0 ;
  wndclass.hInstance     = hInst;
  wndclass.hIcon         = LoadIcon(hInst,MAKEINTRESOURCE(1));
  wndclass.hCursor       = LoadCursor(NULL,IDC_ARROW);
  wndclass.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
  wndclass.lpszMenuName  = MAKEINTRESOURCE(1);
  wndclass.lpszClassName = szAppName;
  RegisterClass (&wndclass) ;

  hwnd = CreateWindow (
	szAppName,
	szAppName,
	WS_MINIMIZEBOX|WS_SYSMENU|WS_CAPTION|WS_THICKFRAME,
	CW_USEDEFAULT,
	CW_USEDEFAULT,
	CW_USEDEFAULT,
	CW_USEDEFAULT,
	NULL,
	NULL,
	hInst,
	NULL);


 ShowWindow (hwnd, nCmdShow) ;
 UpdateWindow (hwnd) ;

// hAccel = LoadAccelerators( hInstance,MAKEINTRESOURCE(1));

 while (GetMessage (&msg, NULL, 0, 0))
 {
//  if ( !TranslateAccelerator( hwnd, hAccel, &msg ))
  {
	TranslateMessage (&msg) ;
	DispatchMessage (&msg) ;
  }
 }
// UnregisterClass(szAppName,hInstance);
 return msg.wParam ;
}



 Sources du même auteur

Source avec Zip SUDOKU AVEC BACKTRACKING ET DANCING LINK
Source avec Zip JEU DE TANGRAM
Source avec Zip CALCUL DE FACTORIELLES

 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture PROBLEME DU CAVALIER [BACKTRACKING] par JCDjcd
LE PROBLÈME DES 8 DAMES (14 CAVALIERS, ...) par coucou747

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

jeu des petits chevaux [ par julD ] je cherche le programme du jeu des petits chevaux en langage C. switch avec une structure [ par sakthivel ] Bonjour,Peut on faire un switch qui a comme argument des structures ?je m'explique j'ai fait un switch qui ressemble à cela :switch (cheval_inter)    probleme 8 dames fonction sans prise [ par mehdislim59 ] bonjour je suis nouvo et je debute en programmation et je voudrais savoir comme resoudre mon petit probleme sur les 8 reines je suis mon enoncé qui me jeux des chevaux [ par midomachakill ] s'il vous plait est ce que vous pouvez m'aider sur mon mini projet qui consiste de cree le jeux des chevaux dans language c


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,671 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales