Probleme avec un sudoku

thomasvd Messages postés 9 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 9 mai 2007 - 22 févr. 2007 à 19:19
thomasvd Messages postés 9 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 9 mai 2007 - 22 févr. 2007 à 22:26
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'oriente si possible.

J'ai choisi de développer ce jeu avec la rubrique sdl. J'ai donc créer une fenêtre avec comme fond une image de grille que j'ai réaliser. (j'ai deja ma génération aléatoire de grille.

Le probleme que j'ai et que je ne sais pas comment afficher un chiffre au milieu d'une case de la grille lorsque l'on clique sur cette grille. Je sais comment afficher un chiffre a l'endroit ou l'on clique, mais pas à un endroit précis de la case.

Je pense que mon probleme est que ma grille est une image. Est-ce possible de faire ce que je veux avec une image comme j'ai fait ou bien faut-il que je fasse correspondre chaque case de ma grille a une texture (soit 81 texture). Si c'est la manière qu'il faut adoptez je veux bien un conseil pour me lancer.

Si aucune des deux methodes que j'ai énoncé ne peut marcher alors quels autres méthodes puis-je utiliser?

J'ai lu dans le règlement que s'il existait des code mieux il ne fallait pas poser la question. Hors je sais qu'il y a des codes sur le site qui le font mais mon but est de bien comprendre le fonctionnement de sdl et du c++ donc désolé

Merci d'avance et bonne journée

2 réponses

panach57 Messages postés 6 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 22 février 2007
22 févr. 2007 à 21:08
Bonsoir,

Le sujet me dit un je ne sais quoi...

Quand tu veux entrer un chiffre quand tu cliques, il faut déjà savoir où tu cliques! Visiblement cette partie est OK. Comme tu connais la taille d'une case, tu peux savoir dans quelle case on clique. La SDL utilise les coordonnées en pixel.
Si tu as une case qui fait 50x50px par exemple, on clique à (x 75,y 10) ça veut dire qu'on veut la deuxième case sur la 1ere ligne. L'origine du répère est toujours en haut à gauche de la fenètre. En gros voila le code de test:

if ((x>0)&&(x<50)&&(y>0)&&(y<50)
{
    //case 1,1 active
}

Bon faire 81 tests de cette façon c'est un peu débile
on peut utiliser les boucles for pour calculer les conditions pour chaques cases de ta grille.
        for(i=0;i<9;i++)
        {
            for(j=0;j<9;j++)
            {
             // on calcule les conditions en fonction de i et j
             // on teste comme avant en utilisant les conditions
             }
       }

Enfin on connait la case!!! Maintenant pour afficher un chiffre au milieu c'est facile. Je suppose qu'on utilise la SDL_ttf.h pour convertir un caractère en SDL_Surface. Dans ce cas, comme on utilise la fonction SDL_BlitSurface on peut spécifier où coller l'image sur la fenètre. On a un code dans le genre:

SDL_Rect position; //permet de créer une variable qui contient les positions

position.x = ... // à calculer en fonction de la case
position.y=...//idem

//on crée la surface avec TTF_RenderTexte_Blended ou une autre

SDL_BlitSurface(surface,NULL,mafenètre,&position);

Voila le tour est joué!

Apluch
Zuzu
0
thomasvd Messages postés 9 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 9 mai 2007
22 févr. 2007 à 22:26
Bon merci je pense que tu as répondu à ma question. Reste à adapter ta proposition a mon problème (je ne connais pas encore la taille des case ni les coord de la premiere mais je vais faire un test avec la souris pour lire les coordonnée et c'est réglé non?)
En tous cas tu m'as donné l'idée directrice que je cherchais.

Merci bien.
Bonne soirée
0
Rejoignez-nous