Witam,
Na wstępie zaznaczę że jestem jeszcze mocno zielony gdy chodzi o programowanie. Mam do napisania projekt:
Napisz program rysowania znakiem ASCII poniższej figury. Program powinien umożliwić:
- wybór znaku kodu ASCII;
- wczytanie początkowych rozmiarów figury;
- zmianę wielkości figury klawiszami + i -;
- przesuwanie figury za pomocą strzałek;
- ograniczenie przesuwania i rozmiarów figury do obszaru ekranu;
Sama figura się powiększa oraz pomniejsza, ale nie przesuwa się.
Jakby ktoś wskazał gdzie mam błąd to by było fajnie :)
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <Windows.h>
const int GORA = 72, DOL = 80, LEWO = 75, PRAWO = 77;
void gotoxy(int X, int Y);
int wherex();
int wherey();
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========== Program rysowania figury znakiem ASCII ========= \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();
}
////////////////////////////////////////////////////////////////////////////////
void WczytajDane(float &size, char &znak)
{
system("cls");
int max = 24, min = 3, 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;
}
////////////////////////////////////////////////////////////////////////////////
void Rysuj(float size, float x, float y, char znak)
{
float i, j;
int k;
system("cls");
for (i = 1; i < size; i++)
{
gotoxy(i + size /2, 24 - size / 2), cout << znak;
}
for (i = size/2; i > 0; i--)
{
gotoxy(i, 24-i), cout << znak;
}
for (i = 1; i < size /2; i++)
{
gotoxy(i, 24 - (size)+i) , cout << znak;
}
gotoxy(10, 25), cout << "strzalki: przesuwanie; +/-: powieksz, zmniejsz; ESC: wyjscie";
}
////////////////////////////////////////////////////////////////////////////////
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);
}
void gotoxy(int X, int Y)
{
COORD coord;
coord.X = X;
coord.Y = Y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
return;
}
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;
}