Losowa gra w uproszczone szachy - C

0

Cześć wszystkim.
Mam prośbę odnośnie mojego programu na zaliczenie. Otóż muszę napisać program który wykona losową symulacje gry w szachy na szachownicy 8x8 . Na planszy znajdują się tylko biały goniec i skoczek oraz czarny goniec i skoczek. Muszę napisać program który wykona symulację gry. Posunięcia figur wyznaczać losowo ,ale jeśli figura przeciwnika znajduje się w zasięgu należy wykonać bicie. Program powinien zwracać informacje o pozycji figur, eliminacji figur i numerze posunięcia.

Tak więc przedstawiam wam moje wypociny.
Figury zadeklarowałem jako tablice 2-elementowe, w których zapisane sa pozycje x i y figury.
Funkcja losuj rozstawia losowo figury po planszy // 1. problem: goniec czasami porusza się nie tak jak powinien
Funkcja bicieb/biciec sprawdza czy jest możliwość bicia jeśli tak to bije , zmienna bijb/bijc zwraca wartość 0 w przypadku porażki , 1 w przypadku bicia. //2 problem - funkcja nie zwraca mi tej wartości.
Wiec program nie działa jak powinien.
PS. Wiem, że wszystko jest napisane w bardzo prostacki sposób i przepraszam. Wszystko jest dość chaotyczne, wiem że funkcje bicieb i biciec powinno się zwinnąć w jedna funkcje ale program no i tak się źle wykonuje więc na razie tego nie zrobiłem.
PS2. Próbowałem zwracać wartość bijb/bijc przez wskaźnik ale wtedy 'case' odmawiał mi współpracy.
PS3. Nie jestem na studiach informatycznych , więc bądźcie wyrozumiali.

Będę wdzięczny za każdą uwagę.
Kamil
Z góry dziękuje.

//Kompilowane w Dev-C++

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int skoczekb[2];
int skoczekc[2];
int goniecb[2];
int goniecc[2];
void losujfigury();
void ruch(int[],int[]);
void bicieb(int[],int[],int[],int[]);
void biciec(int[],int[],int[],int[]);
void drukuj(int[], int[], int[], int[]);

int main()
{
srand((unsigned) time (NULL));
losujfigury(); 
int i=0;
for (i;i<50;i++)   {
drukuj(skoczekb,skoczekc,goniecb,goniecc);
bicieb(skoczekb,skoczekc,goniecb,goniecc);
ruch(skoczekb,goniecb);
drukuj(skoczekb,skoczekc,goniecb,goniecc);
biciec(skoczekb,skoczekc,goniecb,goniecc);
ruch(skoczekc,goniecc);
}
  
  system("PAUSE");	
  return 0;
}


              
void drukuj(int skoczekb[2],int skoczekc[2],int goniecb[2],int goniecc[2])
{
int i;
 for (i=0;i<1;i++) {
    printf("skoczekbialy  %d %d \n",skoczekb[i], skoczekb[i+1]);
    printf("skoczekczarny %d %d \n",skoczekc[i], skoczekc[i+1]);
    printf("goniec bialy  %d %d \n",goniecb[i],goniecb[i+1]);
    printf("goniec czarny %d %d \n\n\n",goniecc[i],goniecc[i+1]);
        }
}      
void losujfigury()
{
     int i;

do 
{        
     for (i=0;i<2;i++) {
         skoczekb[i]=rand()%8+1;
         skoczekc[i]=rand()%8+1;
         goniecb[i]=rand()%8+1;
         goniecc[i]=rand()%8+1;
         }
}
while ( (skoczekb[0]==skoczekc[0] && skoczekb[1]==skoczekc[1]) ||
        (skoczekb[0]==goniecb[0] && skoczekb[1]==goniecb[1]) ||
        (skoczekb[0]==goniecc[0] && skoczekb[1]==goniecc[1]) ||
        (skoczekc[0]==goniecb[0] && skoczekc[1]==goniecb[1]) ||
        (skoczekc[0]==goniecc[0] && skoczekc[1]==goniecc[1]) ||
        (goniecb[0]==goniecc[0] && goniecb[1]==goniecc[1]) );
}
     
void ruch(int skoczekb[2],int goniecb[2])
{
     int x,y,z;
     int v[2]={-1,1};
     int s[14]={-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7};
     int h[2]={-2,2};
    
do {    
      x=v[rand()%2];
      y=h[rand()%2];      
     int i,j;
     i=rand()%2+1;
     j=rand()%2+1;
     if( skoczekb[0]==0 && skoczekc[1]==0)
                       i=2;
     if (goniecb[0]==0 && goniecb[1]==0)
                       i=1;
     if(( skoczekb[0]==0 && skoczekc[1]==0)&&(goniecb[0]==0 && goniecb[1]==0)){
     printf("KOniec gry");
     break;
     }
                        
                               //i=1 -ruch skoczka i=2 ruch gonca
     
if (i==1 && j==1) {
       skoczekb[0]=skoczekb[0]+x;
       skoczekb[1]=skoczekb[1]+y;
}
if (i==1 && j==2)
   {
       skoczekb[0]=skoczekb[0]+y;
       skoczekb[1]=skoczekb[1]+x;
       }
if (i==2){       
    do{
           z=s[rand()%14];           
            goniecb[0]=goniecb[0]+v[rand()%2]*z;
            goniecb[1]=goniecb[1]+v[rand()%2]*z;
       }
       while ((goniecb[0]>8 || goniecb[0]<1) ||
             (goniecb[1]>8 || goniecb[1]<1));
}
}
while ((skoczekb[0]>=9 || skoczekb[0]<1) || 
      (skoczekb[1]>=9 || skoczekb[1]<=0) );
      
//if(skoczekb[0]==goniecb[0] && skoczekb[1]==goniecb[1])
//ruch(skoczekb,goniecb);

//if(goniecb[0]==skoczekb[0] && goniecb[1]==skoczekb[1])
//ruch(skoczekb,goniecb);
}

void bicieb(int skoczekb[2],int skoczekc[2],int goniecb[2],int goniecc[2])
{
     int x[2]={-1,1};
     int y[2]={-2,2};
     int g[14]={-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7};
     int i,j,k,l;
for (i=0;i<2;i++)
    for (j=0;j<2;j++){
    
    if(skoczekb[0]+x[i]==goniecc[0] && skoczekb[1]+y[j]==goniecc[1]) {
                                skoczekb[0]=goniecc[0];
                                skoczekb[1]=goniecc[1];
                                goniecc[0]=0;
                                goniecc[1]=0;
                                printf("bicie - skoczek biały bije gonca \n");}
    if(skoczekb[0]+x[i]==skoczekc[0] && skoczekb[1]+y[j]==skoczekc[1]) {
                                skoczekb[0]=skoczekc[0];
                                skoczekb[1]=skoczekc[1];
                                skoczekc[0]=0;
                                skoczekc[1]=0;
                                printf("bicie - skoczek bialy bije skoczka \n");
}
}
for (i=0;i<2;i++)
    for (j=0;j<2;j++){
    
    if(skoczekb[0]+y[i]==goniecc[0] && skoczekb[1]+x[j]==goniecc[1]) {
                                skoczekb[0]=goniecc[0];
                                skoczekb[1]=goniecc[1];
                                goniecc[0]=0;
                                goniecc[1]=0;
                                printf("bicie - skoczek bialy bije gonca \n");}
    if(skoczekb[0]+y[i]==skoczekc[0] && skoczekb[1]+x[j]==skoczekc[1]) {
                                skoczekb[0]=skoczekc[0];
                                skoczekb[1]=skoczekc[1];
                                skoczekc[0]=0;
                                skoczekc[1]=0;
                                printf("bicie - skoczek bialy bije skoczka \n");
}
}

for (i=0;i<2;i++)
    for (j=0;j<2;j++){
        if (i==1 && j==1){
           k=1;
           l=1;
           }
        if (i==1 && j==2){
           k=1;
           l=-1;
           }
        if (i==2 && j==1){
           k=-1;
           l=1;
           }
        if (i==2 && j==2){
           k=-1;
           l=-1;
           }
        if (goniecb[0]+k*g[i]==skoczekc[0] && goniecb[1]+l*g[i]==skoczekc[1]){
           goniecb[0]=skoczekc[0];
           goniecc[1]=skoczekc[1];
           skoczekc[0]=0;
           skoczekc[1]=0;
           printf("Goniec bialy bije skoczka\n");
           }
        if (goniecb[0]+k*g[i]==goniecc[0] && goniecb[1]+l*g[i]==goniecc[1]){
           goniecb[0]=goniecc[0];
           goniecb[1]=goniecc[1];
           goniecc[0]=0;
           goniecc[1]=0;
           printf("Goniec bialy bije gonca\n");
           }
           }
}

void biciec(int skoczekb[2],int skoczekc[2],int goniecb[2],int goniecc[2])
{
     int x[2]={-1,1};
     int y[2]={-2,2};
     int g[14]={-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7};
     int i,j,k,l;
for (i=0;i<2;i++)
    for (j=0;j<2;j++){
    
    if(skoczekc[0]+x[i]==goniecb[0] && skoczekc[1]+y[j]==goniecb[1]) {
                                skoczekc[0]=goniecb[0];
                                skoczekc[1]=goniecb[1];
                                goniecb[0]=0;
                                goniecb[1]=0;
                                printf("bicie - skoczek czarny bije gonca \n");}
    if(skoczekc[0]+x[i]==skoczekb[0] && skoczekc[1]+y[j]==skoczekb[1]) {
                                skoczekc[0]=skoczekb[0];
                                skoczekc[1]=skoczekb[1];
                                skoczekb[0]=0;
                                skoczekb[1]=0;
                                printf("bicie - skoczek czarny bije skoczka \n");
}
}
for (i=0;i<2;i++)
    for (j=0;j<2;j++){
    
    if(skoczekc[0]+y[i]==goniecb[0] && skoczekc[1]+x[j]==goniecb[1]) {
                                skoczekc[0]=goniecb[0];
                                skoczekc[1]=goniecb[1];
                                goniecb[0]=0;
                                goniecb[1]=0;
                                printf("bicie - skoczek czarny bije gonca \n");}
    if(skoczekc[0]+y[i]==skoczekb[0] && skoczekc[1]+x[j]==skoczekb[1]) {
                                skoczekc[0]=skoczekb[0];
                                skoczekc[1]=skoczekb[1];
                                skoczekb[0]=0;
                                skoczekb[1]=0;
                                printf("bicie - skoczek czarny bije skoczka \n");
}
}

for (i=0;i<2;i++)
    for (j=0;j<2;j++){
        if (i==1 && j==1){
           k=1;
           l=1;
           }
        if (i==1 && j==2){
           k=1;
           l=-1;
           }
        if (i==2 && j==1){
           k=-1;
           l=1;
           }
        if (i==2 && j==2){
           k=-1;
           l=-1;
           }
        if (goniecc[0]+k*g[i]==skoczekb[0] && goniecc[1]+l*g[i]==skoczekb[1]){
           goniecc[0]=skoczekb[0];
           goniecc[1]=skoczekb[1];
           skoczekb[0]=0;
           skoczekb[1]=0;
           printf("Bicie goniec czarny bije skoczka \n");
           }
        if (goniecc[0]+k*g[i]==goniecb[0] && goniecc[1]+l*g[i]==goniecb[1]){
           goniecc[0]=goniecb[0];
           goniecc[1]=goniecb[1];
           goniecb[0]=0;
           goniecb[1]=0;
           printf("Bicie goniec czarnty bije gonca \n");
           }
           }
}

 

Wysłalem pierwsza wersje , która nie ma warunkow na zatrzymanie , tu jest aktualna (nie stety przed chwilą coś gmerałem i popsułem więc nie kod nie chce współpracować)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int skoczekb[2];
int skoczekc[2];
int goniecb[2];
int goniecc[2];
void losujfigury();
void ruch(int[],int[]);
void bicieb(int[],int[],int[],int[],int );
void biciec(int[],int[],int[],int[],int );
void drukuj(int[], int[], int[], int[]);

int main()
{
srand((unsigned) time (NULL));
losujfigury();
drukuj(skoczekb,skoczekc,goniecb,goniecc);
int i=0;
int bijb=0;//=0; //zmienna iformujaca o tym czy bicie zostalo wykonane (1) czy nie (0)
int bijc=0;//=0;
for (i;i<50;i++)   {			
bicieb(skoczekb,skoczekc,goniecb,goniecc,bijb);

if(( skoczekc[0]==0 && skoczekc[1]==0)&&(goniecc[0]==0 && goniecc[1]==0)){
     printf("KOniec gry");
     break; }
        
switch(bijb)
{
case 0:
ruch(skoczekb,goniecb);
drukuj(skoczekb,skoczekc,goniecb,goniecc);

case 1:
drukuj(skoczekb,skoczekc,goniecb,goniecc);
}

biciec(skoczekb,skoczekc,goniecb,goniecc,bijc);
if(( skoczekb[0]==0 && skoczekb[1]==0)&&(goniecb[0]==0 && goniecb[1]==0)){
     printf("KOniec gry");
     break;}
    
switch(bijc)
{
case 0:
ruch(skoczekc,goniecc);
drukuj(skoczekb,skoczekc,goniecb,goniecc);

case 1:
drukuj(skoczekb,skoczekc,goniecb,goniecc);

}

}
  
  system("PAUSE");	
  return 0;
}


              
void drukuj(int skoczekb[2],int skoczekc[2],int goniecb[2],int goniecc[2])
{

    printf("skoczekbialy  %d %d \n",skoczekb[0], skoczekb[1]);
    printf("skoczekczarny %d %d \n",skoczekc[1], skoczekc[1]);
    printf("goniec bialy  %d %d \n",goniecb[1],goniecb[1]);
    printf("goniec czarny %d %d \n\n\n",goniecc[1],goniecc[1]);

}      
void losujfigury()
{
     int i;

do 
{        
     for (i=0;i<2;i++) {
         skoczekb[i]=rand()%8+1;
         skoczekc[i]=rand()%8+1;
         goniecb[i]=rand()%8+1;
         goniecc[i]=rand()%8+1;
         }
}
while ( (skoczekb[0]==skoczekc[0] && skoczekb[1]==skoczekc[1]) ||
        (skoczekb[0]==goniecb[0] && skoczekb[1]==goniecb[1]) ||
        (skoczekb[0]==goniecc[0] && skoczekb[1]==goniecc[1]) ||
        (skoczekc[0]==goniecb[0] && skoczekc[1]==goniecb[1]) ||
        (skoczekc[0]==goniecc[0] && skoczekc[1]==goniecc[1]) ||
        (goniecb[0]==goniecc[0] && goniecb[1]==goniecc[1]) );
}
     
void ruch(int skoczekb[2],int goniecb[2])
{
     int x,y,z;
     int v[2]={-1,1};
     int s[14]={-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7};
     int h[2]={-2,2};
    
do {    
      x=v[rand()%2];			//
      y=h[rand()%2];      
     int i,j;
     i=rand()%2+1;
     j=rand()%2+1;
     if( skoczekb[0]==0 && skoczekb[1]==0)
                       i=2;
     if (goniecb[0]==0 && goniecb[1]==0)
                       i=1;
  
                       
   //i=1 -ruch skoczka i=2 ruch gonca
     
if (i==1 && j==1) {
       skoczekb[0]=skoczekb[0]+x;
       skoczekb[1]=skoczekb[1]+y;
}
if (i==1 && j==2)
   {
       skoczekb[0]=skoczekb[0]+y;
       skoczekb[1]=skoczekb[1]+x;
       }
if (i==2){       
    do{
           z=s[rand()%14];           
            goniecb[0]=goniecb[0]+v[rand()%2]*z;
            goniecb[1]=goniecb[1]+v[rand()%2]*z;
       }
       while ((goniecb[0]>8 || goniecb[0]<1) ||
             (goniecb[1]>8 || goniecb[1]<1));
}
}
while ((skoczekb[0]>=9 || skoczekb[0]<1) || 
      (skoczekb[1]>=9 || skoczekb[1]<=0) );
      
}

void bicieb(int skoczekb[2],int skoczekc[2],int goniecb[2],int goniecc[2],int bijb)
{
	//sprawdzanie wszystkich mozliwosci posuniecia
     int x[2]={-1,1};
     int y[2]={-2,2};
     int g[14]={-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7};
     int i,j,k,l;
for (i=0;i<2;i++)
    for (j=0;j<2;j++){
    
    if(skoczekb[0]+x[i]==goniecc[0] && skoczekb[1]+y[j]==goniecc[1]) {
                                skoczekb[0]=goniecc[0];
                                skoczekb[1]=goniecc[1];
                                goniecc[0]=0;
                                goniecc[1]=0;
                                bijb=1;
                                printf("bicie - skoczek bialy bije gonca \n");}
    if(skoczekb[0]+x[i]==skoczekc[0] && skoczekb[1]+y[j]==skoczekc[1]) {
                                     if(bijb==1)
                                     break;
                                skoczekb[0]=skoczekc[0];
                                skoczekb[1]=skoczekc[1];
                                skoczekc[0]=0;
                                skoczekc[1]=0;
                                bijb=1;
                                printf("bicie - skoczek bialy bije skoczka \n");
}
}
for (i=0;i<2;i++)
    for (j=0;j<2;j++){
    
    if(skoczekb[0]+y[i]==goniecc[0] && skoczekb[1]+x[j]==goniecc[1]) {
                                    if(bijb==1)
                                     break;
                                skoczekb[0]=goniecc[0];
                                skoczekb[1]=goniecc[1];
                                goniecc[0]=0;
                                goniecc[1]=0;
                                bijb=1;
                                printf("bicie - skoczek bialy bije gonca \n");}
    if(skoczekb[0]+y[i]==skoczekc[0] && skoczekb[1]+x[j]==skoczekc[1]) {
                                     if(bijb==1)
                                     break;
                                skoczekb[0]=skoczekc[0];
                                skoczekb[1]=skoczekc[1];
                                skoczekc[0]=0;
                                skoczekc[1]=0;
                                bijb=1;
                                printf("bicie - skoczek bialy bije skoczka \n");
}
}

for (i=0;i<2;i++)
    for (j=0;j<2;j++){
        if (i==1 && j==1){
           k=1;
           l=1;
           }
        if (i==1 && j==2){
           k=1;
           l=-1;
           }
        if (i==2 && j==1){
           k=-1;
           l=1;
           }
        if (i==2 && j==2){
           k=-1;
           l=-1;
           }
        if (goniecb[0]+k*g[i]==skoczekc[0] && goniecb[1]+l*g[i]==skoczekc[1]){
                                           if(bijb==1)
                                     break;
           goniecb[0]=skoczekc[0];
           goniecc[1]=skoczekc[1];
           skoczekc[0]=0;
           skoczekc[1]=0;
           bijb=1;
           printf("Goniec bialy bije skoczka\n");
           }
        if (goniecb[0]+k*g[i]==goniecc[0] && goniecb[1]+l*g[i]==goniecc[1]){
                                          if(bijb==1)
                                     break;
           goniecb[0]=goniecc[0];
           goniecb[1]=goniecc[1];
           goniecc[0]=0;
           goniecc[1]=0;
           bijb=1;
           printf("Goniec bialy bije gonca\n");
           }
           }
}

void biciec(int skoczekb[2],int skoczekc[2],int goniecb[2],int goniecc[2],int bijc)
{
     
     int x[2]={-1,1};
     int y[2]={-2,2};
     int g[14]={-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7};
     int i,j,k,l;
for (i=0;i<2;i++)
    for (j=0;j<2;j++){
    
    if(skoczekc[0]+x[i]==goniecb[0] && skoczekc[1]+y[j]==goniecb[1]) {
                                skoczekc[0]=goniecb[0];
                                skoczekc[1]=goniecb[1];
                                goniecb[0]=0;
                                goniecb[1]=0;
                                bijc=1;
                                printf("bicie - skoczek czarny bije gonca \n");}
    if(skoczekc[0]+x[i]==skoczekb[0] && skoczekc[1]+y[j]==skoczekb[1]) {
                                     if(bijc==1)
                                     break;
                                skoczekc[0]=skoczekb[0];
                                skoczekc[1]=skoczekb[1];
                                skoczekb[0]=0;
                                skoczekb[1]=0;
                                bijc=1;
                                printf("bicie - skoczek czarny bije skoczka \n");
}
}
for (i=0;i<2;i++)
    for (j=0;j<2;j++){
    
    if(skoczekc[0]+y[i]==goniecb[0] && skoczekc[1]+x[j]==goniecb[1]) {
                                    if(bijc==1)
                                     break;
                                skoczekc[0]=goniecb[0];
                                skoczekc[1]=goniecb[1];
                                goniecb[0]=0;
                                goniecb[1]=0;
                                bijc=1;
                                printf("bicie - skoczek czarny bije gonca \n");}
    if(skoczekc[0]+y[i]==skoczekb[0] && skoczekc[1]+x[j]==skoczekb[1]) {
                                     if(bijc==1)
                                     break;
                                skoczekc[0]=skoczekb[0];
                                skoczekc[1]=skoczekb[1];
                                skoczekb[0]=0;
                                skoczekb[1]=0;
                                bijc=1;
                                printf("bicie - skoczek czarny bije skoczka \n");
}
}

for (i=0;i<2;i++)
    for (j=0;j<2;j++){
        if (i==1 && j==1){
           k=1;
           l=1;
           }
        if (i==1 && j==2){
           k=1;
           l=-1;
           }
        if (i==2 && j==1){
           k=-1;
           l=1;
           }
        if (i==2 && j==2){
           k=-1;
           l=-1;
           }
        if (goniecc[0]+k*g[i]==skoczekb[0] && goniecc[1]+l*g[i]==skoczekb[1]){
                                           if(bijc==1)
                                            break;
           goniecc[0]=skoczekb[0];
           goniecc[1]=skoczekb[1];
           skoczekb[0]=0;
           skoczekb[1]=0;
           bijc=1;
           printf("Bicie goniec czarny bije skoczka \n");
           }
        if (goniecc[0]+k*g[i]==goniecb[0] && goniecc[1]+l*g[i]==goniecb[1]){
                                          if(bijc==1)
                                          break;
           goniecc[0]=goniecb[0];
           goniecc[1]=goniecb[1];
           goniecb[0]=0;
           goniecb[1]=0;
           bijc=1;
           printf("Bicie goniec czarnty bije gonca \n");
           }
           }
}
0

Jesteś niepoważny. Mamy zgadywać co oznaczają te wszystkie magiczne liczby? I co oznaczają te tablice? Napisz ten kod jeszcze raz, tym razem w wersji dla człowieka, moze wtedy się ktoś zlituje.
A jeśli chodzi o szukanie błędów w działaniu to lekcja na dziś: debugger

0

cokolwiek robi ten kod, na pewno coś przekombinowałeś i sam sobie życie utrudniłeś. funkcje nie gryzą

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