f

Dependencies:   mbed 4DGL-uLCD-SE MMA8452

keyboard.cpp

Committer:
dfrausto3
Date:
2022-04-12
Revision:
6:453dc852ac0f
Parent:
0:8e3b9bb1084a

File content as of revision 6:453dc852ac0f:

#include "keyboard.h"
#include "dictionary.h"
#include <string>

DLinkedList* keyboard;
LLNode* current;
Word goalWord;
char guess[5];
char correctGuess[5];
int guessLetter = 0;
int j = 0; int ccount = 0;
char* curr;

int compareChar(void* input1, void* input2){
    if(*(char*)input1 == *(char*)input2){
        return 1;
    }
    else{
        return 0;
    }
}

void lost_game() 
{
    uLCD.cls();
    while(1)
    {
        uLCD.locate(1, 3);
        uLCD.printf("Sorry You Lost");
        uLCD.locate(3, 5);
        uLCD.printf("Please Reset");   
    }
}

void won_game()
{
    uLCD.cls();
    while(1)
    {
        uLCD.locate(1, 3);
        uLCD.printf("Congrats you WON!");
        uLCD.locate(3, 5);
        uLCD.printf("Please Reset");
    }
}


void init_keyboard()
{
    int x = rand() % 11;
    goalWord = dictionary[x];
    keyboard = create_dlinkedlist(compareChar);
    for (int i = 0; i < 26; i++) {
        char* temp = (char*) malloc(sizeof(char));
        *temp = 'a' + i;
        insertTail(keyboard, temp);
    }
    current = keyboard->head;
    char* test = (char*)(keyboard->head->data);
    uLCD.locate(9, 13);
    uLCD.printf("%c", *test);
    uLCD.locate(1, 2);
    uLCD.printf("Correct Letters");
}


void moveleft()
{
    if(current->prev)
    {
        current = current->prev;
        uLCD.locate(9, 13);
        uLCD.printf("%c", *((char*)current->data));
        wait_ms(200);
    }
    
}


void moveright()
{
    if(current->next)
    {
        current = current->next;
        uLCD.locate(9, 13);
        uLCD.printf("%c", *((char*)current->data));
        wait_ms(200);
    }
}


void select_letter()
{   
    if (guessLetter < 5) {
        curr = (char*)(current->data);
        guess[guessLetter] = *(curr);
        
        uLCD.locate(5 + guessLetter, 4 + j);
        uLCD.printf("%c", guess[guessLetter]);
        
        guessLetter++;
        if (guessLetter >= 5) {
            guessLetter = 0;
            j++;
            wait_ms(200);
            check_word();
        }
            
    }
    wait_ms(200);
}


void remove_letter()
{   
    if (guessLetter > 0) {
        guessLetter--;
        uLCD.locate(5 + guessLetter, 4 + j);
        guess[guessLetter] = NULL;
        uLCD.printf(" ");
    }
    wait_ms(200);
}

void check_word()
{
    int x; int nword; int count = 0;
    char* a = goalWord.letters;
    for (x = 0; x < 5; x++) {
        if(guess[x] == *(a+x)) {
            count++;                        
        } else { 
            count = 0;
            int y;
            for (y = 0; y < 5; y++) {
                nword = 1;
                if(guess[x] == *(a+y)) {
                    pc.printf("%c\n", guess[x]);
                    uLCD.color(WHITE);
                    uLCD.locate(5+x, 3+j);
                    uLCD.printf("%c", guess[x]); 
                    uLCD.color(GREEN);
                    nword = 0;   
                    break;
                }
            }
            if (nword) {
                pc.printf("nword is 1!!!\n", guess[x]);
                uLCD.locate(5+x, 3+j);
                uLCD.printf(" ");
                //char* test = (char*)(keyboard->head->data);
                deleteNode(keyboard, findNode(keyboard, (char*)(guess+x)));
                //uLCD.locate(9, 13);
                //uLCD.printf("%c", *test);
            } else {
                correctGuess[x] = guess[x];
                int g;
                for(g = 0; g < 5; g++) {
                    if (correctGuess[g] == guess[x]) {
                        break;                        
                    } else {
                        uLCD.locate(5 + ccount++, 3);
                        uLCD.printf("%c", guess[x]);
                        break;
                    }
                }
            }
        }
    }
    if (count == 5) {
        won_game();
    } else if (j==6) {
        lost_game();
    }    
}