Witam,
Muszę napisać warcaby w języku C. Napisałem już sporą część i zatrzymałem się w jednym momencie. Chodzi o damki...
Kompletnie nie wiem jak to ugryźć, jak napisać warunki na damki... Program opiera się na tablicy tekstowej.
Załączam kod:
#include<stdio.h>
int main()
{
int i,j,m,n,k,w;
int g=1; /* zmienna gracza*/
char ruch;
char plansza[8][8]={
{' ','O',' ','O',' ','O',' ','O'},
{'O',' ','O',' ','O',' ','O',' '},
{' ','O',' ','O',' ','O',' ','O'},
{' ',' ',' ',' ',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' ',' '},
{'X',' ','X',' ','X',' ','X',' '},
{' ','X',' ','X',' ','X',' ','X'},
{'X',' ','X',' ','X',' ','X',' '}
};
printf("\tWARCABY DLA 2 OSOB.\n");
printf("Jestes graczem numer %d\n",g);
printf("Twoje pionki to X. Pionki gracza 2 to O\n");
printf("\n\t 12345678 ");
printf("\n ==========\n\t");
for(i=0;i<8;i++)
{
printf("%d%c",i+1,124);
for(j=0;j<8;j++)
{
printf("%c",plansza[i][j]);
}
printf("%c ",124);
printf("\n\t");
}
printf(" ==========\n");
while(1) /* główna pętla wykonująca program */
{ /*-------------------------------------------------------------------- gracz 1 */
while(g==1)
{
k=7; w=0;
if(plansza[k][w]=='O' )
plansza[k][w]='G';
if(plansza[k][w|+2]=='O' ) /* zamiana pionka O na damkę G*/
plansza[k][w+2]='G';
if(plansza[k][w+4]=='O' )
plansza[k][w+4]='G';
if(plansza[k][w+6]=='O')
plansza[k][w+6]='G';
printf("Ruch gracza 1\n");
g=g+1;
printf("Wprowadz wspolrzedne pionka (np. 1 1, 2 7 \nnajpierw wspolrzedna pozioma, pozniej pionowa) \ni w ktora strone przesunac pionek (l-lewo, p-prawo):\n");
fflush(stdin);
scanf("%d%d",&n, &m);
n=n-1;
m=m-1;
getchar();
ruch=getchar();
switch(ruch)
{
case 'l':
if(n>0 && m>0 && n<8 && m<8) {
if(plansza[m][n]!='X') { /* spr czy to twój pionek*/
g=g-1;
printf("Nie twoj pionek!\n");
break; }
else {
plansza[m][n]=' ';
if(plansza[m-2][n-2]==' ' && plansza[m-1][n-1]=='O') { /* bicie w lewo*/
plansza[m-1][n-1]=' ';
plansza[m-2][n-2]='X'; }
else {
if(plansza[--m][--n]!=' ') { /*sprawdza czy docelowe miejsce jest wolne*/
g=g-1;
printf("Pole zajete\n");
plansza[++m][++n]='X';
break; }
else plansza[m][n]='X'; }
}
}
else {
g=g-1;
printf("Zly ruch"); }
printf("\n\t 12345678 ");
printf("\n ==========\n");
printf("\t");
for(i=0;i<8;i++)
{
printf("%d%c",i+1,124);
for(j=0;j<8;j++)
{
printf("%c",plansza[i][j]);
}
printf("%c ",124);
printf("\n\t");
}
printf(" ==========\n");
break;
case 'p':
if(n>-1 && m>-1 && n<7 && m<8) {
if(plansza[m][n]!='X') {
g=g-1;
printf("Nie twoj pionek!\n");
break; }
else {
plansza[m][n]=' ';
if(plansza[m-2][n+2]==' ' && plansza[m-1][n+1]=='O') {
plansza[m-1][n+1]=' '; /*bicie w prawo*/
plansza[m-2][n+2]='X'; }
else {
if(plansza[--m][++n]!=' ') {
g=g-1;
printf("Pole zajete\n");
plansza[++m][--n]='X';
break; }
else plansza[m][n]='X'; }
}
}
else {
g=g-1;
printf("Zly ruch"); }
printf("\n\t 12345678 ");
printf("\n ==========\n");
printf("\t");
for(i=0;i<8;i++)
{
printf("%d%c",i+1,124);
for(j=0;j<8;j++)
{
printf("%c",plansza[i][j]);
}
printf("%c ",124);
printf("\n\t");
}
printf(" ==========\n");
break;
default:
g=g-1;
printf("Wpisz poprawne polecenie\n");
break;
}
}
/*-------------------------------------------------------------------- gracz 2 */
while(g==2)
{
k=0; w=1;
if(plansza[k][w]=='X')
plansza[k][w]='Z'; /* zamiana pionka X na damkę Z*/
if(plansza[k][w+2]=='X')
plansza[k][w+2]='Z';
if(plansza[k][w+4]=='X')
plansza[k][w+4]='Z';
if(plansza[k][w+6]=='X')
plansza[k][w+6]='Z';
printf("Ruch gracza 2\n");
g=g-1;
printf("Wprowadz wspolrzedne pionka (np. 1 1, 2 7 \nnajpierw wspolrzedna pozioma, pozniej pionowa) \ni w ktora strone przesunac pionek (l-lewo, p-prawo):\n");
fflush(stdin);
scanf("%d%d",&n, &m);
n=n-1;
m=m-1;
getchar();
ruch=getchar();
switch(ruch)
{
case 'l':
if(n>0 && m>-1 && n<8 && m<8)
{
if(plansza[m][n]!='O') {
g=g+1;
printf("Nie twoj pionek!\n");
break; }
else {
plansza[m][n]=' ';
if(plansza[m+2][n-2]==' ' && plansza[m+1][n-1]=='X') {
plansza[m+1][n-1]=' '; /*bicie w lewo*/
plansza[m+2][n-2]='O'; }
else {
if(plansza[++m][--n]!=' ') {
g=g+1;
printf("Pole zajete\n");
plansza[--m][++n]='O';
break; }
else
plansza[m][n]='O'; }
}
}
else {
g=g+1;
printf("Zly ruch"); }
printf("\n\t 12345678 ");
printf("\n ==========\n");
printf("\t");
for(i=0;i<8;i++)
{
printf("%d%c",i+1,124);
for(j=0;j<8;j++)
{
printf("%c",plansza[i][j]);
}
printf("%c ",124);
printf("\n\t");
}
printf(" ==========\n");
break;
case 'p':
if(n>-1 && m>-1 && n<7 && m<8)
{
if(plansza[m][n]!='O') {
g=g+1;
printf("Nie twoj pionek!\n");
break; }
else {
plansza[m][n]=' ';
if(plansza[m+2][n+2]==' ' && plansza[m+1][n+1]=='X') {
plansza[m+1][n+1]=' '; /*bicie w prawo*/
plansza[m+2][n+2]='O';
}
else {
if(plansza[++m][++n]!=' ') {
g=g+1;
printf("Pole zajete\n");
plansza[--m][--n]='O';
break; }
else plansza[m][n]='O';
}
}
}
else {
g=g+1;
printf("Zly ruch"); }
printf("\n\t 12345678 ");
printf("\n ==========\n");
printf("\t");
for(i=0;i<8;i++)
{
printf("%d%c",i+1,124);
for(j=0;j<8;j++)
{
printf("%c",plansza[i][j]);
}
printf("%c ",124);
printf("\n\t");
}
printf(" ==========\n");
break;
default:
g=g+1;
printf("Wpisz poprawne polecenie\n");
break;
}
}
}
}
Myślałem nad tym żeby pobierać współrzędne damki i współrzędne docelowe i przesuwać. Ale jak napisać warunek żeby program sprawdzał czy na "torze ruchu" damki nie ma pionków własnych, przeciwnika, czy pionki przeciwnika nie są przy sobie aby można było wykonać bicie 'na dwa' itd. ?
Proszę pomóżcie, bo siedzę nad tym 2 dni i nic mi nie wychodzi...