Example #1
0
    bool cancastleshort() {

        if (wturn == 1 && kwmov == 1)
            return 0;

        else if (wturn == 0 && kbmov == 1)
            return 0;
        
        else if (wturn == 1 && isbetween(map[7][7], map[7][4]) == 0 && board[7][7] == "Rw" &&
                 wkrookmov == 0){
           
            int x;
            
            for (x = 4; x < 7; x++) {
                if (checkcheck(7, x) == 1)
                    return 0;
            }

            return 1;
        }
   
        else if (wturn == 0 && isbetween(map[0][7], map[0][4]) == 0 && board[0][7] == "Rb" &&
                 bkrookmov == 0){
           
            int x;
            
            for (x = 4; x < 7; x++) {
                if (checkcheck(0, x) == 1)
                    return 0;
            }

            return 1;
        }
        
    }
Example #2
0
    int kingmoves() {

        int i, j;

        int kingx = kingfinder(0);
        int kingy = kingfinder(1);

        int count = 0;

        for (i = 0; i < 8; i++) {
            for (j = 0; j < 8; j++) {

                char* square = board[i][j];
                char status = square[1];
                
                if (wturn == 1 && arraydistance(map[kingx][kingy], map[i][j]) == 1 && status != 'w'
                    && checkcheck(i, j) == 0) {
                    movearray[count] = map[i][j];
                    count++;
                }

                else if (wturn == 0 && arraydistance(map[kingx][kingy], map[i][j]) == 1 
                         && status != 'b' && checkcheck(i, j) == 0) {
                    movearray[count] = map[i][j];
                    count++;
                }
            }
        }

        return count;

    }
Example #3
0
    bool testallmoves() {

        char testlist[13] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'K', 'Q', 'R', 'N', 'B'};
        int i, j, x;

        for (i = 0; i < 8; i++) {
            for (j = 0; j < 8; j++) {
                for (x = 0; x < 13; x++) {
                    
                    char* sqr = map[i][j];
                   
                    if (x > 7) {
                        char tst[4];
                        tst[0] = testlist[x];
                        tst[1] = sqr[0];
                        tst[2] = sqr[1];
                        tst[3] = '\0';

                
                        char* boardchk[8][8];

                        memcpy(boardchk, board, sizeof(board));

                        turn(tst);

                        if (checkcheck(-1, -1) == 0) {
                            memcpy(board, boardchk, sizeof(board));
                            return 1;
                        }

                        memcpy(board, boardchk, sizeof(board));
                    }

                    else {

                        char tst[3];
                        tst[0] = sqr[0];
                        tst[1] = sqr[1];
                        tst[2] = '\0';

                
                        char* boardchk[8][8];

                        memcpy(boardchk, board, sizeof(board));

                        turn(tst);

                        if (checkcheck(-1, -1) == 0) {
                            memcpy(board, boardchk, sizeof(board));
                            return 1;
                        }

                        memcpy(board, boardchk, sizeof(board));
                    }
                }
            }
        }

        return 0;
    }
Example #4
0
    bool caneat() {

        char testlist[13] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'K', 'Q', 'R', 'N', 'B'};

        char* sqr = prevsquare;

        int i;

        for (i = 0; i < 13; i++) {

            char tst[5];

            tst[0] = testlist[i];
            tst[1] = 'x';
            tst[2] = prevsquare[0];
            tst[3] = prevsquare[1];
            tst[4] = '\0';

            char *boardchk[8][8];

            memcpy(boardchk, board, sizeof(board));

            turn(tst);

            if (memcmp(board, boardchk, sizeof(board)) != 0 && checkcheck(-1, -1) == 0) {
                memcpy(board, boardchk, sizeof(board));
                return 1;
            }

            memcpy(board, boardchk, sizeof(board));

            }

        return 0;
    }
Example #5
0
void FstopComms::respondWrite()
{
    if(!checkcheck())
        return;

    unsigned int addr=getAddr();
    char len=cmd[PKT_LEN];

    if(len < 1 || len > PKT_MAXREQ || addr < EEPROM_MIN_WRITE || addr+len > EEPROM_MAX_WRITE){
        nak(BAD_WRITE);
        return;
    }

    // copy from buffer to EEPROM
    char bp=PKT_SHORTHDR;
    for(char i=0;i<len;++i){
        EEPROM.write(addr++, cmd[bp++]);
    }

    cmd[PKT_CMD]=COM_WRITEACK;
    buflen=PKT_SHORTHDR;

    // recompute checksum, send without data
    txCmd();
}
Example #6
0
    bool checkmate() {

        if (checkcheck(-1,-1) == 1 && caneat() == 0 && testallmoves() == 0)
            return 1;

        else
           return 0; 
    }
Example #7
0
    bool cancastlelong() {

        if (wturn == 1 && kwmov == 1)
            return 0;

        else if (wturn == 0 && kbmov == 1)
            return 0;
        
        else if (wturn == 1 && isbetween(map[7][0], map[7][4]) == 0 && board[7][0] == "Rw" &&
                 wqrookmov == 0){
           
            int j;
            
            for (j = 1; j < 4; j++) {
                if (checkcheck(7, j) == 1)
                    return 0;
            }

            return 1;
        }
    
        else if (wturn == 0 && isbetween(map[0][0], map[0][4]) == 0 && board[0][0] == "Rb" &&
                 bqrookmov == 0){
           
            int j;
            
            for (j = 1; j < 4; j++) {
                if (checkcheck(0, j) == 1)
                    return 0;
            }

            return 1;
        }
        
        else
            return 0;
    }
Example #8
0
    void pturn() {

        while (true) {


            if (checkmate() == 1) {
                printf("Checkmate!");
                break;
            }


            if (checkcheck(-1, -1))
                printf("Check!\n");

            char *boardchk[8][8];

            memcpy(boardchk, board, sizeof(board));
            
            boardprint();
            char move[10];
            printf("Please type a move in standard chess notation: ");
            scanf("%s", move);
            turn(move);

            if (checkcheck(-1, -1)) {
                memcpy(board, boardchk, sizeof(board));
                printf("Can not move into check!\n");
            }


            if (memcmp(board, boardchk, sizeof(board)) != 0)
                (wturn == 1) ? (wturn = 0) : (wturn = 1);


        }
    }
Example #9
0
void FstopComms::respondRead()
{
    if(!checkcheck())
        return;

    unsigned int addr=getAddr();
    char len=cmd[PKT_LEN];

    if(len < 1 || len > PKT_MAXREQ || addr < EEPROM_MIN_READ || addr+len > EEPROM_MAX_READ){
        nak(BAD_READ);
        return;
    }

    // read from EEPROM into buffer
    cmd[PKT_CMD]=COM_READACK;

    for(char i=0;i<len;++i){
        cmd[i+PKT_SHORTHDR]=EEPROM.read(addr++);
    }
    buflen=len+PKT_SHORTHDR;

    // append checksum and send.
    txCmd();
}