Forum > C et C++ > Gomoku >

Gomoku

répondre

première page page précédente page suivante dernière page

Navigation rapide :

Auteur Message
jeremya Posté le 21 avr 2009 15:58:31

Administrateur
Administrateur

Auteur
Auteur

Modérateur
Modérateur

Inscrit le : 08 nov 2008
Localisation : Nord-Pas-de-Calais
Emploi :
Loisirs :

PROBLEME

Le Gomoku est un jeu de plateau à deux joueurs, dans lequel pour gagner, chaque joueur doit réussir à aligner 5 pions sur des cases consécutives d'un plateau, horizontalement, verticalement ou en diagonale. Le plateau est une grille carrée, de dimension quelconque.

Ecrivez un programme qui lit en entrée le contenu d'une partie de Gomoku, et détermine si l'un des joueurs a gagné.

CONTRAINTES

1 <= N <= 40, où N est le nombre de lignes/colonnes du plateau utilisé pour la partie.

ENTREE

La première ligne de l'entrée contient un entier N : le nombre de colonnes et de lignes du plateau de Gomoku.

Chacune des N lignes suivantes contient N entiers, séparés par des espaces, correspondant au contenu des cases d'une ligne du plateau. L'entier vaut 0 si la case est vide, 1 si elle contient un pion du joueur 1, et 2 pour un pion du joueur 2.

SORTIE

Votre programme doit afficher une ligne contenant un entier : le numéro du joueur gagnant (1 ou 2), ou 0 si aucun des joueurs n'a aligné 5 pions.

CODE SOURCE

Code: C++
  1. #include <cstdio>
  2.  
  3. unsigned int N;
  4. unsigned int plateau[40][40];
  5.  
  6. void lire_plateau()
  7. {
  8. scanf_s("%u", &N);
  9. for (unsigned int y=0; y<N; y++)
  10. for (unsigned int x=0; x<N; x++)
  11. scanf_s("%u", &plateau[x][y]);
  12. }
  13.  
  14. bool joueur_gagnant(unsigned int joueur)
  15. {
  16. if (N < 5)
  17. return false;
  18.  
  19. for (unsigned int y=0; y<N; y++) {
  20. for (unsigned int x=0; x<N-4; x++) {
  21. bool r = true;
  22. for (int i=0; i<5; i++)
  23. if (plateau[x+i][y] != joueur)
  24. r = false;
  25. if (r)
  26. return true;
  27. }
  28. }
  29.  
  30. for (unsigned int x=0; x<N; x++) {
  31. for (unsigned int y=0; y<N-4; y++) {
  32. bool r = true;
  33. for (int i=0; i<5; i++)
  34. if (plateau[x][y+i] != joueur)
  35. r = false;
  36. if (r)
  37. return true;
  38. }
  39. }
  40.  
  41. for (unsigned int y=0; y<N-4; y++) {
  42. for (unsigned int x=0; x<N-4; x++) {
  43. bool r = true;
  44. for (int i=0; i<5; i++)
  45. if (plateau[x+i][y+i] != joueur)
  46. r = false;
  47. if (r)
  48. return true;
  49. }
  50. }
  51.  
  52. for (unsigned int y=0; y<N-4; y++) {
  53. for (unsigned int x=0; x<N-4; x++) {
  54. bool r = true;
  55. for (int i=0; i<5; i++)
  56. if (plateau[x+i][y+4-i] != joueur)
  57. r = false;
  58. if (r)
  59. return true;
  60. }
  61. }
  62.  
  63. return false;
  64. }
  65.  
  66. int main(int argc, char* argv[])
  67. {
  68. lire_plateau();
  69.  
  70. if (joueur_gagnant(1))
  71. printf("1\n");
  72. else if (joueur_gagnant(2))
  73. printf("2\n");
  74. else
  75. printf("0\n");
  76.  
  77. return 0;
  78. }
  79.  
Messages : 284 http://www.jeremya.ironie.org citer

répondre

première page page précédente page suivante dernière page

Navigation rapide :

Forum > C et C++ > Gomoku >


Cette page a été générée le 20 mar 2010 05:23:13.
page d'accueil Jeremya's Web Site
jeremya.ironie.org

s'identifier

Nom d'utilisateur :
Mot de passe :

outils

qui est en ligne ?

1 visiteur en ligne