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

📄 4291716522.txt

📁 俄罗斯方块程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
            break;
        case 6:
            //  ▓
            //▓▓▓
            org[0][0]=block[0][0] =10;    org[0][1]=block[0][1] =0;
            org[1][0]=block[1][0] =9;    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] =11;    org[3][1]=block[3][1] =1;
            break;

        default:
            SendMessage (hwnd, MS_NEWBLOCK, 0, 0);
            break;
        }
        return 0;

    case WM_TIMER:
        // 每个时间节拍【方块】自动下移一行
        for(i=0; i<4; i++)
            block[i][1]++;
        // 检查【方块】下移是否被档住,即判断下移后新位置是否有【方格】
        for(i=0; i<4; i++)
            if(cells[ block[i][0] ][ block[i][1] ])
            { 
                for(i=0; i<4; i++) 
                    cells[ org[i][0] ][ org[i][1] ]=1; 
                if(top>org[0][1]-2) top=org[0][1]-2;
                if (top<1)
                {
                    KillTimer (hwnd, 1);
                    MessageBox (hwnd, "游戏结束,即将退出 !", "退出", MB_OK);
                    PostQuitMessage (0);
                }
                SendMessage (hwnd, MS_NEWBLOCK, 0, 0);
                return 0;
            }
        SendMessage (hwnd, MS_DRAW, 0, 0);
        return 0;

    // 响应键盘控制
    case WM_KEYDOWN:
        r=0;
        switch((int)wParam)
        {
        case VK_LEFT:
            
            
            for(i=0; i<4; i++)
                block[i][0]--;
            break;
            

        case VK_RIGHT:
            for(i=0; i<4; i++)
                block[i][0]++;
            break;
        case VK_DOWN:
            for(i=0; i<4; i++)
                block[i][1]++;
            break;

        // 按[向上键],【方块】顺时针旋转
        //【方块】的旋转不是真正的旋转,而是根据不同的【方块】形状和
        // 该【方块】旋转过的次数来移动其中的一个或几个【方格】,从而
        // 达到旋转的效果 这样做很复杂,算法不够理想,但是能够保持【方
        // 块】旋转时的重心比较稳定。
        case VK_UP:
            r=1;
            flag++;     //【方块】旋转加1
            switch(sel) // sel代表当前【方块】的形状
            {
            case 0: break;

            case 1: 
                flag =flag%2;
                for(i=0; i<4; i++)
                {
                    block[i][(flag+1)%2] =org[2][(flag+1)%2];
                    block[i][flag] =org[2][flag]-2+i;
                }
                break;

            case 2:
                flag =flag%2;
                if(flag)
                {    block[0][1] +=2;    block[3][0] -=2;    }
                else
                {    block[0][1] -=2;    block[3][0] +=2;    }
                break;

            case 3:
                flag =flag%2;
                if(flag)
                {    block[0][1] +=2;    block[3][0] +=2;    }
                else
                {    block[0][1] -=2;    block[3][0] -=2;    }
                break;

            case 4:
                flag=flag%4;
                switch(flag)
                {
                case 0:
                    block[2][0] +=2;    block[3][0] +=2;
                    block[2][1] +=1;    block[3][1] +=1;
                    break;
                case 1:
                    block[2][0] +=1;    block[3][0] +=1;
                    block[2][1] -=2;    block[3][1] -=2;
                    break;
                case 2:
                    block[2][0] -=2;    block[3][0] -=2;
                    block[2][1] -=1;    block[3][1] -=1;
                    break;
                case 3:
                    block[2][0] -=1;    block[3][0] -=1;
                    block[2][1] +=2;    block[3][1] +=2;
                    break;
                }
                break;

            case 5:
                flag=flag%4;
                switch(flag)
                {
                case 0:
                    block[2][0] +=1;    block[3][0] +=1;
                    block[2][1] +=2;    block[3][1] +=2;
                    break;
                case 1:
                    block[2][0] +=2;    block[3][0] +=2;
                    block[2][1] -=1;    block[3][1] -=1;
                    break;
                case 2:
                    block[2][0] -=1;    block[3][0] -=1;
                    block[2][1] -=2;    block[3][1] -=2;
                    break;
                case 3:
                    block[2][0] -=2;    block[3][0] -=2;
                    block[2][1] +=1;    block[3][1] +=1;
                    break;
                }
                break;

            case 6:
                flag =flag%4;
                switch(flag)
                {
                case 0:
                    block[0][0]++; block[0][1]--;
                    block[1][0]--; block[1][1]--;
                    block[3][0]++; block[3][1]++;
                    break;
                case 1:
                    block[1][0]++; block[1][1]++; break;
                case 2:
                    block[0][0]--; block[0][1]++; break;
                case 3:
                    block[3][0]--; block[3][1]--; break;
                }
                break;
            }
            break;
        }
        // 判断【方块】旋转后新位置是否有【方格】,若有,则旋转取消
        for(i=0; i<4; i++)
            if(cells[ block[i][0] ][ block[i][1] ])
            { 
                if(r) flag +=3;
                for(i=0; i<4; i++)
                    for(j=0; j<2; j++)
                        block[i][j]=org[i][j];
                return 0;
            }
        SendMessage(hwnd, MS_DRAW, 0, 0);;
        return 0;

    // 清除当前【方块】,并在新的位置重新绘制【方块】
    case MS_DRAW:
        hdc =GetDC (hwnd);
        Cover (hdc, org);
        for(i=0; i<4; i++)
            for(j=0; j<2; j++)
                org[i][j]=block[i][j];
        DrawBlock (hdc,block);
        ReleaseDC (hwnd, hdc);
        return 0;

    // 按照【方格矩阵】重绘游戏区域的【方格】
    case WM_PAINT:
        hdc =BeginPaint (hwnd, &ps);
        hpen =CreatePen (PS_SOLID,1,RGB(255,255,255));
        SelectObject (hdc,hpen);
        for (i=top; i<H-1; i++)
            for(j=1; j<=W; j++)
                if( cells[j][i] ) 
                    DrawCell (hdc, (j-1)*CELL, (i-1)*CELL, j*CELL, i*CELL);
        DeleteObject (hpen);
        EndPaint (hwnd, &ps);
        return 0;

    case WM_DESTROY:
        KillTimer (hwnd, 1);
        PostQuitMessage (0);
        return 0;
    }

    return DefWindowProc (hwnd, iMsg, wParam, lParam);
}

/************************************************************/

/* 结束
* 注释时间: 2003/01/04 SAT
* 于 广东省三水市建行宿舍
*/

/************************************************************/

-------------------------------------------------------------------------------------
// stdafx.h : include file for standard system include files,
//  or project specific include files that are used frequently, but
//      are changed infrequently
//

#if !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)
#define AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define WIN32_LEAN_AND_MEAN        // Exclude rarely-used stuff from Windows headers

#include <windows.h>


// TODO: reference additional headers your program requires here

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)
----------------------------------------------------------------------------------------
// stdafx.cpp : source file that includes just the standard includes
//    ToyBricks.pch will be the pre-compiled header
//    stdafx.obj will contain the pre-compiled type information

#include "stdafx.h"

// TODO: reference any additional headers you need in STDAFX.H
// and not in this file

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -