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");
}
}
}