所以我正在制作一个基本的井字游戏作为我在 win32 中的第一个程序(只是为了学习更多的乐趣,没有学校作业或任何东西)。我已经完成了大部分 UI 和基本的游戏玩法,例如单击方块和适当地放置 x 或 o。我写了它,以便在游戏结束时识别谁是赢家,并且可以显示一个小文本窗口,上面写着“PLAYER 1 WINS!” ETC....
不,我的问题是关于如何显示分数。我的想法是有一个名为 scoreplayer1 的 int 变量,当玩家获胜时,我会将它增加 1(scoreplayer1++)。然后,我希望将先前分数更改为新分数的窗口。这是我到目前为止所拥有的(我将删除所有与此问题无关的代码,但如果您需要更多,请告诉我):
我的全局变量:
//Global Variables
HINSTANCE hInst; // current instance
TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name
HWND hwnd1, hwnd2, hwnd3, hwnd4, hwnd5, hwnd6, hwnd7, hwnd8;
HWND hwnd9, hwndscore1, hwndscore2, hWnd;
// Forward declarations of functions included in this code module:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
int determinewinner();
int showscore(int win_value);
int scoreplayer1,scoreplayer2;
最初创建乐谱窗口的 CreateWindow 函数(它们一开始是空白的):
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
case WM_CREATE:
hwndscore1 = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("STATIC"),TEXT(""), WS_CHILD|WS_VISIBLE|SS_CENTER, 20,285,100,20,hWnd,HMENU(NULL),GetModuleHandle(NULL),NULL);
hwndscore2 = CreateWindowEx(WS_EX_CLIENTEDGE,TEXT("STATIC"),TEXT(""), WS_CHILD|WS_VISIBLE|SS_CENTER, 130,285,100,20,hWnd,HMENU(NULL),GetModuleHandle(NULL),NULL);
然后是试图处理改变分数窗口的函数:
int showscore(int win_value)
{
if(win_value==1)
{ scoreplayer1++;
DestroyWindow(hwndscore1);
hwndscore1 = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("STATIC"),TEXT(scoreplayer1), WS_CHILD|WS_VISIBLE|SS_CENTER, 20,285,100,20,hWnd,HMENU(NULL),GetModuleHandle(NULL),NULL);
return (scoreplayer1);} // This return part is just temporary because it wants
// the function to return a value, it doesn't come into play
}
这个想法是破坏旧窗口并简单地用新分数重新创建一个新窗口(这似乎是最简单的方法)。我知道问题出在哪里,它说我不能将 int scoreplayer1 变量放在最后一个 CreateWindowEx 函数的 TEXT("scoreplayer1") 部分中。错误是:typ int 的参数与 LPCSTR 类型的参数不兼容。
那么如何更改最后一个窗口的创建,使其显示一个随着游戏进行而增加的 int 变量(例如 scoreplayer1)?谢谢!
*编辑***
为了回应我尝试使用 itoa() 解决问题的评论,我做了以下事情:
int showscore(int win_value)
{ if(win_value==1)
{ scoreplayer1++;
char score1[1];
itoa(scoreplayer1, score1, 1);
DestroyWindow(hwndscore1);
hwndscore1 = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("STATIC"),TEXT(score1), WS_CHILD|WS_VISIBLE|SS_CENTER, 20,285,100,20,hWnd,HMENU(NULL),GetModuleHandle(NULL),NULL);
return (scoreplayer1);}
一旦我到达游戏中的那个点,这就会迫使程序中断......关于我做错了什么的任何想法?