WinAPI Gra memory

WinAPI Gra memory
JA
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:13
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ś

Kopiuj
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

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 2 godziny
0

"jak przekształcić liczbę na tekst"

JA
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:13
0

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

edytowany 1x, ostatnio: januszu
Westen
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 5 lat
0
JA
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:13
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ć

Kopiuj
 bool IsInTab(int value, int* tab)
    {
    for(int i = 0; i < 8; ++i)
    if(tab[i] == value)
    return true;
    return false;
    }
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:8 dni
1
Kopiuj
#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ć.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 4x, ostatnio: _13th_Dragon
Azarien
nie musi działać ze względu na strict aliasing. kiedyś był flejm na ten temat z obrzucaniem się cytatami ze standardów, konsensusu chyba nie było.
_13th_Dragon
Jeżeli nie będzie strict aliasing dla tablicy to nie będzie sizeof(*Tab)*ItemCount==sizeof(Tab) - a to z kolei zagwarantowane przez standard.
JA
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:13
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

edytowany 1x, ostatnio: januszu
_13th_Dragon
i którego słowa nie rozumiesz w: - "... and must be enabled with the -std=c++11 or -std=gnu++11 compiler options." ?
JA
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:13
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]

Kopiuj
case ID_PRZYCISK4:


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

SetWindowText(hButton4, **tylko co tutaj** );
edytowany 1x, ostatnio: januszu
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:8 dni
0
Kopiuj
        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);
           }
        }

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
JA
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:13
0
Kopiuj
// 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

_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:8 dni
0

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
JA
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:13
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 :(

_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:8 dni
0

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
JA
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:13
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:)

_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:8 dni
0

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
JA
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:13
0

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

_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:8 dni
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.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
JA
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:13
0

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

JA
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:13
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.