Как можно было бы сократить размер кода?
Может быть можно было бы использовать другой подход?
В общем мне нужны конструктивные советы. Кстати, подобные советы, как: используй процедурное программирование для таких прог в топку - я практикую ООП .
Код:
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <string>
using namespace std;
const unsigned short languages = 2;
const unsigned short strings = 12;
string texture [ languages ] [ strings ] =
{
{
"Сложность: \n1: 0 - 10, 5 попыток\n2: 0 - 50, 8 попыток\n3: 0 - 100, 10 попыток\n4: 0 - 1000, 20 попыток \n5: свой вариант сложности \n>",
"Введите верхнуюю границу случайного числа >",
"Введите количество попыток >",
"Хотите ли вы использовать данные настройки при следующей игре? ( да/нет ) >",
"Количество попыток: ",
"Введите число > ",
"Меньше \n",
"Больше \n",
"Ура, вы угадали \n",
"Заданное число было равно: ",
"Хотите ли вы сыграть еще? ( да/нет ) >"
},
{
"Complexity: \n1: 0 - 10, 5 attempts\n2: 0 - 50, 8 attempts\n3: 0 - 100, 10 attempts\n4: 0 - 1000, 20 attempts \n5: Personal variant of complexity. \n>",
"Enter upper border of random number >",
"Enter number of attempts >",
"Do you want to use these settings in future game ( yes/no ) >",
"Number of attempts: ",
"Enter a number > ",
"Smaller \n",
"Bigger \n",
"Oh, you are lucky \n",
"Proposed number was: ",
"Do you want to play again? ( yes/no ) >"
}
};
class game
{
private:
unsigned short choice;
unsigned short randnum;
unsigned short entnum;
unsigned short steps;
unsigned short upbord;
unsigned short MAXsteps;
string settings;
string langstr;
unsigned short langindex;
public:
string ch;
// Конструктор ==============================
game () : randnum ( 0 ), entnum ( 0 ), steps ( 0 ), choice ( 0 ), settings ( "нет" ), langstr ( "r" ), langindex ( 0 ) { }
// ==========================================================
void print_texture ( int );
void set_language ()
{
cout << "\nChoose the language ( e/r or english/russian ) >";
cin >> langstr;
if ( langstr == "r" || langstr == "russian" )
{
langindex = 0;
}
else
{
langindex = 1;
}
}
void set_choice()
{
if ( settings == "нет" || settings == "no")
{
print_texture ( 0 );
cin >> choice;
switch ( choice )
{
case 1:
upbord = 10;
MAXsteps = 5;
break;
case 2:
upbord = 50;
MAXsteps = 8;
break;
case 3:
upbord = 100;
MAXsteps = 10;
break;
case 4:
upbord = 1000;
MAXsteps = 20;
break;
case 5:
print_texture ( 1 );
cin >> upbord;
print_texture ( 2 );
cin >> MAXsteps;
print_texture ( 3 );
cin >> settings;
break;
default:
upbord = 100;
MAXsteps = 8;
}
}
}
void set_rand ()
{
srand ( time ( NULL ) );
randnum = rand () % upbord;
}
void enter_num ()
{
do
{
print_texture ( 4 );
cout << MAXsteps - steps++ << '\n';
print_texture ( 5 );
cin >> entnum;
if ( entnum > randnum )
print_texture ( 6 );
else
if ( entnum < randnum )
print_texture ( 7 );
else
if ( entnum == randnum )
print_texture ( 8 );
} while ( entnum != randnum && steps < MAXsteps );
if ( steps == MAXsteps )
{
print_texture ( 9 );
cout << randnum << '\n';
}
steps = 0;
}
void quast ()
{
print_texture ( 10 );
cin >> ch;
}
};
void game::print_texture( int num )
{
cout << texture [ langindex ] [ num ];
}
int main()
{
cout << "Игра называется \"Угадай число\". Данная игра написана только для практики программирования на С++. Игра основана на Объектно-ориентированном программировании. © Tikhonov Sergey ";
game g;
g.set_language();
do
{
g.set_choice();
g.set_rand();
g.enter_num();
g.quast();
} while ( g.ch != "no" && g.ch != "нет" && g.ch!= "not" );
return 0;
}
Помогите мне вырасти ценным и грамотным программистом.