Code: Select all
// ШАХМАТНАЯ ПРОГРАММА  . Начало 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();
}
Правда мой запал иссяк как только я добился рисования начального положения доски
Так что я C++ программист с 25 летним стажем уже
А до этого я сидел на Паскале года 3 (и тогда же было некоторое количество баз данных в виде FOXBASE+)
А до Паскаля было немного Бейсика на ДВК (в последнем классе школы)
А до Бейсика были программируемые калькуляторы...
				