Wąż (jak wyświetlać)

0

Witam

Robię węża w c++ i nie wiem w sumie jak wyświetlać to na ekranie.

Najpierw zrobiłem dwuwymiarową tablicę znaków, a następnie użyłem funkcji system("cls") czyszczącą konsolę no i zaaplikowałem w pętli drukowanie wszystkich znaków tablicy.

Ale nie jest to dobre rozwiązanie ponieważ obraz ciągle miga, a program jest powolny przez to że musi cały czas drukować nawet te znaki które nie zmieniły się w tablicy.

Ma ktoś pomysł jak inaczej rozwiązać wyświetlanie. Dodam że nie chcę się zagłębiać w żadne skomplikowane biblioteki, bo na skończenie tego projektu mam tydzień, więc nie miałbym czasu na ich naukę.

Z góry dziękuję za pomoc.

0

Rysuj tylko to co się zmienia

0

ncurses - milion razy było.

1

Coś jak:

Rysuj(DupaWęża, Mapa.BlokNaPozycji(DupaWęża).Znaczek);

gdzie DupaWęża = (X, Y)

EDIT:

#include <windows.h>
typedef COORD Point;

void GotoXY(int column, int line)
{
    COORD coord = { column, line };
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void DrawSign(const Point &p, char sign){
    GotoXY(p.X, p.Y);
    cout << sign;
}
0

Bez ncurses to trochę taka prostytucja umysłowa, ale jeśli chcesz się babrać :) Elementy jakie się zmieniają to głowa i ogon węża i tam powinieneś rysować. Musisz zaprzęgnąć do tego WinAPI, jest tam funkcja która nazywa się SetConsoleCursorPosition dla której nie znam żadnej alternatywy. Jak sugeruje Twój komentarz do jednego z postów, masz narzucony DEV-C++ co na pewno Ci zadania nie ułatwi.

1

#include <windows.h> 
void gotoxy(short x, short y) 
{ 
    HANDLE hstdout = GetStdHandle(STD_OUTPUT_HANDLE); 
    COORD position = { x, y }; 
    SetConsoleCursorPosition(hstdout, position); 
} 
0

Dzięki bardzo spartanpage, myślę że jakoś przebrnę przez tą prostytucję umysłową.

0

Ok pojawia się następne pytanie.
Jak zrobić by wąż nie czekał na wciśnięcie klawisza?

char czytaj_klawiature() {
  char klawisz, kierunek;
  klawisz = getch();
  switch(klawisz) {
    case char(75) : kierunek = 'l'; break;
    case char(77) : kierunek = 'p'; break;
    case char(72) : kierunek = 'g'; break;
    case char(80) : kierunek = 'd'; break;
  }
  return kierunek;
}

int main(){
    // b - tyl, h - glowa   
    int bx = 10, by = 10, hx = 10, hy = 16;
    bool koniec = 1;
    rys_mapy();
    do {
        por_h_waz(&bx, &by, &hx, &hy, czytaj_klawiature());
        opoznienie(250);
    } while (koniec);
    return 0;
}

Taki kod powoduje, że każde wywołanie funkcji getch() stopuje węża i czeka na wciśnięcie klawisza klawiatury.

0

Musisz sprawdzić, czy jest jakiś klawisz do odczytania i dopiero wtedy go odczytywać.

0

Jakbyś chciał być ambitny mógłbyś obsługiwać sterowanie w nowym wątku.

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