Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

rysowanie figury w konsoli

Ostatnio zmodyfikowano 2016-11-30 20:18
Autor Wiadomość
Anim
Temat założony przez niniejszego użytkownika
rysowanie figury w konsoli
» 2016-11-29 00:05:50
ponownie mam problem :) może przedstawię problem bliżej. Otóż mam do narysowania kwadrat, który będzie poruszał się przy użyciu strzałek.
Wszystko działa jak ta lala, ale niestety mam jednego buga, którego nie wiem, jak się pozbyć. Dokładnie chodzi o sytuację, gdy dochodzę do prawego, dolnego ekranu konsoli. Wtedy zamiast kwadratu dostaję takie coś:


*  *  *  *
*         *
*         *
*  *  *  


czyli brakuje prawej dolnej gwiazdki. Czy ktoś napotkał taki błąd? może dodam, że ekran czyszczę za pomocą system("cls"), a do odpowiedniego miejsca w konsoli przechodzę przy użyciu funkcji gotoxy(x,y).

Najpierw myślałem, że to rysowanie kwadratu nie działa, ale fakt, że w każdym innym miejscu konsoli działa prawidłowo raczej odrzuca to przypuszczenie.
P-154237
pekfos
» 2016-11-29 01:42:55
A kod gdzie?
P-154242
Anim
Temat założony przez niniejszego użytkownika
» 2016-11-29 20:21:03
Oto kod:

C/C++
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <iostream>
#include <Windows.h>

using namespace std;

void gotoxy( int x, int y )
{
    COORD c;
    c.X = x;
    c.Y = y;
    SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), c );
}

void rysuj( int & dlugosc_boku, char & kod_ascii )
{
    int wsp_x = 79;
    int wsp_y = 24;
    int tmp_wsp_x = 0;
    int tmp_wsp_y = 0;
   
    tmp_wsp_x = wsp_x;
    tmp_wsp_y = wsp_y;
    gotoxy( wsp_x, wsp_y );
    for( int wiersz = wsp_y; wiersz != wsp_y - dlugosc_boku; --wiersz )
    {
        for( int kolumna = wsp_x; kolumna != wsp_x - dlugosc_boku; --kolumna )
        {
           
            cout << kod_ascii;
            tmp_wsp_x -= 2;
            gotoxy( tmp_wsp_x, tmp_wsp_y );
        }
        tmp_wsp_x = wsp_x;
        tmp_wsp_y -= 1;
        gotoxy( wsp_x, tmp_wsp_y );
    }
}

void ustaw()
{
    COORD coord;
    coord.X = 80;
    coord.Y = 25;
    SetConsoleScreenBufferSize( GetStdHandle( STD_OUTPUT_HANDLE ), coord );
    SMALL_RECT * rect = new SMALL_RECT();
    rect->Left = 0;
    rect->Top = 0;
    rect->Right = 80;
    rect->Bottom = 25;
    SetConsoleWindowInfo( GetStdHandle( STD_OUTPUT_HANDLE ), true, rect );
}

int main()
{
    int dl_boku = 8;
    char znak_ascii = '*';
   
    ustaw();
    rysuj( dl_boku, znak_ascii );
    getchar();
   
    return 0;
}

Jak widzicie, w prawym dolnym rogu nie ma oczekiwanej gwiazdki :) nie wiem dlaczego :( To póki co tyle. Posiada ktoś jakiś pomysł?
P-154290
1aam2am1
» 2016-11-29 21:23:58
Na mojej maszynie twój kod działa
P-154295
Anim
Temat założony przez niniejszego użytkownika
» 2016-11-29 21:50:45
Dziwne...a w czym piszesz? bo ja stworzyłem ten kod pod VS 2013. To tym bardziej nie rozumiem, dlaczego to u mnie nie pracuje tak jak należy...
P-154298
1aam2am1
» 2016-11-29 21:59:09
kompilator TDM-GCC 5.1.0
ale mi wyświetla
 * * * * * * * *
 * * * * * * * *
 * * * * * * * *
 * * * * * * * *
 * * * * * * * *
 * * * * * * * *
 * * * * * * * *
 * * * * * * * *
P-154300
mateczek
» 2016-11-29 22:06:18
wejdź we właściwości tego co można nazwać konsolą i zwiększ rozmiar bufora oraz rozmiar konsoli
P-154301
Anim
Temat założony przez niniejszego użytkownika
» 2016-11-29 22:23:16
Tylko właśnie po to wstawiłem funkcję ustaw(), żeby ona mi ustawiała wielkości konsoli:D czy to nie tak?
P-154304
« 1 » 2
  Strona 1 z 2 Następna strona