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+)
А до Паскаля было немного Бейсика на ДВК (в последнем классе школы)
А до Бейсика были программируемые калькуляторы...