Dopiero uczę się programować i mam pewien problem. Muszę napisać program, w którym poruszam się kursorem w konsoli i wciskając spację wpisuję znak “X”. Zmiany mają być wprowadzone w buforze, czyli muszę skorzystać z tablicy ? Problem w tym, że nie wiem za bardzo jak
Dodatkowo pole “działania” tego kursora ma być ograniczone do pewnej ilości pikseli (X x Y). Bardzo byłbym wdzięczny za jakąkolwiek pomoc bądź wskazówki
Nie jestem do końca pewien, czy rozumiem dobrze te zadanie. W każdym bądź razie :
#define ESC 27
#define UP 72
#define DOWN 80
....
do
{
switch(ch=getch())
{
case UP:
printf("up\n");
break;
case DOWN:
printf("down\n");
break;
}
}while(ch != ESC);
..........
Do zapamiętania wprowadzanych danych, jak najbardziej można użyć tablicy. Jeżeli występuje, jakiekolwiek ograniczenia to można użyć IF’a. Wracając do tablicy to na pewno to dobry pomysł.
for (j = 0; j < i; j++){
if (tab[j] == UP)
printf("Klaiwsz ...");
}
Możesz sobie również zliczyć ile było powtórzeń naciśnięcia danego klawisza itd.
Być może na coś się to Tobie przyda. Nie uważam, że te skrawki kodu to Super optymalne rozwiązane wszystko zależy również od tego, jak dokładnie chcesz to zrobić. Na pewno pojawi się tutaj wiele przykładów
Jeśli ja dobrze rozumiem to chcesz poruszać się kursorem tekstowym po określonym obszarze konsoli i na życzenie postawić znak X za pomocą spacji. Będziesz potrzebował jakiejś dodatkowej biblioteki np ncurses, PDCurses, ewentualnie WinApi.
int horiz=20, verti=25;
do
{
char key;
key=getVKey();
gotoXY(horiz,verti);
switch(key)
{
case VK_UP: if(verti > 16) verti--; break;
case VK_DOWN: if(verti < SIZE_Y + 15) verti++; break;
case VK_LEFT: if(horiz > 11) horiz--; break;
case VK_RIGHT: if(horiz < SIZE_X + 10) horiz++; break;
}
}
while(1);
Problem w tym, że gdy np. przesuwam się lewo a potem próbuję przusnąć się w innym kierunku, kursor jeszcze raz przesuwa się w pierwszym kierunku a dopiero potem tam gdzie powinien… wygląda to trochę jakby był “opóźniony”. Dodatkowo: czy można jakoś zrobić aby kursor po wpisaniu znaku pozostawał w miejscu (tak jakby “na” tym znaku) ? Myślę, że jest to powiązane z moim pierwszy problemem ;/ Byłbym bardzo wdzięczny za jakąkolwiek pomoc.
co do twojego problemu z “opóźnieniem” to metodę goto(x,y) powinieneś wywkonoć po switchu
natomiast co do drugiego problemu to faktycznie mało obrazowo opsinany. Być może chodzi o ten bufor czyli zapisanie ścieżki do tablicy a po wypełnieniu tablicy uruchomienie metody która czytając wypełnioną tablicę przejdzie po ekranie według wpisanej ścieżki.
Ogólnie chodzi o to, iż praktycznie zacząłem się uczyć programować tydzień temu… musze wprowadzić bufor ekranu tak, żeby operacje (wstawianie i usuwanie X’ów za pomocją spacji) były przeprowadzane w tym buforze a nie bezpośrednio na ekranie (+możliwość wyczyszczenia bufora). Niestety, nie za bardzo wiem od czego zacząć. Sam chcę się tego nauczyć dlatego przydałyby się jakieś wskazówki “na chłopski rozum”
Oczywiście to zależy jakiego typu jest tablica. W tym wypadku to powinno być int w przypadku char ‘’ —EDIT— Korzystając z pomysłu grzelix’a można zadeklarować dodatkową zmienną int j; i przykładowo, jeżeli po 2 znakach UP, DOWN chcesz już zakończyć wczytywanie (zakładając, że jest to pętla) oraz przed tym inkrementować zmienną j, żeby wiedzieć ile jest elementów w tablicy, moim zdaniem nie ma sensu zapełniać całej tablicy, jeżeli masz przykładowo tablice o 100 elementach, ale też nie ma chyba w twoim przypadku takiej potrzeby aby deklarować tak dużą tablice. tutaj masz przykład