konto usunięte
Temat: Pomoc w parametryzacji funkcji programu oraz drobne...
Witam, mam na studia napisać program, który powinien umożliwić- wybor znaku ASCII;
- Wszytanie poczatkowych rozmiarow figury;"
- zmiane rozmiari figury klawiszami '+' i '-';"
- przesuwanie figury za pomoca kursorow;"
- ograniczenie przesuwania i rozmiarow figury;"
program ma być napisany za pomocą sparametryzowanych funkcji...
Kolejna kwestia to przesuwanie narysowanej figury za pomocą strzałek. I tu zabezpieczenie, bo nie wiem jak wykluczyć skróty np shift h, które mają takie same kody ASCII.
Mam problemy z przesyłaniem wartości argumentów przez wartość / adres...
I ma nie być w programie zmiennych globalnych
Obywatele pomożecie ?
z góry dziękuje !
plik projekt_figura.cpp
#include "stdafx.h"
#include "Konsola.h"
using namespace std;
const int Esq = 27;
int rozmiar = 0;
int bok=0;
int x = 40;
int y = 13;
char znak;
void rysujFigure(char znak, int rozmiar,int x,int y);
void pulpit();
void pobieranie_danych();//zparametryzować
void funkcja_operacyjna();//zparametryzować
int kontrola_rozmiar();
int main()
{
pulpit();
pobieranie_danych();
funkcja_operacyjna();
HideCursor();
_getch();
ShowCursor();
return 0;
}
void pulpit(){
cout << endl;
cout << endl;
cout << endl;
cout << endl;
cout << " Napisz program rysowania znakiem ASCII ponizszej figury." << endl;
cout << " Program powinien umozliwic : " << endl;
cout << endl;
cout << " - wybor znaku ASCII;" << endl;
cout << " - Wszytanie poczatkowych rozmiarow figury;" << endl;
cout << " - zmiane rozmiari figury klawiszami '+' i '-';" << endl;
cout << " - przesuwanie figury za pomoca kursorow;" << endl;
cout << " - ograniczenie przesuwania i rozmiarow figury;" << endl;
_getch();
}
void pobieranie_danych()
{
system("cls");
bok=kontrola_rozmiar();
cout << endl;
cout << " Podaj znak figury : ";
cin >> znak;
_getch();
}
void funkcja_operacyjna()
{
char klawisz;
do{
system("cls");
rysujFigure(znak,bok,x,y); //zamiast rozmiar ma być bok-parametr aktualny
gotoxy(0,24);
cout << "Uzywaj strzalek by przesuwac figure; + zwieksz; - zmiejsz";
klawisz = _getch();
if(rozmiar%2 == 0){
bok = rozmiar+1;
}else{
bok = rozmiar;
}
int lewa_granica = (bok-1)/2;
int prawa_granica = 79 - (bok-1)/2;
int gorna_granica = 0;
int dolna_granica = 24 - rozmiar;
switch (klawisz){
case '+': { rozmiar=rozmiar+1; break;}
case '-': {rozmiar=rozmiar-1; break;}
case 75: {if(x > lewa_granica){x--;} break;}
case 77: {if(x < prawa_granica){x++;} break;}
case 72: {if(y > gorna_granica){y--;} break;}
case 80: {if(y < dolna_granica){y++;} break;}
case Esq: {break;}
}
}
while (klawisz != Esq);
}
void rysujFigure(char znak, int rozmiar,int x,int y)
{
int x1=x;
int y1=y;
int bok=rozmiar;
for (int i = x1-(rozmiar/2); i <= x1; i++) // rysuje podstawę figury lewą od (pozycji środka-połowa dł. boku) do środka ekranu
{
gotoxy(i,y1);
cout<<znak;
};
for (int i = x1; i <= x1+(rozmiar/2); i++) // rysuje podstawę figury prawą od (pozycji środka-połowa dł. boku) do końca
{
gotoxy(i,y1);
cout<<znak;
};
for (int i = x1-(rozmiar/2); i <= x1; i++, y1++)
{
gotoxy(i,y1-rozmiar/2);
cout<<znak;
};
for (int i = x1; i <= x1+rozmiar/2; i++, y1--)
{
gotoxy(i,y1-rozmiar/2 -1);
cout<<znak;
};
}
//********************
int kontrola_rozmiar()
{
int rozmiar,x, y;
bool err;
cout << endl;
cout << endl;
cout << endl;
cout << endl;
cout << " WPROWADZANIE DANYCH" << endl << endl <<endl;
cout << " Podaj nieparzystą szerokość figury z zakresu <5-27> ";
x = wherex();
y = wherey();
do
{
err = false;
gotoxy(x, y);
clreol();
cin >> rozmiar;
if (!cin.good()) // Zabezpieczenie przed wprowadzeniem niewlasciwego znaku
{
err = true;
cin.clear();
cin.ignore(80, '\n');
}
}
while(rozmiar < 5 || rozmiar > 28 || rozmiar%2==0 || err);
return rozmiar;
}
plik Konsola.cpp
#include "stdafx.h"
#include "Konsola.h"
using namespace std;
//----------------------------------------------------------------------------
void polskie_litery()
{
locale locpl("Polish_Poland"); //tworzy obiekt z lokalizacja
locale::global(locpl); //lokalizacja globalnie
cout.imbue(locpl); // lokalizacja strumienia cout
cin.imbue(locpl); // lokalizacja strumienia cin
}
//----------------------------------------------------------------------------
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 clreol()
{
int x, y;
x = wherex();
y = wherey();
gotoxy(x,y);
for (int i =x; i<=79; i++)
cout << " ";
gotoxy(x, y);
}
//----------------------------------------------------------------------------
void HideCursor()
{
::HANDLE hConsoleOut = ::GetStdHandle( STD_OUTPUT_HANDLE );
::CONSOLE_CURSOR_INFO hCCI;
::GetConsoleCursorInfo( hConsoleOut, &hCCI );
hCCI.bVisible = FALSE;
::SetConsoleCursorInfo( hConsoleOut, &hCCI );
}
//----------------------------------------------------------------------------
void ShowCursor()
{
::HANDLE hConsoleOut = ::GetStdHandle( STD_OUTPUT_HANDLE );
::CONSOLE_CURSOR_INFO hCCI;
::GetConsoleCursorInfo( hConsoleOut, &hCCI );
hCCI.bVisible = TRUE;
::SetConsoleCursorInfo( hConsoleOut, &hCCI );
}
//-------------------------------------------------------------------------
void ustaw_kolor(int kolor)
{
HANDLE uchwyt;
uchwyt = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(uchwyt,kolor);
}
//-------------------------------------------------------------------------
plik Konsola.h
#ifndef Konsola
#define Konsola
//=============================
#include <iostream>
#include <conio.h>
#include <Windows.h>
#include <locale>
//-----------------------------
void polskie_litery();
void gotoxy(int x,int y);
int wherex();
int wherey();
void clreol();
void HideCursor();
void ShowCursor();
void ustaw_kolor(int kolor);
//=============================
#endif