//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                                              //
//   ///////   ///////          ///////   ///////   ///////   ///////   ///////   ///////   ///////   ///////   //
//   //        //               //   //   //   //   //   //        //   //        //          //      //        //
//   /////     //       ////    ///////   ///////   //   //        //   /////     //          //      ///////   //
//   //        //               //        //    //  //   //        //   //        //          //           //   //
//   ///////   ///////          //        //     // ///////   /////     ///////   ///////     //      ///////   //
//                                                                                                              //
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Downloaded form Ec-Projects.com

#include <xc.h>

__CONFIG(FOSC_INTOSCIO & WDTE_OFF & PWRTE_OFF & MCLRE_OFF & BOREN_OFF & LVP_OFF & CPD_OFF & CP_OFF);

#define _XTAL_FREQ 4000000

void main() {

    TRISA = 0b00000011;
    TRISB = 0b00000001;

    PORTA = 0;
    PORTB = 0;

    T2CON = 0b01111101;
    CMCON = 0xff;

    unsigned char start = 0;
    unsigned char delayset = 0;
    unsigned char player1 = 0;
    unsigned char player2 = 0;
    unsigned char i = 0;
    int startdelay = 0;


    RA2 = 1;
    RA3 = 1;
    RB2 = 1;
    RB3 = 1;
    RB1 = 1;

    __delay_ms(500);

    RA2 = 0;
    RA3 = 0;
    RB2 = 0;
    RB3 = 0;
    RB1 = 0;

    __delay_ms(500);

    RA2 = 1;
    RA3 = 1;
    RB2 = 1;
    RB3 = 1;
    RB1 = 1;

    __delay_ms(500);

    RA2 = 0;
    RA3 = 0;
    RB2 = 0;
    RB3 = 0;
    RB1 = 0;


    while (1) {

        if (RB0 == 1)start = 1;

        if (start == 1 & delayset == 0) {

            startdelay = TMR2;
            startdelay = startdelay + 250;
            delayset = 1;
        }

        if (startdelay > 0 & TMR2IF == 1) {

            startdelay--;
            TMR2IF = 0;
        }

        if (start == 1 & startdelay == 0) {

            RB1 = 1;
        }

        if (start == 1 & startdelay > 0) {

            if (RA0 == 1) {

                player2++;
                start = 0;

                delayset = 0;
                RB1 = 0;
            }

            else if (RA1 == 1) {

                player1++;
                start = 0;

                delayset = 0;
                RB1 = 0;
            }
        }

        else if (start == 1 & startdelay == 0) {

            if (RA0 == 1) {

                player1++;
                start = 0;

                delayset = 0;
                RB1 = 0;
            }

            else if (RA1 == 1) {

                player2++;
                start = 0;

                delayset = 0;
                RB1 = 0;
            }
        }


        if (player1 == 1)RA3 = 1;
        else if (player1 == 2)RA2 = 1;
        else if (player1 == 3) {

            RB2 = 0;
            RB3 = 0;

            for (i = 40; i > 0; i--) {

                RA2 = ~RA2;
                RA3 = ~RA3;
                __delay_ms(250);
            }

            RA2 = 0;
            RA3 = 0;

            player1 = 0;
            player2 = 0;
        }

        if (player2 == 1)RB3 = 1;
        else if (player2 == 2)RB2 = 1;
        else if (player2 == 3) {

            RA2 = 0;
            RA3 = 0;

            for (i = 40; i > 0; i--) {

                RB2 = ~RB2;
                RB3 = ~RB3;
                __delay_ms(250);
            }

            RB2 = 0;
            RB3 = 0;

            player1 = 0;
            player2 = 0;
        }
    }
}
