C_chess/figurinemove.h

110 lines
3.7 KiB
C

#pragma once
#include <stdio.h>
#include <stdlib.h>
unsigned char firstMove = 1;
enum FigureName{
PawnWhite = 1,
PawnBlack = 7,
KingWhite = 5,
KingBlack = 11,
RookWhite = 2,
RookBlack = 8,
BishopWhite = 4,
BishopBlack = 10,
QueenWhite = 6,
QueenBlack = 12,
KnightWhite = 3,
KnightBlack = 9
};
unsigned char convertXYcoordinatesToBits(unsigned char x, unsigned char y){
return (x << 4) + y;
}
void FigureMove(unsigned char figure[8][8], struct motion_struct motion[28], unsigned char target[2]){
int i=0;
switch(figure[target[0]][target[1]]){
case PawnWhite:
if (figure[target[0]][7] != PawnWhite){ // Генерация "стандартного" хода вверх
motion[i].xy = convertXYcoordinatesToBits(target[0], target[1]+1);
motion[i].t = 1;
i++;
if (target[1] == 1){ // Обработка первого хода
motion[i].xy = convertXYcoordinatesToBits(target[0], target[1]+2);
motion[i].t = 1;
i++;
}
if (figure[target[0]+1][target[1]+1]){ // Съедаем фигуру справа сверху
motion[i].xy = convertXYcoordinatesToBits(target[0]+1, target[1]+1);
motion[i].t = 2;
i++;
}
if (figure[target[0]-1][target[1]+1]){ // Съедаем фигуру слева сверху
motion[i].xy = convertXYcoordinatesToBits(target[0]-1, target[1]+1);
motion[i].t = 2;
i++;
}
}
break;
case PawnBlack:
if (figure[target[0]][7] != PawnBlack){// Генерация "стандартного" хода вниз
motion[i].xy = convertXYcoordinatesToBits(target[0], target[1]-1);
motion[i].t = 1;
i++;
if (target[1] == 6){ // Обработка первого хода
motion[i].xy = convertXYcoordinatesToBits(target[0], target[1]-2);
motion[i].t = 1;
i++;
}
if (figure[target[0]+1][target[1]-1]){ // Съедаем фигуру справа снизу
motion[i].xy = convertXYcoordinatesToBits(target[0]+1, target[1]-1);
motion[i].t = 2;
i++;
}
if (figure[target[0]-1][target[1]-1]){ // Съедаем фигуру слева снизу
motion[i].xy = convertXYcoordinatesToBits(target[0]-1, target[1]-1);
motion[i].t = 2;
i++;
}
break;
}
//switch(figure[8][8])
//{
// case:
//}
// figure[figureXPosition + x][figureYPosition + y] = figure[figureXPosition][figureYPosition];
// figure[figureXPosition][figureYPosition] = 0;
}
motion[i].t = 0;
}
/*
void PawnMove(unsigned char figure[8][8], enum PawnMoveOptions options, unsigned char figureXPosition, unsigned char figureYPosition)
{
switch (options)
{
case TwoUp:
if (firstMove == 1)
{
figureMove(figure, 0, 2, figureXPosition, figureYPosition);
}
firstMove = 0;
break;
case Up:
figureMove(figure, 0, 1, figureXPosition, figureYPosition);
break;
case DiagonalRight:
figureMove(figure, 1, 1, figureXPosition, figureYPosition);
break;
case DiagonalLeft:
figureMove(figure, -1, 1, figureXPosition, figureYPosition);
break;
}
}
*/