program pokazujacy ustawienia figur na szachownicy

0

Mam do napisania program w C, który będzie wczytywał ustawienia figur na szachownicy z pliku wejściowego a na wyjsciu utworzy plik wyjsciowy z wszytkimi możliwościami w jednym kroku dla kazdej figury czyli np:
Wejscie:
Pion1 A2

Wyjscie:
Pion1 A3 A4

ewentualnie czy znalazłby sie ktoś kto by mi to napisał?

0

a nie lepiej samemu napisać? przynajmniej się czegoś nauczysz

0

Nie chodzi mi o to, żeby jemu dać gotowca, ale tak z ciekawości zapytam, na ile można wycenić taki programik? xD

0

poszedłem za radą no_solution_found'a i coś wyskrobałem jednak mam problem ponieważ chcę aby mi wyszukiwało każde pole i przeprowadzalo kombinacje jednak wyrzuca mi ostrzeżenie i program staje w miejscu gdzie jest komentarz moze ktoś pomóc?

#include<stdio.h>
#include<string.h>
#include<ctype.h>

void pion ();//funkcja dajaca wszystkie mozliwosci dla kazdego piona
void wieza (char , char );
void pobieranie_z_pliku ();
char wejscie[50][20];
char *wyjscie[50];
char Pion[] = "Pion";
char Wieza[] = "Wieza";
char Skoczek[] = "Skoczek";
char Goniec[] = "Goniec";
char Hetman[] = "Hetman";
char Krol[] = "Krol";
char A[] = "A";
int i;
int j = 0;
int main()
{
      pobieranie_z_pliku();
      
      pion(); 
     
    
   
  
    
system("pause");
return 0;
}


void pobieranie_z_pliku ()
{
     FILE *ustawienie;
      char pobierz_z_pliku[20];
    
      printf("Podaj nazwę pliku z ustawieniami figur:\n");
      scanf("%s",pobierz_z_pliku);
       ustawienie=fopen(pobierz_z_pliku,"r"); 
       
                                
       int i=0;
       

       while(EOF!=(fgetc(ustawienie))) 
                                       {
                                       fscanf(ustawienie,"%s", &wejscie[i]); 
                                       i++;
    
                                       }
       fclose(ustawienie);
}



void pion()
{
     char xP;
     char yP;
     for(i=0;i<50;i++)  
                        {      
                        if (strcmp( wejscie[i-1], Pion) == 0) 
                           {
                           while(strcmp( wejscie[i], Wieza) != 0)
                                 {
                                 xP = wejscie[i][0];
                                 yP = wejscie[i][1];  
                                 printf("ustawienia pionkow %c %c\n",xP, yP);
                                
                                
                                 if (strcmp( wejscie[i][0], A) == 0)// tutaj
                                    {
                                        if (yP == 2)
                                           {
                                               printf(" A2 moze poruszyc sie na  A3 lub A4\n");
                                           }
                                    }                                
                                 i++;
                                 }                          
                           }     
                        }
    
}


      
 



0

strcmp() porównuje ciągi znaków. A wejscie[i][0] to jeden znak.
Zapisz to twoje A jako char a nie jako char[] bo to i tak jeden znak i potem zrób
if( wejscie[i][0] == A)

0

zrobiłem to troche inaczej nie wiem czy dobrze ale dziala jednak teraz mam pytanie w jaki inny prosty sposób mogę zrobić to to zacząłem tymi ifami bo 64 razy cos takiego pisac mi sie nie usmiecha ;/

void pion()
{
     char xP;
     char yP;
     wyjscie[j++] = "Wy_pion";
     for(i=0;i<50;i++)  
                        {      
                        if (strcmp( wejscie[i-1], Pion) == 0) 
                           {
                           while(strcmp( wejscie[i], Wieza) != 0)
                                 {
                                 xP = wejscie[i][0];
                                 yP = wejscie[i][1];  
                                 printf("ustawienia pionkow %c %c %s %s %d %d\n",xP, yP, wejscie[i], A, strcmp( wejscie[i], A), yP);
                                
                                
                                 if (xP == 65 && yP == 50)// litera A i Cyfra 2
                                    {
                                               printf(" A2 moze poruszyc sie na  A3 lub A4\n");
                                               wyjscie[j++] = "Pion_A2_na";
                                               wyjscie[j++] = "A3";
                                               wyjscie[j++] = "A4";
                                    } 
                                    else
                                    {
                                               printf(" A2 moze poruszyc sie na  A3\n");
                                               wyjscie[j++] = "Pion_A2_na";
                                               wyjscie[j++] = "A3";
                                    } 
                                 if (xP == 66 && yP == 50)
                                    {
                                               printf(" B2 moze poruszyc sie na  B3 lub B4\n");
                                               wyjscie[j++] = "Pion_A3_na";
                                               wyjscie[j++] = "B3";
                                               wyjscie[j++] = "B4";                                              
                                    }                              
                                    else
                                    {
                                               printf(" B2 moze poruszyc sie na  B3\n");
                                               wyjscie[j++] = "Pion_B2_na";
                                               wyjscie[j++] = "B3";
                                    }                   
                                 if (xP == 67 && yP == 50)
                                    {
                                               printf(" C2 moze poruszyc sie na  C3 lub C4\n");
                                               wyjscie[j++] = "Pion_C3_na";
                                               wyjscie[j++] = "C3";
                                               wyjscie[j++] = "C4";                                              
                                    }     
                                    else
                                    {
                                               printf(" C2 moze poruszyc sie na  C3\n");
                                               wyjscie[j++] = "Pion_C2_na";
                                               wyjscie[j++] = "C3";
                                    }  
                                 
                                                                
                                 i++;
                                 }                          
                           }     
                        }
    
}
0

tam źle napisałem te if'y działało to by gdyby sie zastosowało funkcje switch ale i tak to nie rozwiazuje mojego problemu

0
  1. przydala by sie globalna tablica reprezentujaca szachownice
  2. dla kazdej figury/piona osobna funkcja ktora sprawdza zajetosc pol na polach na ktore dana figura oze wykonac ruch

jedyny problem w tym zadaniu to sprytne rozwiazanie sytuacji w ktorej 9 figur wykonalo ruch i przez to 10 nie ma mozliwosci ruchu...

0

Dodatkowa trudności wynikają z tego, że:
1 - jeżeli krok jest szachowany, to trzeba wykonać ruch ratujący króla,
2 - po ruchu król nie może być pod biciem,
3 - dla pewnych ruchów (roszada bicie w przelocie) możliwość wykonania ruchu zależy nie tylko od aktualnego ustawienia ale i od (nieznanego nam) dotychczasowego przebiegu partii.

1 użytkowników online, w tym zalogowanych: 0, gości: 1