📄 c++俄罗斯方块程序.txt
字号:
// ToyBricks.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
/*******************************************************/
/* ?? ?t ??: ToyBricks.c
* íê3éê±??: 2001?ê9??
* íê3éμ?μ?: ?a??μ??ê?§?o×?o??¥507?ú·?
* ?a·¢?£ê?: SDK3ìDò
* ?a·¢?·?3: MS VC++ 6.0
* ×÷ ??: í?á?
* 1¤×÷μ¥??: ?D1ú?¨éèò?DDèy??êD(1???ê?)?§DD
* E - Mail: Mao_jzh@163.com
*/
/* ±?×¢:
* ?aê?ò????òμ¥μ??í?T?1·??éó??·3ìDò£?D′3ìDòê±??óD×¢êí£?
* ?aê??òD′3ìDòê±μ?ò????μ?°1??£±?òμóD°??êá?£?ò2?í°??ê??óDD′
* 1y3ìDò£??ü???D×???ê?£????e??D??é3ìDò?′?′£??3±??óé?ò?D?×¢
* êí?£oü?3???ú?§D£D′3ìDòμ?????è?×ó£?oü?3??£μ£°£·?£
*/
/*******************************************************/
#include <windows.h>
#include <time.h>
#include <stdlib.h>
#define CELL 15 // ??·?????μ?±?3¤(pix)
#define W 22 // ó??·???í(22????·?????±?3¤)
#define H 30 // ó??·????(30????·?????±?3¤)
#define MS_NEWBLOCK WM_USER+1 // ???¢ID£?2úéúD?μ???·??é??
#define MS_DRAW WM_USER+2
LRESULT CALLBACK WndProc ( HWND, UINT, WPARAM, LPARAM);/*′°?ú1y3ì′|àí
int WINAPI WinMain ( HINSTANCE hInstance, //μ±?°êμày??±ú
HINSTANCE hPrevInstance, //?°ò?êμày??±ú
PSTR szCmdLine, //???ò3ìDò?üá?DD2?êyμ?????
int iCmdShow) //ó|ó?3ìDò?aê??′DD′°?úê±??ê?·?ê?ó?intààDí±ê??
{
static char AppName[]="ToyBrick";//?¨ò?ò????2ì?×?·?êy×é±£′?×?·?′?"ToyBrick"(?úó|ó?3ìDò??)
HWND hwnd; //?¨ò?ò???′°?ú??±ú
MSG msg; //?¨ò?ò????¢?á11ì?±?á?
WNDCLASSEX wndclass; //?¨ò?ò?′°?úàà?á11±?á?£?°üo?′°?úààè?2?D??¢
int iScreenWide; //?¨ò??á????ê??í?è
wndclass.cbSize = sizeof(wndclass);//′°?úàà???ó′óD?
wndclass.style = CS_HREDRAW|CS_VREDRAW;//′°?úàà???ó·???
wndclass.lpfnWndProc = WndProc;//′°?ú′|àíoˉêy?aWndProc
wndclass.cbClsExtra = 0; //′°?úàà?Tà??1
wndclass.cbWndExtra = 0;//′°?úààêμày??óDà??1
wndclass.hInstance = hInstance;//μ±?°êμày??±ú
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);//′°?ú×?D??ˉí?±ê?a??è?í?±ê
wndclass.hCursor = LoadCursor (NULL,IDC_ARROW);//′°?úμ±?°1a±ê?a?yí·1a±ê
wndclass.hbrBackground = (HBRUSH)GetStockObject (BLACK_BRUSH);//??μ?μ±?°±3?°éè???aoúé?
wndclass.lpszMenuName = NULL;//′°ì?2?μ¥???a??
wndclass.lpszClassName = AppName;//ó|ó?3ìDò??
wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);//?aó|ó?3ìDò?ó??í?±ê
if(!RegisterClassEx (&wndclass)) return FALSE; //×¢2áò???′°?úàà
// ??è???ê??÷·?±??êμ?X?μiScreenWide£???3ìDò′°?ú??óú?á???D??
iScreenWide=GetSystemMetrics (SM_CXFULLSCREEN);
//′′?¨′°?ú
hwnd =CreateWindow (AppName,
"?í?T?1·??é",
WS_MINIMIZEBOX|WS_SYSMENU ,
iScreenWide/2-W*CELL/2, CELL,
(W+1)*CELL-8, H*CELL,
NULL, NULL,
hInstance,
NULL );
if(!hwnd) return FALSE; //??óD??μ?′°?ú??±ú£?·μ???ù
ShowWindow (hwnd,iCmdShow); //??ê?′°?ú
UpdateWindow (hwnd); //?üD?′°?ú
MessageBox(hwnd,"?aê?ó??·","?aê?",MB_OK);//??ê?Message
SendMessage(hwnd,MS_NEWBLOCK,0,0);//?òμ±?°′°?ú·¢?í???¢
SetTimer (hwnd, 1, 550,NULL);//éè??????ê±??
while (GetMessage (&msg, NULL, 0, 0))//??è????¢?-?·
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
return msg.wParam;
}
// oˉêyDrawRact: ?-???y·?D???
// 2?êy: éè±??·?3??±úoí???y·?D???μ?????×?±ê
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);
LineTo (hdc, l, b);
LineTo (hdc, l,t);
}
// oˉêyDrawCell: ?-??·?????
// 2?êy: éè±??·?3??±úoí??·?????μ?????×?±ê
// ????·???óé?úíaá??????y·?D???(DrawCell)?-3é£?ê1??óDá¢ì??D
void DrawCell (HDC hdc, int l, int t, int r, int b)
{
DrawRect (hdc,l+1, t+1, r-1, b-1);
DrawRect (hdc,l+3, t+3, r-3, b-3);
}
// oˉêyDrawBlock: ?-??·??é??
// 2?êy: éè±??·?3??±úoí??·??é???D??????·??????úó??·??óò?Dμ?????
// ??????·??é??óé??????·?????×é3飷??2?í?μ?D?×′
void DrawBlock (HDC hdc, int block[4][2])
{
int i;
HPEN hpen;
hpen =CreatePen (PS_SOLID,1,RGB(255,255,255));
SelectObject (hdc,hpen);
for(i=0; i<4; i++)
DrawCell (hdc, (block[i][0]-1)*CELL, (block[i][1]-1)*CELL, //....
block[i][0]*CELL, block[i][1]*CELL);
DeleteObject (hpen);
}
// oˉêyCover: ??3y?-à′????μ???·??é??
// 2?êy: éè±??·?3??±úoí′y??3yμ???·??é??
// ??3y??·??é???′?ú????·??é??μ???????·??é??′|?-ò????y·?D?μ?oú?é
void Cover (HDC hdc, int org[4][2])
{
int i;
SelectObject (hdc, (HBRUSH)GetStockObject (BLACK_BRUSH));
for(i=0; i<4; i++)
Rectangle ( hdc, (org[i][0]-1)*CELL, (org[i][1]-1)*CELL, //.....
org[i][0]*CELL, org[i][1]*CELL);
}
// ′°?ú1y3ìoˉêyWndProc
LRESULT CALLBACK WndProc ( HWND hwnd,
UINT iMsg,
WPARAM wParam,
LPARAM lParam )
{
int i,j,k,lines,r;
static int top, sel, flag;
static int cells[W+2][H]; // ????ó??·μ???·??????ó??
static int org[4][2], block[4][2]; // ??·??é??
HDC hdc;
HPEN hpen;
PAINTSTRUCT ps;
switch (iMsg)
{
case WM_CREATE:
top=H-1;
// ??μúò?áDoí×?oóò?áD??·???????1£???????·??é??2?3?3?ó??·??óò
for(i=0; i<H; i++)
{ cells[0][i]=1; cells[W+1][i]=1; }
// ??×?μ×??ò?DD??·???????1£???????·??é??2?3?3?ó??·??óò
for(i=0; i<W+2; i++) cells[i][H-1]=1;
// ??????·???????0£?ó??··??é???ü?ú?aà?ò??ˉ
for(i=1; i<=W; i++)
for(j=0; j<H-1; j++)
cells[i][j]=0;
return 0;
case MS_NEWBLOCK:
flag=0; // flag±íê???·??é??Dy×aá???′?
for(i=top; i<H-1; i++)
{
lines =0;
// ?-?·ó????ì2éê?·?óD?3ò?DDè?2?±???·???????ì??ú
for(j=1; j<=W+1; j++)
if(! cells[j][i])
{ lines=1; break; }
// è???DD±?ì??ú£??ò??é?ò?DDμ?ì?3?×′ì??′??μ???DD£?òà′?ààí?
// ?′′ó??DD?aê?£??ùóDμ???·?????????ò?ò?DD
if(!lines)
{ for(j=1;j<W+1; j++)
for(k=i; k>=top; k--)
cells[j][k]=cells[j][k-1];
top++;
InvalidateRect (hwnd, NULL, TRUE);
}
}
// 2úéú???úêy£°??£·£?·?±e′ú±í??·??é??μ?£·??D?×′
srand( (unsigned)time( NULL ) );
sel =rand()%7;
//??·??é??D?×′3?ê??ˉ
//??·??é??μ?D?×′óé????????·?????μ????????¨
// ó??·???íW=22£?block[?][0]=9/10/11/12£?block[?][1]=0/1/2
// ?a?ù??·??é??3?ê??????úó??·??μ?×??¥2?μ??D??
switch(sel)
{
case 0:
// ¨?¨?
// ¨?¨?
org[0][0]=block[0][0] =10; org[0][1]=block[0][1] =0;
org[1][0]=block[1][0] =11; org[1][1]=block[1][1] =0;
org[2][0]=block[2][0] =10; org[2][1]=block[2][1] =1;
org[3][0]=block[3][0] =11; org[3][1]=block[3][1] =1;
break;
case 1:
// ¨?¨?¨?¨?
org[0][0]=block[0][0] =9; org[0][1]=block[0][1] =0;
org[1][0]=block[1][0] =10; org[1][1]=block[1][1] =0;
org[2][0]=block[2][0] =11; org[2][1]=block[2][1] =0;
org[3][0]=block[3][0] =12; org[3][1]=block[3][1] =0;
break;
case 2:
//¨?
//¨?¨?
// ¨?
org[0][0]=block[0][0] =10; org[0][1]=block[0][1] =0;
org[1][0]=block[1][0] =10; org[1][1]=block[1][1] =1;
org[2][0]=block[2][0] =11; org[2][1]=block[2][1] =1;
org[3][0]=block[3][0] =11; org[3][1]=block[3][1] =2;
break;
case 3:
// ¨?
//¨?¨?
//¨?
org[0][0]=block[0][0] =11; org[0][1]=block[0][1] =0;
org[1][0]=block[1][0] =11; org[1][1]=block[1][1] =1;
org[2][0]=block[2][0] =10; org[2][1]=block[2][1] =1;
org[3][0]=block[3][0] =10; org[3][1]=block[3][1] =2;
break;
case 4:
//¨?
//¨?
//¨?¨?
org[0][0]=block[0][0] =10; org[0][1]=block[0][1] =0;
org[1][0]=block[1][0] =10; org[1][1]=block[1][1] =1;
org[2][0]=block[2][0] =10; org[2][1]=block[2][1] =2;
org[3][0]=block[3][0] =11; org[3][1]=block[3][1] =2;
break;
case 5:
// ¨?
// ¨?
//¨?¨?
org[0][0]=block[0][0] =10; org[0][1]=block[0][1] =0;
org[1][0]=block[1][0] =10; org[1][1]=block[1][1] =1;
org[2][0]=block[2][0] =10; org[2][1]=block[2][1] =2;
org[3][0]=block[3][0] =9; org[3][1]=block[3][1] =2;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -