Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <cmath>
- using std::cin;
- using std::cout;
- using std::endl;
- typedef std::vector<std::vector<char>> Matrica;
- typedef std::vector<std::vector<std::vector<char>>> Tridi;
- // Tri De Matrica
- std::vector<std::vector<std::vector<char>>> KreirajMatrice(int m, int n) {
- if (m <= 0 || n <= 0) throw std::domain_error("Dimenzije matrice moraju biti pozitivne");
- else if (m >= 100 || n >= 100) throw std::domain_error("Prevelike dimenzije");
- else if (m != n) {
- throw std::domain_error("Matrice moraju biti kvadratne");
- }
- Matrica N(m, std::vector<char>(n));
- Matrica A(m, std::vector<char>(n));
- for (int i = 0; i < m; i++) {
- for (int j = 0; j < n; j++) {
- N.at(i).at(j) = '-';
- A.at(i).at(j) = '-';
- }
- }
- std::vector<std::vector<std::vector<char>>> matrica;
- matrica.push_back(N);
- matrica.push_back(A);
- return matrica;
- }
- void Nacrtaj(const std::vector<std::vector<std::vector<char>>>& mat, int n) {
- if(n!=0 && n!=1) throw std::domain_error("Pogresno pozvana funkcija 'Nacrtaj'");
- //prvi
- if (n == 0) {
- for (int i = 0; i < mat.at(0).size(); i++) {
- for (int j = 0; j < mat.at(0).size(); j++) {
- cout<< mat.at(0).at(i).at(j)<<" ";
- }
- cout << endl;
- }
- }
- //drugi
- else if (n == 1) {
- for (int i = 0; i < mat.at(1).size(); i++) {
- for (int j = 0; j < mat.at(1).size(); j++) {
- cout<< mat.at(1).at(i).at(j)<<" ";
- }
- cout << endl;
- }
- }
- }
- bool PogadjanjeRobota(const std::vector<std::vector<std::vector<char>>>& mat, int p) {
- char znak = 'A';
- char pogodak = 'X';
- char promasaj = 'O';
- int kill1 = 0;
- int faul1 = 0;
- int kill2 = 0;
- int faul2 = 0;
- bool prekid = false;
- bool kraj_igre1 = false;
- bool kraj_igre2 = false;
- Tridi matrica = std::move(mat);
- //brisati matrice prva i druga!
- Matrica prva(mat.at(0).size(), std::vector<char>(mat.at(0).size()));
- Matrica druga(mat.at(1).size(), std::vector<char>(mat.at(1).size()));
- for (int i = 0; i < mat.at(0).size(); i++) {
- for (int j = 0; j < mat.at(0).size(); j++) {
- prva.at(i).at(j) = mat.at(0).at(i).at(j);
- druga.at(i).at(j) = mat.at(1).at(i).at(j);
- }
- }
- int broj_gadjanja = prva.size() * prva.at(0).size() * 2;
- for (int k = 0; k < broj_gadjanja; k++) {
- //PRVI
- if (k % 2 == 0) { //gadja prvi
- cout << "Prvi gadja (unesi koordinate): ";
- int x1, y1;
- cin >> x1 >> y1;
- if (x1 == -2 && y1 == -2) {
- //pozivanje funkcije Nacrtaj
- Nacrtaj(matrica, 0);
- //treba se nastaviti sa unosom!!
- }
- else if (x1 == -1 && y1 == -1) {
- prekid = true;
- break;
- }
- if (prva.at(x1).at(y1) == znak) {
- prva.at(x1).at(y1) = pogodak;
- matrica.at(0).at(x1).at(y1) = pogodak;
- cout << "Pogodak"<<endl;
- kill1++;
- }
- else if (prva.at(x1).at(y1) != znak) {
- prva.at(x1).at(y1) = promasaj;
- matrica.at(0).at(x1).at(y1) = promasaj;
- cout << "Promasaj"<<endl;
- faul1++;
- }
- bool gotova = false;
- int brejk = 0;
- for (int i = 0; i < prva.size(); i++) {
- for (int j = 0; j < prva.size(); j++) {
- if (prva.at(i).at(j) == znak) {
- brejk = 1;
- break;
- }
- else gotova = true;
- }
- if (brejk == 1) {
- gotova = false;
- break;
- }
- }
- if (gotova == true) {
- kraj_igre1 = true;
- break;
- }
- }
- //DRUGI
- else if (k % 2 != 0) { //gadja drugi
- cout << "Drugi gadja (unesi koordinate): ";
- int x2, y2;
- cin >> x2 >> y2;
- if (x2 == -2 && y2 == -2) {
- //pozivanje funkcije Nacrtaj
- Nacrtaj(matrica, 1);
- }
- else if (x2 == -1 && y2 == -1) {
- prekid = true;
- break;
- }
- if (druga.at(x2).at(y2) == znak) {
- druga.at(x2).at(y2) = pogodak;
- matrica.at(01).at(x2).at(y2) = pogodak;
- cout << "Pogodak"<<endl;
- kill2++;
- }
- else if (druga.at(x2).at(y2) != znak) {
- druga.at(x2).at(y2) = promasaj;
- matrica.at(1).at(x2).at(y2) = promasaj;
- cout << "Promasaj"<<endl;
- faul2++;
- }
- bool gotova2 = false;
- int brejk = 0;
- for (int i = 0; i < druga.size(); i++) {
- for (int j = 0; j < druga.size(); j++) {
- if (druga.at(i).at(j) == znak) {
- brejk = 1;
- break;
- }
- else gotova2 = true;
- }
- if (brejk == 1) {
- gotova2 = false;
- break;
- }
- }
- if (gotova2 == true) {
- //ispise sve ko sta kako i break
- kraj_igre2 = true;
- break;
- }
- }
- }
- if (prekid == true) {
- cout << "Igra je prekinuta!";
- return true;
- }
- else if (kraj_igre1 == true) {
- cout << "Pobjednik je igrac broj 1. Cestitke!" << endl;
- cout << "Broj pogodjenih: " << kill1 << endl;
- cout << "Broj promasenih: " << faul1 << endl;
- return true;
- }
- else if (kraj_igre2 == true) { //pobijedio drugi
- cout << "Pobjednik je igrac broj 2. Cestitke!" << endl;
- cout << "Broj pogodjenih: " << kill2 << endl;
- cout << "Broj promasenih: " << faul2 << endl;
- return true;
- }
- return false;
- }
- //modifikacija
- bool Grbava(Matrica m) {
- for (int i = 0; i < m.size(); i++)
- if (m.at(0).size() != m.at(i).size()) return true;
- return false;
- }
- bool Kvadratna(Matrica m) {
- if (m.size() != m.at(0).size()) return false;
- return true;
- }
- void Unos(std::vector<std::vector<std::vector<char>>>& matrice, int p) {
- //ERRORs
- if (matrice.at(0).size() == 0 && matrice.at(1).size() == 0) throw std::domain_error("Matrica ne postoji!");
- else if (matrice.size() != 2) throw std::range_error("3D matrica ima pogrešne dimenzije");
- else if (matrice.at(0).size() == 0 || matrice.at(1).size() == 0) throw std::domain_error("Neka od dvije matrice je prazna");
- else if (Grbava(matrice.at(0)) || Grbava(matrice.at(1))) throw std::domain_error("Neka matrica je grbava");
- else if (p > 15) throw std::range_error("Zelite igrati sa previse robota");
- else if (p > matrice.at(0).size() || p > matrice.at(1).size()) throw std::overflow_error("Zelite igrati sa previse robota");
- else if (!Kvadratna(matrice.at(0)) || !Kvadratna(matrice.at(1))) throw std::domain_error("Neka od matrica nije kvadratna");
- else if (matrice.at(0).size() != matrice.at(1).size()) throw std::domain_error("Matrice nemaju iste dimenzije");
- static int igrac = 0;
- //Matrica jedan(size, std::vector<char>(size, '-'));
- //pazi na broj ponavljanja ove petljee
- for (int k = 1; k <= p; k++) {
- // unos koordinata
- int x1, y1;
- cout << "Unesite pocetne koordinate " << k << ". robota (x1 i y1): ";
- cin >> x1 >> y1;
- int x2, y2;
- cout << "Unesite krajnje koordinate " << k << ". robota (x2 i y2): ";
- cin >> x2 >> y2;
- if (x1 != x2 && y1 != y2) throw ("Moraju biti horizontalno ili vertikalno postavljeni roboti!");
- if (k == 1) {
- if (x1 != x2 || y1 != y2) throw std::domain_error("Pogresna velicina robota");
- else {
- matrice.at(igrac).at(x1).at(y1)= 'A'; //direktno upisivanje u matricu
- }
- }
- if (k >= 2) {
- if (x1 == x2) {
- int i = x1;
- int zbir = abs(y1 - y2) + 1;
- if (k != zbir) throw std::domain_error("Pogresna velicina robota");
- if (y1 < y2) {
- for (int j = y1; j <= y2; j++) {
- matrice.at(igrac).at(i).at(j) = 'A';
- }
- }
- else if (y1 > y2) {
- for (int j = y2; j < y1; j++) {
- matrice.at(igrac).at(i).at(j) = 'A';
- }
- }
- else throw std::domain_error("Pogresna velicina robota");
- }
- else if (y1 == y2) {
- int i = y1;
- int zbir2 = abs(x1 - x2) + 1;
- if (k != zbir2) throw std::domain_error("Pogresna velicina robota");
- if (x1 < x2) {
- for (int j = x1; j <= x2; j++) {
- matrice.at(igrac).at(i).at(j) = 'A';
- }
- }
- else if (x1 > x2) {
- for (int j = x2; j <= x1; j++) {
- matrice.at(igrac).at(i).at(j) = 'A';
- }
- }
- else throw std::domain_error("Pogresna velicina robota");
- }
- else throw ("Moraju biti horizontalno ili vertikalno postavljeni roboti!");
- }
- }
- igrac++;
- }
- int main() {
- cout << "Unesite dimenzije matrica (m i n): ";
- int m, n;
- cin >> m >> n;
- //kreiranje matrice
- Tridi matrica = KreirajMatrice(m, n);
- cout << "Unesite broj robota: ";
- int p;
- cin >> p;
- cout << "PRVI IGRAC" << endl;
- Unos(matrica, p);
- //uhvatiti overflow error za ponavljanje unosa p
- cout << "DRUGI IGRAC" << endl;
- Unos(matrica, p);
- cout << "Uspjesno ste unijeli pozicije robota. Sada moze poceti pogadjanje." << endl;
- PogadjanjeRobota(matrica, p);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement