⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c++俄罗斯方块程序.txt

📁 c++俄罗斯方块应用开发
💻 TXT
📖 第 1 页 / 共 2 页
字号:
// 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 + -