Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include "sah.h"
- int main()
- {
- char a[8][8], cols[64], c;
- char* fen=calloc(100, sizeof(char));
- char* f=calloc(100, sizeof(char));
- int rows[64];
- // printf("Introduceti piesa cautata: ");
- //scanf("%c", &c);
- //getchar();
- printf("\n");
- printf("Introduceti sirul generator: ");
- scanf("%s", fen);
- printf("\n");
- // init(a);
- // // print(a);
- // int nr=find(a, c, cols, rows);
- // // printf("%d\n", nr);
- // for(int i=0; i<nr; i++)
- // {
- // printf("%c %d\n", cols[i], rows[i]);
- // }
- // encode(a, f);
- // printf("%s\n", f);
- decode(a, fen);
- c='b';
- move* x=all_moves(a, 'b');
- int l=0;
- while(x[l].r1!=0)
- {
- if(l>0 &&(x[l].c1!=x[l-1].c1 || x[l].r1!=x[l-1].r1) )
- {
- printf("\n");
- }
- printf("%c%d-%c%d, ", x[l].c1, x[l].r1, x[l].c2, x[l].r2);
- l++;
- }
- free(x);
- return 0;
- }
- sah.c
- #include<stdio.h>
- #include "sah.h"
- #include <ctype.h>
- #include<stdlib.h>
- void init(char table[][8])
- {
- char s[]= {'r', 'n', 'b'};
- for(int j=0; j<3; j++)
- {
- table[0][j]=table[0][7-j]=s[j];
- table[7][j]=table[7][7-j]=s[j]-('a'-'A');
- }
- for(int j=0; j<8; j++)
- {
- table[1][j]='p';
- table[6][j]='P';
- }
- table[0][3]='k';
- table[0][4]='q';
- table[7][3]='K';
- table[7][4]='Q';
- for(int i=2; i<6; i++)
- {
- for(int j=0; j<8; j++)
- {
- table[i][j]=' ';
- }
- }
- }
- void print(char table[][8])
- {
- for(int i=0; i<8; i++)
- {
- for(int j=0; j<8; j++)
- {
- printf("%c ", table[i][j]);
- }
- printf("\n");
- }
- }
- int find(char table[][8], char piece, char cols[], int rows[])
- {
- int ap=0;
- for(int i=0; i<8; i++)
- {
- for(int j=0; j<8; j++)
- {
- if(table[i][j]==piece)
- {
- cols[ap]='a'+j;
- rows[ap]=8-i;
- ap++;
- }
- }
- }
- return ap;
- }
- void encode(char table[][8], char* fen)
- {
- int c, l=0;
- for(int i=0; i<8; i++)
- {
- c=0;
- for(int j=0; j<8; j++)
- {
- if(isalpha(table[i][j]))
- {
- if(c!=0)
- {
- *(fen+l++)=c+48;
- c=0;
- }
- *(fen+l++)=table[i][j];
- }
- else
- {
- c++;
- }
- }
- if(c!=0)
- {
- *(fen+l++)=c+48;
- }
- if(i!=7)
- {
- *(fen+l++)='/';
- }
- }
- }
- void decode(char table[][8], char* fen)
- {
- int c, l=0;
- for(int i=0; i<8; i++)
- {
- c=0;
- for(int j=0; j<8; j++)
- {
- if(c==0)
- {
- if(isalpha(*(fen+l)))
- {
- table[i][j]=*(fen+l);
- l++;
- }
- else
- {
- if(isdigit(*(fen+l)))
- {
- c=*(fen+l)-'1';
- table[i][j]=' ';
- l++;
- }
- }
- }
- else
- {
- table[i][j]=' ';
- c--;
- }
- }
- l++;
- }
- print(table);
- }
- move* all_moves(char table[][8], char tomove)
- {
- int a, ok1, ok2, ok3, ok4, z=0, n=5;
- move* x=calloc(5, sizeof(move));
- if(tomove=='b')
- {
- for(int j=0; j<8; j++)
- {
- for(int i=0; i<8; i++)
- {
- if(table[i][j]=='b')
- {
- ok1=1;
- ok2=1;
- ok3=1;
- ok4=1;
- a=1;
- while(ok1 || ok2 || ok3 || ok4)
- {
- if(ok1==1 && (table[i+a][j+a]<'a' || table[i+a][j+a]>'z') && i+a<8 && j+a<8)
- {
- if(z+3>n)
- {
- n+=5;
- x=realloc(x, n*sizeof(move));
- }
- x[z].r1=8-i;
- x[z].c1=j+'a';
- x[z].r2=8-(i+a);
- x[z].c2=j+a+'a';
- if(table[i+a][j+a]!=' ')
- {
- ok1=0;
- }
- z++;
- }
- else
- {
- ok1=0;
- }
- if(ok2==1 && (table[i+a][j-a]<'a' || table[i+a][j-a]>'z') && i+a<8 && j-a>=0)
- {
- if(z+3>n)
- {
- n+=5;
- x=realloc(x, n*sizeof(move));
- }
- x[z].r1=8-i;
- x[z].c1=j+'a';
- x[z].r2=8-(i+a);
- x[z].c2=j-a+'a';
- if(table[i+a][j-a]!=' ')
- {
- ok2=0;
- }
- z++;
- }
- else
- {
- ok2=0;
- }
- if(ok3==1 && (table[i-a][j+a]<'a' || table[i-a][j+a]>'z') && i-a>=0 && j+a<8)
- {
- if(z+3>n)
- {
- n+=5;
- x=realloc(x, n*sizeof(move));
- }
- x[z].r1=8-i;
- x[z].c1=j+'a';
- x[z].r2=8-(i-a);
- x[z].c2=j+a+'a';
- if(table[i-a][j+a]!=' ')
- {
- ok3=0;
- }
- z++;
- }
- else
- {
- ok3=0;
- }
- if(ok4==1 && (table[i-a][j-a]<'a' || table[i-a][j-a]>'z') && i-a>=0 && j-a>=0)
- {
- if(z+3>n)
- {
- n+=5;
- x=realloc(x, n*sizeof(move));
- }
- x[z].r1=8-i;
- x[z].c1=j+'a';
- x[z].r2=8-(i-a);
- x[z].c2=j-a+'a';
- if(table[i-a][j-a]!=' ')
- {
- ok4=0;
- }
- z++;
- }
- else
- {
- ok4=0;
- }
- a++;
- }
- }
- if(table[i][j]=='r')
- {
- a=1;
- ok1=1;
- ok2=1;
- ok3=1;
- ok4=1;
- while(ok1 || ok2 || ok3 || ok4)
- {
- // printf("%d\n", z);
- if(ok1==1 && (table[i+a][j]<'a' || table[i+a][j]>'z') && i+a<8)
- {
- //printf("1\n");
- if(z+3>n)
- {
- n+=5;
- x=realloc(x, n*sizeof(move));
- }
- x[z].r1=8-i;
- x[z].c1=j+'a';
- x[z].r2=8-i-a;
- x[z].c2=j+'a';
- if(table[i+a][j]!=' ')
- {
- ok1=0;
- }
- z++;
- }
- else
- {
- ok1=0;
- }
- if(ok2==1 && (table[i][j-a]<'a' || table[i][j-a]>'z') && j-a>=0)
- {
- //printf("2\n");
- if(z+3>n)
- {
- n+=5;
- x=realloc(x, n*sizeof(move));
- }
- x[z].r1=8-i;
- x[z].c1=j+'a';
- x[z].r2=8-i;
- x[z].c2=j-a+'a';
- if(table[i][j-a]!=' ')
- {
- ok2=0;
- }
- z++;
- }
- else
- {
- ok2=0;
- }
- if(ok3==1 && (table[i][j+a]<'a' || table[i][j+a]>'z') && j+a<8)
- {
- //printf("3\n");
- if(z+3>n)
- {
- n+=5;
- x=realloc(x, n*sizeof(move));
- }
- x[z].r1=8-i;
- x[z].c1=j+'a';
- x[z].r2=8-i;
- x[z].c2=j+a+'a';
- if(table[i][j+a]!=' ')
- {
- ok3=0;
- }
- z++;
- }
- else
- {
- ok3=0;
- }
- if(ok4==1 && (table[i-a][j]<'a' || table[i-a][j]>'z') && i-a>=0)
- {
- // printf("4\n");
- if(z+3>n)
- {
- n+=5;
- x=realloc(x, n*sizeof(move));
- }
- x[z].r1=8-i;
- x[z].c1=j+'a';
- x[z].r2=8-(i-a);
- x[z].c2=j+'a';
- if(table[i-a][j]!=' ')
- {
- ok4=0;
- }
- z++;
- }
- else
- {
- ok4=0;
- }
- a++;
- // printf("%d %d %d %d %d\n", ok1, ok2, ok3, ok4, a);
- // printf("%d %d %d %d\n", i-a, i+a, j-a, j+a);
- }
- }
- if(table[i][j]=='q')
- {
- ok1=1;
- ok2=1;
- ok3=1;
- ok4=1;
- a=1;
- while(ok1 || ok2 || ok3 || ok4)
- {
- if(ok1==1 && (table[i+a][j+a]<'a' || table[i+a][j+a]>'z') && i+a<8 && j+a<8)
- {
- if(z+3>n)
- {
- n+=5;
- x=realloc(x, n*sizeof(move));
- }
- x[z].r1=8-i;
- x[z].c1=j+'a';
- x[z].r2=8-(i+a);
- x[z].c2=j+a+'a';
- if(table[i+a][j+a]!=' ')
- {
- ok1=0;
- }
- z++;
- }
- else
- {
- ok1=0;
- }
- printf("nu %d %d\n", i+a, j-a);
- if(ok2==1 && (table[i+a][j-a]<'a' || table[i+a][j-a]>'z') && i+a<8 && j-a>=0)
- {
- printf("da\n");
- if(z+3>n)
- {
- n+=5;
- x=realloc(x, n*sizeof(move));
- }
- x[z].r1=8-i;
- x[z].c1=j+'a';
- x[z].r2=8-(i+a);
- x[z].c2=j-a+'a';
- if(table[i+a][j-a]!=' ')
- {
- ok2=0;
- }
- z++;
- }
- else
- {
- ok2=0;
- }
- if(ok3==1 && (table[i-a][j+a]<'a' || table[i-a][j+a]>'z') && i-a>=0 && j+a<8)
- {
- if(z+3>n)
- {
- n+=5;
- x=realloc(x, n*sizeof(move));
- }
- x[z].r1=8-i;
- x[z].c1=j+'a';
- x[z].r2=8-(i-a);
- x[z].c2=j+a+'a';
- if(table[i-a][j+a]!=' ')
- {
- ok3=0;
- }
- z++;
- }
- else
- {
- ok3=0;
- }
- if(ok4==1 && (table[i-a][j-a]<'a' || table[i-a][j-a]>'z') && i-a>0 && j-a>=0)
- {
- if(z+3>n)
- {
- n+=5;
- x=realloc(x, n*sizeof(move));
- }
- x[z].r1=8-i;
- x[z].c1=j+'a';
- x[z].r2=8-(i-a);
- x[z].c2=j-a+'a';
- if(table[i-a][j-a]!=' ')
- {
- ok4=0;
- }
- z++;
- }
- else
- {
- ok4=0;
- }
- // printf("%d %d %d %d %c\n", z, ok2, i+a, j-a, table[i+a][j-a]);
- a++;
- }
- a=1;
- ok1=1;
- ok2=1;
- ok3=1;
- ok4=1;
- while(ok1 || ok2 || ok3 || ok4)
- {
- // printf("%d\n", z);
- if(ok1==1 && (table[i+a][j]<'a' || table[i+a][j]>'z') && i+a<8)
- {
- //printf("1\n");
- if(z+3>n)
- {
- n+=5;
- x=realloc(x, n*sizeof(move));
- }
- x[z].r1=8-i;
- x[z].c1=j+'a';
- x[z].r2=8-i-a;
- x[z].c2=j+'a';
- if(table[i+a][j]!=' ')
- {
- ok1=0;
- }
- z++;
- }
- else
- {
- ok1=0;
- }
- if(ok2==1 && (table[i][j-a]<'a' || table[i][j-a]>'z') && j-a>=0)
- {
- //printf("2\n");
- if(z+3>n)
- {
- n+=5;
- x=realloc(x, n*sizeof(move));
- }
- x[z].r1=8-i;
- x[z].c1=j+'a';
- x[z].r2=8-i;
- x[z].c2=j-a+'a';
- if(table[i][j-a]!=' ')
- {
- ok2=0;
- }
- z++;
- }
- else
- {
- ok2=0;
- }
- if(ok3==1 && (table[i][j+a]<'a' || table[i][j+a]>'z') && j+a<8)
- {
- //printf("3\n");
- if(z+3>n)
- {
- n+=5;
- x=realloc(x, n*sizeof(move));
- }
- x[z].r1=8-i;
- x[z].c1=j+'a';
- x[z].r2=8-i;
- x[z].c2=j+a+'a';
- if(table[i][j+a]!=' ')
- {
- ok3=0;
- }
- z++;
- }
- else
- {
- ok3=0;
- }
- if(ok4==1 && (table[i-a][j]<'a' || table[i-a][j]>'z') && i-a>=0)
- {
- // printf("4\n");
- if(z+3>n)
- {
- n+=5;
- x=realloc(x, n*sizeof(move));
- }
- x[z].r1=8-i;
- x[z].c1=j+'a';
- x[z].r2=8-(i-a);
- x[z].c2=j+'a';
- if(table[i-a][j]!=' ')
- {
- ok4=0;
- }
- z++;
- }
- else
- {
- ok4=0;
- }
- a++;
- }
- }
- }
- }
- }
- x[z].c1='0';
- x[z].c2='0';
- x[z].r1=0;
- x[z].r2=0;
- return x;
- }
- sah.h
- #ifndef SAH_H_INCLUDED
- #define SAH_H_INCLUDED
- void init(char table[][8]);
- void print(char table[][8]);
- int find(char table[][8], char piece, char cols[], int rows[]);
- void encode(char table[][8], char* fen);
- void decode(char table[][8], char* fen);
- typedef struct
- {
- char c1, c2;
- int r1, r2;
- }move;
- move* all_moves(char table[][8], char tomove);
- #endif // SAH_H_INCLUDED
Advertisement
Add Comment
Please, Sign In to add comment