Rysowanie figury znakiem ascii - pomoc

0

Witam, mam zrobić program rysowania figury znakiem ascii, nie ukrywam, że jestem zielony w programowaniu ogolnie i mam problem. Wszystko działa poza wyborem kodu ascii(zawsze rysuje tym co wpiszę a nie pobiera określonego znaku z tablicy znaków) i powiększaniem, tj. powiększa lecz nie ogranicza się to do pola ekranu ;/ przesuwanie jak najbardziej jest ok. Proszę o pomoc w tych dwóch przypadkach.

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


const int GORA=72, DOL=80, LEWO=75, PRAWO=77;    // stała deklaracja klawiszy do ruszania



// ten fragment dostaliśmy od wykładowcy

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 Wstep();
void WczytajDane        (float &size, char &znak);
void Rysuj              (float size, float x, float y, char znak);
void Przesuwanie        (float size, float &x, float &y, char znak);
//---------------------------------------------------------------------------
 
using namespace std;
 
int main()
{
        float x=1,y=1;
        float size;
        char znak;
        system("cls");
 
        Wstep();
        WczytajDane(size, znak);
        Rysuj(size, x, y, znak);
        getch();
        Przesuwanie(size, x, y, znak);
 
        return 0;
}
////////////////////////////////////////////////////////////////////////////////
 
void Wstep()
{
cout << "\t=========================================================== \n"
        "\t========== Program rysowania figury znakiem ASCII ========= \n"
        "\t=========================================================== \n"
        "\t========================  FIGURA  ========================= \n"
        "\t==xxxx ======================================== \n"
        "\t==xxxxx==================  +++++  ========================= \n"
        "\t==xxxx===================   +     =========================  \n"
        "\t=========================    +    =========================  \n"
        "\t=========================   +     =========================  \n"
        "\t=========================  +++++  ========================= \n"
        "\t=========================================================== \n"
        "\t==================== Program umozliwia: =================== \n"
        "\t== wybor znaku kodu ASCII ================================= \n"
        "\t== wczytanie poczatkowych rozmiarow figury ================ \n"
        "\t== przesuwanie firury klawiszami strzalek ================= \n"
        "\t== powiekszanie oraz zmianiszanie figury za pomoca + i - == \n"
        "\t== ograniczenie przesuwania figury do rozmiaru ekranu ===== \n"
        "\t=========================================================== \n"
        "\t======== dowolny klawisz rozpocznie prace programu ======== \n"
        "\t=========================================================== ";
        getch();
}
 
/////////////////////////WPROWADZANIE DANYCH ////////////////////////
 
void WczytajDane (float &size, char &znak)
{
        system("cls");
        int max=22 , min=5 , rozmiar;
        do
        {
        cout << "Podaj rozmiar figury z zakresu (5-22): ";
        cin >> rozmiar;
        }
        while( rozmiar < min || rozmiar > max);
        size = rozmiar;
 
        cout << "Podaj znak kodu ASCII: ";
        cin >> znak;
 
}
 
/////////////////RYSOWANIE////////////////////////
 
void Rysuj(float size, float x, float y, char znak)
{
float i,j;
int k;
 
        system("cls");
 
        for(i=x , j=y , k=0 ; k < size ; i--, k++)
        {
        gotoxy(i,j), cout << znak;
        }
 
        for(i=x , j=y , k=0 ; k < (size/2) ; i++,j++,k++)
        {
        gotoxy(i,j), cout << znak;
        }
 
        for(i=x+(size/2) , j=y+(size/2) , k=0 ; k < (size/2) ; i++,j++,k++)
        {
        gotoxy(i,j), cout << znak;
        }
 
        for(i=x , j=(y+size)-1 , k=0 ; k < size ; i++ , k++)
        {
        gotoxy(i,j), cout << znak;
        }
        gotoxy(10,25), cout << "strzalki: przesuwanie; +/-: powieksz, zmniejsz; ESC: wyjscie";
}
 
///////////////////PRZESUWANIE I ZMIANA ROZMIARU FIGURY///////////////////////////
 
void Przesuwanie(float size, float &x, float &y, char znak) // przesuwanie figury klawiszami strzałek
{
        int zmiana = 0, max=23;
        char klawisz;
 
 
        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 '+':
		        {
			size++; zmiana=1;
			if (size < 5 || size > max)
			{
                        size--; y--;
                        zmiana = 0;
                        }
		 break;
                 }
 
                 case '-':
                        {
                        size--;
                        zmiana=1;
                        if (size < 5 || size > max)
                        {
                        size++;
                        zmiana = 0;
                  }
                  break;
         }
 
}
 
 
 
if (zmiana)
{
Rysuj(size, x, y, znak); zmiana = 0;
}
 
 
 
}
while (klawisz != 27);
 
}
 
 
//---------------------------------------------------------------------------
  
0

W jakim środowisku napisałeś ten program? Współrzędne punktu na ekranie to liczby całkowite, popatrz na definicję fcji gotoxy(...);Po zmianie typu i skompilowaniu pod Dev-C++ na ekranie otrzymuję:
xxxx
x
x
xxxx

znak figury jest zgodny z zapodanym i przesuwanie działa.
Chyba nie chodziło o taką figurę?
Wydaje mi się, że nie pisałeś tego sam, ale program nie jest trudny.

1 użytkowników online, w tym zalogowanych: 0, gości: 1