I am a beginner who wrote this simple hangman game in C for fun and to practice programming. I am looking for advice on optimizing this code and making it adhere to best practices. Are there too many variables, conditionals, and loops? 
Thank you!

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    #include <stdbool.h>
    
    int main(void)
    {
        //get a word
        char words[12][10] = {"depend", "rich", "twig", "godly", "fang", "increase", "breakable", "stitch", "pumped", "pine", "shrill", "cable"};
        srand(time(NULL));
        int r = rand() % 12;
        char* word = words[r];
    
        int length = strlen(word);
        int maxIncorrect = 5;
        char correct[26] = {'\0'};
        char incorrect[26] = {'\0'};
        int amountCorrect = 0;
        int amountIncorrect = 0;
    
        //repeat until maxIncorrect wrong guesses
        while (amountIncorrect < maxIncorrect)
        {
            char guess = '\0';
            bool inWord = false;
            bool allCorrect = true;
            printf("\n________________________________________\n\n");
    
            //print blanks and correcly guessed letters
            for (int i = 0; i < length; i++)
            {
                inWord = false;
                for (int j = 0; j < 26; j++)
                {
                    if (word[i] == correct[j])
                    {
                        inWord = true;
                    }
                }
                if (inWord)
                    {
                        printf("%c ", word[i]);
                    }
                else
                {
                    printf("_ ");
                    allCorrect = false;
                }
            }
    
            //stop if all letters have been correctly guessed
            if (allCorrect)
            {
                printf("\n\nCorrect!\n");
                return 0;
            }
    
            //print incorrect guesses
            printf("\n\nIncorrect guesses: ");
            for (int i = 0; i < amountIncorrect; i++)
                {
                    printf("%c", incorrect[i]);
                }
    
            printf("\n");
    
            inWord = false;
            bool valid = true;
            printf("\n%i incorrect guesses remaining\n", maxIncorrect - amountIncorrect);
            printf("Enter a single lowercase letter: ");
    
            //get user's guess and check if it is valid (a lowercase letter that has not been guessed before)
            scanf("%c%*c", &guess);
            for (int i = 0; i < amountCorrect; i++)
            {
                if (guess == correct[i])
                {
                    valid = false;
                }
            }
            for (int i = 0; i < amountIncorrect; i++)
            {
                if (guess == incorrect[i])
                {
                    valid = false;
                }
            }
            if (guess < 97 || guess > 122)
            {
                valid = false;
            }
    
            //go back to top of loop guess is invalid
            if (!valid)
            {
                printf("\nInvalid\n");
            }
    
            //check if guess is part of the word or not
            else
            {
                for (int i = 0; i < length; i++)
                {
                    if (guess ==  word[i])
                    {
                        inWord = true;
                    }
                }
                if (inWord == true)
                {
                    correct[amountCorrect] = guess;
                    amountCorrect++;
                }
                else
                {
                    incorrect[amountIncorrect] = guess;
                    amountIncorrect++;
                }
            }
        }
    
        printf("\nThe word was %s\n", word);
        return 0;
    }