Skocz do zawartości

Funkcja do obsługi klawiszy


Pomocna odpowiedź

Lub...

#define TAB 5
  
struct tab[TAB];


key_press ();

void key_press ()
  for (int i =0; i<TAB; i++;) {
  stru[i].cos = jakis_stan;
  }

Jezeli sprawdzasz cyklicznie iles tam guzikow (identyczny kod) to najlepiej petla for...no chyba ze trzeba bedzie wywolywac funkcje indywidualnie z konkretnym argumentem, to wtedy tak jak wyzej

(edytowany)

Zmienia się. Ilość pkt aby przejść dalej zmniejszyłem na potrzeby filmu. Wraz z wyższym level predkosc jest - 2. Timer programowy domyślnie startuje z wartością 70, co daje 700ms, taka prędkość rysowania węża. 

Aktualnie mam w planie rozbudować to o jeszcze jedna grę jakąś zręcznościowa, może uda się upchnac jeszcze. Wtedy w menu będzie wybór albo jednej albo drugiej gry 

Edytowano przez Krawi92
(edytowany)
Dnia 10.04.2022 o 19:00, Krawi92 napisał:

Jeżeli odwołujemy się przez wskaźnik uzywamy ->.

Jeżeli chcemy użyć wartości pod adresem zapisanym we wskaźniku, wykorzystujemy operator wyłuskania, którym jest *. To jest bazowa zasada, np.:

void f1(struct point *point)
{
	printf("%d,%d\n", (*point).x, (*point).y);
}

Dla ułatwienia, dla przypadku jak powyżej, czyli uzyskiwaniem dostępu do elementu wskaźnika do struktury, jest też dostępny operator ->, dzięki któremu można napisać point->x, a będzie to oznaczać dokładnie to samo, tj. a->b jest tym samym co (*a).b.

Gdy chce się operować na tablicy, argument w deklaracji funkcji wygląda identycznie jak powyżej, bo przekazywany wskaźnik jest adresem pierwszego elementu tablicy. Np.:

void f2(struct point *points, size_t length)
{
    for (size_t i = 0; i < length; ++i)
		printf("%d,%d\n", (*(points + i)).x, (*(points + i)).y);
}

I dla tablic znowu mamy dostępną uproszczoną składnię - []. c[d] znaczy dokładnie to samo co *(c + d). A jeśli ktoś pamięta, że dodawanie jest przemienne, to nie złapie go nikt w pułapkę w postaci 25[tablica]. To też jest poprawna składnia i znaczy tyle samo co tablica[25].

Także skoro już miałeś wyłuskanie składnika dokonane za pomocą [], to na -> nie ma już tam miejsca. Chyba że byłaby to funkcja przyjmująca wskaźnik do tablicy wskaźników do struktury, przykładowo, pozwalając sobie już na użycie obu upiększeń składniowych:

void f3(struct point **point_ptrs, size_t length)
{
    for (size_t i = 0; i < length; ++i)
		printf("%d,%d\n", point_ptrs[i]->x, point_ptrs[i]->y);
}

I jeszcze:

Dnia 10.04.2022 o 20:22, Krawi92 napisał:

No tak, mogę zrobić tak



void key_press ( TBUTTON  btn[], uint8_t nr)

 

W deklaracjach funkcji, składnie:

void f(struct point *points, size_t length);
void f(struct point points[], size_t length);

są tożsame - w obu wypadkach points jest wskaźnikiem, ideowo do pierwszego elementu tablicy. I jak było widać wyżej na przykładzie f1 i f2, nie wiadomo, czy chodzi o wskaźnik do pojedynczej zmiennej danego typu czy do tablicy, więc używanie [] w deklaracji może ułatwić czytelnikowi kodu zrozumienie, że intencją było właśnie przekazywanie tablicy.

W przerwach od fazy ogromnej niecierpliwości do uruchomienia czegoś i zobaczenia w działaniu, którą całkowicie rozumiem, polecam też znaleźć chwilę na spotkanie z jakąś książką do C.

No, to byłem miły w te święta!

Edytowano przez trainee
  • Lubię! 1
  • Pomogłeś! 1

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...