Загрузка...

Vinapi c++, the essence of the program is that the computer guesses the user's number. Need code improvement

Thread in C/C++ created by Wertuyska Sep 26, 2021. 351 view

  1. Wertuyska
    Wertuyska Topic starter Sep 26, 2021 0 Sep 26, 2021
    Нужно написать событие, при котором если пользователь лжет компьютеру и всегда нажимает "нет" или "да", то мы видим, что компьютер пишет, к примеру,"Вы обманываете":

    #include <windows.h>
    #include <tchar.h>
    #define APPNAME _T("LabWork1")
    #define APPCLS _T("Nuklon")
    #define IDC_SMALL 100
    #define IDC_BIG 101
    #define IDC_ANSWER 102
    #define _creatButton(name, id, x, y) \
    CreateWindow(_T("BUTTON"), name, WS_CHILD | BS_USERBUTTON | WS_VISIBLE,\
    x, y, 200, 60, hwnd, (HMENU)id, (HINSTANCE)lParam, NULL)
    //////////////////////////////////////////////////////////
    LRESULT CALLBACK _wndProc(HWND, UINT, WPARAM, LPARAM);
    int _creatWindow(HINSTANCE, const TCHAR*);
    void _helloDlg(HWND, int, int);
    void _answerCPU(HWND, int, int, char);
    /// /////////////////////////////////////////////////////
    int f_n = 1;
    int l_n = 1000;
    //////////////////////////////////////////////////////////
    int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR, int) { return _creatWindow(hInstance, _T("LabWork1. Less or more?"));}
    ///////////////////////ОКНО//////////////////////
    int _creatWindow(HINSTANCE hInst, const TCHAR* caption) {
    HWND hwnd = NULL;
    MSG msg = { 0 };
    WNDCLASS ofs = {
    0, _wndProc, 0, 0, hInst, 0, LoadCursor(NULL, IDC_ARROW),
    (HBRUSH)(COLOR_WINDOW + 2), 0, APPCLS };
    if (!RegisterClass(&ofs))
    return 1;
    hwnd = CreateWindow(APPCLS, caption, WS_OVERLAPPEDWINDOW & ~WS_SIZEBOX,
    CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, HWND_DESKTOP,
    NULL, hInst, hInst);
    if (hwnd == NULL) {
    UnregisterClass(APPCLS, hInst);
    return 1;}
    ShowWindow(hwnd, SW_SHOW);
    UpdateWindow(hwnd);
    while (GetMessage(&msg, NULL, 0, 0)) {
    TranslateMessage(&msg);
    DispatchMessage(&msg);}
    return 0;}
    ////////////////////////////////////////////////////////
    LRESULT CALLBACK _wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    static HWND bbig = NULL;
    static HWND bsmall = NULL;
    RECT rc;
    switch (msg) {
    case WM_CREATE:
    GetClientRect(hwnd, &rc);
    bsmall = _creatButton(_T("МЕНЬШЕ"), IDC_SMALL, rc.right / 10 + 350, rc.bottom / 2 + 30);
    bbig = _creatButton(_T("БОЛЬШЕ"), IDC_BIG, rc.right / 10 + 350, rc.bottom / 2 - 40);
    SendMessage(hwnd, WM_COMMAND, MAKEWPARAM(IDC_ANSWER, 0), 0);
    break;
    case WM_COMMAND:
    switch (LOWORD(wParam)) {
    case IDC_SMALL:
    _answerCPU(hwnd, f_n, l_n, '<');
    break;
    case IDC_BIG:
    _answerCPU(hwnd, f_n, l_n, '>');
    break;
    case IDC_ANSWER:
    _helloDlg(hwnd, f_n, l_n);
    _answerCPU(hwnd, f_n, l_n, 0);
    break;
    }
    break;
    case WM_DESTROY:
    DestroyWindow(bsmall);
    DestroyWindow(bbig);
    PostQuitMessage(0);
    break;
    default:
    return DefWindowProc(hwnd, msg, wParam, lParam);}
    return 0;}
    ////////////////////НАЧАЛО/////////////////////////////////
    void _helloDlg(HWND hwnd, int f, int l) {
    TCHAR buf[64];
    wsprintf(buf, _T("Для начала игры задумайте число от %d до %d"), f, l);
    MessageBox(hwnd, buf, APPNAME, MB_OK | MB_ICONINFORMATION);
    }
    ///////////////////////////////////////////////////////
    void _answerCPU(HWND hwnd, int _f, int _l, char ch) {
    static int f = _f;
    static int l = _l;
    static int num = 0;
    TCHAR buf[64];
    int id;

    switch (ch) {
    case '<': // МЕНЬШЕ
    l = num;
    break;
    case '>': // БОЛЬШЕ
    f = num + 1;
    break;
    }
    num = (f + l) / 2;

    wsprintf(buf, _T("Загаданным числом является %d. Да/Нет?"), num);
    id = MessageBox(hwnd, buf, APPNAME, MB_YESNO | MB_ICONQUESTION);
    if (id != IDYES)
    return;


    wsprintf(buf, _T("Получилось! Ваше число %d"), num);

    id = MessageBox(hwnd, buf, APPNAME, MB_OKCANCEL | MB_ICONINFORMATION);
    if (id == IDCANCEL)
    SendMessage(hwnd, WM_DESTROY, 0, 0);
    else {
    f = _f;
    l = _l;
    SendMessage(hwnd, WM_COMMAND, MAKEWPARAM(IDC_ANSWER, 0), 0);
    }
    }
     
  2. M1h4n1k
    M1h4n1k Sep 26, 2021 Ответы skysmart - t.me/SkyAnsBot 272 May 4, 2021
    1. Wertuyska Topic starter
      M1h4n1k, Спасибо, но при таком раскладе возникает ошибка выполнения команды
    2. M1h4n1k
      Wertuyska, какой команды? В любом случае есть пастбин
  3. M1h4n1k
    M1h4n1k Sep 26, 2021 Ответы skysmart - t.me/SkyAnsBot 272 May 4, 2021
    Че а как это доработать? Если я загадал самое маленькое число, то я всегда буду отвечать "нет". В чем проблема то
     
    1. View previous comments (3)
    2. M1h4n1k
      Wertuyska, рофлишь? Вывести/показать/напечатать/передать
    3. Wertuyska Topic starter
      M1h4n1k, Я про то, что как это имеет дело к решению моей ситуации дело
    4. M1h4n1k
      Wertuyska, что именно имеет дело к твоей проблеме?
      Твоя проблема - пользователь может наебать.
      Решение - если дальше числа перебирать нельзя, и пользователь ответил нет, то сказать, что он [Пользователь] наебывает
  4. kekuz
    kekuz Oct 9, 2021 2 Oct 6, 2021
    Код выглядит ужасно, это win32 api? Когда ответ становится очевиден, не нужно ничего спрашивать у пользователя и говорить, что он обманывает. Надо поставить перед фактом: ваше число - n и завершить работу программы.
     
Top
Loading...