• 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

VPS Starter Arubacloud
0 głosów
652 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,240 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,240 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,240 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,240 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,240 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,747 wizyt
pytanie zadane 28 maja 2017 w C i C++ przez Norbert123 Początkujący (290 p.)
+2 głosów
0 odpowiedzi 1,182 wizyt
0 głosów
0 odpowiedzi 320 wizyt

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...