C++ problem z napisaniem giery(zła pętla)


(Dpiotrowiak) #1

No wiec w szkole nudziło mi się ze znajomym i napisaliśmy gierkę w oczko w GCC pod linuxem(uczył mnie c++ po prostu)... No i w domu chciałem się z tym programikiem jeszcze pobawić.. ściągnąłem kompilator dev c++ i podczas kompilacji mi się wykrzaczył, chciałem to naprawić i sie jeszcze bardziej wykrzaczyło i nie umie sobie z tym poradzić. Wyskakują takie oto błędy:

C:\Documents and Settings\Damian\Pulpit\BezNazwy1.cpp In function `int main(int, char**)': 

46 C:\Documents and Settings\Damian\Pulpit\BezNazwy1.cpp invalid conversion from `void*' to `char*' 

47 C:\Documents and Settings\Damian\Pulpit\BezNazwy1.cpp invalid conversion from `void*' to `char*' 

52 C:\Documents and Settings\Damian\Pulpit\BezNazwy1.cpp `time' undeclared (first use this function) 

  (Each undeclared identifier is reported only once for each function it appears in.)

A tutaj jest kod - http://dekans.w.interia.pl/oczko.c


(W Kowaluk) #2
46 C:\Documents and Settings\Damian\Pulpit\BezNazwy1.cpp invalid conversion from `void*' to `char*' 

47 C:\Documents and Settings\Damian\Pulpit\BezNazwy1.cpp invalid conversion from `void*' to `char*'

Dodaj jawne rzutowanie:

suma = (char*)malloc(total_players);

wyniki = (char*)malloc(total_players);

52 C:\Documents and Settings\Damian\Pulpit\BezNazwy1.cpp `time' undeclared (first use this function)

Dołącz plik nagłowkowy time:

#include

(Dpiotrowiak) #3

Teraz wywala mi

47 C:\Documents and Settings\Damian\Pulpit\BezNazwy1.cpp expected primary-expression before "char" 

C:\Documents and Settings\Damian\Pulpit\BezNazwy1.cpp In function `int main(int, char**)': 

47 C:\Documents and Settings\Damian\Pulpit\BezNazwy1.cpp `suma' cannot be used as a function 

48 C:\Documents and Settings\Damian\Pulpit\BezNazwy1.cpp expected primary-expression before "char" 

48 C:\Documents and Settings\Damian\Pulpit\BezNazwy1.cpp `wyniki' cannot be used as a function

(Sawyer47) #4

Pod gcc kompiluje się i bez żadnych zmian, chociaż wypadałoby dodać nagłówek time.h. Natomiast co do działania to tak średnio. Pierwsze co się rzuca w oczy to indeksy - tablica 23 elementowa (tu: cards) nie ma 23 elementu, tylko od 0 do 22. No i faktycznie trzeba poprawić pętlę, przy której postawiłeś komentarz.


(Dpiotrowiak) #5

No więc nie znalazł by się ktoś kto mógłby to delikatnie poprawić ? Bo sam sobie z tym nie umie dać rady. Wszystko mi się później krzaczy jak coś poprawie.


(Monczkin) #6

nazwij temat konkretnie, proszę.


(Adambiel1) #7

Umiescilem ponizej troche zmodyfikowany przeze mnie kod.

Gra pozwala dowolnie zdefiniowac ilosc graczy w oczko.

Nie znam szczegolowo zasad grania w oczko, ale jak cos sie nie zgadza, to piszcie, to poprawie.

Pozdrawiam

Adam

#include 


#define MAXPLAYERS 4


struct cds

{

	int id;

	char value;

	int used;

} cards[24];


void reset(void)

{

	char values[6] = {11,4,3,2,10,9};

	int counter;

	int value_counter = 0;


	for(counter = 0; counter < 24; ++counter)

	{

		cards[counter].id = counter;

		cards[counter].used = 0;

		cards[counter].value = values[value_counter++];


		if(value_counter == 6)

			value_counter = 0;

	}

}


void show_cards(struct cds * tab)

{

	int i;

	for(i=0 ; i<24 ; ++i)

	{

		printf("id = %d, value = %d , used = %d\n",i,tab[i].value,tab[i].used);

	}

}


void zeruj_tab(int * tab)

{

	int i;

	for(i=0 ; i
		tab[i]=0;

}


struct cds rand_card()

{

	int index , i;

	struct cds * card;

	card = (struct cds*)malloc(sizeof(struct cds));


	index = rand() % 24;

	*card = cards[index];


	if(cards[index].used == 1)

	{

		for(i=0 ; i<24 ; ++i)

		{

			++index;

			if(cards[index].used == 0)

			{

				*card = cards[index];

				break;

			}

		}

	}

	return *card;

}


int main(int argc, char **args){

	int i=1;

	int losujesz;

	int iloscGraczy = MAXPLAYERS;

	int czyGra[MAXPLAYERS];

	int suma[MAXPLAYERS];

	int wyniki[MAXPLAYERS];

	struct cds karta;

	int ktosWygral = 0;


	for(i=0 ; i
		czyGra[i]=1;


	srand((unsigned int)time(NULL));


	zeruj_tab(suma);

	reset();

	show_cards(cards);


	do{


		if(czyGra[i-1]==0)

		{

			++i;

			if(i == MAXPLAYERS + 1)

				i = 1;

			continue;

		}


		//printf("id = %d, value = %d , used = %d\n",karta.id,karta.value,karta.used);

		printf("\n-------------------------------------------------------\n");

		printf("Teraz kolej gracza nr: %d\n",i);

		printf("suma = %d\n",suma[i-1]);


		if(iloscGraczy == 1)

		{

			printf("BRAWO WYGRALES - zostales sam przy stole\n");

			return 0;

		}


		printf("Losujesz karte? 0-nie 1-tak\n");

		scanf("%d",&losujesz);

		if(losujesz==1)

		{

			karta = rand_card();

			suma[i-1]+=karta.value;

			cards[karta.id].used = 1; 

			printf("Twoja wylosowana karta ma wartosc: %d\n",karta.value);


			if(suma[i-1] == 21)

			{

				printf("BRAWO WYGRALES\n");

				return 0;

			}


			if(suma[i-1] > 21)

			{

				printf("Niestety wypadasz z gry masz wiecej niz 21 oczek\n");

				czyGra[i-1] = 0;

				iloscGraczy--;

			}



		}




			++i;

			if(i == MAXPLAYERS + 1)

				i = 1;


	}while(ktosWygral!=1);


	return 0;

}