0

私は初めての win32 アプリとして Tic-Tac-Toe ゲームを作成していますが、かなり順調に進んでいます。三目並べボードの各四角はボタンであり、クリックすると誰の番であるかに基づいて X または O になります。1 人のプレイヤーがゲームに勝つと、「プレイヤー 1 が勝つ」という小さなウィンドウが三目並べボードの下に表示されるようにしました。また、画面の下部に「NEW GAME」ボタンを作成しました。これをクリックすると、すべての X と O がボードからクリアされ、ゲームが再開されます。

ここに私の問題があります。「NEW GAME」ボタンをクリックすると、他のすべてのように「PLAYER 1 WINS」というウィンドウが消えず、そこにとどまります。消えてほしい。これが私のコードの一部です:

   case WM_COMMAND:
    wmId    = LOWORD(wParam);
    wmEvent = HIWORD(wParam);

    // Parse the menu selections:
    switch (wmId)
    {
    case IDM_LOC1:
        click1++;
        if(click1>1)
        {break;}
        else{
            playerobject++;
        if(playerobject==1|playerobject==3|playerobject==5|playerobject==7|playerobject==9)
        {   SetDlgItemText(hWnd, IDM_LOC1, "X");                
            loc1 = 1;   }
        else
        {   SetDlgItemText(hWnd, IDM_LOC1, "O");                
            loc1 = 2;   }
        winner = determinewinner();
        if(winner==1)
        {               
            hwndb = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW,TEXT("STATIC"),TEXT("PLAYER 1 WINS!"),WS_CHILD|SS_CENTER|WS_VISIBLE,20,210,210,18,hWnd,HMENU(NULL),GetModuleHandle(NULL),NULL);
        }
        else if (winner==2)
        {
            hwndb = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW,TEXT("STATIC"),TEXT("PLAYER 2 WINS!"),WS_CHILD|SS_CENTER|WS_VISIBLE,20,210,210,18,hWnd,HMENU(NULL),GetModuleHandle(NULL),NULL);
        }
        break;}

それはロジック部分を処理することです (私はそれがかなり厄介であることを知っています、それは私の最初の試みです)。したがって、「determinewinner」関数が 1 を返すと、プレイヤー 1 が勝ったことを示すウィンドウが表示されることがわかります。「NEW GAME」ボタンを処理するコードは次のとおりです。

    case IDM_RESTART:
        SetDlgItemText(hWnd, IDM_LOC1, "");
        SetDlgItemText(hWnd, IDM_LOC2, "");
        SetDlgItemText(hWnd, IDM_LOC3, "");
        SetDlgItemText(hWnd, IDM_LOC4, "");
        SetDlgItemText(hWnd, IDM_LOC5, "");
        SetDlgItemText(hWnd, IDM_LOC6, "");
        SetDlgItemText(hWnd, IDM_LOC7, "");
        SetDlgItemText(hWnd, IDM_LOC8, "");
        SetDlgItemText(hWnd, IDM_LOC9, "");
        playerobject = 0;
        click1=0;
        click2=0;
        click3=0;
        click4=0;
        click5=0;
        click6=0;
        click7=0;   
        click8=0;
        click9=0;
        loc1=0,loc2=0,loc3=0,loc4=0,loc5=0,loc6=0,loc7=0,loc8=0,loc9=0;
    DestroyWindow(hwndb);
        break;

どちらも WndProc スイッチ ステートメント (WM_COMMAND 部分) の下の単なるケースであるため、問題はスイッチ ステートメントであると思います。hwndb ウィンドウを winmain 関数に移動してから、switch ステートメントで ShowWindow 関数を実行しようとしましたが、もちろんうまくいきませんでした。

ウィンドウを閉じるにはどうすればよいですか? ありがとう!

編集*だから私はそれを実行すると、NEW GAMEボタンがクリックされるまでうまくいくと言うのを忘れていました.hwndbは初期化されていないと言います.明らかに間違ったことをした。どうすれば正しくできますか?

4

1 に答える 1