WinAPI Gra memory

0

Witam mam do zrobienia projekt w WinAPI padło na grę memory (wykrywanie par), jest 16 przycisków każde z nich to pole po wciśnięciu pokazuje się liczba i trzeba znaleźć drugą taka samą.
Utworzyłem tablicę w której przychowuje te 8 par liczba, ale mam problem z funkcją która by zwracała wylosowane indeksy tablicy bez powtórzeń oraz przypisywała wartość pod przycisk(po wcisnieciu wartosc bedzie wyswietlona) mam takie coś

case ID_PRZYCISK4:

SetWindowText(hButton4, "4" );

lecz niestety to jest w stanie pokazać tylko tekst a nie wartość z tablicy. Pozdrawiam i liczę na pomoc

0

"jak przekształcić liczbę na tekst"

0

coś więcej bo nie rozumiem? dodam że robie program strukturalnie bo nie znam się na programowaniu obiektowym

0

Konwersje int na string i string na int

czyli np o to chodzi

i spójrzcie na tą funkcje która losuje indeks tabicy bez powtórzeń czy jest ok i cz da radę to połączyć

 bool IsInTab(int value, int* tab)
    {
    for(int i = 0; i < 8; ++i)
    if(tab[i] == value)
    return true;
    return false;
    }
1
#include <iostream>
#include <algorithm>
#include <random>
#include <chrono>

int main()
  {
   int Tab[4][4]={{1,1,2,2},{3,3,4,4},{5,5,6,6},{7,7,8,8}};
   unsigned seed=std::chrono::system_clock::now().time_since_epoch().count();
   std::shuffle(&Tab[0][0],&Tab[0][0]+16,std::default_random_engine(seed));
   for(int y=0;y<4;++y,std::cout<<std::endl) for(int x=0;x<4;++x) std::cout<<' '<<Tab[y][x];
   return 0;
  }

http://ideone.com/cqTY2i

W teorii - UB.
W praktyce - dopóki sizeof(*Tab)*ItemCount==sizeof(Tab) (a to z kolei zagwarantowane przez standard) oraz tablica jest w całości w jednym kawałku pamięci (też zagwarantowane) - musi działać.

0

#if __cplusplus < 201103L
#error This file requires compiler and library support for the
ISO C++ 2011 standard. This support is currently experimental, and must be
enabled with the -std=c++11 or -std=gnu++11 compiler options.
#endif

p próbie kompliacji tworzy sie plik z takim bledem uzywam code blocksa

@ok zmieniłem ustawienia kompilera i jest ok

0

Ok to wszystko okej z tą funkcją teraz np chce żeby pod hButton1

po wciśnieciu wyskakiwała ta cyferka wylosowana z tablicy o indeksie [0][0]

case ID_PRZYCISK4:


int i = tab[0][0];
char *str;
sprintf(str, "%d", i);

SetWindowText(hButton4, **tylko co tutaj** );
0
        switch(wParam)
        {
           
        default:
           if((ID_PRZYCISK4<=wParam)&&(wParam<=ID_PRZYCISK19))
           {
              char str[8];
              int yx=wParam-ID_PRZYCISK4,y=yx/4,x=yx-4*y;
              sprintf(str,"%d", tab[y][x]);
              SetDlgItemText(WinHandle,wParam,str);
           }
        }
0
// OBS£UGA ZDARZEÑ
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg )
    {

        case WM_COMMAND:

{

switch(wParam)

        {
            case ID_PRZYCISK1:
                losowanie();

            default:
           if((ID_PRZYCISK3<=wParam)&&(wParam<=ID_PRZYCISK18))
           {
              char str[8];
              int yx=wParam-ID_PRZYCISK3,y=yx/4,x=yx-4*y;
              sprintf(str,"%d", tab[y][x]);
              SetDlgItemText(hButton2,wParam,str);
           }
        }


}
break;

    case WM_CLOSE:
        DestroyWindow( hwnd );
        break;

    case WM_DESTROY:
        PostQuitMessage( 0 );
        break;

        default:
        return DefWindowProc( hwnd, msg, wParam, lParam );
    }

    return 0;
}

to moja obsługa zdarzeń mam rozumieć, że ta instrukcja jest zastąpiąna dla wszystkich pól tak
i słowo default musi występować tam na końcu(dwukrotnie nie może czy może być bez niego)
bo niestety nie działa tutaj cały kod http://pastebin.com/cRQc3LV0

0

Nie może działać, ponieważ ...
Ja napisałem: SetDlgItemText(WinHandle,wParam,str);
Twoja interpretacja: SetDlgItemText(hButton2,wParam,str);

0

Ok rozumiem miał być uchwyt okna czyli w moim przypadku "hwnd" ale niestety przyciski wypelniaja sie samymi zerami a nie wartościami wylosowanymi z tablicy :(

0

Jeżeli jest tak jak mówisz oznacza to tylko jedno - tablica jest wypełniona zerami.

0

W jaki sposób to poprawić bo Twoja funkcja podana na początku działa poprawnie i losuje wartości bo widze w konsoli:)

0

Zgłoś się na forum wróżbitów tam ci powiedzą gdzie masz błąd bez oglądania twego kodu.

0

Wrzucałem już ten kod tutaj nic sie nie zmieniło http://pastebin.com/DdT0qhX1 nie trzeba być od razu wścibskim

0

Człowieku, za wcześnie ci zajmować się WinAPI.
Nie znasz elementarnych podstaw.
Ta tab globalna jest wypełniona zerami (bo globalna) i nie ma nic wspólnego z tą tab w funkcji losowanie().
Weź zajmij się najpierw podstawami.

0

a głupi błąd już poprawiłem i działa dziekuje bardzo za pomoc :)

0

Jest ktoś w stanie pomóc napisać funkcje wykrywająca pary np za drobną opłatą :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1