2016-01-05 1 views
1

Je suis totalement nouveau à la programmation C et j'essaye de créer un Word Search.Problème avec l'affichage des lettres verticales et diagonales - C Programmation

J'ai une liste de mots, où seulement 4 sont choisis au hasard. Ces 4 mots que doivent être imprimés dans une grille horizontalement, verticalement ou en diagonale, mais je ne peux que les faire imprimer horizontalement. Je dois aussi ajouter que je n'ai aucune idée de la façon dont le code fonctionne, alors j'apprécie vraiment que quelqu'un d'assez gentil puisse vraiment m'aider. Alors quelqu'un peut-il m'aider dans la bonne direction pour créer les mots aléatoires dans un alignement vertical et diagonal? http://imgur.com/VSrXf4C

void putHorizzontalWord(char word[10]) 
{ 
    int rRow, rCol , ok , i; 

    do 
    { 

     rRow = rand() % 10; 
     rCol = rand() % 10; 

     ok = 1; 
     if(rCol + strlen(word) < 10) 
     { 
      for(i = 0;i < strlen(word);i++) 
      { 
       if(puzzle[rRow][rCol + i] == ' ' || 
        puzzle[rRow][rCol + i] == word[i]) 
       { 
        puzzle[rRow][rCol + i] = word[i]; 
       } 
       else 
       { 
        ok = 0; 
       } 
      } 
     } 
     else 
     { 
      ok = 0; 
     } 
    } 
    while(ok == 0); 
} 
+0

Je suis désolé, mais j'étais encore en train d'éditer le sujet. J'ai également ajouté une image de l'apparence du programme. – Takari

Répondre

0

Voici quelques commentaires qui visent à vous expliquer qu'est-ce que le code fait:

// This function takes a string as input then puts that string 
// at a random "open" location in a 2D grid (puzzle) in an 
// horizontal manner 
// 
// This function expects the size of the string to be at most = 10 

void putHorizontalWord(char word[10]) 
{ 
    int rRow, rCol , ok , i; 

    do 
    { 
     // Randomly select a location 
     rRow = rand() % 10; 
     rCol = rand() % 10; 

     // For now, assume that this location is "ok", i.e. is open 
     ok = 1; 

     // Check that the word fits inside the grid from (rRow, rCol) 
     if(rCol + strlen(word) < 10) 
     { 
      // If it does, then try to put the word at this location 
      // Thus, we need to process the word character by character 
      for(i = 0;i < strlen(word);i++) 
      { 
       // We are inside the for loop 
       // The current character to process is word[i] 
       // And the current cell to fill is (rRow, rCol + i) 
       // 
       // If current cell is empty || is same as the current character 
       // then this cell is "open" i.e. we can use it 
       if(puzzle[rRow][rCol + i] == ' ' || 
        puzzle[rRow][rCol + i] == word[i]) 
       { 
        puzzle[rRow][rCol + i] = word[i]; 
       } 
       else 
       { 
        // The cell is not open 
        // => (rRow, rCol) is not "ok" 
        ok = 0; 
       } 
      } 
     } 
     else 
     { 
      // word not fits inside the grid from the location 
      // => (rRow, rCol) is not "ok" 
      ok = 0; 
     } 
    } 
    while(ok == 0); // Exit loop while not found a good location 
} 

Si vous avez compris, vous pouvez maintenant modifier cela pour écrire vos versions verticales et diagonales. Si vous n'avez toujours pas compris, faites-moi savoir ce qui n'est pas encore clair.

+0

Merci pour l'explication de Mike. Vos commentaires m'ont vraiment facilité la compréhension du code. Je pensais avoir la réponse pour les imprimer verticalement en inversant [rRow] [rCol + i] dans la boucle for à [rCol] [rRow + i]. Cela avait beaucoup de sens dans mon esprit mais il ne les imprimait toujours pas verticalement. (ils ont toujours été imprimés horizontalement) Ai-je oublié quelque chose d'important? Merci d'avance. – Takari

+0

C'est [rrow + i] [rCol] 'à remplir verticalement. Mais vous devez également changer quelques contrôles ... – mikedu95

+0

Merci beaucoup. Il est tard dans la nuit, donc je vais essayer le code diagonal demain. – Takari