JeuxOnLineForumsPlusConnectés : 512 (sites) | 969 (forums)Créer un compte
Forums divers
La Taverne
Les forums JOL > Forums divers > La Taverne > [Delphi 4] 2 problèmes dans la création d'un Othello RSS
   
Répondre
Partager Outils Rechercher
Avatar de Hôte des Songes
Hôte des Songes
Alpha & Oméga
 
Avatar de Hôte des Songes
 

[Delphi 4] 2 problèmes dans la création d'un Othello

Amis de l'informatique bonsoir

Bon voilà j'ai besoin d'un petit coup de main pour mon projet de cette année sous delphi 4, à savoir Othello

Le premier problème: j'ai créé ma grille de jeu en créant 64 shapes... sur chacune de ces shapes j'ai disposé une shape ronde représentant un pion (qui sera soit visible soit invisible selon l'avancement du jeu)Comment transformer ces shapes en coordonnées verticales et horizontales, de (1,1), (1,2)... à (8,8)?

Deuximème problème: ensuite, au passage de la souris au dessus d'une case, le curseur est sensé changer d'apparence selon que la case est jouable ou non... doit-on étudier pour chaque case (x,x) du plateau les coordonnées des pions se trouvant sur les lignes diagonale, horizontale et verticale dont fait partie la case (x,x)? ou existe t-il une procédure marchant pour toutes les cases?

Merci d'avance
Lien direct vers le message - Vieux
LoneCat
Invité
 
Re: [Delphi 4] 2 problèmes dans la création d'un Othello
Citation:
Provient du message de Hôte des Songes

Amis de l'informatique bonsoir

Bon voilà j'ai besoin d'un petit coup de main pour mon projet de cette année sous delphi 4, à savoir Othello

Le premier problème: j'ai créé ma grille de jeu en créant 64 shapes... sur chacune de ces shapes j'ai disposé une shape ronde représentant un pion (qui sera soit visible soit invisible selon l'avancement du jeu)Comment transformer ces shapes en coordonnées verticales et horizontales, de (1,1), (1,2)... à (8,8)?

Deuximème problème: ensuite, au passage de la souris au dessus d'une case, le curseur est sensé changer d'apparence selon que la case est jouable ou non... doit-on étudier pour chaque case (x,x) du plateau les coordonnées des pions se trouvant sur les lignes diagonale, horizontale et verticale dont fait partie la case (x,x)? ou existe t-il une procédure marchant pour toutes les cases?

Merci d'avance
Pas compris la question 1, surtout à cause du mot Shape et à ma totale nullité en programmation

Disons que bêtement, je dirais que la case X,Y s'étend de BaseX + LCase x (X-1) à BaseX + LCase x X dans le sens des abscisse et la même chose avec Y dans le sens des ordonnées mais je ne pense pas que ça réponde à ta question

Pour la question 2, le plus simple est à la fin de chaque coup de faire une table des cases jouable - non jouable (matrice de 64 bit). Ensuite tu n'as plus qu'à vérifier pour chaque case si elle est jouable ou pas.

Case jouable si
- pas déjà jouée et
- est adjacente à une rangée de pions de la couleur adverse se terminant par un pion de la couleur à jouer.

Bonne chance

Ciao,
LoneCat
Lien direct vers le message - Vieux
Avatar de - Caïn Abalham -
- Caïn Abalham -
Alpha & Oméga
 
Avatar de - Caïn Abalham -
 
Créé un tableau de shapes, enfin ca marche en Java
Lien direct vers le message - Vieux
Avatar de Hôte des Songes
Hôte des Songes
Alpha & Oméga
 
Avatar de Hôte des Songes
 
Re: Re: [Delphi 4] 2 problèmes dans la création d'un Othello
Citation:
Provient du message de LoneCat
Pas compris la question 1, surtout à cause du mot Shape et à ma totale nullité en programmation

Disons que bêtement, je dirais que la case X,Y s'étend de BaseX + LCase x (X-1) à BaseX + LCase x X dans le sens des abscisse et la même chose avec Y dans le sens des ordonnées mais je ne pense pas que ça réponde à ta question

1 shape= 1 simple case .. j'ai donc collé 64 shapes les unes aux autres pour faire ma grille de 64 cases...

Heu sinon qu'appelles-tu par BaseX + LCase x (X-1) à BaseX + LCase x X ? A po compris là

le fait de nommer chaque case (donc chaque shape) (X,Y) suffit-il à ce que l'opération (que je ne comprends pas ) que tu as écrite au dessus fonctionne?

Citation:
Pour la question 2, le plus simple est à la fin de chaque coup de faire une table des cases jouable - non jouable (matrice de 64 bit). Ensuite tu n'as plus qu'à vérifier pour chaque case si elle est jouable ou pas.

Une procédure récursive?
Lien direct vers le message - Vieux
Avatar de Hôte des Songes
Hôte des Songes
Alpha & Oméga
 
Avatar de Hôte des Songes
 
Citation:
Provient du message de - Sargamatas -
Créé un tableau de shapes, enfin ca marche en Java
pfiou c''est pas avec les 4 td et les 8 tp de delphi que j'ai eu cette année que je vais savoir faire ça
Lien direct vers le message - Vieux
Lwevin Myan
Alpha & Oméga
 
Re: [Delphi 4] 2 problèmes dans la création d'un Othello
Citation:
Provient du message de Hôte des Songes
Amis de l'informatique bonsoir

Bon voilà j'ai besoin d'un petit coup de main pour mon projet de cette année sous delphi 4, à savoir Othello

Le premier problème: j'ai créé ma grille de jeu en créant 64 shapes... sur chacune de ces shapes j'ai disposé une shape ronde représentant un pion (qui sera soit visible soit invisible selon l'avancement du jeu)Comment transformer ces shapes en coordonnées verticales et horizontales, de (1,1), (1,2)... à (8,8)?

Deuximème problème: ensuite, au passage de la souris au dessus d'une case, le curseur est sensé changer d'apparence selon que la case est jouable ou non... doit-on étudier pour chaque case (x,x) du plateau les coordonnées des pions se trouvant sur les lignes diagonale, horizontale et verticale dont fait partie la case (x,x)? ou existe t-il une procédure marchant pour toutes les cases?

Merci d'avance
Que je sois sûr de bien comprendre :
1) Tu as 64 éléments, numérotés de 1 à 64, et tu voudrais, à partir d'un indice (variant entre 1 et 64, donc), calculer la ligne et la colonne correspondante ?

2) Toujours à partir d'un indice entre 1 et 64 (ou tes coordonnées 8/8), tu voudrais la formule des diagonales, de la ligne et de la colonne qui passe par cette case ?

Question 1, facile, pour un indice i, ta ligne, c'est i/8 (partie entière), et la colonne i modulo 8 (ou l'inverse, mais c'est moins courant...)

Question 2 :
a) Il est largement préférable de créer un tableau à la fin de chaque coup, tout simplement parce que tu n'as pas à tout recalculer à chaque fois que tu bouges la souris.
b) Même si tu tiens à calculer à la volée, je vois pas l'intérêt de savoir la diagonale, la ligne et la colonne. Pour chacune des 8 directions, tu regardes s'il y a un pion adverse. Si oui, tu continues dans la même direction, jusqu'à ce que tu trouves un pion de ta couleur. Si oui, la case est jouable. Tous les autres possibilités (bord trouvé, pas de pion adverse sur la case adjacente, etc.) rendent la case non jouable.

Au passage, petit conseil : tu éviteras pas mal de problèmes et une trop grande complexité du code en déclarant non pas 64 cases, mais 100 : ton plateau sera entouré par des cases "sentinelles", qui te serviront de condition d'arrêt (plutôt que de vérifier que tes coordonnées sont toujours dans les limites du plateau).
Lien direct vers le message - Vieux
Avatar de Hôte des Songes
Hôte des Songes
Alpha & Oméga
 
Avatar de Hôte des Songes
 
Re: Re: [Delphi 4] 2 problèmes dans la création d'un Othello
Citation:
Provient du message de Lwevin Myan
Que je sois sûr de bien comprendre :
1) Tu as 64 éléments, numérotés de 1 à 64, et tu voudrais, à partir d'un indice (variant entre 1 et 64, donc), calculer la ligne et la colonne correspondante ?

2) Toujours à partir d'un indice entre 1 et 64 (ou tes coordonnées 8/8), tu voudrais la formule des diagonales, de la ligne et de la colonne qui passe par cette case ?
Le problème est que ce n'est pas parce que j'appelle un case (1,1) que le programme va considérer que x=1 et y=1, doit y avoir uen manip intermédiaire
je crois qu'il faut absolument que chaque case (en fait chaque pion, puisque ce sont les pions placés sur les cases qui apparaissent ou restent invisibles selon le coup joué) ait une coordonnée précise (x,y) pour justement pouvoir ensuite comparer les coordonnées de la case soupçonnée jouable et les coordonnées des pions qui sont sur les verticale, horizontale et diagonale... pour l'horizontale et la verticale il suffit de comparer soit les x soit les y, mais pour la diagonale je vois pas trop

Pour le coup de recréer un nouveau tableau (la matrice de 64 selon Lonecat?) prenant en compte la nouvelle situation après chaque coup, c'est encore une chose que je ne sais pas faire (vive les projets à faire sans préparation préalable )
Lien direct vers le message - Vieux
Avatar de Hanny Drocéphale
Hanny Drocéphale [FED]
 
Avatar de Hanny Drocéphale
 
Tu dois d'abord essayer de decomposer les phases de jeu.

Pour la mise à jour de l'interface, il ne faut pas te focaliser la dessus, c'est vraiment la chose la plus simple.

Par contre, je te conseille de representer la grille d'abord de façon "logique", plutot que rester sur tes shapes uniquement.

Aprés tu nommes tes shapes de façon a ce que le coin inférieur gauche s'appelle "shp11' et le coin supérieur droit 'shp88', si tu vois ou je veux en venir. ( sinon arrête l'info, lol ).

je supose que ta fiche principale s'appelle frmMain

Code PHP:
Type
  TGrille 
: Array [1..8of Array [1..8of integer;

var
  
MaGrille Tgrille;

procedure UpdateShape(ShapeNamestring;Etat:integer);
var
  
integer;
begin
  
for := 0 to frmMain.ControlCount-do begin
    
if frmMain.controls[i].Name ShapeName then
    begin
      
// Fait ce qu'il faut pour mettre a jour en fonction de ce qu'il y a dans ton tableau : rien, noir,blanc.
    
end;
  
end;
end;

procedure MetAjourLaGrilleGraphique;
var
  
i,integer;
  
CtrlName string;
begin
  
for := 1 to 8 do begin
    
for := 1 to 8 do begin
      CtrlName 
:= 'shp'+inttostr(i)+inttostr(j);
      
UpdateShape(CtrlName,MaGrille[i][j]);
    
end;
  
end;
end
Et voila, tu peux mettre a jour n'importe quelle shape en quelques lignes de code, de façon totalement automatique.

Quand un coup sera joué, tu va devoir simplement appeller MetAJourLaGrilleGraphique aprés avoir mis a jour la logique avec le resultat du coup.
Lien direct vers le message - Vieux
Avatar de Hanny Drocéphale
Hanny Drocéphale [FED]
 
Avatar de Hanny Drocéphale
 
Re: [Delphi 4] 2 problèmes dans la création d'un Othello
Citation:
Provient du message de Hôte des Songes
Deuximème problème: ensuite, au passage de la souris au dessus d'une case, le curseur est sensé changer d'apparence selon que la case est jouable ou non... doit-on étudier pour chaque case (x,x) du plateau les coordonnées des pions se trouvant sur les lignes diagonale, horizontale et verticale dont fait partie la case (x,x)? ou existe t-il une procédure marchant pour toutes les cases?
Gestionnaire d'evenement ( Events ) OnMouseMove.
Tu le code pour une case ( en utilisant mon systéme de nomage 'shp11'>'shp88' ) et tu "intéroge" ta Grille pour savoir ce que tu peux faire.
Aprés tu n'as plus qu'a attribuer la même fonction pour les events onMouseMove de tout les Shape de ta form.
Lien direct vers le message - Vieux
Avatar de Pierre-Loup 
Pierre-Loup 
Bagnard
 
Avatar de Pierre-Loup 
 
Un tableau serait une solution bien plus simple que les 64 variables que tu as déclare. Cela permettrait de pouvoir gérer les "shapes" par indices plutôt que de faire un case à 64 possibilités pour chaque "shape".
Lien direct vers le message - Vieux
Avatar de Hanny Drocéphale
Hanny Drocéphale [FED]
 
Avatar de Hanny Drocéphale
 
J'y avais penser mais il risque de pas piger trés fort l'allocation, et les propriétés a mettre vont le faire changer d'avis )

Sinon, si tu penche pour un tableau de shape.


Code PHP:
MaGrilleGraphique : Array [1..8of Array [1..8of Tshape;

procedure RemplitMesShape(ecartX,ecartYinteger);
var
 
i,integer;
begin
// Boucle d'allocation des propriétés des Tshape
For := 1 to 8 do begin
  
For := 1 to 8 do begin
    MaGrilleGraphique
[i][j] := Tshape.Create;
    
Tshape.top := ecartY*j;
    
Tshape.left := ecartX*i;
    
// Etc pour toutes les propriétés qui font un Tshape digne de ce nom.
    // je te laisse bosser pour allouer de cette façon les events.
  
end;
end
J'espere que tu as le temps de bosser cette appli
Lien direct vers le message - Vieux
Avatar de Hanny Drocéphale
Hanny Drocéphale [FED]
 
Avatar de Hanny Drocéphale
 
Methode plus directe aussi, qui t'evite de devoir utiliser 64 Tshape et qui utilise un tableau d'entier pour stocker l'aire de jeu ( le fameux MaGrille ).

A mon avis c'est la meilleure.
Code PHP:
procedure TForm1.PaintMaGrille(EcartXEcartYinteger);
var
 
i,integer;
 
MonGraph TBitmap;
begin
  MonGraph 
:= TBitmap.Create;
  for 
:= 1 to 8 do begin
    
for := 1 to 8 do begin
      
case MaGrille[i][jof
        0 
MonGraph.LoadFromFile(GetCurrentDir+'\'+'Case.BMP');
        1 : MonGraph.LoadFromFile(GetCurrentDir + '
\' + 'Pion_Noir.BMP');
        2 : MonGraph.LoadFromFile(GetCurrentDir + '
\' + 'Pion_Blanc.BMP');
      end;
      Form1.Canvas.Draw(i*EcartX,j*EcartY,MonGraph);
    end;
  end;
end;

Les +'
\'+ sont des antislash ( qui ne passent pas, bouh ) 
Lien direct vers le message - Vieux
Avatar de Kelem Khâl La'Ri
Kelem Khâl La'Ri
Alpha & Oméga
 
Avatar de Kelem Khâl La'Ri
 
Un conseil : utilise un TStringGrid pour ta représentation, tu auras ensuite a disposition plusieurs évènements concernant la souris du genre onDblClick et onSelectCell (qui te donne directement les coordonnées de la case cliquée), onMouseMove etc...

Et au lieu de tracer sur le canevas de la TForm qui t'oblige a calculer les coordonnées des cases, tu travailles directement sur le TStringGrid.

My 2 cts.
Lien direct vers le message - Vieux
Avatar de Hanny Drocéphale
Hanny Drocéphale [FED]
 
Avatar de Hanny Drocéphale
 
Le TstringGrid est sympa c'est clair, si il arrive a faire un truc joli ( a moins que ce ne soit pas important dans ce cas la oui ).
Lien direct vers le message - Vieux
Avatar de Loekit
Loekit
Alpha & Oméga
 
Avatar de Loekit
 
s'incruste sur le topic
Citation:
Provient du message de Hôte des Songes
pfiou c''est pas avec les 4 td et les 8 tp de delphi que j'ai eu cette année que je vais savoir faire ça
tssss, je sens que certains ont séché les amphis de delphi...
M'étonnes pas qu'on était pas nombreux.

C'est bien sympa que t'ais demandé ça...
Je vais en profiter pour mettre mon projet à jour .
(mais c'est pas un othello le mien)


Kelem ou Hannibal, ou un(e) autre :
Savez vous comment on intègre des images/Shape TBitmap (ce sera très bien les TBitmap) sur un TStringGrid ?
au pire un DrawGrid, mais je suis pas sur que ce soit aussi pratique pour renvoyer des coordonnées
D'ailleurs, pour me faciliter la tache, en 2 mots, je réccupère comment les coordonnée de clic d'une StringGrid ?


Mon projet est joli et marche bien pour le moment... mais la prof m'a dit que c'était un peu trop complexe pour elle... du coup faut que je simplifie plein de trucs .

Edité pour compléter/modifier un poil la demande.
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forums divers > La Taverne > [Delphi 4] 2 problèmes dans la création d'un Othello
   

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés

Outils Rechercher
Rechercher:

Recherche avancée

Thème visuel : Fuseau horaire GMT +1. Il est actuellement 12h43.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite