Hej piszę gre warcaby w języku c, napisałem kilka funkcji, ale niestety coś nie działa, szukałem chwile i nie moge znaleźć błędu, główny problemem jest to że cały czas wyskakuje niepoprawny ruch, a wczęsniej jak pokazywało poprawny ruch to plansza się nie aktualizowała, z góry bardzo dziękuje za pomoc
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<string.h>
void stworzenieplanszy(char plansza[8][8])
{
char planszapocz[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',' '}
};
//przekazywanie wartosci
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
plansza[i][j] = planszapocz[i][j];
}
}
}
void wyswietlenieplanszy(char plansza[8][8])
{
printf(" a b c d e f g h\n"); // oznaczenie kolumny
for (int i = 0; i < 8; i++) {
printf("%d ", i + 1); // oznaczenie wiersze
for (int j = 0; j < 8; j++) {
printf("%c ", plansza[i][j]);
}
printf("\n");
}
}
void poczatek()
{
printf("tekst 1\n");
printf("tekst 2\n");
printf("tekst 3\n");
printf("\n\n\n");
}
int czymapionki(char gracz, char graczdamka, char plansza[8][8])
{
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
if (plansza[i][j] == gracz || plansza[i][j] == graczdamka)
{
return 1; // sa jeszcze pionki
}
}
}
return 2; // nie ma pionkow
}
void zamianaliter(const char *coord, int *x, int *y)
{
*x = coord[0] - 'a'; // Z literki 'a'-'h' na indeks 0-7
*y = 8 - (coord[1] - '0'); // Z cyfry '1'-'8' na indeks 7-0
}
int czypoprawnyruch(char plansza[8][8], int poczx, int poczy, int konx, int kony, char gracz)
{
// czy ruch jest po przekatnej
if (konx - poczx != 1 || kony - poczy != 1)
{
return 0; // Ruch nie jest po przekatnej o 1
}
// czy docelowe pole jest puste
if (plansza[konx][kony] != ' ')
{
return 0; //docelowe pole nie jest puste
}
// czy koñcowe pole nie jest zajete przez pionek gracza
if (plansza[konx][kony] == gracz)
{
return 0; // Na koñcowym polu jest juz pionek gracza
}
if (konx >= poczx || kony != poczy + 1)
{
return 0; // Ruch nie jest w góre planszy lub nie jest po przekatnej
}
// Ruch jest poprawny
return 1;
}
int czymoznazbic(char plansza[8][8], int poczx, int poczy, int konx, int kony, char gracz, char komputer)
{
// Sprawdzamy, czy ruch jest o dwa pola po przekatnej
if (abs(konx - poczx) != 2 || (kony - poczy) != 2)
{
return 0; // Ruch musi byc o dwa pola
}
// Sprawdzamy, czy pole koñcowe jest puste
if (plansza[konx][kony] != ' ') {
return 0; // Koñcowe pole nie jest puste
}
// Sprawdzamy, czy na polu poprednim znajduje sie pionek przeciwnika
int srodx = (poczx + konx) / 2;
int srody = (poczy + kony) / 2;
if (plansza[srodx][srody] != komputer) {
return 0; // Jezeli na srodku nie ma pionka przeciwnika, nie mozna wykonac bicia
}
// Bicie jest mozliwe
return 1;
}
void wykonanieruchu(char plansza[8][8], int poczx, int poczy, int konx, int kony) {
char temp = plansza[poczx][poczy]; // Zapamietujemy pionek, który wykonuje ruch
plansza[poczx][poczy] = ' '; // Usuwamy pionek ze starej pozycji
plansza[konx][kony] = temp; // Ustawiamy pionek na nowej pozycji
}
void wykonaniebicia(char plansza[8][8], int poczx, int poczy, int konx, int kony)
{
char temp = plansza[poczx][poczy]; // Zapamietujemy pionek, który wykonuje ruch
int srodx = (poczx + konx) / 2;
int srody = (poczy + kony) / 2;
plansza[poczx][poczy] = ' '; // Usuwamy pionek ze starej pozycji
plansza[srodx][srody] = ' '; // Usuwamy zbitego pionka przeciwnika
plansza[konx][kony] = temp; // Ustawiamy pionek na nowej pozycji
}
void ruchgracza(char plansza[8][8], char gracz, char komputer)
{
char poczkord[3], konkord[3]; // Tablica na wspolrzedne w formacie np. "a2"
int poczx, poczy, konx, kony;
// Prosba o wprowadzenie wspolrzêdnych
printf("WprowadŸ wspó³rzêdne pocz¹tkowe (np. a2): ");
scanf("%s", poczkord);
printf("WprowadŸ wspó³rzêdne koñcowe (np. a4): ");
scanf("%s", konkord);
// Zamiana wspólrzêdnych startowych i koncowych
zamianaliter(poczkord, &poczx, &poczy);
zamianaliter(konkord, &konx, &kony);
if (czypoprawnyruch(plansza, poczx, poczy, konx, kony, gracz))
{
// Zwykly ruch
wykonanieruchu(plansza, poczx, poczy, konx, kony);
printf("Ruch wykonany.\n");
}
else if (czymoznazbic(plansza, poczx, poczy, konx, kony, gracz, komputer))
{
// Zbicie
wykonaniebicia(plansza, poczx, poczy, konx, kony);
printf("Zbicie wykonane.\n");
}
else
{
printf("Niepoprawny ruch!\n");
}
}
void ruchkomputera()
{
}
int main()
{
poczatek();
char plansza[8][8];
stworzenieplanszy(plansza);
wyswietlenieplanszy(plansza);
while(1)
{
ruchgracza(plansza, 'x', 'o');
wyswietlenieplanszy(plansza);
if (czymapionki('o','O', plansza)==2)
{
printf("Gratulacje! Wygrales przeciwnik nie ma juz pionkow.\n");
break;
}
if (czymapionki('x', 'X', plansza)==2)
{
printf("Niestety! Przegrales nie masz juz pionkow.\n");
break;
}
}
printf("Gra zakonczona");
return 0;
}