| Code: // ШАХМАТНАЯ ПРОГРАММА . Начало 27 февраля 1994 года. #include <stdio.h> #include <conio.h> enum Col {white,black}; // Цвет поля или фигуры enum Occ {on,off}; // Атрибут занятости поля enum Nam {o,p,knight,bishop,rook,queen,king}; // Название фигуры struct Fig{ // Структура ФИГУРА Col color; Nam name; }; struct Field{ // Структура ПОЛЕ Occ occupy; Fig figure; void Occupy(Occ o,Col c,Nam n); Fig Getf(void){return figure;}; Occ Geto(void){return occupy;}; Field(){occupy=off;figure.name=o;}; // Конструктор }; void Field::Occupy(Occ o=off,Col c=white,Nam n=p) { // Захват-освобождение поля occupy=o; figure.color=c; figure.name=n; }; // Класс ПОЗИЦИЯ class Pos{ private: Field k[8][8]; // Шахматная доска public: char head[10]; int num; Col mov; void Occupy(char a[3],Occ o,Col c,Nam n); void Occupy(int i,int j,Occ o,Col c,Nam n); Fig GetF(char a[3]); Fig GetF(int i,int j){return k[i-1][j-1].Getf();}; Occ GetO(char a[3]); Occ GetO(int i,int j){return k[i-1][j-1].Geto();}; Col Cl(int i,int j); char *Conv(int i,int j); void State(void); Pos(int n); }; void Pos::Occupy(char a[3],Occ o=off,Col c=white,Nam n=p) { // Захват-освобождение поля ** int ii=a[0]-65,jj=a[1]-49; k[ii][jj].Occupy(o,c,n); } void Pos::Occupy(int i,int j,Occ o=off,Col c=white,Nam n=p) { // Захват-освобождение поля (i,j) k[i-1][j-1].Occupy(o,c,n); }; Col Pos::Cl(int i,int j) { // Выдача цвета поля (i,j) int a=i+j; if (a-a%2*2) return(white); else return(black); }; // Выдача фигуры Fig Pos::GetF(char a[3]) { int ii=a[0]-65,jj=a[1]-49; return k[ii][jj].Getf(); }; // Выдача оккупации Occ Pos::GetO(char a[3]) { int ii=a[0]-65,jj=a[1]-49; return k[ii][jj].Geto(); }; char *Pos::Conv(int i,int j) { char *a; a[0]=i+64;a[1]=j+48;a[2]='\0'; return a; }; void Pos::State(void) { char *s; if(mov==white) s="белых"; else s="черных"; printf("\nПозиция %i. %s ход %s\n",num,head,s); printf(" БЕЛЫЕ:\n"); for(int c=0;c<2;c++){ for(int j=1;j<9;j++){ for(int i=1;i<9;i++){ if (GetO(i,j)==on&&GetF(i,j).color==c){ switch (GetF(i,j).name) { case 1: s="пешка ";break; case 2: s="Конь ";break; case 3: s="Слон ";break; case 4: s="Ладья ";break; case 5: s="Ферзь ";break; case 6: s="Король";} printf("%s на поле %s\n",s,Conv(i,j)); } }} getch(); if(c==0) printf("\n ЧЕРНЫЕ:\n"); }
}; Pos::Pos(int n=1) // Конструктор, если (1) или () то начальная позиция { // если (0) то пустая доска head[0]='\0'; num=1; mov=white; if(n==1){ Occupy("A1",on,white,rook); Occupy("B1",on,white,knight); Occupy("C1",on,white,bishop); Occupy("D1",on,white,queen); Occupy("E1",on,white,king); Occupy("F1",on,white,bishop); Occupy("G1",on,white,knight); Occupy("H1",on,white,rook); Occupy("A2",on); Occupy("B2",on); Occupy("C2",on); Occupy("D2",on); Occupy("E2",on); Occupy("F2",on); Occupy("G2",on); Occupy("H2",on); Occupy("A8",on,black,rook); Occupy("B8",on,black,knight); Occupy("C8",on,black,bishop); Occupy("D8",on,black,queen); Occupy("E8",on,black,king); Occupy("F8",on,black,bishop); Occupy("G8",on,black,knight); Occupy("H8",on,black,rook); Occupy("A7",on,black); Occupy("B7",on,black); Occupy("C7",on,black); Occupy("D7",on,black); Occupy("E7",on,black); Occupy("F7",on,black); Occupy("G7",on,black); Occupy("H7",on,black); } };
class Figure:public Fig // Класс ФИГУРА наследует структуру ФИГ { private: int X,Y,N; public: int Move(int n,int l); Figure();
};
main() { Pos p1(1); p1.State(); }
| |