Puts i tablica dwuwymiarowa

0

To mój pierwszy post na forum więc serdecznie witam wszystkich!
Bawię się trochę językiem C, w ramach utrwalenia wiadomości z ćwiczeń na studiach.
Postanowiłem, że zrobię prostą grę o płaszczakach w oknie DOS.
Ogólnie udałe mi się coś napisać można przemieszczać ludzika, mapką jest tablica dwuwymiarowa.
Mój problem polega na odświeżaniu i prędkości drukowania tablicy na ekranie. Dla planszy o rozmiarach 5X5 problem nie istnieje.
Ale 10X10 jest irytujące nie wspominając już o większych rozmiarach.
Drukuję plansze dwoma pętlami
Map[i][j] robię i++ drukuje element i tak się pętla kręci do max rozmiaru, później j++, zeruje i, potem i++ itd aż wydrukuje całą.
Czy jest jakiś szybszy sposób na wydrukowanie tablicy dwuwymiarowej niż funkcja printf("%c", Map[i][j])?
Wiem, że do tablic jednowymiarowych jest Puts(), jest jakiś sposób, żeby zastosować putsa do tablicy dwuwymiarowej, jeżeli dobrze kombinuje to puts drukuje o wiele szybciej niż printf.
Może macie jakieś inne propozycje?

Tu macie link do mojej próbnej wersji gry, niestety usunął mi się kod, chce nazbierać informacje żeby mniej więcej zorganizować sobię pracę. http://speedy.sh/nxh6r/Zwariowany-swiat-plaszczakow.exe

1
  1. dodaj dodatkowa kolumnę której nie będziesz drukować
  2. znak w tej ostatniej kolumnie ma być '\n' zaś w ostatniej kolumnie ostatniego wiersza ma być znak '\0'
  3. drukujesz całość jednym poleceniem puts(Map);
  4. oraz zastąp system("cls"); poleceniem gotoXY(0,0) z biblioteki ncurses
0

gotoXY(0,0) wyczyści mi ekran czy wprowadzi zmiany w tablicy w elemencie Tab[0][0]?

0
MonkiKong napisał(a):

gotoXY(0,0) wyczyści mi ekran czy wprowadzi zmiany w tablicy w elemencie Tab[0][0]?

Przeniesie kursor w lewy górny narożnik. Zaraz po tym musi nastąpić rysowanie mapy, co "nadrysuje" poprzedni krok

0

Sprawdzę to, na razie mam problem z devc++, logicznie patrząc to pewnie 0,0 bo tablice zaczynają się od miejsca 0 więc pewnie i ekran pierwszy parametr ma 0,0. Dzięki ci wielkie. A masz jakiś pomysł, jak zrobić, żeby np przeciwnik się poruszał. Znaczy, żeby chodził nawet wtedy jak nie nacisnę klawisza(może w kółko chodzić góra dół), bo jak naciskam klawisz to dopiero jest odświeżanie ekranu, do pobierania klawisza używam getch(). Nie mam pomysłu jak zrobić żeby ciągle się odświeżało. Kurdę szkoda, że cały kod mi się poszedł... pokazał bym ci jak to robiłem.

0

obczaj polecenie raw() i/lub kbhit() z ncurses

0

kbhit() w środku mogę podać parametr na jaki ma reagować? np if (kbhit(w)){ w górę }
bo jak rozumiem, to pętla będzie się kręcić a kbhit patrzy czy w buforze jest jakieś info z klawiatury? Dobrze kombinuje?

1 użytkowników online, w tym zalogowanych: 0, gości: 1