Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Cómo escribir un juego de Tetris con una hermosa interfaz en lenguaje C?

¿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 */

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;

}?