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

Poruszanie figury ASCII strzałkami oraz jej powiększanie i pomniejszanie

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
743 wizyt
pytanie zadane 8 stycznia 2017 w C i C++ przez Revane Początkujący (310 p.)

Witam, chciałem zapytać czy znajdzie się jakaś dobra dusza która pomoże napisać mi kod dzięki któremu będę mógł figurę która jest w tym kodzie przesuwać strzałkami góra lewo dol prawo oraz powiększać + i pomniejszać - do rozmiaru okna ? Bardzo ucieszy mnie szybka odpowiedz, z góry dziękuje :3

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

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;
}

 

1 odpowiedź

0 głosów
odpowiedź 9 stycznia 2017 przez playerony Pasjonat (15,220 p.)
wybrane 9 stycznia 2017 przez Revane
 
Najlepsza
W tym temacie zawarta jest odpowiedź na twoje pytanie, nawet z tego co widzę to ktoś tam wrzucił kod:

http://forum.pasja-informatyki.pl/214318/przesuwanie-figury-kodu-ascii-za-pomoca-strzalek-w-konsoli-c

Dla powiększania i zmniejszania poprostu dodajesz przyciski + i - któe będą zmieniać wielkość twojej figury, nie zapomnij przy tym o stosownych zabezpieczeniach.
komentarz 9 stycznia 2017 przez Revane Początkujący (310 p.)
Nawet komentarz tam dodałem z prośbą o zajrzenie do mnie z tego co widzę void switch_place moge uzyc takie samo, gorzej z void rysuj poniewaz nie wiem gdzie w moim kodzie ma sie znalezc gdy sam probowalem to albo sie krzaczyła figura albo ruszała się tylko jej część bądź wgl sie nie ruszała stąd moja prośba o pomoc bo już brak mi pomysłów :c

 

PS: gdy wzialem kod ktory mi wskazales po kompilacji figura sie nie ruszala co mnie dosc zdziwilo xD ale to mozliwe ze przez moj kompilator poniewaz siedze na visual studio
komentarz 9 stycznia 2017 przez playerony Pasjonat (15,220 p.)
Odświeżasz ekran po przesunięciu ?
komentarz 9 stycznia 2017 przez Revane Początkujący (310 p.)
Jeżeli pytasz o kod z linku który dałeś to tak widzę jak figura miga czyli chyba się odświeża ale się nie porusza
komentarz 9 stycznia 2017 przez playerony Pasjonat (15,220 p.)
Dobra mam przy rysowaniu musisz dodać opcje która będzie robiła np przy pozycji y = 5, pięć razy "\n", analogicznie dla x ze znakiem " ".
komentarz 9 stycznia 2017 przez Revane Początkujący (310 p.)
Jeżeli to dla Ciebie nie problem dodaj temat do obserwowanych czy coś w tym stylu bym był bardzo wdzięczny, będę w domu za 4h to powiem Ci jak wychodzi z tym co podałeś  ewentualnie gdyby nie wychodziło dalej podeśle cały kod z poruszaniem figury może dojdziesz co jest nie tak
komentarz 9 stycznia 2017 przez playerony Pasjonat (15,220 p.)

Już Ci przerobiłem funkcje rysuj, moge jescze dodać, że u mnie wszystko działa :)

void Rysuj( int x, int y, size_t & wysokosc, size_t & szerokosc, char & znak, float value )
{

    float scale =( float ) szerokosc /( float ) wysokosc;
    value += scale;

    // Ustawia dobrego y
    for( int i = 0; i < y; i++ )
         std::cout << std::endl;

    // Ustawia dobrego x dla górnej belki
    for( int i = 0; i < x; i++ )
         std::cout << " ";
    for( int i = 0; i < szerokosc; i++ )
         std::cout << znak;

    std::cout << std::endl;

    for( int i = 0; i < wysokosc; i++ )
    {
        // Ustawia dobrego x dla srodka figury
        for( int i = 0; i < x; i++ )
            std::cout << " ";

        for( int y = 0; y < value - 1; y++ )
            std::cout << " ";

        std::cout << znak << std::endl;

        value += scale;
    }
    
    // Ustawia dobrego x dla dolnej belki
    for( int i = 0; i < x; i++ )
         std::cout << " ";
    for( int i = 0; i < szerokosc; i++ )
         std::cout << znak;

    std::cout << std::endl;
}

 

komentarz 9 stycznia 2017 przez Revane Początkujący (310 p.)
Działa :D! Dziękuje Ci dobry człowieku :D Na początku Twojego kodu dopisałem jeszcze system("cls"); bo się mnożył jeden za drugim a tak to wszystko gra. A przy okazji dopytam wiesz może jak te przesunięcie ustawić jeszcze do rozmiaru okna :? Ponieważ w teorii teraz za okno wychodzi i powstaje taki dość dziwny efekt w którym widać cała i jednocześnie pół figury jednocześnie gdy się ją przesuwa :P

PS: muszę przestudiować Twój kod xd i jeszcze raz dzięki za pomoc :D
komentarz 9 stycznia 2017 przez playerony Pasjonat (15,220 p.)
Jeżeli chodzi np. o przesuniecie w prawo to wypadało by dodać kolicje czyli pozycja figury X < (szerokość konsoli w znakach - coś około ~60 nie pamiętam już) - szerokość figury to wtedy możesz się poruszać w prawo. W lewo jest już prościej bo wystarczy sprawdzać czy pozycja X > 0. Analogicznie jest dla kolizji z górą i dołem.
komentarz 9 stycznia 2017 przez Revane Początkujący (310 p.)

Dodałem 2 klawisze czyli + i - teraz pytanie brzmi czemu powiększanie działa a pomniejszanie nie :?

		case 43: {
			koniec = true;
			wysokosc++;
			szerokosc++;
			break; }
		case 45: {
			koniec = true;
			wysokosc--;
			szerokosc--;
			break; }

 

komentarz 9 stycznia 2017 przez Revane Początkujący (310 p.)
głupoty gadam, wszystko działa pozostaje ogarnąć te okno :P

Podobne pytania

–1 głos
1 odpowiedź 1,843 wizyt
pytanie zadane 28 maja 2017 w C i C++ przez Norbert123 Początkujący (290 p.)
+2 głosów
0 odpowiedzi 1,369 wizyt
0 głosów
0 odpowiedzi 494 wizyt

93,187 zapytań

142,202 odpowiedzi

322,012 komentarzy

62,513 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2365p. - dia-Chann
  2. 2326p. - Łukasz Piwowar
  3. 2315p. - Łukasz Eckert
  4. 2269p. - Tomasz Bielak
  5. 2235p. - Łukasz Siedlecki
  6. 2192p. - CC PL
  7. 2119p. - rucin93
  8. 2006p. - Michal Drewniak
  9. 1946p. - Adrian Wieprzkowicz
  10. 1901p. - Mikbac
  11. 1744p. - rafalszastok
  12. 1734p. - Anonim 3619784
  13. 1586p. - Dawid128
  14. 1520p. - Marcin Putra
  15. 1480p. - ssynowiec
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...