begin process at 2012 02 13 06:02:53
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Jeux

 > SUDOKID, C'EST UN SUDOKU AVEC SEULEMENT 16 CASES.

SUDOKID, C'EST UN SUDOKU AVEC SEULEMENT 16 CASES.


 Information sur la source

Note :
7 / 10 - par 2 personnes
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Jeux Classé sous :sudoku, sudokid, creer, grille, cases Niveau :Débutant Date de création :22/06/2006 Date de mise à jour :22/06/2006 17:09:22 Vu / téléchargé :8 366 / 383

Auteur : ndubien

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
C'est le célèbre jeu du sudoku, mais avec un peu moins de case (16 cases à la place de 81).
- Sudoku1.0.cpp : il permet de creer des grilles pleines.
- Sudoku1.1.cpp : il permet de creer des grilles à remplir + leurs solutions.

Source

  • #include <iostream>
  • #include <vector>
  • using namespace std;
  • int getint()
  • {
  • for(;;)
  • {
  • int valeur;
  • cin >> valeur;
  • if(cin.fail())
  • {
  • cin.clear();
  • string inutile;
  • getline(cin, inutile);
  • cout <<"\nCe n'etait pas un nombre entier, reessayer : \n";
  • }
  • else
  • {
  • return valeur;
  • }
  • }
  • }
  • //---------------------------------------------------------------
  • vector <int> sudokid()
  • {
  • vector <int> grille;
  • /*erreurligne est là pour refaire la ligne entiere s'il y a un probleme*/
  • int erreurligne(0);
  • for(int i(0); i<16; i++)
  • {
  • /*Attribution d'un nombre "provisoire à la case n°'i'*/
  • int temp((rand()%4)+1);
  • /*Voir s'il est possible de mettre ce nombre à cette endroit*/
  • /*case (nommée lieu), ligne et colonne sont la pour repérer la case traité ('i') et savoir sur quelle case, ligne et colonne elle se trouve*/
  • int ligne(0);
  • int colonne(0);
  • int lieu(0);
  • /*erreur est là pour vérifier s'il y a des erreurs, s'il y en a alors 'i' restera le même*/
  • int erreur(0);
  • /*Recherche de la ligne et de la colonne où se trouve la case 'i'*/
  • for(int lacolonne(0);lacolonne!=4;lacolonne++)
  • {
  • for(int laligne(0);laligne!=4;laligne++)
  • {
  • if(i==(laligne*4)+lacolonne)
  • {
  • ligne=laligne;
  • colonne=lacolonne;
  • }
  • }
  • }
  • /*Ligne et colonne ont été trouvés*/
  • /*Désormais, voir si la valeur donnée à cette case peut aller dans cette ligne et dans cette colonne*/
  • for(int verif(0);verif!=4;verif++)
  • {
  • if((verif+(ligne*4))<i&&temp==grille[verif+(ligne*4)]) erreur=1;
  • if((verif*4+colonne)<i&&temp==grille[verif*4+colonne]) erreur=1;
  • }
  • /*Vérification de la ligne et de la colonne dont fait partie le point : ACHEVEE*/
  • /*Recherche de la case où est situé 'i'*/
  • for(int x(1);x!=3;x++)
  • {
  • for(int y(1);y!=3;y++)
  • {
  • if((colonne<(x*2)&&colonne>(x-1)*2-1)&&(ligne<y*2&&ligne>(x-1)*2-1)) lieu=((x-1)+(y-1)*4)*2;
  • }
  • }
  • /*L'ordinateur regarde si le nombre se trouve déjà dans la case*/
  • /*La case en haut et celle à gauche ayant déjà été vérifiées, il vérifie la case en haut à gauche ou celle en haut à droite*/
  • /*Selon la position de la case 'i'*/
  • if((i==lieu+5)&&(temp==grille[lieu])) erreur=1;
  • if((i==lieu+4)&&(temp==grille[lieu+1])) erreur=1;
  • /*L'ordinateur regarde si des erreurs ont été révélées*/
  • /*Si c'est le cas il baisse 'i' (i--)*/
  • if(erreur==1)
  • {
  • erreurligne++;
  • if(erreurligne<10) i--;
  • else
  • {
  • /*S'il y a 10 erreur sur la meme case*/
  • /*Le programme recommence toute la ligne*/
  • for(int efface(4);efface!=0;--efface)
  • {
  • if(i>efface+ligne*4) grille.erase(grille.begin()+efface+ligne*4);
  • }
  • i=ligne*4;
  • }
  • }
  • else
  • {
  • grille.push_back(temp);
  • erreurligne=0;
  • }
  • }
  • return grille;
  • }
  • //--------------------------------------------------------------
  • void affichagepleine(vector <int> grillesudokid)
  • {
  • for(int ligne(0);ligne!=4;++ligne)
  • {
  • for(int colonne(0);colonne!=4;++colonne)
  • {
  • if(ligne==2&&colonne==0) cout <<"\n----+----";
  • if(colonne==0) cout <<'\n';
  • if(colonne==2) cout <<"| ";
  • cout <<grillesudokid[ligne*4+colonne]<<" ";
  • }
  • }
  • }
  • //---------------------------------------------------------------
  • void fairegrille(vector <int> grille)
  • {
  • /*L'ordinateur cherche les cases qu'il va afficher*/
  • int x1(rand()%2);
  • int y1(rand()%2);
  • int x2=1-x1;
  • int y2=1-y1;
  • vector <int> casafficher;
  • casafficher.push_back(x1+y1*4);
  • casafficher.push_back(x1+y1*4+8);
  • casafficher.push_back(x2+y2*4+2);
  • casafficher.push_back(x2+y2*4+10);
  • if(casafficher[1]==8||casafficher[1]==12) casafficher.push_back(casafficher[1]+1);
  • else casafficher.push_back(casafficher[1]-1);
  • /*Puis, il vérifie si la grille est réalisable*/
  • int nbdifferents(0);
  • /*Lorsqu'il n'y a que deux nombres différents (a affichés), il y a plusieurs possibilités de résolution*/
  • /*c'est pour ceci que j'ai ajouté "nbdifferents" (il compte le nombre de chiffre differents affichés)*/
  • for(int e(0);e!=2;++e)
  • {
  • for(int f(2);f!=4;++f)
  • {
  • if((e!=f)&&(grille[casafficher[e]]==grille[casafficher[f]])) nbdifferents++;
  • }
  • }
  • /*Si le nombre de chiffres differents est egal a 2,*/
  • /*Ceci signifie que la grille a plusieurs possibilites de resolution*/
  • /*Donc, l'ordinateur ajoute d'autres cases*/
  • /*Afin, qu'il n'y est plus qu'une possibilite*/
  • if(nbdifferents==2)
  • {
  • casafficher.push_back(casafficher[0]+4);
  • casafficher.push_back(casafficher[1]+4);
  • }
  • for(int ligne(0);ligne!=4;++ligne)
  • {
  • for(int colonne(0);colonne!=4;++colonne)
  • {
  • int existe(0);
  • for(int choix(0);choix!=casafficher.size();++choix) if(ligne*4+colonne==casafficher[choix]) ++existe;
  • if(ligne==2&&colonne==0) cout <<"\n----+----";
  • if(colonne==0) cout <<'\n';
  • if(colonne==2) cout <<"| ";
  • if(existe!=0) cout <<grille[ligne*4+colonne]<<" ";
  • else cout <<"_ ";
  • }
  • }
  • }
  • //---------------------------------------------------------------
  • int main() {
  • srand((unsigned) time(NULL));
  • vector <int> grillesudokid;
  • for(int i(0);i!=2;) {
  • cout <<"\n\n\nSUDOKID 1.1";
  • cout <<"\n\n1 - Generer une nouvelle grille";
  • cout <<"\n2 - Quitter";
  • cout <<"\n\nVotre choix : ";
  • i=getint();
  • if(i==1) {
  • grillesudokid=sudokid();
  • fairegrille(grillesudokid);
  • cout <<"\n\n\nAppuyez sur Entree pour voir la grille resolue\n\n";
  • cin.get();
  • cin.get();
  • affichagepleine(grillesudokid);
  • }
  • }
  • cout <<"\n\n\nCree par Nicolas DUBIEN - 2006";
  • cin.get();
  • cin.get();
  • }
#include <iostream>
#include <vector>

using namespace std;

int getint()
	{
	for(;;)
		{
		int valeur;
		cin >> valeur;
		if(cin.fail())
			{
			cin.clear();
			string inutile;
			getline(cin, inutile);
			cout <<"\nCe n'etait pas un nombre entier, reessayer : \n";
			}
		else
			{
			return valeur;
			}
		}
	}
	
	
//---------------------------------------------------------------


vector <int> sudokid()
	{
	vector <int> grille;
	
/*erreurligne est là pour refaire la ligne entiere s'il y a un probleme*/

	int erreurligne(0);
	for(int i(0); i<16; i++)
		{

/*Attribution d'un nombre "provisoire à la case n°'i'*/

		int temp((rand()%4)+1);

/*Voir s'il est possible de mettre ce nombre à cette endroit*/
/*case (nommée lieu), ligne et colonne sont la pour repérer la case traité ('i') et savoir sur quelle case, ligne et colonne elle se trouve*/

		int ligne(0);
		int colonne(0);
		int lieu(0);

/*erreur est là pour vérifier s'il y a des erreurs, s'il y en a alors 'i' restera le même*/

		int erreur(0);

/*Recherche de la ligne et de la colonne où se trouve la case 'i'*/

		for(int lacolonne(0);lacolonne!=4;lacolonne++)
			{
			for(int laligne(0);laligne!=4;laligne++)
				{
				if(i==(laligne*4)+lacolonne)
					{
					ligne=laligne;
					colonne=lacolonne;
					}
				}
			}

/*Ligne et colonne ont été trouvés*/
/*Désormais, voir si la valeur donnée à cette case peut aller dans cette ligne et dans cette colonne*/

		for(int verif(0);verif!=4;verif++)
			{
			if((verif+(ligne*4))<i&&temp==grille[verif+(ligne*4)]) erreur=1;
			if((verif*4+colonne)<i&&temp==grille[verif*4+colonne]) erreur=1;
			}

/*Vérification de la ligne et de la colonne dont fait partie le point : ACHEVEE*/
/*Recherche de la case où est situé 'i'*/

		for(int x(1);x!=3;x++)
			{
			for(int y(1);y!=3;y++)
				{
				if((colonne<(x*2)&&colonne>(x-1)*2-1)&&(ligne<y*2&&ligne>(x-1)*2-1)) lieu=((x-1)+(y-1)*4)*2;
				}
			}

/*L'ordinateur regarde si le nombre se trouve déjà dans la case*/
/*La case en haut et celle à gauche ayant déjà été vérifiées, il vérifie la case en haut à gauche ou celle en haut à droite*/
/*Selon la position de la case 'i'*/

		if((i==lieu+5)&&(temp==grille[lieu])) erreur=1;
		if((i==lieu+4)&&(temp==grille[lieu+1])) erreur=1;

/*L'ordinateur regarde si des erreurs ont été révélées*/
/*Si c'est le cas il baisse 'i' (i--)*/

		if(erreur==1)
			{
			erreurligne++;
			if(erreurligne<10) i--;
			else
				{

/*S'il y a 10 erreur sur la meme case*/
/*Le programme recommence toute la ligne*/

				for(int efface(4);efface!=0;--efface)
					{
					if(i>efface+ligne*4) grille.erase(grille.begin()+efface+ligne*4);
					}
				i=ligne*4;
				}
			}
		else
			{
			grille.push_back(temp);
			erreurligne=0;
			}
		}
	return grille;
	}


//--------------------------------------------------------------


void affichagepleine(vector <int> grillesudokid)
	{
	for(int ligne(0);ligne!=4;++ligne)
		{
		for(int colonne(0);colonne!=4;++colonne)
			{
			if(ligne==2&&colonne==0) cout <<"\n----+----";
			if(colonne==0) cout <<'\n';
			if(colonne==2) cout <<"| ";
			cout <<grillesudokid[ligne*4+colonne]<<" ";
			}
		}
	}
	
	
//---------------------------------------------------------------


void fairegrille(vector <int> grille)
	{
	
/*L'ordinateur cherche les cases qu'il va afficher*/

	int x1(rand()%2);
	int y1(rand()%2);
	int x2=1-x1;
	int y2=1-y1;
	vector <int> casafficher;
	casafficher.push_back(x1+y1*4);
	casafficher.push_back(x1+y1*4+8);
	casafficher.push_back(x2+y2*4+2);
	casafficher.push_back(x2+y2*4+10);
	if(casafficher[1]==8||casafficher[1]==12) casafficher.push_back(casafficher[1]+1);
	else casafficher.push_back(casafficher[1]-1);
	
/*Puis, il vérifie si la grille est réalisable*/

	int nbdifferents(0);
	
/*Lorsqu'il n'y a que deux nombres différents (a affichés), il y a plusieurs possibilités de résolution*/
/*c'est pour ceci que j'ai ajouté "nbdifferents" (il compte le nombre de chiffre differents affichés)*/

	for(int e(0);e!=2;++e)
		{
		for(int f(2);f!=4;++f)
			{
			if((e!=f)&&(grille[casafficher[e]]==grille[casafficher[f]])) nbdifferents++;
			}
		}
		
/*Si le nombre de chiffres differents est egal a 2,*/
/*Ceci signifie que la grille a plusieurs possibilites de resolution*/
/*Donc, l'ordinateur ajoute d'autres cases*/
/*Afin, qu'il n'y est plus qu'une possibilite*/

		if(nbdifferents==2)
			{
			casafficher.push_back(casafficher[0]+4);
			casafficher.push_back(casafficher[1]+4);
			}
			
	for(int ligne(0);ligne!=4;++ligne)
		{
		for(int colonne(0);colonne!=4;++colonne)
			{
			int existe(0);
			for(int choix(0);choix!=casafficher.size();++choix) if(ligne*4+colonne==casafficher[choix]) ++existe;				
			if(ligne==2&&colonne==0) cout <<"\n----+----";
			if(colonne==0) cout <<'\n';
			if(colonne==2) cout <<"| ";
			if(existe!=0) cout <<grille[ligne*4+colonne]<<" ";
			else cout <<"_ ";
			}
		}
	}
	
	
//---------------------------------------------------------------	   


int main() {
srand((unsigned) time(NULL));
vector <int> grillesudokid;
for(int i(0);i!=2;) {
cout <<"\n\n\nSUDOKID 1.1";
cout <<"\n\n1 - Generer une nouvelle grille";
cout <<"\n2 - Quitter";
cout <<"\n\nVotre choix : ";
i=getint();
if(i==1) {
grillesudokid=sudokid();
fairegrille(grillesudokid);
cout <<"\n\n\nAppuyez sur Entree pour voir la grille resolue\n\n";
cin.get();
cin.get();
affichagepleine(grillesudokid);
}
}
cout <<"\n\n\nCree par Nicolas DUBIEN - 2006";
cin.get();
cin.get();
}

 Conclusion

Merci de me signaler tout probleme. ET SURTOUT, AMUSEZ-VOUS BIEN !

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

22 juin 2006 17:09:22 :
Creation de grilles prêtes à remplir (+ de leur solution)

 Sources du même auteur

Source avec Zip Source avec une capture MARIO EN SDL
Source avec Zip Source avec une capture TAMIS ET TAPIS DE SIERPINSKI
Source avec Zip Source avec une capture ARBRE2D: UN PROGRAMME GÉNÉRANT DES ARBRES
Source avec Zip Source avec une capture SIMULANCE, UN SIMULATEUR DE LANCÉ D'OBJETS
Source avec Zip BEEPER, UTILISER UN HOOK CLAVIER INTÉGRÉ À L'EXÉCUTABLE ET G...

 Sources de la même categorie

Source avec Zip Source avec une capture JEUX SERPENT par antho974
Source avec Zip Source avec une capture PENDU EN SDL par Damsou91
Source avec Zip STATE MACHINE MODIFICATION MATH BUCKHAM par billybones79
Source avec Zip AUTRE GRILLE DE SUDOKU par Eneur
Source avec Zip Source avec une capture SOKOBAN EN C POUR DÉBUTANT (VERSION AMÉLIORÉE BASÉE SUR LE T... par eustatika

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture RÉSOLUTION SUDOKU (9X9) PAR BACKTRACKING RÉCURSIF INTELLIGEN... par Gallien69
Source avec Zip Source avec une capture SUDOKU NIVEAU FACIL, MOYEN DIFFICILE (GOOGLE) PAS AU PLUS par cool2source
Source avec Zip Source avec une capture JEUX DU MORPION EN CONSOLE par thebroyeur
ALGO RÉSOLUTION DE SUDOKU. par mamsk00
Source avec Zip Source avec une capture SUDOKU par formule14

Commentaires et avis

Commentaire de SAKingdom le 24/06/2006 06:12:12

Ton programme n'est pas très stable. Des fois, quand je fais l'option 1, il ne créé rien du tout et reste bloqué. D'autre fois tout va bien mais si je veux créé une autre grille, il plante. J'ai pas pu identifier d'où provenais l'erreur.

Commentaire de ndubien le 24/06/2006 11:08:20

Salut,
Merci, pour l'information.
a++

Commentaire de krust le 26/06/2006 15:31:18

Dans la série Sudoku je demande le sudoku en hexadécimal: grille de (4x4)(4x4) de 0 à F c'est parti :)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

un chemin sur une grille [ par anzelus ] salut à tous,je bloque sur un probleme d'affichage d'une route sur une grille, j'ai reussi à dessiner la grille avec des cases pleines ou vides, mais Sudoku [ par MasterShadows ] Bonjour &#224; tous et &#224; toutes,alors voil&#224;, je dois coder en C pour Linux un petit programme permettant de g&#233;n&#233;rer une grille de Projet d'été sur SUDOKU!! Aidez-nous s'il vous plait... [ par Naruttibayo ] Au préalable, nous tenons à remercier tous ceux qui contribuerons à notre projet...On nous demande d'écrire un programme C qui permet de Générer des G Probleme avec un sudoku [ par thomasvd ] Bonjour!je dois réaliser un jeu sudoku et je rencontre quelques problemes dont un qui m'embette particulierement et j'aimerais bien que quelqu'un m'or sudoku HELP [ par Hellboy67 ] Voila j'essaie de faire un prog qui remplie les cases d'un sudokuj'ai ma fonction candidats qui me renvoie une file contenant tout les candidats possi aide pour un code [ par Hellboy67 ] pour un exo de l'iut en prog je dois faire un sudoku ma fonction solution marche mais lorsque pour un sudoku donn&#233;e, il n'y a pas de solution j'a Probleme avec backtracking [ par sda2 ] Bonsoir à tous, Je vous expose vite mon probleme, je souhaite realiser un sudoku (9x9), cependant il ne resoud que les sudokus facile, moyen et lui re Probleme backtracking [ par sda2 ] Bonsoir à tous, Je vous expose vite mon probleme, je souhaite realiser un sudoku (9x9), cependant il ne resoud que les sudokus facile, moyen et lui r Interface d'un sudoku sous Gtkmm [ par Jedi_Yoda ] Je cherche a faire afficher dans les 81 labels le "int" resolu qui lui correpond. Mais le set_label(param) n'accepte que les parametres de types "ustr


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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 : 2,777 sec (3)

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