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