nats Temat założony przez niniejszego użytkownika |
Optymalizacja funkcji » 2015-12-06 18:13:34 Witam, mam problem z optymalizacją swojego kodu: if( * ruchg == 'd' ) { cout << "Twoje możliwe ruchy to: " << endl << "prawo(p), dół-prawo(i), dół(d), dół-lewo(j), lewo(l)." << endl << "Wybierz ruch: " << endl; krok = _getch(); switch( krok ) { case 'p': ruch( 0, 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; case 'd': ruch( 1, 0, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; case 'l': ruch( 0, - 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; case 'i': ruch( 1, 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; case 'j': ruch( 1, - 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; default: cout << "Zły wybór ruchu."; break; } * ruchg = krok; } else if( * ruchg == 'l' ) { cout << "Twoje możliwe ruchy to: " << endl << "lewo(l), góra-lewo(h), dół-lewo(j), dół(d), góra(g)." << endl << "Wybierz ruch: " << endl; krok = _getch(); switch( krok ) { case 'd': ruch( 1, 0, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; case 'l': ruch( 0, - 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; case 'j': ruch( 1, - 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; case 'h': ruch( - 1, - 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; case 'g': ruch( - 1, 0, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; default: cout << "Zły wybór ruchu."; break; } * ruchg = krok; else { cout << "Wybierz ruch: " << endl; krok = getch(); switch( krok ) { case 'i': ruch( 1, 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; case 'j': ruch( 1, - 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; case 'h': ruch( - 1, - 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; case 'y': ruch( - 1, 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; case 'p': ruch( 0, 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; case 'd': ruch( 1, 0, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; case 'l': ruch( 0, - 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; case 'g': ruch( - 1, 0, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; default: cout << "nic" << endl; } * ruchg = krok; } } Chciałabym "zmniejszyc objetosc kodu, czy jest to wykonalne? |
Gibas11 |
» 2015-12-06 20:01:30 @up Wyluzuj, sądzisz że ktoś spamiętuje nicki takich użytkowników i więcej im nie pomaga? Ale spina. Wracając do meritum - Zmienia się tylko część argumentów przekazywanych dalej do funkcji, zamiast wielokrotnie powtórzonych wywołań możesz zapamiętać tylko potrzebne dane, np. tak: 1. Kod na którym się wzorowałem: else { cout << "Wybierz ruch: " << endl; krok = getch(); switch( krok ) { case 'i': ruch( 1, 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; case 'j': ruch( 1, - 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; case 'h': ruch( - 1, - 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; case 'y': ruch( - 1, 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; case 'p': ruch( 0, 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; case 'd': ruch( 1, 0, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; case 'l': ruch( 0, - 1, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; case 'g': ruch( - 1, 0, x, x_gr, y_gr, x_s, y_s, v, gracz ); break; default: cout << "nic" << endl; } * ruchg = krok; }
2. Efekt: else { cout << "Wybierz ruch: " << endl; krok = getch(); int a = 0, b = 0; bool ok = true; switch( krok ) { case 'i': a = 1; b = 1; break; case 'j': a = 1; b = - 1; break; case 'h': a = - 1; b = - 1; break; case 'y': a = - 1; b = 1; break; case 'p': a = 0; b = 1; break; case 'd': a = 1; b = 0; break; case 'l': a = 0; b = - 1; break; case 'g': a = - 1; b = 0; break; default: cout << "nic" << endl; ok = false; } if( ok ) ruch( a, b, x, x_gr, y_gr, x_s, y_s, v, gracz ); * ruchg = krok; }
Kod może i jest dłuższy, ale tutaj nie robi to różnicy, a poprawę w czytelności chyba widać na pierwszy rzut oka. |