Poz,
Evo promjenili smo pristup i ne radimo vise preko childova, jer smo ograniceni sa vremenom, a i nemamo dovoljno znanja ni iskustva.
Mozes pogledat ovaj kod kojim smo rjesili precrtavanje, al smo zapeli kod funkcije za pobjedu. Svaka pomoc nam je dobrodošla!
Code:
//5 in a Row v 0.1
#include <windows.h>
#define BR 15
enum Marker {blank, X, O};
HINSTANCE hInst;
Marker Turn = X;
Marker MBoard [15][15] = {{blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank ,blank ,blank},
{blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank ,blank ,blank},
{blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank ,blank ,blank},
{blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank ,blank ,blank},
{blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank ,blank ,blank},
{blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank ,blank ,blank},
{blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank ,blank ,blank},
{blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank ,blank ,blank},
{blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank ,blank ,blank},
{blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank ,blank ,blank},
{blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank ,blank ,blank},
{blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank ,blank ,blank},
{blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank ,blank ,blank},
{blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank ,blank ,blank},
{blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank, blank ,blank ,blank}};
const int sqSize = 30;
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
void DBoard (HDC);
void CrtajX (HDC, int, int);
void CrtajO (HDC, int, int);
bool PostaviX (LPARAM);
bool PostaviO (LPARAM);
bool Win ();
bool Full ();
bool Reset ();
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor (NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = "Class";
RegisterClass (&wc);
hwnd = CreateWindow ("Class", // ime windows klase
"5 in a Row", // tekst u Window title bar-u
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX,
112, // inicijalna x koordinata
84, // inicijalna y koordinata
800, // inicijalna sirina prozora
600, // inicijalna visina prozora
NULL, // handle na vlasnika (parent) prozora
NULL, // window menu handle
hInstance, // handle na instancu aplikacije
NULL); // dodatni kreacioni parametri
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
/*void DBoard (HDC hdc)
{
HPEN Pen1;
HPEN Pen2;
COLORREF LineColor;
int iX, iY;
LineColor = RGB (0, 0, 0);
Pen2 = CreatePen (PS_SOLID, 2, LineColor);
Pen1 = (HPEN) SelectObject (hdc, Pen2);
for (iX = sqSize; iX < 15 * sqSize; iX += sqSize)
{
MoveToEx (hdc, 176 + iX, 81, NULL);
LineTo (hdc, 176 + iX, 81 + (15 * sqSize));
}
for (iY = sqSize; iY < 15 * sqSize; iY += sqSize)
{
MoveToEx (hdc, 176, 81 + iY, NULL);
LineTo (hdc, 176 + (15 * sqSize), 81 + iY);
}
SelectObject (hdc, Pen1);
DeleteObject (Pen2);
}*/
void DBoard (HDC hdc)
{
HPEN Pen1;
HPEN Pen2;
COLORREF LineColor;
int iX, iY;
LineColor = RGB (0, 0, 0);
Pen2 = CreatePen (PS_SOLID, 2, LineColor);
Pen1 = (HPEN) SelectObject (hdc, Pen2);
for (iX = sqSize; iX < 16 * sqSize; iX += sqSize)
{
MoveToEx (hdc, iX, 0, NULL);
LineTo (hdc, iX, 15 * sqSize);
}
for (iY = sqSize; iY < 16 * sqSize; iY += sqSize)
{
MoveToEx (hdc, 0, iY, NULL);
LineTo (hdc, 15 * sqSize, iY);
}
SelectObject (hdc, Pen1);
DeleteObject (Pen2);
}
void CrtajX (HDC hdc, int iX, int iY)
{
HPEN Pen1;
HPEN Pen2;
COLORREF LineColor;
const int SirinaP = 2;
const int PocX = iX * sqSize + 2 * SirinaP;
const int KrajX = (iX + 1) * sqSize - 2 * SirinaP;
const int PocY = iY * sqSize + 2 * SirinaP;
const int KrajY = (iY + 1) * sqSize - 2 * SirinaP;
LineColor = RGB (255, 0, 0);
Pen2 = CreatePen (PS_SOLID, SirinaP, LineColor);
Pen1 = (HPEN) SelectObject (hdc, Pen2);
MoveToEx (hdc, PocX, PocY, NULL);
LineTo (hdc, KrajX, KrajY);
MoveToEx (hdc, PocX, KrajY, NULL);
LineTo (hdc, KrajX, PocY);
SelectObject (hdc, Pen1);
DeleteObject (Pen2);
}
void CrtajO (HDC hdc, int iX, int iY)
{
HPEN Pen1;
HPEN Pen2;
COLORREF LineColor;
const int SirinaP = 2;
const int PocX = iX * sqSize + 2 * SirinaP;
const int KrajX = (iX + 1) * sqSize - 2 * SirinaP;
const int PocY = iY * sqSize + 2 * SirinaP;
const int KrajY = (iY + 1) * sqSize - 2 * SirinaP;
LineColor = RGB (0, 0, 255);
Pen2 = CreatePen (PS_SOLID, SirinaP, LineColor);
Pen1 = (HPEN) SelectObject (hdc, Pen2);
Arc (hdc, PocX, PocY, KrajX, KrajY, 0, 0, 0, 0);
SelectObject (hdc, Pen1);
DeleteObject (Pen2);
}
bool PostaviX(LPARAM lParam)
{
int iPozX = LOWORD(lParam);
int iPozY = HIWORD (lParam);
int iKvadratX = (iPozX/sqSize);
int iKvadratY = (iPozY/sqSize);
if((Turn==X)&&(iKvadratX<15)&&(iKvadratY<15)&&(MBoard[iKvadratY][iKvadratX])==blank)
{
MBoard[iKvadratY][iKvadratX]=X;
return true;
}
return false;
}
bool PostaviO(LPARAM lParam)
{
int iPozX = LOWORD(lParam);
int iPozY = HIWORD (lParam);
int iKvadratX = (iPozX/sqSize);
int iKvadratY = (iPozY/sqSize);
if((Turn==O)&&(iKvadratX<15)&&(iKvadratY<15)&&(MBoard[iKvadratY][iKvadratX])==blank)
{
MBoard[iKvadratY][iKvadratX]=O;
return true;
}
return false;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
int iX,iY;
bool Potez;
switch (message)
{
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps);
DBoard (hdc);
for(iX=0 ; iX<15 ; ++iX)
{
for(iY=0 ; iY<15 ; ++iY)
{
if(MBoard[iY][iX]==X)
{
CrtajX(hdc, iX, iY);
}
else if (MBoard[iY][iX]==O)
{
CrtajO(hdc, iX, iY);
}
}
}
return 0;
case WM_DESTROY:
PostQuitMessage (0);
return 0;
case WM_LBUTTONDOWN:
{
bool Potez=PostaviX(lParam);
if(Potez)
{
Turn=O;
}
InvalidateRect(hwnd, 0, TRUE);
break;
}
case WM_RBUTTONDOWN:
{
bool Potez=PostaviO(lParam);
if(Potez)
{
Turn=X;
}
InvalidateRect(hwnd, 0, TRUE);
break;
}
}
return DefWindowProc (hwnd, message, wParam, lParam);
}