¿Cómo escribir un juego de Tetris con una hermosa interfaz en lenguaje C?
¡¡Es difícil hacer una ventana normal y mucho menos hacer un juego!!!
Compruébalo tú mismo.
La siguiente es la ventana más simple creada en lenguaje C: #include?
#include?
/*?Esta función es utilizada internamente por ¿Se llama a la función DispatchMessage() de Windows? */?
¿RESULTADO?DEVOLUCIÓN DE LLAMADA?Procedimiento de ventana?(HWND?hWnd,?UINT?mensaje,?WPARAM?wParam,?LPARAM?lParam)
{ HDC?hdc; ¿Procesando mensajes? */ { case?WM_DESTROY:?
¿PostQuitMessage?/*?¿Enviar WM_QUIT a la cola de mensajes? */
break; case?WM_PAINT:
hdc?TEXT("¡Hola,?Windows?NT!"), -1, &rect,?DT_SINGLELINE?|?DT_CENTER?| ?DT_VCENTER);
EndPaint?(hWnd,? &ps);
break; predeterminado:?/*?¿No procesar información? */?
return?DefWindowProc?(hWnd,?message,?wParam,?lParam } return?0;
}
/*? ¿Aquí está la función principal? */
int?WINAPI?_tWinMain(HINSTANCE?hThisInstance,?HINSTANCE?hPrevInstance,?LPTSTR?lpCmdLine,?int?nFunsterStil)
{ HWND?hWnd;/*?this ¿Es la manija de la ventana? */ MSG?messages;/*?¿Los mensajes de la aplicación se almacenan aquí? */ WNDCLASSEX?wincl;?/*?Estructura de datos de clase de ventana? */ TCHAR?szClassName[?] ? =?TEXT("WindowsApp");?/*?Nombre de clase de la clase de Windows? */ /*?Estructura de ventana? */ wincl.hInstance?=?hThisInstance; wincl.lpszClassName?=?szClassName; wincl.lpfnWndProc?=?WindowProcedure;/*?¿Esta función la llama el sistema operativo Windows? */ wincl.style?=?CS_DBLCLKS;?/*?¿Obtener comando de doble clic? */ wincl.cbSize?=?sizeof?(WNDCLASSEX); /*?¿Usar el icono y el puntero del mouse predeterminados? */ wincl.hIcon?=?LoadIcon?(NULL,?IDI_APPLICATION); wincl.hIconSm?=?LoadIcon?(NULL,?IDI_APPLICATION); wincl.hCursor?=?LoadCursor?(NULL,?IDC_ARROW); ?=?NULL;?/*?¿Sin menú? */ wincl.cbClsExtra?=?0;/*?¿No hay bytes adicionales después de la clase de ventana? */ wincl.cbWndExtra?=?0;/*?Estructura o instancia de ventana? */ /*?¿Usar el color predeterminado de la ventana como color de fondo de la ventana? */ wincl.hbrBackground?=?(HBRUSH)?COLOR_BACKGROUND; /*?Registrar clase de ventana.
Si el registro falla, ¿salir del programa? */ if(!RegisterClassEx?(&wincl)) return?0; /*?La clase de ventana ha sido registrada. ¿Programa para crear clase de ventana? */ hWnd?=?CreateWindowEx?(
0,
szClassName,?/*?ClassName?*/
TEXT("Windows?App") ,?/*?El texto de la barra de título de la ventana? */
WS_OVERLAPPEDWINDOW,?/*?La ventana predeterminada? */
CW_USEDEFAULT,?/*?La posición de la esquina superior izquierda de la ventana? */
CW_USEDEFAULT,?/*?La posición de la esquina inferior derecha de la ventana */
544,?/*?La ancho de la ventana, en "píxeles"? >
375,?/*?Alto de la ventana (en "píxeles")? */
HWND_DESKTOP,?/*?La ventana es una ventana secundaria del escritorio? */
NULL,/*?La ventana no tiene menú */
hThisInstance,?/*?El identificador de la instancia del programa */? p>
NULL,/*?No hay datos de creación de ventana? */
); /*?ShowWindow?*/ ShowWindow?(hWnd,?nFunsterStil); */ UpdateWindow(hWnd); /*?Ejecuta el bucle de mensajes. ¿Bucle hasta que la función GetMessage() devuelva 0? */ while?(GetMessage?(&messages,?NULL,?0,?0)) { /*?¿Convertir información virtual en información de caracteres? */ TranslateMessage(&messages); /*?¿Enviar un mensaje al procedimiento de ventana? */ DispatchMessage(&messages); } /*?¿Devolver el valor de retorno de la función PostQuitMessage()? */ return?messages.wParam;
}?