From 0d521917b367cedd3ae3953eb31dfaf686a123fd Mon Sep 17 00:00:00 2001 From: "vadim.bochkov" Date: Sat, 26 Oct 2024 13:14:53 +0500 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=81=D1=82=D1=83=D0=BF=D0=BD?= =?UTF-8?q?=D1=8B=20=D0=B4=D0=B2=D0=B0=20=D1=80=D0=B5=D0=B6=D0=B8=D0=BC?= =?UTF-8?q?=D0=B0.=201=20-=20=D0=BE=D1=82=D0=B3=D0=B0=D0=B4=D1=8B=D0=B2?= =?UTF-8?q?=D0=B0=D0=B5=D1=82=20=D0=B8=D0=B3=D1=80=D0=BE=D0=BA.=20=D0=9D?= =?UTF-8?q?=D0=B8=D1=87=D0=B5=D0=B3=D0=BE=20=D0=BE=D1=81=D0=BE=D0=B1=D0=B5?= =?UTF-8?q?=D0=BD=D0=BD=D0=BE=D0=B3=D0=BE.=202=20-=20=D0=BE=D1=82=D0=B3?= =?UTF-8?q?=D0=B0=D0=B4=D1=8B=D0=B2=D0=B0=D0=B5=D1=82=20=D0=BA=D0=BE=D0=BC?= =?UTF-8?q?=D0=BF.=20=D0=91=D0=BE=D1=82=20=D0=BF=D1=81=D0=B5=D0=B2=D0=B4?= =?UTF-8?q?=D0=BE=D1=80=D0=B0=D0=BD=D0=B4=D0=BE=D0=BC=D0=BD=D0=BE=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=B1=D0=B8=D1=80=D0=B0=D0=B5=D1=82=20=D1=87?= =?UTF-8?q?=D0=B8=D1=81=D0=BB=D0=B0.=20=D0=A2=D0=B0=D0=BA=D0=B6=D0=B5=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B0=20=D1=81=D0=B8=D0=BC=D1=83=D0=BB=D1=8F=D1=86=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0.=20=D0=9F=D0=BE=D0=BB=D1=83=D1=87=D0=B0=D1=8F=20=D1=84?= =?UTF-8?q?=D0=BB=D0=B0=D0=B3=20"=D0=B3=D0=BE=D1=80=D1=8F=D1=87=D0=BE",=20?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=20=D1=80=D0=B0=D0=BD=D0=B4=D0=BE=D0=BC=D0=BD?= =?UTF-8?q?=D0=BE=20=D1=80=D0=B5=D1=88=D0=B0=D0=B5=D1=82,=20=D0=BF=D0=BB?= =?UTF-8?q?=D1=8E=D1=81=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20=D0=B8=D0=BB=D0=B8?= =?UTF-8?q?=20=D0=BC=D0=B8=D0=BD=D1=83=D1=81=D0=BE=D0=B2=D0=B0=D1=82=D1=8C?= =?UTF-8?q?=20=D1=81=D0=B2=D0=BE=D1=91=20=D1=80=D0=B5=D1=88=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5.=20=D0=9F=D0=BE=D0=B9=D0=B4=D1=8F=20=D0=B2=20?= =?UTF-8?q?=D0=BD=D0=B5=D0=B2=D0=B5=D1=80=D0=BD=D1=83=D1=8E=20=D1=81=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BE=D0=BD=D1=83,=20=D0=BE=D0=BD=20=D0=B2=D1=8B?= =?UTF-8?q?=D0=B9=D0=B4=D0=B5=D1=82=20=D0=B8=D0=B7=20=D0=BC=D0=B0=D1=81?= =?UTF-8?q?=D1=81=D0=B8=D0=B2=D0=B0=20"=D0=B3=D0=BE=D1=80=D1=8F=D1=87?= =?UTF-8?q?=D0=BE"=20=D0=B8=20=D1=82=D1=83=D1=82=20=D0=B6=D0=B5=20=D0=B2?= =?UTF-8?q?=20=D0=BD=D0=B5=D0=B3=D0=BE=20=D0=B2=D0=B5=D1=80=D0=BD=D1=91?= =?UTF-8?q?=D1=82=D1=81=D1=8F,=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B1=D0=B8?= =?UTF-8?q?=D1=80=D0=B0=D1=8F=20=D1=81=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5?= =?UTF-8?q?=D0=B4=D0=BD=D0=B5=D0=B3=D0=BE=20=D0=B1=D0=BB=D0=B8=D0=B6=D0=B0?= =?UTF-8?q?=D0=B9=D1=88=D0=B5=D0=B3=D0=BE=20=D0=BA=20=D1=80=D0=B0=D0=B7?= =?UTF-8?q?=D0=B3=D0=B0=D0=B4=D0=BA=D0=B5=20=D1=87=D0=B8=D1=81=D0=BB=D0=B0?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.cpp | 261 ++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 209 insertions(+), 52 deletions(-) diff --git a/main.cpp b/main.cpp index a9cfb4f..6e15230 100644 --- a/main.cpp +++ b/main.cpp @@ -1,83 +1,240 @@ #include #include #include +#include +#include +#include -using std::cout; using std::endl; using std::cin; using std::string; typedef unsigned int unint; +using std::cout; using std::endl; using std::cin; using std::string; +using std::this_thread::sleep_for; using std::this_thread::sleep_until; +using std::chrono::nanoseconds; using std::chrono::system_clock; using std::chrono::seconds; +typedef unsigned int unint; int main() { - - //переменные - int compwin=0, urwin=0, maxtimes, times=1, rng, usercount=101; string yn = "y"; - const char *RAZD = "------------------"; unint dif; bool debug; - char const *TOOCOLD = "hell bro TOO COLD"; char const *TOOHOT = "yo brodie dat SO HOT"; + // + //ПЕРЕМЕННЫЕ + // + //целочисленные переменные - счетчики очков, попыток (в т.ч. максимум), + //числа юзера и рандомайзера + int compwin=0, urwin=0, maxtimes, times=0, rng, knower=101, unknower=101, botZN=2, corZN=2, hotpos, topoutof, downoutof; + // + //массив "горячо"(меньше и больше) + int hot[9]; + // + //условие для цикла тела игры + string yn = "y"; + // + //булевые - дебаг-вывод, кто игрок, флаг ошибки + bool debug, whollplay, hotflag=false, mistakeflag=false, rngZNwas=false; + // + //строковые константные + char const *RAZD = "------------------"; + char const *TOOCOLD = "hell bro TOO COLD"; + char const *TOOHOT = "yo brodie dat SO HOT"; + char const *BOTTHINK = "I think the number is:"; + // + //перечисление уровней сложности и переменная для свича уровня сложности enum difficult {EASY = 1, HARD = 2, NIGHTMARE = 3, FEDYA = 4}; + unint dif; + // - //заглавие - cout << RAZD << "\n" << RAZD << endl; cout << "ayyyy lmao welcome do Doka 3!" << endl; - cout << "CHOOSE UR DESTINY.\n1.EASY gives u 10 tries.\n2.HARD - 6 tries.\n3.NIGHTMARE - 3 tries.\n4.BROOO DON'T TYPE FEDYA" << endl; - cin >> dif; - - //выбор уровня сложности из пеоечисления + // + //ЗАГЛАВИЕ + //пара разделителей и текст + cout << RAZD << "\n" << RAZD << endl; cout << "ayyyy lmao wolcome do Doka 3! " << endl; + // + //БЛОК ПАРАМЕТРОВ + //выбираем, кто угадывает число - комп (0) или игорёк (1) + cout << "Who'll guess?\nType 1 to u or Type 0 to me:"; cin >> whollplay; + if (whollplay) { + cout << "OK. Here I'll generate number from 1 to 50. U must guess it if u don't want I'll rape ur back." << endl; + cout << "CHOOSE UR DESTINY.\n1.EASY gives u 11 tries.\n2.HARD - 7 tries.\n3.NIGHTMARE - 4 tries.\n4.BROOO DON'T TYPE FEDYA (rly don't need do it)" << endl; + cin >> dif; + } + else { + //здесь бот рандомит себе уровень сложности. ФЕДЯ ему недоступен, т.к. это рофлосложность лично тебя, Паша)))))))00000 + cout << "Well. I'll pick one of three difficulties. After that u should gimme a number from 1 to 50.\nI'll try to guess it." << endl; + srand(static_cast(time(0))); + dif = (rand() % 3) + 1; + cout << RAZD << "\nMy difficult will be " << dif << endl; + } + // + //СВИЧ УРОВНЯ СЛОЖНОСТИ + //выбор уровня сложности из пеоечисления. бот может выбрать только из первых трёх switch (dif) { case EASY: - cout << "DADDY PLZ DON'T BEAT ME!" << endl; maxtimes = 10; break; + cout << "DADDY PLZ DON'T BEAT ME! (11 tries)" << endl; maxtimes = 11; break; case HARD: - cout << "U WANNA PLAY? LET'S PLAY!" << endl; maxtimes = 6; break; + cout << "U WANNA PLAY? LET'S PLAY! (7 tries)" << endl; maxtimes = 7; break; case NIGHTMARE: - cout << "U'LL NEVER WIN." << endl; maxtimes = 3; break; + cout << "JEEZ DAT WAS SO COCKY. (4 tries)" << endl; maxtimes = 4; break; case FEDYA: - cout << "DeLongia Software ebat'" << endl; maxtimes = 1; break; + cout << "DeLongia Software (tebe pizda)" << endl; maxtimes = 1; break; default: cout << "invalid parameter (you are invalid too brodie.)" << endl; return 0; } - + // + //ДЕБАГ-МЕНЮ //дебаг вкл-выкл cout << "need a debug option? (0/1)" << endl; - cin >> debug; if (debug==true) {cout << "freaking cheater." << endl;} - cout << "I've generated number from 1 to 50. Can u guess it? "; - + cin >> debug; if (debug==true) {cout << "Now u will see Debug after every enter, freaking cheater.\n" << endl;} + // //ТЕЛО ИГРЫ + //В конце цикл спрашивает - y/n. y перезапускает тело игры while (yn=="y") { - //рандомайзер - cout << "wut r u waitin' 4? type ur number:" << endl; + // + //Рандомайзер числа rng. srand(static_cast(time(0))); rng = (rand() % 50) + 1; - - //дебаг-опция выводит верный ответ и счёт после каждого прокрута - if (debug==true) {cout << "rng:" << rng << "\ncompscore:" << compwin << "\nuserscore:" << urwin << endl;} - - //тело угадайки - while (usercount != rng) - { - cin >> usercount; - if (usercount>rng) {if (usercount-rng>=5) {cout << TOOCOLD << endl;} else {cout << TOOHOT << endl;}} - if (usercount=5) {cout << TOOCOLD << endl;} else {cout << TOOHOT << endl;}} - if ((usercount==rng) or (maxtimes==times)) {break;} - ++times; - }; - - //итоги раунда - if ((times==1) and (usercount==rng)) {++urwin; cout << "DAMMIT M8 U GUESSED IT FROM " << times << "st TIME!" << endl;} - else if ((times<=maxtimes) and (usercount==rng)) {++urwin; cout << "sheee not bad u guessed it from " << times << " time!" << endl;} - else {++compwin ;cout << "damn u lost." << endl;} - //прекол (только на уровне сложности ФЕДЯ) - if (maxtimes==1) {cout << "fedya also found u and took ur ass." << endl;} - - //предложение нового раунда - cout << "wanna play another time? (y/n)" << endl; - times = 1; - cin >> yn; + // + //ДЕБАГ + //дебаг-опция выводит верный ответ и остальные параметры игры + if (debug == true) { + cout << ":::::::::::::::DEBUG BEGINS HERE:::::::::::::::" << endl; + cout << "rng:" << rng << " | knower:" << knower << " | unknower:" << unknower << endl; + cout << "guessed:" << urwin << " | unguessed:" << compwin << endl; + cout << "hotmassive:"; + for (int counter = 0; counter < 9; counter++) cout << hot[counter] << " "; + cout << "\nhotflag:" << hotflag << " | times:" << times << " | botZN (1+,0-):" << botZN << " | mistakeflag:" << mistakeflag << endl; + cout << ":::::::::::::::DEBUG ENDS HERE:::::::::::::::" << endl; + } + // + //дуболомная проверка выхода за пределы хот-массива. + //в случае подтверждения ошибки бот берет для дальнейшего угадывания последнее ближайшее к загаданному число + //эту опцию нельзя засунуть в такое же условие ниже потому что алгоритм сломается и мне лень это чинить. + if (hotflag) { + if ((unknower==topoutof) or (unknower==downoutof)) { + botZN=corZN; mistakeflag=true; unknower=hot[hotpos]; + } + } + // + //если нет хотфлага - в незнающего присвается нарандомленное. + if (!hotflag) {unknower = rng;} + // + //при наличии хотфлага идет сверка нарандомленного ранее ботом знака. + //при совпадении знаков - бот верно идет к правильному ответу. + //при несовпадении - идет в обратную сторону и неизбежно ошибается. + //ошибка отрабатывается при перезапуске цикла. + else { + if (((corZN==0) and (botZN==0)) or ((corZN==1) and (botZN==0))) {unknower--;} + else if (((corZN==1) and (botZN==1)) or ((corZN==0) and (botZN==1))) {unknower++;} + } + // + //Отработка выхода из числового диапазона 1-50. + if (unknower>50) {unknower=unknower-50;} else if (unknower<1) {unknower=unknower+50;} + // + //Просто счётчик попыток + ++times; + // + //Запрос программой числа. Если угадывает бот - просит загадать ему число. Иначе - бот просит отгадать его rng. + //Определение знающего и незнающего + if (whollplay) { + cout << "wut r u waitin' 4? Try to guess - type ur number:" << endl; + cin >> unknower; + if (knower==101) {knower = rng;} + } else if ((!whollplay) and (knower==101)) { + cout << "Type ur fucking number, I'll guess." << endl; + cin >> knower; + } + // + //Рандомный механизм засыпания для бота + //Нужен из-за подвязки рандомизатора к часам компьютера + //Также симулирует задумчивость бота + if (!whollplay) { + srand(static_cast(time(0))); + Sleep((rand() / 7)); + } + // + //Цикл на заполнение массива "горячо" + //Массив являет собой веер "горячо" для работы в дальнейшем + //5pos содержит в себе верный ответ от загадывающего (знающего(knower)) + //Также массив не выходит из интервала "от 1 до 50" + for (int counter = 0; counter < 9; counter++) { + hot[counter] = ((knower - 4) + counter); + if (hot[counter] > 50) { hot[counter] = hot[counter] - 50; } + else if (hot[counter] < 1) { hot[counter] = hot[counter] + 50; } + } + // + //Сверка числа от незнающего на подобие в массиве. + //Назначается флаг hotflag, если есть совпадение + //Также назначается флаг корректного знака, который боту следует выбрать, + //чтобы перебрать до нужного числа. + //В начале цикла происходит сверка нарандомленного знака с корректным. + //Бот рандомит знак для симуляции ошибки. + for (int counter = 0; counter < 9; counter++) { + if (hot[counter] == unknower) { + hotflag = true; + if ((whollplay) and (unknower!=knower)) {cout << TOOHOT << endl;} + hotpos = counter; + if (counter < 4) { corZN = 1; } + else if (counter > 4) { corZN = 0; } + break; + } + else if ((counter==8) and (whollplay)) {cout << TOOCOLD << endl;} + } + // + //Угадайка от бота + if ((!whollplay)) { + //Переменные со значениями out of range + //(нужно для симуляции ошибки у бота, если угадывает он) + //Дойдя до одного из outof бот возвращается к последнему лучшему значению и с другим знаком идёт к верному ответу + if (hot[8] == 50) { topoutof = 1; } + else { topoutof = hot[8] + 1; } + if (hot[0] == 1) { downoutof = 50; } + else { downoutof = hot[0] - 1; } + //Одноразовый рандом ботом знака (0-,1+) на основе прошлого srand. + //После рандомизации присвивается true-флаг в rngZNwas + if ((hotflag) and (!rngZNwas)) { + srand(static_cast(time(0))); + botZN = rand() % 2; + rngZNwas=true; + } + // + //Бот предлагает свою отгадку. + cout << BOTTHINK << unknower << endl; + } + // + //Итоги раунда. Блок активен если число угадано или достигнут максимум по попыткам. + if ((unknower == knower) or (maxtimes==times)) { + if (unknower!=knower) { + ++compwin; + cout << "Damn so unlucky. No more tries." << endl; + if (whollplay) {cout << "The correct number was:" << knower << endl;} + } + else { + ++urwin; + cout << "Yeah! The correct number is:" << knower << endl; + if (times == 1) {cout << "DAMMIT M8 SHIT GUESSED FROM 1st TIME!" << endl;} + else if ((times <= maxtimes)) {cout << "sheee dat was not bad guessed it from " << times << " time!" << endl;} + } + switch (dif) { + case 4: + if (unknower!=knower) {cout << "Fedya found u and took ur ass. Fedya is happy." << endl;} + else {cout << "How could u guess it??? Unfuckingbelievable! INSANE! Fedya is angry to u." << endl;} + } + // + //запрос на новую итерацию цикла + cout << "wanna play another time? (y/n)" << endl; cin >> yn; + // + //сброс переменных в исходное состояние + hotflag = false, mistakeflag=false, rngZNwas=false; + times=0, knower=101, unknower=101, botZN=2, corZN=2, hotpos=0, topoutof=0, downoutof=0; + } } - + // //СТАТИСТИКА ПРИ ЗАВЕРШЕНИИ ИГРЫ - cout << "SOME STATS OF UR SESSION:" << endl; + cout << "SOME STATS OF SESSION:" << endl; //только на уровне сложности ФЕДЯ if (maxtimes==1) {cout << "fedya took ur ass " << compwin << " times.\nu r saved ur anus " << urwin << " times." << endl;} //в остальных случаях - else {cout << "I'm won " << compwin << " times.\nu won me " << urwin << " times." << endl;} - + else if (!whollplay) {cout << "Hell u won me " << compwin << " times.\nAnd I won u " << urwin << " times." << endl;} + else {cout << "I'm won " << compwin << " times.\nU won me " << urwin << " times." << endl;} + // //компьютер респектует или лошит игрока + if (maxtimes==1) {cout << "u had no chances loser, now u'll make notepad at DeLongia Software 2000 years." << endl;} + if (!whollplay) {compwin = compwin ^ urwin; urwin = urwin ^ compwin; compwin = compwin ^ urwin;} if (compwin>urwin) {cout << "fuckyeah go back home lamer, u need some training." << endl;} - else {cout << "well, dat was not bad how u beat me." << endl;} + else if (compwin