110 lines
3.7 KiB
C
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;
|
|
}
|
|
}
|
|
*/
|