Problem z zapisem do struktury

0

Witam. Jestem początkujący w programowaniu, ostatnio zacząłem sobie robić grę (tekstową, dla zabawy) i natrafiłem na problem z zapisem do struktury. Mianowicie po wykonaniu funkcji atak wszystkie parametry ze struktury wracają do swojego poprzedniego stanu.
A gdy wykonuję Case 2(z ucieczką) jest tak jak powinno. Jak to naprawić?
PS. Wiem, że program jest jeszcze niedopracowany, ale na nic rozbudowywanie go jeśli tego nie naprawię.
Oto kod:

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

	struct Bron{
		char nazwa[50];
		int DMG;
		int DEF;
			};
	struct statyc{
		char nazwa[50];
		int HP;
		int ATK;
		int DEF;
		int Kasa;
		struct Bron swd;
		struct Bron bow;
		struct Bron shd;		
	};	
	
		struct statyp{
		char nazwa[50];
		int HP;
		int ATK;
		int DEF;
		int Kasa;	
	};
struct statyc X = { "Janek", 100, 15, 5, 100, "Sun Sword +7", 0, 3,"Looong Bow +3",3,0,"Drzwiod karczmy",0,3};  
struct statyp Ugabuga = { "Ugabuga", 35, 15, 10, 100,}; 	
struct statyp Makumbaska = { "Makumbaska", 35, 10, 10, 10,}; 


int atak(struct statyc X, struct statyp Y, int l)
{
	 X.DEF = X.DEF + X.swd.DEF + X.shd.DEF;
	 X.ATK = X.ATK + X.swd.DMG;
	while(3){		

  l = Y.HP;
  Y.HP = Y.HP - (X.ATK - Y.DEF);
  l = l - Y.HP;
  printf("Zadajesz %d Obrazen\n",l);
  l = X.HP;
  X.HP = X.HP - (Y.ATK - X.DEF);
  l = l - X.HP;
  printf("Otrzymujesz %d obrazen\n", l);
	if(Y.HP <= 0){
		printf("Wygrales! Zdobywasz %d kasy\n", Y.Kasa);
		X.Kasa = X.Kasa + Y.Kasa;
			printf("%d", X.HP);
		break;}
	if(X.HP <= 0){
		printf("Dedasz! Twoje HP wynosi %d\n", X.HP);
			printf("%d", X.HP);
		break;}
	}
		printf("%d\n", X.HP);
			printf("%d\n", X.DEF);
	}
	
int main(int argc, char *argv[]) 
{
	int uci, i, st, g;
	char kier, wyb;
	//,DEF: %d\nKasa: %d\

	printf("The Switcher ver.0.1 BETA\n");
	printf("Aby rozpoczac, wpisz 1\n");


	printf("Wpisz imie\n");
	scanf("%s", &X.nazwa);
	printf("Twoje imie to %s!\n\n", X.nazwa);
	printf("Znajdujesz sie na rozdrozu. Z lewej slychac UGABUGA! Gdzie idziesz?(lewo = 1/prawo = 2/prosto = 3)");
		while(2){
	if(kier > 5){
		printf("Blad");	
	}
	scanf("%d", &kier);
	switch(kier){
     case 1:{
		printf("Idziesz w lewo. Atakuje cie %s! Co robisz? (Atak = 1. Ucieczka = 2", Makumbaska.nazwa);
		scanf("%d", &wyb);
			switch(wyb){
				case 1:{
					atak(X, Ugabuga, 0);			
					break;
				}
				case 2:{
					X.HP = X.HP - 5;
					printf("Uciekasz! Twoje HP po ucieczce wynosi %d\n", X.HP);
					break;
				}}}
    case 3:{
		printf("Ugabuga2");
     	break;}
    case 4:{
	printf("%d", X.HP);
    break;}
    }
	}
	
	
	
	system("pause");	
	return 0;
} 
0

Jesli przekazujesz obiekt do funkcji jako wartosc wykonywana jest jego lokalna kopia i ta lokalna kopia jest modyfikowana, przekaz przez wskaznik po prostu.

0

Jeżeli strukturę, bądź jakąkolwiek zmienną do funkcji przekazujesz przez wartość, to w funkcji tej działasz jedynie na kopiach. Chcąc działać na oryginalnych zmiennych musisz przekazywać je przez wskaźnik, lub przez referencję (C++).http://wazniak.mimuw.edu.pl/index.php?title=Wst%C4%99p_do_programowania_w_j%C4%99zyku_C/Wska%C5%BAniki#Zastosowanie_wska.C5.BAnik.C3.B3w_do_przekazywania_parametr.C3.B3w

0

Ok dzięki, poradziłem sobie dzięki temu.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.