• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed zastąpienie instrukcji cls w c++

Object Storage Arubacloud
0 głosów
1,011 wizyt
pytanie zadane 12 marca 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)
zamknięte 12 marca 2017 przez Jakub 0

witajcie ,ostatnio na forum, zadawałem sporo pytań jak poprawić jakość swojej gry : https://forum.pasja-informatyki.pl/234219/poprawienie-wydajnosci-prostej-konsolowej-gierki-w-c#c234326 . W tamtej grze użyłem dość nietypowego sposobu renderowanie mapy . Teraz jednak stworzyłem prosty prototyp jakiejś tam konsolowej gry , do tego użyłem chyba najbardziej znany i klasyczny sposób generowania mapy i poruszania się . Pod czas użytkownik porusza się obiektem to ekran miga , oczywiście dobrze wiem z czego to wynika (funkcja cls) czyszczenie ekranu wydaje się niezbędne , jednak słyszałem również o tym by zamiast czyścić można ekran nadpisywać wartości zmiennych bądź po prostu czyścić tylko poruszające się obiekty , Jednak nie wiem jak coś takiego zrobić . Będę wdzięczny za wszelkie komentarze mówiące jak przyśpieszyć ten algorytm poruszania się (po prostu by ograniczyć miganie ekranu) Z góry dziękuje :)

 

#include <iostream>
#include <windows.h>
#include <conio.h>
#include <cstdlib>

using namespace std;

const int map_x = 20; //stale mapy
const int map_y = 20;
int map[20][20];

struct obiects //struktura
{
    int x;
    int y;
};

void render_map(int map[20][20])
{
    for(int i=0; i<map_x; i++)
    {
        for(int j=0; j<map_y; j++)
        {
            switch(map[i][j])
            {
            case 0:{
                cout<<'.';
            }
            break;
            case 1:{
                cout<<'@';
            }
            break;
            case 2:{
                cout<<'M';
            }
            break;
            }
        }
        cout<<endl;
    }

    for(int i=0; i<map_x; i++) //zerowanie mapy
    {
        for(int j=0; j<map_y; j++)
        {
            map[i][j] = 0;
        }
    }
}

void obiects_position(int x,int y ,int xx ,int yy) //wysylanie odpowiednich argumentow d render map
{
    map[x][y] = 1;
    map[xx][yy] = 2;
    render_map(map);
}

void win(int x, int y ,int xx ,int yy)
{
    if((x==xx)&&(x==yy)&&(y==yy)&&(y==xx)) //kolizja z M
    {
        system("cls");
        cout<<"Brawo !"<<endl;
        system("pause");
        exit(0);

    }
}

void game()
{
    obiects player;
    player.x = 0;
    player.y = 0;

    obiects monster;
    monster.x = 10;
    monster.y = 10;

    char z;

    obiects_position(player.x, player.y ,monster.x ,monster.y);

    while(true)
    {
        z = getch();

        switch(z)
        {
        case 'w':{
            if(player.x==0) player.x=0; //czy gracz nie wyszedl poza mape
            else player.x--;
        }
        break;
        case 's':{
            if(player.x==19) player.x=19;
            else player.x++;
        }
        break;
        case 'a':{
            if(player.y==0) player.y=0;
            else player.y--;
        }
        break;
        case 'd':{
            if(player.y==19) player.y=19;
            else player.y++;
        }
        break;
        }

        system("cls"); //CZYSZCZENIIEEKRANU

        win(player.x,player.y,monster.x,monster.y); //jezeli dotknal M
        obiects_position(player.x,player.y,monster.x,monster.y); //generowanie mapy
    }
}

int main()
{
    game();
    return 0;
}

 

komentarz zamknięcia: już znam odpowiedź :)

1 odpowiedź

+1 głos
odpowiedź 12 marca 2017 przez kompowiec2 Mądrala (6,380 p.)
komentarz 12 marca 2017 przez kompowiec2 Mądrala (6,380 p.)
czyści całość, pewnie dałoby się napisać dla pewnych części ale ja już nie mam takiej wiedzy jeszcze. najłatwiej byłoby po prostu wstawić tekst do voidów.
komentarz 12 marca 2017 przez Jakub 0 Pasjonat (23,120 p.)
dzięks , poznałem już funkcje z biblioteki windows która nadpisuje pozycje obiektów

Podobne pytania

0 głosów
0 odpowiedzi 158 wizyt
0 głosów
2 odpowiedzi 895 wizyt
pytanie zadane 13 stycznia 2016 w C i C++ przez sqbi Początkujący (470 p.)
0 głosów
2 odpowiedzi 2,028 wizyt
pytanie zadane 5 lutego 2017 w C i C++ przez WireNess Stary wyjadacz (11,240 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...