Witam,
to mój pierwszy większy projekt. Cześć rzeczy w tym programie to sztuki dla sztuki (np. funkcja zaprzyjaźnione). Wyniki to z przyczyn edukacyjnych, ale do rzeczy. Poniższy program prezentuje plansze 2D, w której przemieszcza się za pomocą wyboru współrzędnej (2) i klawiszy wsad (3). Przemieszczenie pierwszym sposobem powoduje zmianę wartości zmiennych: pol_x, pol_y; Natomiast podobnego efektu nie mogę uzyskać przy 2 metodzie. Jest to konieczne gdyż służy do porównania położenia obiektu pojawiającego się losowo ( [o] ), ze sterowanym ( [x] ) i wywołaniu komunikatu (tu: bazinga) . Próbowałem operować na wskaźnikach, jednak nie odniosło to pozytywnego skutku.
By program działał poprawnie, najpierw trzeba określić położenie za pomocą przemieszczenia.
#include <iostream>
#include <time.h>
#include "obiekt.h"
//************************************************DEKLARACJE GLOBALNE
using namespace std;
void rysuj(void);
int pol_x, pol_y;
int *wsk_x = &pol_x;
int *wsk_y = &pol_y;
int x_1=0, y_1=0;
int wymiar;
int main()
{
int y2,x2;
//******************************************************DEKLARACJA PLANSZY
cout << "Podaj rozmiar planszy:\n";
while(true)
{
cin >> wymiar;
if(wymiar <=18)
break;
else
cout << "Wymiar planszy nie moze przekraczac 18\n";
}
int plansza[wymiar][wymiar];
cout << endl;
vector2 ruch;
pozycja(ruch);
//*****************************************************************LOSOWE OBIEKTY
srand ( time(NULL) );
x_1 = (rand() % wymiar) + 1;
y_1 = (rand() % wymiar) + 1;
//*********************************************************MENU
char wybor;
cout << "menu\n";
cout << x_1 << "\n\n";
while(true)
{
//*********ETYKIETA
menu:
//*********ETYKIETA
cout << "1.Wyswietl wspolrzedne\n2.Przemieszczenie\n3.Ruch\n4.Wyjscie\n\n";
cin >> wybor;
switch(wybor)
{
case '1':
cout << ruch.przemieszczenie_x(x2) << "\n";
cout << ruch.przemieszczenie_y(y2) << "\n";
break;
//**********************************************************MENU-RUCH
case '2':
cout << "Podaj wspolrzedne: x i y:\n";
cin >> x2;
cin >> y2;
pol_x = (ruch.przemieszczenie_x(x2) );
pol_y = (ruch.przemieszczenie_y(y2) );
rysuj();
if(pol_x==x_1 && pol_y==y_1)
cout << "bazinga!";
cout << "\n";
break;
//**************************************************************MENU-RUCH
case '3':
char kursor;
cout << "Uzyj WSAD, by sie przemiescic:\n";
while(true)
{
cin >> kursor;
switch(kursor)
{
case 'S || s':
pol_x = pol_x +1;
rysuj();
break;
case 'W || w':
pol_x = pol_x -1;
rysuj();
break;
case 'A || a':
pol_y = pol_y -1;
rysuj();
break;
case 'D || d':
pol_y = pol_y +1;
rysuj();
break;
default:
goto menu; //->50
}
if(pol_x==x_1 && pol_y==y_1)
cout << "bazinga!";
}
break;
//*******************************************************************MENU-KONIEC
case '4':
return 0;
default:
break;
}
}
}
void pozycja(vector2 & ruch )
{
cout << "x = " << ruch.x << "\n";
cout << "y = " << ruch.y << "\n";
}
//******************************************************PLANSZA
void rysuj(void)
{
int n=wymiar;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if (i==pol_x && j==pol_y)
{
cout.width( 4 );
cout << "[x]";
continue;
}
if(i==x_1 && j==y_1)
{
cout.width(4);
cout << "[o]";
continue;
}
cout.width( 4 );
cout << "[ ]";
}
cout << "\n";
}
}
//*****************************************KLASA
#ifndef OBIEKT_H_INCLUDED
#define OBIEKT_H_INCLUDED
using namespace std;
class vector2
{
private:
int x,y;
public:
vector2() : x(0), y(0) {}
friend void pozycja(vector2& ruch );
int przemieszczenie_x(int x2);
int przemieszczenie_y(int y2);
};
int vector2::przemieszczenie_x(int x2)
{
x = x +x2;
return (x2);
}
int vector2::przemieszczenie_y(int y2)
{
y = y + y2;
return (y2);
}
#endif // OBIEKT_H_INCLUDED