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

Poruszanie strzalkami ascii

Ostatnio zmodyfikowano 2017-01-09 13:03
Autor Wiadomość
Revane
Temat założony przez niniejszego użytkownika
Poruszanie strzalkami ascii
» 2017-01-07 18:16:10
Witam, mam do napisania program który rysuje konkretny wzorek ASCII wybranym znakiem oraz żeby móc go przesuwać strzałkami i powiększać oraz pomniejszać do rozmiaru okna. Program działa, ale niestety nie tak jakbym chciał, ponieważ przesuwa tylko górną część wzorku oraz z niewiadomego mi powodu wgl nie działa opcja powiększania i pomniejszania. Niżej załączam cały kod w razie gdyby błąd znajdował się w innym miejscu. Są to moje początki więc proszę o wyrozumiałość oraz z góry dziękuje za pomoc :)

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

using namespace std;

const int GORA = 72, DOL = 80, LEWO = 75, PRAWO = 77, PLUS = 10, MINUS = 25;

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

int wherex()
{
   
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    GetConsoleScreenBufferInfo( GetStdHandle( STD_OUTPUT_HANDLE ), & csbi );
    return csbi.dwCursorPosition.X;
}

int wherey()
{
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    GetConsoleScreenBufferInfo( GetStdHandle( STD_OUTPUT_HANDLE ), & csbi );
    return csbi.dwCursorPosition.Y;
}

void Wczytaj( size_t & wysokosc, size_t & szerokosc, char & znak )
{
    system( "cls" );
   
    std::cout << "ZNAK : ";
    std::cin >> znak;
   
    std::cout << "SZEROKOSC = ";
    std::cin >> szerokosc;
   
    std::cout << "WYSOKOSC = ";
    std::cin >> wysokosc;
   
    std::cout << std::endl;
}

/////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////        RYSOWANIE       /////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////

void Rysuj( int x, int y, size_t & wysokosc, size_t & szerokosc, char & znak, float value )
{
    system( "cls" );
   
    float scale =( float ) szerokosc /( float ) wysokosc;
    value += scale;
   
    for( x = 0; x < szerokosc; x++ )
         std::cout << znak;
   
    std::cout << std::endl;
   
    for( gotoxy( x, y ), x = 1; x < wysokosc; x++ )
    {
        for( y = 0; y < value - 1; y++ )
             std::cout << " ";
       
        std::cout << znak << std::endl;
       
        value += scale;
    }
   
    for( x = 0; x < szerokosc; x++ )
         std::cout << znak;
   
    std::cout << std::endl;
   
    gotoxy( 10, 25 ), cout << "+/-";
}

void Przesuwanie( size_t & wysokosc, size_t & szerokosc, float x, float y, char znak )
{
    int zmiana = 0, max = 23;
    char klawisz;
    float size =( float ) wysokosc &&( float ) szerokosc;
   
    do
    {
        klawisz = _getch();
       
        switch( klawisz )
        {
        case GORA:
            {
                y--; zmiana = 1;
                if( y < 1 )
                {
                    y++;
                    zmiana = 0;
                }
                break;
            }
           
        case DOL:
            {
                y++; zmiana = 1;
                if( y > max -( size - 2 ) )
                {
                    y--;
                    zmiana = 0;
                }
                break;
            }
        case LEWO:
            {
                x--; zmiana = 1;
                if( x < 1 )
                {
                    x++;
                    zmiana = 0;
                }
                break;
            }
        case PRAWO:
            {
                x++; zmiana = 1;
                if( x > 80 - size )
                {
                    x--;
                    zmiana = 0;
                }
                break;
            }
        case PLUS:
            {
                size++; zmiana = 1;
                if( size < 5 || size > max )
                {
                    size--; y--;
                    zmiana = 0;
                }
                break;
            }
           
        case MINUS:
            {
                size--;
                zmiana = 1;
                if( size < 5 || size > max )
                {
                    size++;
                    zmiana = 0;
                }
                break;
            }
           
        }
       
        if( zmiana )
        {
            float value = 0.0f;
            Rysuj( x, y, wysokosc, szerokosc, znak, value ); zmiana = 0;
        }
       
    } while( klawisz != 27 );
   
}

int main()
{
    int x = 1, y = 1;
    size_t wysokosc, szerokosc;
    char znak;
    float value = 0.0f;
   
    Wczytaj( wysokosc, szerokosc, znak );
    Rysuj( x, y, wysokosc, szerokosc, znak, value );
    _getch();
    Przesuwanie( wysokosc, szerokosc, x, y, znak );
   
    return 0;
}
P-156179
Revane
Temat założony przez niniejszego użytkownika
» 2017-01-08 20:02:59
To może w taki sposób będzie prościej. Jak zrobić żeby poruszać/pomniejszać/powiększać tą  figurę :?

C/C++
void Wczytaj( size_t & wysokosc, size_t & szerokosc, char & znak )
{
    std::cout << "ZNAK : ";
    std::cin >> znak;
   
    std::cout << "SZEROKOSC = ";
    std::cin >> szerokosc;
   
    std::cout << "WYSOKOSC = ";
    std::cin >> wysokosc;
   
    std::cout << std::endl;
}

/////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////        RYSOWANIE       /////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////

void Rysuj( int x, int y, size_t & wysokosc, size_t & szerokosc, char & znak, float value )
{
   
    float scale =( float ) szerokosc /( float ) wysokosc;
    value += scale;
   
    for( int x = 0; x < szerokosc; x++ )
         std::cout << znak;
   
    std::cout << std::endl;
   
    for( int x = 1; x < wysokosc; x++ )
    {
        for( int y = 0; y < value - 1; y++ )
             std::cout << " ";
       
        std::cout << znak << std::endl;
       
        value += scale;
    }
   
    for( int x = 0; x < szerokosc; x++ )
         std::cout << znak;
   
    std::cout << std::endl;
   
    system( "PAUSE" );
}

int main()
{
    int x = 1, y = 1;
    size_t wysokosc, szerokosc;
    char znak;
    float value = 0.0f;
   
    Wczytaj( wysokosc, szerokosc, znak );
    Rysuj( x, y, wysokosc, szerokosc, znak, value );
    _getch();
   
    return 0;
}
P-156209
darko202
» 2017-01-09 13:03:38
1.
zapoznaj się z techniką debugowania programu


2.
nie modyfikuje się zmiennych wejściowych
używając ich jako zmiennych do pętli for

C/C++
int main()
{
    int x = 1, y = 1;
    ...
    Rysuj( x, y, wysokosc, szerokosc, znak, value );
    ...
}

void Rysuj( int x, int y, size_t & wysokosc, size_t & szerokosc, char & znak, float value )
{
    ...
    for( x = 0; x < szerokosc; x++ ) // tu modyfikujesz wejściowe x
   
    ...
    for( y = 0; y < value - 1; y++ ) // tu modyfikujesz wejściowe y
    ...
    for( gotoxy( x, y ), x = 1; x < wysokosc; x++ ) // tu odnosisz się już do innego x i y, które zawsze jest takie jak wysokość i szerokosc 
    ...

3.
w drugiej propozycji kodu jest podobnie, poza tym że utworzyłeś jeszcze lokalne x i y

 
P-156237
« 1 »
  Strona 1 z 1