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


Temat: Pomoc w parametryzacji funkcji programu oraz drobne...

Patrząc na to Konsola.h na przykład - załączone tam jest mnóstwo plików nagłówkowych, których nie wymaga żadna z deklaracji funkcji które się tam znajdują.

Następna dyskusja:

Bjarne Stroustrup o C++ w l...




Wyślij zaproszenie do