Red de conocimiento informático - Conocimiento del nombre de dominio - Se necesita con urgencia un código fuente de Tetris C++ que pueda compilarse con Microsoft Visual C++ 6.0. Dirección de correo electrónico: 332542559@qq.com! ¡Gracias!

Se necesita con urgencia un código fuente de Tetris C++ que pueda compilarse con Microsoft Visual C++ 6.0. Dirección de correo electrónico: 332542559@qq.com! ¡Gracias!

#include //El archivo windows.h contiene las definiciones de los tipos de datos y las estructuras de datos necesarios en la aplicación

#include //Contiene SetTimer(), KillTimer( ) y otras funciones relacionadas con el temporizador

#include //Contiene SetTimer(), KillTimer() y otras funciones relacionadas con el temporizador

#include

#define CELL 15 // Longitud del lado del cuadrado (píxeles)

#define W 20 // Ancho del área de juego (12 lados del cuadrado, 8 cuadrados para dibujar el "siguiente" bloque)

#define H 26 //Altura del área de juego (26 bloques)

#define Altura (26 bloques)

# define MS_NEWBLOCK WM_USER+1 / / ID de mensaje, usado para generar mosaicos nuevos

#define MS_DRAW WM_USER+2 // ID de mensaje, usado para dibujar mosaicos

#define MS_NEXTBLOCK WM_USER+3 // ID de mensaje, usado para dibujar el mosaico

#define MS_NEXTBLOCK WM_USER+3 // ID de mensaje, utilizado para dibujar el mosaico "siguiente". USUARIO+3 // ID de mensaje, utilizado para mostrar la siguiente forma de Tetris

//------------------------ función de ventana descripción---------------------

LALLADA DE RESULTADO WndProc (HWND, UINT, WPARAM, LPARAM);

/ /--------------------------------------------------- ---- --------------

int WINAPI WinMain ( HINSTANCE hInstance,

HINSTANCE hPrevInstance,

PSTR szCmdLine,

int iCmdShow)

{

static char AppName[]="ToyBrick";// Nombre de clase de ventana

HWND hwnd

{

static char AppName[]="ToyBrick";// Nombre de clase de ventana

HWND hwnd

p>

MSG msg; //estructura del mensaje

WNDCLASSEX wndclass; //Clase de ventana

int iScreenWide; //define una variable entera para obtener el ancho de la ventana

wndclass.cbSize = sizeof( wndclass);

wndclass.style = CS_HREDRAW|CS_VREDRAW;//Tipo de ventana

//CS_HREDRAW: si se mueve o redimensionado, se volverá a dibujar toda la ventana

// El ajuste cambiará el ancho del área del cliente.

//CS_VREDRAW: Redibuja toda la ventana si se mueve o cambia de tamaño

// Cambiar tamaño cambia la altura del área del cliente. cbClsExtra = 0; //La clase de ventana no tiene extensión

wndclass.IDI_APPLICATION

//------------------); ----------------Registro de clase de ventana------------------------------- -- ----------

if(! RegisterClassEx (&wndclass))// Si el registro falla, suena una alarma y devuelve FALSE

{

MessageBeep(0);

Return FALSE;

}

// Obtiene el valor X iScreenWide de la resolución de pantalla para posicionar la ventana del programa Centro de la pantalla

iScreenWide=GetSystemMetrics (SM_CXFULLSCREEN);

hwnd =CreateWindow (

AppName, //nombre de clase de ventana

"Hecho en todos los lados", //nombre del título de la instancia de la ventana

WS_MINIMIZEBOX|WS_SYSMENU, //estilo de la ventana

iScreenWide/2-W*CELL/2, / /coordenada horizontal de la esquina superior izquierda de la ventana (X)

CELL, //coordenada vertical de la esquina superior izquierda de la ventana (Y)

W*CELL, / /Ancho de la ventana

p>

H*CELL, //El alto de la ventana

NULL, //La ventana no tiene ventana principal

NULL , //La ventana no tiene menú principal

hInstance, //El identificador actual de la aplicación que creó esta ventana

NULL, //No use este valor <

);

si (! hwnd ) devuelve FALSO;

ShowWindow (hwnd,iCmdShow);

Actualizar ventana ( hwnd);

MessageBox(hwnd," Iniciar juego", "Iniciar",MB_OK);

SendMessage(hwnd,MS_NEWBLOCK,0,0) ;

SetTimer (hwnd, 1 , 100,NULL);

//Bucle de mensajes

while (GetMessage (&msg, NULL, 0, 0))

{

TranslateMessage (&msg);

DispatchMessage (&msg);

}

// Volver el mensaje al sistema al final del bucle de mensajes, es decir:

Devuelve el mensaje al sistema al final del bucle de mensajes.

e., return msg.wParam;

}

// Función DrawRact: Dibujar un cuadrado ----- (□)

// Parámetro: Mango del entorno del equipo y coordenadas de las cuatro esquinas del cuadrado

void DrawRect (HDC hdc, int l, int t, int r, int b)

{

MoveToEx (hdc, l, t, NULL);

LineTo (hdc, r, t);

LineTo (hdc, r, b); p>

case WM_TIMER:

// Mueve automáticamente una línea de bloque de código hacia abajo por cada tiempo

for(i=0; i<4; i++)

block[ i][1]++;

// Verifica si el bloque de código está bloqueado por el proceso de movimiento hacia abajo, es decir:

// Verifica si el bloque de código está bloqueado por el proceso de movimiento hacia abajo, es decir:

// Compruebe si el bloque de código está bloqueado por el proceso de movimiento hacia abajo. es decir, determinar si hay un cuadrado en la nueva posición después del movimiento. ¿Hay un cuadrado?

for(i=0; i<4; i++)

if(cells[ block[i][0] ][ block[i][1 ] ] )

{

EnviarMessage (hwnd, MS_NEXTBLOCK, 0, 0);

for(i=0; i<4;i++)

celdas[ org[i][0] ][ org[i][1] ]=1

if (arriba>org[0][1]-2)

top=org[0][1]-2;

if (top<1)

{

KillTimer (hwnd, 1

MessageBox (hwnd, "¡El juego ha terminado, a punto de salir!\n Salir por todos lados", "Salir", MB_OK);

PostQuitMessage (0);

}

EnviarMessage (hwnd, MS_NEWBLOCK, 0, 0);

devuelve 0;

}

SendMessage (hwnd, MS_DRAW, 0, 0);

return 0;

// Responder al control del teclado

case WM_KEYDOWN:

r=0;

switch((int)wParam)

{

caso VK_LEFT:

for(i=0 ; i<4; i++ )

bloque[i][0]--;

romper;

caso VK_RIGHT:

for(i=0; i<4; i++)

bloque[i][0]++;

descanso;

caso VK_DOWN:

for (i=0; i<4; i++)

bloque[i][1]++;

romper;

// Presione [tecla arriba] Puede rotar el mosaico en el sentido de las agujas del reloj<

// La rotación del cuadrado no es una rotación real, sino que se logra moviendo uno o más cuadrados de acuerdo con diferentes formas cuadradas y el número de veces que se gira el cuadrado Rotate

// .

Este método es más complicado y el algoritmo

// no es ideal, pero mantiene estable el centro de gravedad del cuadrado durante la rotación.

case VK_UP:

r=1;

flag++; // Rotación cuadrada más 1

switch(sel) // sel Representa la forma actual del cuadrado

{

case 0: break;

case 1:

flag =flag%2;

p>

for(i=0; i<4; i++)

{

bloque[i][(bandera+1)%2] = org[2] [(bandera+1)%2];

bloque[i][bandera] =org[2][bandera]-2+ i;

}

ruptura;

caso 2:

bandera =bandera%2;

if(bandera)

{ bloque[0] [1] +=2; bloque[3][0] -=2 }

else

{ bloque[0][1] -=2; bloque[3] [0] +=2; }

ruptura;

caso 3:

bandera =bandera%2;

if (bandera)

{ bloque[0][1] +=2; bloque[3][0] +=2 }

De lo contrario

else

{ bloque[0][1] -=2; bloque[3][0] -=2 }

romper;

caso; 4:

bandera=bandera%4;

cambiar(bandera)

{

caso 0:

bloque[2 ][0] +=2; bloque[3][0] +=2;

bloque[2][1] +=1; 1;

ruptura;

caso 1:

bloque[2][0] +=1; bloque[3][0] +=1;

bloque[2][1] -=2; bloque[3][1] -=2;

ruptura;

caso 2:

bloque[2][0] -=2; bloque[3][0] -=2;

bloque[2] [1] -=1; 1] -= 1;

romper;

caso 3:

bloque[2][0] -=1; -=1;

bloque[2][1] +=2; bloque[3][1] +=2

romper;

}

ruptura;

caso 5:

bandera=bandera%4;

cambiar(bandera)

{

caso 0:

bloque[2][0] +=1; bloque[3][ 0] +=1;

bloque[2 ][1] +=2; bloque[3][1] +=2;

ruptura;

caso 1:

bloque[2][ 0] += 2; bloque[3][0] +=2;

bloque[2][1] -=1.bloque[3][1] -=1;

ruptura ;

caso 2:

<

p> bloque[2][0] -=1; bloque[3][0] -=1;

bloque[2][1] -=2; =2;

ruptura;

caso 3:

bloque[2][0] -=2; ;

bloque[2][1] +=1; bloque[3][1] +=1;

romper;

}

romper;

caso 6:

bandera =bandera%4;

cambiar(bandera)

{

caso 0:

bloque[0][0]++; bloque[0][1]--;

bloque[1][0]- -; bloque[1][1]--;

bloque[3][0]++; bloque[3][1]++;

romper; p>

caso 1:

bloque[1][0]++; bloque[1][1]++;

caso 2:

bloque[0 ][0]--; bloque[0][1]++; romper;

caso 3:

bloque[3][ 0] --; bloque[3][1]--; romper;

}

romper;

}

romper ;

}

}

// Determina si hay un cuadrado en la nueva posición después de girar el bloque. Si es así, cancela la rotación

for(i =0; i<4; i++)

if(celdas[ bloque[i][0] ][ bloque[i][1] ])

{

si(r) bandera +=3;

si(r) bandera +=3 }

for(i=0; i<4; i++)

for(j=0; j<2; j++)

bloque[i][j]=org[i][j];

devolver 0;

}

EnviarMessage(hwnd, MS _DRAW, 0, 0); p> // Borra el cuadrado actual y dibuja el siguiente cuadrado en la posición donde se muestra "Siguiente cuadrado"

case MS_NEXTBLOCK:

hdc=GetDC( hwnd

Cover(hdc ,org2);

// DrawBlock(hdc,org2);

return 0;

// Borrar el cuadrado actual y vuelva a dibujar el cuadrado en la nueva posición Grid

case MS_DRAW:

hdc =GetDC (hwnd);

Cover (hdc, org);

DrawBlock(hdc, org2);

for(i=0; i<4; i++)

for(j=0; j<2; j++)

org[ i][j] =bloque[i][j];

DrawBlock (hdc, bloque);

ReleaseDC (hwnd, hdc);

return 0;

// Redibuja la cuadrícula del área de juego según la matriz cuadrada

caso WM_PAINT:

hdc =BeginPaint (hwnd, &ps);

DrawGamePlace(hdc);

TextOut(hdc,15*CELL,12*CELL, "Puntuación",lstrlen("Puntuación"));

TextOut(hdc,15*CELL,13*CELL, "i",lstrlen("i"));

TextOut(hdc,15*CELL,15*CELL, "Nivel",lstrlen("Nivel"));

TextOut(hdc,15*CELL-5,19 CELL-5,19*CELL, "Cuatro Lados",lstrlen("Cuatro Lados"));

hpen =CreatePen (PS_SOLID,1,RGB(0,255,0));

SelectObject (hdc,hpen) ;

para (i= arriba; i

para (j=1; j<=W-8; j++)

if( celdas[j][i] )

DrawCell (hdc, (j-1)*CELL, (i-1)*CELL, j*CELL, i*CELL);

DeleteObject (hpen);

EndPaint (hwnd, &ps);

devuelve 0;

caso WM_DESTROY:

KillTimer (hwnd, 1);

PostQuitMessage (0);

devuelve 0;

}

devuelve DefWindowProc (hwnd, iMsg, wParam, lParam );

}