我用c++在做俄罗斯方块,但是出现了一个网上也没搜到的问题 1C

为什么运行一段时间后,窗体就会变成白色了呢?这个问题我困扰了很久,不解决的话,下面我就难以实行其他功能了!我是个新手,请大家多多指教!有图有源码!

#include "stdafx.h"
#include "俄罗斯方块游戏2.h"
#include
#define MAX_LOADSTRING 100
#define N 20 //小方块大小
HWND hWnd = NULL;
#define W 600 //窗口大小
#define H 610
HGDIOBJ oldbrush;
HBRUSH hb;

int X1=10;
int Y1=0;
bool ShowTetris[30][30]={0};

class Tetris //“父类”组成大方块中的小方块
{
public:
POINT p[4];
public:
virtual void one(HDC hdc,int x,int y){};
virtual void two(HDC hdc,int x,int y){};
virtual void three(HDC hdc,int x,int y){};
virtual void four(HDC hdc,int x,int y){};
void drawing(HDC hdc ,int x,int y);

};
void Tetris::drawing(HDC hdc ,int x,int y)
{
POINT A[4];
for(int i=0;i<4;i++)
{

    A[0].x = x+p[i].x*N;     A[0].y = y+p[i].y*N;
    A[1].x = x + N+p[i].x*N; A[1].y = y+p[i].y*N;
    A[2].x = x + N+p[i].x*N; A[2].y = y + N+p[i].y*N;
    A[3].x = x+p[i].x*N;     A[3].y = y + N+p[i].y*N;
    Polygon(hdc, A, 4);
}

}

class T1:public Tetris //"田条"
{
public:
void one(HDC hdc,int x,int y)
{
hb=CreateSolidBrush(RGB(255,2,100));
oldbrush=SelectObject(hdc,(HBRUSH)(hb));
p[0].x=0,p[0].y=0;
p[1].x=1,p[1].y=0;
p[2].x=0,p[2].y=1;
p[3].x=1,p[3].y=1;
drawing(hdc,x,y);
}
void two(HDC hdc,int x,int y)
{
hb=CreateSolidBrush(RGB(255,2,100));
oldbrush=SelectObject(hdc,(HBRUSH)(hb));
p[0].x=0,p[0].y=0;
p[1].x=1,p[1].y=0;
p[2].x=0,p[2].y=1;
p[3].x=1,p[3].y=1;
drawing(hdc,x,y);
}
void three(HDC hdc,int x,int y)
{
hb=CreateSolidBrush(RGB(255,2,100));
oldbrush=SelectObject(hdc,(HBRUSH)(hb));
p[0].x=0,p[0].y=0;
p[1].x=1,p[1].y=0;
p[2].x=0,p[2].y=1;
p[3].x=1,p[3].y=1;
drawing(hdc,x,y);
}
void four(HDC hdc,int x,int y)
{
hb=CreateSolidBrush(RGB(255,2,100));
oldbrush=SelectObject(hdc,(HBRUSH)(hb));
p[0].x=0,p[0].y=0;
p[1].x=1,p[1].y=0;
p[2].x=0,p[2].y=1;
p[3].x=1,p[3].y=1;
drawing(hdc,x,y);
}

};class T2:public Tetris //“竖条”
{
public:
void one(HDC hdc,int x,int y)
{
hb=CreateSolidBrush(RGB(52,52,100));
oldbrush=SelectObject(hdc,(HBRUSH)(hb));
p[0].x=0,p[0].y=0;
p[1].x=0,p[1].y=1;
p[2].x=0,p[2].y=2;
p[3].x=0,p[3].y=3;
drawing(hdc,x,y);

}
void two(HDC hdc,int x,int y)
{
    hb=CreateSolidBrush(RGB(52,52,100));
    oldbrush=SelectObject(hdc,(HBRUSH)(hb));
    p[0].x=0,p[0].y=0;
    p[1].x=1,p[1].y=0;
    p[2].x=2,p[2].y=0;
    p[3].x=3,p[3].y=0;
    drawing(hdc,x,y);

}
void three(HDC hdc,int x,int y)
{
    hb=CreateSolidBrush(RGB(52,52,100));
    oldbrush=SelectObject(hdc,(HBRUSH)(hb));
    p[0].x=0,p[0].y=0;
    p[1].x=0,p[1].y=1;
    p[2].x=0,p[2].y=2;
    p[3].x=0,p[3].y=3;
    drawing(hdc,x,y);

}
void four(HDC hdc,int x,int y)
{
    hb=CreateSolidBrush(RGB(52,52,100));
    oldbrush=SelectObject(hdc,(HBRUSH)(hb));
    p[0].x=0,p[0].y=0;
    p[1].x=1,p[1].y=0;
    p[2].x=2,p[2].y=0;
    p[3].x=3,p[3].y=0;
    drawing(hdc,x,y);

}

};
class T3:public Tetris //“T条”
{
public:
void one(HDC hdc,int x,int y)
{
hb=CreateSolidBrush(RGB(95,102,100));

oldbrush=SelectObject(hdc,(HBRUSH)(hb));
p[0].x=1,p[0].y=0;
p[1].x=0,p[1].y=1;
p[2].x=1,p[2].y=1;
p[3].x=2,p[3].y=1;
drawing(hdc,x,y);

}
void two(HDC hdc,int x,int y)
{
    hb=CreateSolidBrush(RGB(95,102,100));   
    oldbrush=SelectObject(hdc,(HBRUSH)(hb));
    p[0].x=0,p[0].y=0;
    p[1].x=0,p[1].y=1;
    p[2].x=0,p[2].y=2;
    p[3].x=1,p[3].y=1;
    drawing(hdc,x,y);

}
void three(HDC hdc,int x,int y)
{
    hb=CreateSolidBrush(RGB(95,102,100));   
    oldbrush=SelectObject(hdc,(HBRUSH)(hb));
    p[0].x=1,p[0].y=0;
    p[1].x=0,p[1].y=0;
    p[2].x=1,p[2].y=1;
    p[3].x=2,p[3].y=0;
    drawing(hdc,x,y);

}
void four(HDC hdc,int x,int y)
{
    hb=CreateSolidBrush(RGB(95,102,100));   
    oldbrush=SelectObject(hdc,(HBRUSH)(hb));
    p[0].x=1,p[0].y=0;
    p[1].x=1,p[1].y=1;
    p[2].x=1,p[2].y=2;
    p[3].x=0,p[3].y=1;
    drawing(hdc,x,y);

}

};

class T4:public Tetris //“L形条第一种”
{
public:
void one(HDC hdc,int x,int y)
{
hb=CreateSolidBrush(RGB(200,82,150));

oldbrush=SelectObject(hdc,(HBRUSH)(hb));
p[0].x=0,p[0].y=0;
p[1].x=0,p[1].y=1;
p[2].x=0,p[2].y=2;
p[3].x=1,p[3].y=0;
drawing(hdc,x,y);

}
void two(HDC hdc,int x,int y)
{
    hb=CreateSolidBrush(RGB(200,82,150));   
    oldbrush=SelectObject(hdc,(HBRUSH)(hb));

    p[0].x=0,p[0].y=0;
    p[1].x=1,p[1].y=0;
    p[2].x=2,p[2].y=0;
    p[3].x=2,p[3].y=1;
    drawing(hdc,x,y);

}
void three(HDC hdc,int x,int y)
{
    hb=CreateSolidBrush(RGB(200,82,150));   
    oldbrush=SelectObject(hdc,(HBRUSH)(hb));

    p[0].x=1,p[0].y=0;
    p[1].x=1,p[1].y=1;
    p[2].x=1,p[2].y=2;
    p[3].x=0,p[3].y=2;
    drawing(hdc,x,y);

}
void four(HDC hdc,int x,int y)
{
    hb=CreateSolidBrush(RGB(200,82,150));   
    oldbrush=SelectObject(hdc,(HBRUSH)(hb));

    p[0].x=0,p[0].y=0;
    p[1].x=0,p[1].y=1;
    p[2].x=1,p[2].y=1;
    p[3].x=2,p[3].y=1;
    drawing(hdc,x,y);

}

};

class T5:public Tetris //“L形条第二种”
{
public:
void one(HDC hdc,int x,int y)
{
hb=CreateSolidBrush(RGB(270,152,170));

oldbrush=SelectObject(hdc,(HBRUSH)(hb));

    p[0].x=1,p[0].y=0;
    p[1].x=0,p[1].y=0;
    p[2].x=1,p[2].y=1;
    p[3].x=1,p[3].y=2;
    drawing(hdc,x,y);

}
void two(HDC hdc,int x,int y)
{
    hb=CreateSolidBrush(RGB(270,152,170));  
    oldbrush=SelectObject(hdc,(HBRUSH)(hb));

    p[0].x=2,p[0].y=0;
    p[1].x=2,p[1].y=1;
    p[2].x=1,p[2].y=1;
    p[3].x=0,p[3].y=1;
    drawing(hdc,x,y);

}
void three(HDC hdc,int x,int y)
{
    hb=CreateSolidBrush(RGB(270,152,170));  
    oldbrush=SelectObject(hdc,(HBRUSH)(hb));

    p[0].x=0,p[0].y=0;
    p[1].x=0,p[1].y=1;
    p[2].x=0,p[2].y=2;
    p[3].x=1,p[3].y=2;
    drawing(hdc,x,y);

}
void four(HDC hdc,int x,int y)
{
    hb=CreateSolidBrush(RGB(270,152,170));  
    oldbrush=SelectObject(hdc,(HBRUSH)(hb));

    p[0].x=2,p[0].y=0;
    p[1].x=1,p[1].y=0;
    p[2].x=0,p[2].y=0;
    p[3].x=0,p[3].y=1;
    drawing(hdc,x,y);

}

};
class T6:public Tetris //“Z形条第一种”
{
public:
void one(HDC hdc,int x,int y)
{
hb=CreateSolidBrush(RGB(255,252,100));

oldbrush=SelectObject(hdc,(HBRUSH)(hb));

    p[0].x=0,p[0].y=0;
    p[1].x=1,p[1].y=0;
    p[2].x=1,p[2].y=1;
    p[3].x=2,p[3].y=1;
    drawing(hdc,x,y);

}
void two(HDC hdc,int x,int y)
{

    hb=CreateSolidBrush(RGB(255,252,100));  
    oldbrush=SelectObject(hdc,(HBRUSH)(hb));

    p[0].x=1,p[0].y=0;
    p[1].x=1,p[1].y=1;
    p[2].x=0,p[2].y=1;
    p[3].x=0,p[3].y=2;
    drawing(hdc,x,y);

}
void three(HDC hdc,int x,int y)
{
    hb=CreateSolidBrush(RGB(255,252,100));  
    oldbrush=SelectObject(hdc,(HBRUSH)(hb));

    p[0].x=0,p[0].y=0;
    p[1].x=1,p[1].y=0;
    p[2].x=1,p[2].y=1;
    p[3].x=2,p[3].y=1;
    drawing(hdc,x,y);

}
void four(HDC hdc,int x,int y)
{

    hb=CreateSolidBrush(RGB(255,252,100));  
    oldbrush=SelectObject(hdc,(HBRUSH)(hb));

    p[0].x=1,p[0].y=0;
    p[1].x=1,p[1].y=1;
    p[2].x=0,p[2].y=1;
    p[3].x=0,p[3].y=2;
    drawing(hdc,x,y);

}

};
class T7:public Tetris //“Z形条第二种”
{
public:
void one(HDC hdc,int x,int y)
{
hb=CreateSolidBrush(RGB(290,255,255));

oldbrush=SelectObject(hdc,(HBRUSH)(hb));

    p[0].x=1,p[0].y=0;
    p[1].x=2,p[1].y=0;
    p[2].x=1,p[2].y=1;
    p[3].x=0,p[3].y=1;
    drawing(hdc,x,y);

}
void two(HDC hdc,int x,int y)
{
    hb=CreateSolidBrush(RGB(290,255,255));  
    oldbrush=SelectObject(hdc,(HBRUSH)(hb));

    p[0].x=1,p[0].y=1;
    p[1].x=0,p[1].y=1;
    p[2].x=0,p[2].y=0;
    p[3].x=1,p[3].y=2;
    drawing(hdc,x,y);


}
void three(HDC hdc,int x,int y)
{
    hb=CreateSolidBrush(RGB(290,255,255));  
    oldbrush=SelectObject(hdc,(HBRUSH)(hb));

    p[0].x=1,p[0].y=0;
    p[1].x=2,p[1].y=0;
    p[2].x=1,p[2].y=1;
    p[3].x=0,p[3].y=1;
    drawing(hdc,x,y);

}
void four(HDC hdc,int x,int y)
{
    hb=CreateSolidBrush(RGB(290,255,255));  
    oldbrush=SelectObject(hdc,(HBRUSH)(hb));

    p[0].x=1,p[0].y=1;
    p[1].x=0,p[1].y=1;
    p[2].x=0,p[2].y=0;
    p[3].x=1,p[3].y=2;
    drawing(hdc,x,y);
}

};

T1 t1;
T2 t2;
T3 t3;
T4 t4;
T5 t5;
T6 t6;
T7 t7;

Tetris *p=new Tetris;

void ChooseTetris1(HDC hdc,int a)
{
switch(a)
{
case 0:p=new T1;break;
case 1:p=new T2;break;
case 2:p=new T3;break;
case 3:p=new T4;break;
case 4:p=new T5;break;
case 5:p=new T6;break;
case 6:p=new T7;break;
default:break;

}

}

void display(HDC hdc)
{
t1.one(hdc,500,10);
t2.one(hdc,500,75);
t3.one(hdc,500,180);
t4.one(hdc,500,245);
t5.one(hdc,500,325);
t6.one(hdc,500,410);
t7.one(hdc,500,480);

}

// 全局变量:
HINSTANCE hInst; // 当前实例
TCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本
TCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名
// 此代码模块中包含的函数的前向声明:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);

int R;

int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);

// TODO: 在此放置代码。
MSG msg;
HACCEL hAccelTable;
R=rand()%7;

// 初始化全局字符串
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_MY2CPP, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);
srand((unsigned)time(NULL));

// 执行应用程序初始化:
if (!InitInstance (hInstance, nCmdShow))
{
    return FALSE;
}

hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MY2CPP));

// 主消息循环:
while (GetMessage(&msg, NULL, 0, 0))
{
    if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}

return (int) msg.wParam;

}

//
// 函数: MyRegisterClass()
//
// 目的: 注册窗口类。
//
// 注释:
//
// 仅当希望
// 此代码与添加到 Windows 95 中的“RegisterClassEx”
// 函数之前的 Win32 系统兼容时,才需要此函数及其用法。调用此函数十分重要,
// 这样应用程序就可以获得关联的
// “格式正确的”小图标。
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style          = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc    = WndProc;
wcex.cbClsExtra     = 0;
wcex.cbWndExtra     = 0;
wcex.hInstance      = hInstance;
wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MY2CPP));
wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName   = MAKEINTRESOURCE(IDC_MY2CPP);
wcex.lpszClassName  = szWindowClass;
wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

return RegisterClassEx(&wcex);

}

//
// 函数: InitInstance(HINSTANCE, int)
//
// 目的: 保存实例句柄并创建主窗口
//
// 注释:
//
// 在此函数中,我们在全局变量中保存实例句柄并
// 创建和显示主程序窗口。
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;

hInst = hInstance; // 将实例句柄存储在全局变量中

hWnd = CreateWindow(szWindowClass, L"Tetris",WS_CAPTION|WS_SYSMENU,
CW_USEDEFAULT,CW_USEDEFAULT, W,H, NULL, NULL, hInstance, NULL);

if (!hWnd)
{
return FALSE;
}

ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

return TRUE;
}

int a=0;
int X[1000];
int Y[1000];

int JudgeTetris()
{
for(int i=0;i {
if(p->p[i].y+Y1+1>=28)
return 0;

}
for(int i=0;i<4;i++)
{

    for(int j=0;j<a;j++)
    {
        if(p->p[i].y+Y1+1>=Y[j]&&p->p[i].x+X1==X[j])
        {
            return 0;
        }

    }

}
return 1;

}

void StopTetris()
{
int x, y;
for(int i=0;i {
x=X1+p->p[i].x;
y=Y1+p->p[i].y;

// ShowTetris[x][y] = true;
X[a]=x;
Y[a]=y;
ShowTetris[X[a]][Y[a]] = true;
a++;
}

}

void Down(HDC hdc,int n)
{
switch(n)
{

     case 0: p->one(hdc,X1*N,Y1*N);break;
     case 1: p->two(hdc,X1*N,Y1*N);break;
     case 2: p->three(hdc,X1*N,Y1*N);break;
     case 3: p->four(hdc,X1*N,Y1*N);break;
     default:break;
}

if(JudgeTetris())
{       
    Y1++;

}
else
{
    StopTetris();
    R=rand()%7; 
    delete  p;
        //到达低端时,随机选择一个数
    ChooseTetris1(hdc,R);
    Y1=0;
    X1=10;
}
for (int i = 0; i < 30; i++)
{
    for (int j = 0; j < 30; j++)
    {
        if (ShowTetris[i][j])
        {
            hb=CreateSolidBrush(RGB(34,139,34));
            oldbrush=SelectObject(hdc,(HBRUSH)(hb));
            POINT a[4] = { i*N, j*N, (i + 1)*N, j*N, (i + 1)*N, (j + 1)*N, i*N, (j+1)*N };
            Polygon(hdc, a, 4);
        }
    }
}

}
void QuickDown(HDC hdc)
{

 Y1+=1;

InvalidateRect(hWnd,NULL,TRUE);

}

void GoLeft(HDC hdc)
{
if(X1<=0)
{
X1-=0;

}
else X1-=1;
InvalidateRect(hWnd,NULL,TRUE);

}

int JR() //判断右边界
{
for(int i=0;i {
if(p->p[i].x+X1>=20)

    return 0;

}
return 1;

}

void GoRight(HDC hdc)
{
if(!JR())
{

X1+=0;

}
else X1+=1;
InvalidateRect(hWnd,NULL,TRUE);

}

int L=0;
void Deforming(HDC hdc)
{

L+=1;
L=L%4;
InvalidateRect(hWnd,NULL,TRUE);

}

// 函数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
// 目的: 处理主窗口的消息。
//
// WM_COMMAND - 处理应用程序菜单
// WM_PAINT - 绘制主窗口
// WM_DESTROY - 发送退出消息并返回
//
//

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
HGDIOBJ oldbrush;
HBRUSH hb;
RECT rect;
srand((unsigned)time(NULL));

switch (message)
{
case WM_COMMAND:
    wmId    = LOWORD(wParam);
    wmEvent = HIWORD(wParam);
    // 分析菜单选择:
    switch (wmId)
    {
    case IDM_ABOUT:
        DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
        break;
    case IDM_EXIT:
        DestroyWindow(hWnd);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    break;
    case WM_CREATE:
        SetTimer(hWnd,1,700,NULL);      //函数反回值就是第一个参数值1,表示此定时器的ID号;第二个参数表示要等待700毫秒时间再重新处理一次。第三个参数在这种方法中一般用NULL。
    case WM_TIMER:

    InvalidateRect(hWnd,NULL,TRUE);
    case WM_KEYDOWN:        //键盘控制方块移动
    hdc=GetDC(hWnd);
    switch((int)wParam)
    {

    case VK_DOWN:
        QuickDown(hdc);break;   //加速下落
    case VK_LEFT:
        GoLeft(hdc);break;      //键盘左移
    case VK_RIGHT:
        GoRight(hdc);break;     //键盘右移
    case VK_UP:
        Deforming(hdc);break;   //变形
    }
    ReleaseDC ( hWnd,hdc );
    return 0;
case WM_PAINT:
    hdc = BeginPaint(hWnd, &ps);
    ChooseTetris1(hdc,R);

    hb=CreateSolidBrush(RGB(255,228,181));//hb=CreateSolidBrush(RGB(255,192,250));
    oldbrush=SelectObject(hdc,(HBRUSH)(hb));
    Rectangle(hdc,0,0,420,560);     //游戏区域画刷

    hb=CreateSolidBrush(RGB(176,224,230));//hb=CreateSolidBrush(RGB(255,192,250));
    oldbrush=SelectObject(hdc,(HBRUSH)(hb));
    Rectangle(hdc,420,0,600,560);       //游戏区域画刷

    display(hdc);
    Down(hdc,L); 
    // TODO: 在此添加任意绘图代码...
    EndPaint(hWnd, &ps);
    break;
case WM_DESTROY:
    KillTimer (hWnd, 1) ;
    PostQuitMessage(0);
    break;
default:
    return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;

}

// “关于”框的消息处理程序。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;

case WM_COMMAND:
    if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
    {
        EndDialog(hDlg, LOWORD(wParam));
        return (INT_PTR)TRUE;
    }
    break;
}![图片](https://img-ask.csdn.net/upload/201605/23/1464003773_584645.jpg)![图片](https://img-ask.csdn.net/upload/201605/23/1464003943_873881.jpg)![图片](https://img-ask.csdn.net/upload/201605/23/1464004017_919643.jpg)

3个回答

shen358721037
shen358721037 写法不同!问题没解决呢!
大约 4 年之前 回复

代码太长了,估计是你刷新窗口之后没有再调用你原来的刷墙工刷上你原来的颜色所以是白的

shen358721037
shen358721037 可是为什么运行到后面的时候才会出现这个问题,前面都还OK
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
我用c++在做俄罗斯方块,但是出现了一个网上也没搜到的问题

为什么运行一段时间后,窗体就会变成白色了呢?这个问题我困扰了很久,不解决的话,下面我就难以实行其他功能了!我是个新手,请大家多多指教!有图有源码! #include "stdafx.h" #include "俄罗斯方块游戏2.h" #include <time.h> #define MAX_LOADSTRING 100 #define N 20 //小方块大小 HWND hWnd = NULL; #define W 600 //窗口大小 #define H 610 HGDIOBJ oldbrush; HBRUSH hb; int X1=10; int Y1=0; bool ShowTetris[30][30]={0}; class Tetris //“父类”组成大方块中的小方块 { public: POINT p[4]; public: virtual void one(HDC hdc,int x,int y){}; virtual void two(HDC hdc,int x,int y){}; virtual void three(HDC hdc,int x,int y){}; virtual void four(HDC hdc,int x,int y){}; void drawing(HDC hdc ,int x,int y); }; void Tetris::drawing(HDC hdc ,int x,int y) { POINT A[4]; for(int i=0;i<4;i++) { A[0].x = x+p[i].x*N; A[0].y = y+p[i].y*N; A[1].x = x + N+p[i].x*N; A[1].y = y+p[i].y*N; A[2].x = x + N+p[i].x*N; A[2].y = y + N+p[i].y*N; A[3].x = x+p[i].x*N; A[3].y = y + N+p[i].y*N; Polygon(hdc, A, 4); } } class T1:public Tetris //"田条" { public: void one(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(255,2,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=0,p[2].y=1; p[3].x=1,p[3].y=1; drawing(hdc,x,y); } void two(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(255,2,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=0,p[2].y=1; p[3].x=1,p[3].y=1; drawing(hdc,x,y); } void three(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(255,2,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=0,p[2].y=1; p[3].x=1,p[3].y=1; drawing(hdc,x,y); } void four(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(255,2,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=0,p[2].y=1; p[3].x=1,p[3].y=1; drawing(hdc,x,y); } };class T2:public Tetris //“竖条” { public: void one(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(52,52,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=0,p[1].y=1; p[2].x=0,p[2].y=2; p[3].x=0,p[3].y=3; drawing(hdc,x,y); } void two(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(52,52,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=2,p[2].y=0; p[3].x=3,p[3].y=0; drawing(hdc,x,y); } void three(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(52,52,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=0,p[1].y=1; p[2].x=0,p[2].y=2; p[3].x=0,p[3].y=3; drawing(hdc,x,y); } void four(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(52,52,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=2,p[2].y=0; p[3].x=3,p[3].y=0; drawing(hdc,x,y); } }; class T3:public Tetris //“T条” { public: void one(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(95,102,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=0,p[1].y=1; p[2].x=1,p[2].y=1; p[3].x=2,p[3].y=1; drawing(hdc,x,y); } void two(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(95,102,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=0,p[1].y=1; p[2].x=0,p[2].y=2; p[3].x=1,p[3].y=1; drawing(hdc,x,y); } void three(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(95,102,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=0,p[1].y=0; p[2].x=1,p[2].y=1; p[3].x=2,p[3].y=0; drawing(hdc,x,y); } void four(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(95,102,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=1,p[1].y=1; p[2].x=1,p[2].y=2; p[3].x=0,p[3].y=1; drawing(hdc,x,y); } }; class T4:public Tetris //“L形条第一种” { public: void one(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(200,82,150)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=0,p[1].y=1; p[2].x=0,p[2].y=2; p[3].x=1,p[3].y=0; drawing(hdc,x,y); } void two(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(200,82,150)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=2,p[2].y=0; p[3].x=2,p[3].y=1; drawing(hdc,x,y); } void three(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(200,82,150)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=1,p[1].y=1; p[2].x=1,p[2].y=2; p[3].x=0,p[3].y=2; drawing(hdc,x,y); } void four(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(200,82,150)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=0,p[1].y=1; p[2].x=1,p[2].y=1; p[3].x=2,p[3].y=1; drawing(hdc,x,y); } }; class T5:public Tetris //“L形条第二种” { public: void one(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(270,152,170)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=0,p[1].y=0; p[2].x=1,p[2].y=1; p[3].x=1,p[3].y=2; drawing(hdc,x,y); } void two(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(270,152,170)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=2,p[0].y=0; p[1].x=2,p[1].y=1; p[2].x=1,p[2].y=1; p[3].x=0,p[3].y=1; drawing(hdc,x,y); } void three(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(270,152,170)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=0,p[1].y=1; p[2].x=0,p[2].y=2; p[3].x=1,p[3].y=2; drawing(hdc,x,y); } void four(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(270,152,170)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=2,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=0,p[2].y=0; p[3].x=0,p[3].y=1; drawing(hdc,x,y); } }; class T6:public Tetris //“Z形条第一种” { public: void one(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(255,252,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=1,p[2].y=1; p[3].x=2,p[3].y=1; drawing(hdc,x,y); } void two(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(255,252,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=1,p[1].y=1; p[2].x=0,p[2].y=1; p[3].x=0,p[3].y=2; drawing(hdc,x,y); } void three(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(255,252,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=1,p[2].y=1; p[3].x=2,p[3].y=1; drawing(hdc,x,y); } void four(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(255,252,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=1,p[1].y=1; p[2].x=0,p[2].y=1; p[3].x=0,p[3].y=2; drawing(hdc,x,y); } }; class T7:public Tetris //“Z形条第二种” { public: void one(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(290,255,255)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=2,p[1].y=0; p[2].x=1,p[2].y=1; p[3].x=0,p[3].y=1; drawing(hdc,x,y); } void two(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(290,255,255)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=1; p[1].x=0,p[1].y=1; p[2].x=0,p[2].y=0; p[3].x=1,p[3].y=2; drawing(hdc,x,y); } void three(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(290,255,255)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=2,p[1].y=0; p[2].x=1,p[2].y=1; p[3].x=0,p[3].y=1; drawing(hdc,x,y); } void four(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(290,255,255)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=1; p[1].x=0,p[1].y=1; p[2].x=0,p[2].y=0; p[3].x=1,p[3].y=2; drawing(hdc,x,y); } }; T1 t1; T2 t2; T3 t3; T4 t4; T5 t5; T6 t6; T7 t7; Tetris *p=new Tetris; void ChooseTetris1(HDC hdc,int a) { switch(a) { case 0:p=new T1;break; case 1:p=new T2;break; case 2:p=new T3;break; case 3:p=new T4;break; case 4:p=new T5;break; case 5:p=new T6;break; case 6:p=new T7;break; default:break; } } void display(HDC hdc) { t1.one(hdc,500,10); t2.one(hdc,500,75); t3.one(hdc,500,180); t4.one(hdc,500,245); t5.one(hdc,500,325); t6.one(hdc,500,410); t7.one(hdc,500,480); } // 全局变量: HINSTANCE hInst; // 当前实例 TCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本 TCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名 // 此代码模块中包含的函数的前向声明: ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); int R; int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); // TODO: 在此放置代码。 MSG msg; HACCEL hAccelTable; R=rand()%7; // 初始化全局字符串 LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_MY2CPP, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance); srand((unsigned)time(NULL)); // 执行应用程序初始化: if (!InitInstance (hInstance, nCmdShow)) { return FALSE; } hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MY2CPP)); // 主消息循环: while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return (int) msg.wParam; } // // 函数: MyRegisterClass() // // 目的: 注册窗口类。 // // 注释: // // 仅当希望 // 此代码与添加到 Windows 95 中的“RegisterClassEx” // 函数之前的 Win32 系统兼容时,才需要此函数及其用法。调用此函数十分重要, // 这样应用程序就可以获得关联的 // “格式正确的”小图标。 // ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MY2CPP)); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = MAKEINTRESOURCE(IDC_MY2CPP); wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); return RegisterClassEx(&wcex); } // // 函数: InitInstance(HINSTANCE, int) // // 目的: 保存实例句柄并创建主窗口 // // 注释: // // 在此函数中,我们在全局变量中保存实例句柄并 // 创建和显示主程序窗口。 // BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND hWnd; hInst = hInstance; // 将实例句柄存储在全局变量中 hWnd = CreateWindow(szWindowClass, L"Tetris",WS_CAPTION|WS_SYSMENU, CW_USEDEFAULT,CW_USEDEFAULT, W,H, NULL, NULL, hInstance, NULL); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } int a=0; int X[1000]; int Y[1000]; int JudgeTetris() { for(int i=0;i<4;i++) { if(p->p[i].y+Y1+1>=28) return 0; } for(int i=0;i<4;i++) { for(int j=0;j<a;j++) { if(p->p[i].y+Y1+1>=Y[j]&&p->p[i].x+X1==X[j]) { return 0; } } } return 1; } void StopTetris() { int x, y; for(int i=0;i<4;i++) { x=X1+p->p[i].x; y=Y1+p->p[i].y; // ShowTetris[x][y] = true; X[a]=x; Y[a]=y; ShowTetris[X[a]][Y[a]] = true; a++; } } void Down(HDC hdc,int n) { switch(n) { case 0: p->one(hdc,X1*N,Y1*N);break; case 1: p->two(hdc,X1*N,Y1*N);break; case 2: p->three(hdc,X1*N,Y1*N);break; case 3: p->four(hdc,X1*N,Y1*N);break; default:break; } if(JudgeTetris()) { Y1++; } else { StopTetris(); R=rand()%7; delete p; //到达低端时,随机选择一个数 ChooseTetris1(hdc,R); Y1=0; X1=10; } for (int i = 0; i < 30; i++) { for (int j = 0; j < 30; j++) { if (ShowTetris[i][j]) { hb=CreateSolidBrush(RGB(34,139,34)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); POINT a[4] = { i*N, j*N, (i + 1)*N, j*N, (i + 1)*N, (j + 1)*N, i*N, (j+1)*N }; Polygon(hdc, a, 4); } } } } void QuickDown(HDC hdc) { Y1+=1; InvalidateRect(hWnd,NULL,TRUE); } void GoLeft(HDC hdc) { if(X1<=0) { X1-=0; } else X1-=1; InvalidateRect(hWnd,NULL,TRUE); } int JR() //判断右边界 { for(int i=0;i<4;i++) { if(p->p[i].x+X1>=20) return 0; } return 1; } void GoRight(HDC hdc) { if(!JR()) { X1+=0; } else X1+=1; InvalidateRect(hWnd,NULL,TRUE); } int L=0; void Deforming(HDC hdc) { L+=1; L=L%4; InvalidateRect(hWnd,NULL,TRUE); } // 函数: WndProc(HWND, UINT, WPARAM, LPARAM) // // 目的: 处理主窗口的消息。 // // WM_COMMAND - 处理应用程序菜单 // WM_PAINT - 绘制主窗口 // WM_DESTROY - 发送退出消息并返回 // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; HGDIOBJ oldbrush; HBRUSH hb; RECT rect; srand((unsigned)time(NULL)); switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // 分析菜单选择: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_CREATE: SetTimer(hWnd,1,700,NULL); //函数反回值就是第一个参数值1,表示此定时器的ID号;第二个参数表示要等待700毫秒时间再重新处理一次。第三个参数在这种方法中一般用NULL。 case WM_TIMER: InvalidateRect(hWnd,NULL,TRUE); case WM_KEYDOWN: //键盘控制方块移动 hdc=GetDC(hWnd); switch((int)wParam) { case VK_DOWN: QuickDown(hdc);break; //加速下落 case VK_LEFT: GoLeft(hdc);break; //键盘左移 case VK_RIGHT: GoRight(hdc);break; //键盘右移 case VK_UP: Deforming(hdc);break; //变形 } ReleaseDC ( hWnd,hdc ); return 0; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); ChooseTetris1(hdc,R); hb=CreateSolidBrush(RGB(255,228,181));//hb=CreateSolidBrush(RGB(255,192,250)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); Rectangle(hdc,0,0,420,560); //游戏区域画刷 hb=CreateSolidBrush(RGB(176,224,230));//hb=CreateSolidBrush(RGB(255,192,250)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); Rectangle(hdc,420,0,600,560); //游戏区域画刷 display(hdc); Down(hdc,L); // TODO: 在此添加任意绘图代码... EndPaint(hWnd, &ps); break; case WM_DESTROY: KillTimer (hWnd, 1) ; PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } // “关于”框的消息处理程序。 INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); switch (message) { case WM_INITDIALOG: return (INT_PTR)TRUE; case WM_COMMAND: if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, LOWORD(wParam)); return (INT_PTR)TRUE; } break; }![图片](https://img-ask.csdn.net/upload/201605/23/1464003773_584645.jpg)![图片](https://img-ask.csdn.net/upload/201605/23/1464003943_873881.jpg)![图片](https://img-ask.csdn.net/upload/201605/23/1464004017_919643.jpg)

求一个用C语言+SDL编写俄罗斯方块的代码

跪求一个用C语言+SDL编写俄罗斯方块的代码,实在是不理解,求救

求一个C语言基于SDL2开发的俄罗斯方块游戏!!!!! 需要源码

如题求一个C语言基于SDL2开发的俄罗斯方块游戏!!!!! 需要源码

c语言设计俄罗斯方块判断能否下落问题

我会用字摸点阵的方法保存每个方块的形状,并且能用掩码的方式画出来,但很 难判断能否下落。 我判断能否左右移动的算法是:用掩码分别计算每一行最左或最右的方块位置,然后在最左边那则不能移动块旁边的中点取颜色,如果不是黑色则不能移动。 ``` // 检查左边界 int Left(int x, int y, unsigned int binary_code) { int i; int leftmost = 0; // 最左端与x的的距离 int pix_in_line = 0; // 标志一行是否有方块 int mask = 1; // 设置掩码 for(i = 1; i<=16; i++, binary_code >>= 1) { if((mask & binary_code) == 1) { if(i%4 > leftmost) leftmost = i%4; if(i == 4) leftmost = 4; pix_in_line = 1; } x -= LEN; if(i%4 == 0) { x += 4*LEN; if(pix_in_line == 1) { if(getpixel(x - leftmost*LEN - LEN/2, y + LEN/2) != BLACK) return 1; else if(x - leftmost*LEN == 0) return 1; } y += LEN; leftmost = 0; pix_in_line = 0; } } return 0; } ``` 按这种方法判断下边界的要用两个for循环,很麻烦。网上的代码看上去没这么麻烦,但我看不懂,有哪位大神能提供下思路吗?谢谢!

设计一个俄罗斯方块AI

我们老师给的作业设计 哪位大神能帮帮忙 程序已经设计完成,就是AI方面没有死路 有没有开源代码给看看 字符型界面 ![图片说明](https://img-ask.csdn.net/upload/201509/16/1442405880_686843.png)

如果用汇编语言编程俄罗斯方块

马上就要课程设计了,要求用汇编语言编俄罗斯方块,哪位大神能给出程序啊,多谢了!!!

俄罗斯方块中的进制数

我是一个菜鸟,我想知道为什么俄罗斯方块游戏中要用一个十六进制数表示一个俄罗斯方块,而且为什么十六进制数可以转换成二进制是数组形式

用vc++做俄罗斯方块MFC

用VC++做俄罗斯方块,学的都是建立一个文本框,然后添类什么的,但是看了好多都给出了源代码…可是还是不会啊,要全部自己打吗,还是可以添加类实现,求知道啊

JAVA课程设计简单的俄罗斯方块,急!!!

老师提供的代码: import java.awt.*; import java.awt.event.*; /** * Sample application of Rassia game * * @author Zhefan Jin * @version 1.00 07/05/28 */ class GamePanel extends Frame { /** * The attributes of class GamePanel */ int cellSize =20; int hCellCount =30; int vCellCount =40; int sideSpace =20, bottomSpace=20, upSpace=60; Dimension dimFrame, dimGame; Point GameAreaZero; BlockB activeBlock; //End of attributes private Point Convert2DC(Point p){ Point pReturn =new Point(); pReturn.x =p.x +sideSpace; pReturn.y =dimFrame.height -bottomSpace -p.y; return pReturn; } /** * The constructor. */ public GamePanel() { dimFrame =new Dimension(); dimGame =new Dimension(); GameAreaZero =new Point(); dimFrame.height = upSpace +bottomSpace +vCellCount*cellSize; dimFrame.width = sideSpace*2 + hCellCount*cellSize; GameAreaZero.x = sideSpace; GameAreaZero.y = dimFrame.height -bottomSpace; dimGame.height = vCellCount*cellSize; dimGame.width = hCellCount*cellSize; activeBlock =new BlockB(); System.out.println(dimFrame.toString()); System.out.println(GameAreaZero.toString()); setResizable(false); MenuBar menuBar = new MenuBar(); Menu menuFile = new Menu(); MenuItem menuFileExit = new MenuItem(); MenuItem menuFileStart = new MenuItem(); menuFile.setLabel("File"); menuFileExit.setLabel("Exit"); menuFileStart.setLabel("Start"); // Add action listener.for the menu button menuFileExit.addActionListener ( new ActionListener() { public void actionPerformed(ActionEvent e) { GamePanel.this.windowClosed(); //syntex? } } ); menuFileStart.addActionListener ( new ActionListener() { public 老师的要求: 1. 老师已提供了部分代码,你的目标是按要求完成另一部分代码,最终实现俄罗斯方块游戏的一个局部,效果如下: ![图片说明](https://img-ask.csdn.net/upload/201509/08/1441674790_8849.png) 图 1 2. 具体如下: a) 已提供的代码是Russia.java,这个文件是正确的,不要对它作任何修改。 b) 要求你生成一个新文件BlockB.java,在其中实现类BlockB。Russia.java中使用了BlockB类,如果你的编写都正确,Russia就能正常执行。 c) BlockB.java和Russia.java需放在同一个目录下。按照要求实现BlockB类后,编译这两个文件,然后运行Russia,正确情况下将出现图1效果。 3. BlockB类的要求: a) BlockB类的数据(变量)成员是: i. Point类的对象origin, p0, p1, p2, p3。Point类在java类库的位置是java.awt.Point。(我们在上学期的实验07中使用了Point类。实验07的题目和答案在发下来的资料中供参考。) ii. int类型数据成员gesture,其取值范围0-3,表示4种姿态,具体说明见后。 b) BlockB类的方法(函数)成员如下: i. BlockB() 构造函数。其中对Point类数据成员进行创建(new),并对其它成员变量赋合适的初值。 ii. void setGesture(int g) 设置姿态,包含两个动作:1)用参数g对数据成员gesture进行赋值。2)根据新的姿态,调整p0, p1, p2, p3在Block局部坐标系里的坐标值,坐标说明见后。 iii. void moveTo(int x, int y) 把数据成员origin(原点)移动到窗口坐标系(x,y)位置。 iv. Point getP0() 直接返回p0。 v. Point getP1() 直接返回p1。 vi. Point getP2() 直接返回p2。 vii. Point getP3() 直接返回p3。 4. 关于点的位置、姿态等的说明: a) 坐标系的说明 i. 俄罗斯方块游戏中的活动块称为一个Block(块)。游戏使用两种坐标系:Block局部坐标系和游戏窗口坐标系。 ii. Block局部的坐标系定义了组成Block的4个小方块p0, p1, p2, p3之间的位置关系,如下图: ![图片说明](https://img-ask.csdn.net/upload/201509/08/1441675020_644932.png) 如上图中4个点的坐标可以是:p0(0,0), p1(0,1), p2(0,2), p3(-1,0)。 iii. 一个Block在窗口中的位置由点origin确定,origin是Block坐标系的原点在窗口坐标系中的位置,如下图origin位置是(10, 10): ![图片说明](https://img-ask.csdn.net/upload/201509/08/1441675048_482696.png) b) 姿态(gesture)的说明。一个Block可以有4种姿态,分别用0、1、2、3来表示,每种姿态下点p0、p1、p2、p3的位置是不同的。 ![图片说明](https://img-ask.csdn.net/upload/201509/08/1441675069_836083.png)

关于俄罗斯方块的代码问题

学校在大一结束要我们编俄罗斯方块,要有自己的风格,无论是界面还是功能,用C++6.0和EasyX,不是很会,求助一下,希望能得到不要太复杂,但是有风格的代码

求大神帮忙,这段代码在哪有设置背景图片的,俄罗斯方块小游戏

求大神帮忙,这个俄罗斯方块程序在哪有设置新游戏背景图片的。另外运行以后新游戏界面底色如何清除。。链接在下面求求大神帮帮忙。。http://www.linuxidc.com/Linux/2011-08/41891.htm

Android俄罗斯方块做好后方向键不受控制是怎么回事?

Android俄罗斯方块做好后方向键不受控制是怎么回事?上下左右都没有反应。可明明已经设置好了按键功能

Tetris 俄罗斯方块的程序怎么写

Problem Description Tetris is a famous puzzle video game.A random sequence of tetrominoes —shapes composed of four square blocks each—fall down the playing field (a rectangular vertical well). The object of the game is to manipulate these tetrominoes, by moving each one sideways and rotating it by 90 degree units, with the aim of creating a horizontal line of blocks without gaps. When such a line is created, it disappears, and any block above the deleted line will fall. As the game progresses, the tetrominoes fall, and the game ends when the stack of tetrominoes reaches the top of the playing field and no new tetrominoes are able to enter. Here we consider only a simple variation of tetris. The playing field consists of 20 rows and 10 columns. There’re 7 kinds of tetrominoes: Each kind of tetrominoes may have 4 kind of rotation,ie, rotating by 0,90,180,270 degrees.Here is a sample rotation of type 2 Tetromino: We define the initial position of a tetromino in the falling sequences as the leftmost occupied column of the tetromino after rotation. For example,for a type 2 tetromino with 180 degree rotation and a initial position of 3 is just like: After one move down, it will look likes: You will be given a sequence of tetrominoes with their rotation degrees and their initial position.And in this game there is no player manipulating tetrominoes. Once their rotation degree and initial position are determined,the ending of the game is unique. You just simulate as the original Tetris and are required to output the playing field right before the end of game(if the game ends before the end of sequences,you should output the the playing field right before its ends.).Note if there are some horizontal line that are fully covered by blocks,we should first delete such lines then judging the end of game. Input Input contains multiple cases.Test cases are separated by several blank lines. Each test case starts with a integer M(1<=N<=300) ,indicating that there are M tetrominoes in the input sequence.Follow by M lines,each line contains three integers id,degree,pos(1<=id<=7,degree∈{0,90,180,270},1<=pos<=10),as described before.It guarantees that their inputs are legal. Output For each test case, output the playing field right before the end of game.ie,the playing field right before entering the last tetromino.For output,you should add a boarder to the playing field and output the rows in decreasing order,ie first output Row 20, then Row 19 and so on.If a block is occupied ,output “[]”,otherwise you should ouput '..' . Output a blank line after each Case.You may refer to the sample output for more details. Sample Input 10 3 90 1 6 270 2 5 90 1 4 90 1 7 90 5 1 0 7 1 0 7 1 0 7 3 90 4 2 90 3 Sample Output +--------------------+ |....................| |....................| |....................| |....................| |....................| |....................| |....................| |....................| |....................| |....................| |....................| |....................| |....................| |....................| |[][]................| |[][][][]............| |[]..[][]............| |[][][][]............| |[][][]..[][][][][][]| |[][][]..[]..[][][][]| +--------------------+

.net俄罗斯方块残影问题

求大佬帮忙,教我怎样解决俄罗斯方块移动后留下的残影,就是方块移动后在地图上面留下了痕迹,但是用鼠标点住窗体往下面拖到最底部再拖上来又没了,学生 求解决,谢谢

俄罗斯方块堆放在网格里的做法,怎么使用C语言的程序编写的代码的思想来解决此算法

Problem Description Working in corporation is toilsome and rest is important. In leisure time, WisKey like to play Tetris. The Tetris game in board is N*5, and there are 8 kinds of blocks. Look that, red mean the area can’t be place. Other colors mean different kinds of blocks. If I give you C grey blocks (the 1st kind), and other infinite color blocks, Can you fulfil the board without any blocks overlap. Input Each case will contain two integers N (1<=N<=1000) and C (0<=C<=100). N*5 grid follow it. The ‘1’ represent red area, it can’t be place. The ‘0’ represent normal area. Process cases to end of file. Output If you can full of the Tetris, print “YES”, otherwise, print “NO”. Sample Input 1 1 00000 1 1 00100 1 1 01010 4 1 10000 00101 10010 00000 Sample Output YES YES NO YES

关于俄罗斯方块Shape数据关系

public final class Shape { private static Random random = new Random(); // 当变换砖块形状时,查询此表 private static final int[] NEXT = { 0, 2, 1, 4, 5, 6, 3, 8, 9, 10, 7, 12, 13, 14, 11, 16, 15, 18, 17 }; // Shape数组 public static final Shape[] SHAPES = { // 0号砖块, 下一个是0号 // OO // OO new Shape(0, new int[] { 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, 1, 1, 1, 1), // 1号砖块, 下一个是2号 // OOOO new Shape(1, new int[] { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, 1, 0, 2, 0), // 2号砖块, 下一个是1号 // O // O // O // O new Shape(2, new int[] { 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 }, 0, 2, 0, 1), // 3号砖块, 下一个是4号 // O // O // OO new Shape(3, new int[] { 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, 0, 1, 1, 1), // 4号砖块,下一个是5号 // OOO // O new Shape(4, new int[] { 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, 1, 1, 1, 0), // 5号砖块, 下一个是6号 // OO // O // O new Shape(5, new int[] { 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, 0, 2, 1, 0), // 6号砖块, 下一个是3号 // O // OOO new Shape(6, new int[] { 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0, 1, 2, 0), // 7号砖块, 下一个是8号 // O // O // OO new Shape(7, new int[] { 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 }, 0, 2, 1, 0), // 8号砖块, 下一个是9号 // O // OOO new Shape(8, new int[] { 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0, 1, 2, 0), // 9号砖块, 下一个是10号 // OO // O // O new Shape(9, new int[] { 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1), // 10号砖块, 下一个是7号 // OOO // O new Shape(10, new int[] { 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, 1, 1, 1, 0), // 11号砖块, 下一个是12 // O // OOO new Shape(11, new int[] { 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0, 1, 2, 0), // 12号砖块, 下一个是13 // O // OO // O new Shape(12, new int[] { 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1), // 13号砖块, 下一个是14 // OOO // O new Shape(13, new int[] { 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, 1, 1, 1, 0), // 14号砖块, 下一个是11 // O // OO // O new Shape(14, new int[] { 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, 0, 2, 1, 0), // shape of 15, next=16 // OO // OO new Shape(15, new int[] { 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0 }, 1, 1, 1, 0), // shape of 16, next=15 // O // OO // O new Shape(16, new int[] { 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, 0, 1, 1, 1), // shape of 17, next=18 // OO // OO new Shape(17, new int[] { 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, 1, 1, 1, 0), // shape of 18, next=17 // O // OO // O new Shape(18, new int[] { 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1) }; // 砖块的索引 private int index; // 4*4的二维数组 private int[] data; // 上下左右的margin private int marginTop; private int marginRight; private int marginBottom; private int marginLeft; private Shape(final int index, final int[] data, int mt, int mr, int mb, int ml) { this.index = index; this.data = data; this.marginTop = mt; this.marginRight = mr; this.marginBottom = mb; this.marginLeft = ml; } // 随机生成一个砖块 public static Shape random() { int index = (random.nextInt() >>> 1) % Shape.SHAPES.length; return Shape.SHAPES[index]; } public int getIndex() { return index; } public int[] getData() { return data; } public int marginTop() { return marginTop; } public int marginLeft() { return marginLeft; } public int marginRight() { return marginRight; } public int marginBottom() { return marginBottom; } // 下一个砖块 public Shape next() { return SHAPES[NEXT[index]]; } } 举new Shape(2, new int[] { 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 }, 0, 2, 0, 1) 后面0, 2, 0, 1 是什么数据关系?什么表达式?

俄罗斯方块是否能在矩形中填充的一个算法问题,怎么用C语言编程解决的

Problem Description Working in corporation is toilsome and rest is important. In leisure time, WisKey like to play Tetris. The Tetris game in board is N*5, and there are 8 kinds of blocks. Look that, red mean the area can’t be place. Other colors mean different kinds of blocks. If I give you C grey blocks (the 1st kind), and other infinite color blocks, Can you fulfil the board without any blocks overlap. Input Each case will contain two integers N (1<=N<=1000) and C (0<=C<=100). N*5 grid follow it. The ‘1’ represent red area, it can’t be place. The ‘0’ represent normal area. Process cases to end of file. Output If you can full of the Tetris, print “YES”, otherwise, print “NO”. Sample Input 1 1 00000 1 1 00100 1 1 01010 4 1 10000 00101 10010 00000 Sample Output YES YES NO YES

用java编写俄罗斯方块的难题不知道怎么解决,求大神帮助!

怎么解决方块下落后,堆积的各种方块颜色的问题? 关键代码部分 //获得方块类型编号 int type=this.dto.getGameAct().getTypeCode(); //打印方块 for (int i = 0; i < points.length; i++) { drawAct(points[i].x,points[i].y,type,g); } //绘制地图 boolean[][] map=this.dto.getGameMap(); //map为 boolean[][] map,如果方块不能再向下移动,该map对面的坐标点就等于true //双重循环来遍历map for (int x = 0; x < map.length; x++) { for (int y = 0; y < map[x].length; y++) { if(map[x][y]){ //画方块的方法,x为map的x坐标,y为map的y坐标,第三个参数是方块的颜色编号 drawAct(x,y,this.dto.getGameAct().getTypeCode(),g); } } } ================================================= 我的问题就是堆积起来的方块怎么能保持各自的颜色![图片说明](https://img-ask.csdn.net/upload/201611/07/1478451556_422135.jpg)

俄罗斯方块问题 Bricks

Problem Description Little White bought a new house recently. She doesn't like the design of the floor anyway, so she decides to decorate the floor. Now she has bricks of the 5 shapes below, all with an infinite amount. Bricks cannot overlap each other, and you cannot rotate them to fit in the "holes". Now, please tell Little White how many units can she cover using these bricks. Input For every test case, you are given two integers n and m indicating the floor is an n*m rectangle consisting of n*m 1*1 grids.(1<=n<=100,1<=m<=6) Proceed to the end of file. Output For every test case, print an integer on a single line, representing the maximum possible area that can be covered. Sample Input 1 4 2 3 3 2 4 4 Sample Output 0 4 4 12

俄罗斯方块C++程序,遇到死循环的情况,求助

#ifndef RB_H #define RB_H //长条形 const int A1=1; const int A1_1=8; //田字 const int A2=2; //z字 const int A3=3; const int A3_1=9; //反z字 const int A4=4; const int A4_1=10; //T字 const int A5=5; const int A5_1=11; const int A5_2=12; const int A5_3=13; //L形 const int A6=6; const int A6_1=14; const int A6_2=15; const int A6_3=16; const int A6_4=17; //反L形 const int A7=7; const int A7_1=18; const int A7_2=19; const int A7_3=20; const int A7_4=21; class RB { private: int score; int level; int ID; int hotPointx; int hotPointy; int top; public: RB() { score=0; level=1; top=30; } // void GetHotPoint(); void DrawMap(); void DrawBlock(int x,int y,int id); void DeleteBlock(int x,int y,int id); int Rotate(int id); int Judge(int x,int y,int id); void UpdateMap(int id); void RunGame(); }; #endif #include"RB.h" #include<iostream> using namespace std; #include <windows.h> #include <conio.h> int Block[19][8]= { {0,0,0,1,0,2,0,3},//一字 {-1,1,0,1,1,1,2,1}, {0,0,1,0,1,1,0,1},//田形 {0,0,0,1,1,1,1,2},//z形 {0,1,1,1,1,0,2,0}, {0,2,0,1,1,1,1,0},//反z形 {0,0,1,0,1,1,2,1}, {0,0,1,0,2,0,1,1},//T形 {1,0,0,1,1,1,2,1}, {1,0,0,1,1,1,1,2}, {0,0,0,1,0,2,1,1}, {0,0,0,1,0,2,1,2},//L形 {0,0,0,1,1,0,2,0}, {0,0,1,0,1,1,1,2}, {2,0,0,1,1,1,2,1}, {1,0,1,1,1,2,1,2},//反L形 {0,0,0,1,1,1,2,1}, {0,0,0,1,0,2,1,0}, {0,0,1,0,2,0,2,1} }; int height[19]={1,4,2,2,3,2,3,3,3,3,3,3,2,3,2,3,2,3,2}; int map[12][24]={0}; void setCurPos(int i, int j, int color = 1 | 2 | 4)// <span style="white-space:pre"> </span> { HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出句柄 SetConsoleTextAttribute(out, color);//<span style="white-space:pre"> </span>//设置颜色 COORD pos = {2*i, j }; SetConsoleCursorPosition(out, pos);//<span style="white-space:pre"> </span>//设置位置 } //旋转方块 int RB::Rotate(int ID) { switch(ID) { case 0:ID=1;break; case 1:ID=0;break; case 2:ID=2;break; case 3:ID=4;break; case 4:ID=3;break; case 5:ID=6;break; case 6:ID=5;break; case 7:ID=8;break; case 8:ID=9;break; case 9:ID=10;break; case 10:ID=7;break; case 11:ID=12; break; case 12:ID=13;break; case 13:ID=14;break; case 14:ID=15;break; case 15:ID=16; break; case 16:ID=17;break; case 17:ID=18;break; case 18:ID=15;break; } return ID; } //画出砖块 void RB::DrawBlock(int x,int y,int id) { int nx=0,ny=0; for(int i=0;i<4;i++) { nx=x+Block[id][2*i]; ny=y+Block[id][2*i+1]; setCurPos(nx+1,ny+1); cout<<"■"; } } //消除砖块 void RB::DeleteBlock(int x,int y,int id) { int nx=0,ny=0; for(int i=0;i<4;i++) { nx=x+Block[id][2*i]; ny=y+Block[id][2*i+1]; setCurPos(nx+1,ny+1); cout<<" "; } } //画出游戏的边框 void RB::DrawMap() { for(int i=0;i<21;i++) { setCurPos(i,0); cout<<"■"; setCurPos(i,25); cout<<"■"; } for(int j=1;j<25;j++) { setCurPos(0,j); cout<<"■"; setCurPos(13,j); cout<<"■"; setCurPos(20,j); cout<<"■"; } for( i=14;i<21;i++) { setCurPos(i,7); cout<<"■"; } } int RB::Judge(int x,int y,int id) {int nx=0,ny=0; for(int i=0;i<4;i++) { nx=x+Block[id][2*i]; ny=y+Block[id][1+2*i]; if(nx>0||nx<13||ny>0||ny<25||map[nx][ny]==0) return 1; } return 0; } //更新画面 void RB::UpdateMap(int id) { int flag=0; int clear=0; int nx=0;int ny=0; // for(int i=0;i<4;i++) // { // nx=hotPointx+Block[id][i*2]; // ny=hotPointy+Block[id][2*i+1]; // map[nx][ny]=1; // } if(hotPointy<top) top=hotPointy; for(int j=hotPointy;j<hotPointy+height[id];j++) { flag=0; for(int i=0;i<12;i++) { if(map[i][j]==0) flag=0; break; } if(flag==1) { for(int k = j; k >= top; k--) { if (k == 0) //消除 到了最顶行 { for (int i = 1; i < 13; i++) { map[i][k] = 0; setCurPos(i,k + 1); cout << " "; } } else { for (int i = 0; i < 12; i++) { map[i][k] = map[i][k - 1]; setCurPos(i, k + 1); //因为有两条图形框边,游戏运行过程中的坐标系相对于 真正的坐标系是x、y都加 1 的 if (map[i][k] == 0) //被删除行的 上一行是空的,所以这一行也是空的 cout << " "; else //上一行不是空的 { int tempColor = map[i][k]; setCurPos(i + 1, k + 1, tempColor); cout << "■"; } } } } top++; // <span style="white-space:pre"> </span>//消除成功,最高点下降一个 clear++; score += clear * 100; } } } void RB::RunGame() { DrawMap(); int curBlock=0; int nextBlock=0; int Count=0; int i=0; char x=' '; hotPointx=6;hotPointy=0; curBlock=rand()%7; nextBlock=rand()%7; DrawBlock(hotPointx,hotPointy,curBlock); DrawBlock(15,2,nextBlock); Count = 10000 - 1000 * level; while(1) { if(i>Count) { if(Judge(hotPointx,hotPointy+1,curBlock)==0) { //落到底一瞬间发生了什么 UpdateMap(curBlock); DeleteBlock(15,2,nextBlock); curBlock=nextBlock; hotPointx=6;hotPointy=0; nextBlock=rand()%7; DrawBlock(hotPointx,hotPointy,curBlock); DrawBlock(15,2,nextBlock); if (Judge(hotPointx, hotPointy, curBlock) == 0) //无法绘制当前图形 { system("cls"); cout << "游戏结束!!!最终得分为:" << score << endl; system("pause"); exit(0); } } else { DeleteBlock(hotPointx,hotPointy,nextBlock); hotPointy++; DrawBlock(hotPointx,hotPointy,nextBlock); } } if(_kbhit()) { x=_getch(); if(x=='a'||x=='A') { if(Judge(hotPointx-1,hotPointy,curBlock)) { DeleteBlock(hotPointx,hotPointy,curBlock); hotPointx-=1; DrawBlock(hotPointx,hotPointy,curBlock); } } else if(x=='s'||x=='S') { if(Judge(hotPointx,hotPointy+1,curBlock)) { DeleteBlock(hotPointx,hotPointy,curBlock); hotPointy+=1; DrawBlock(hotPointx,hotPointy,curBlock); } } else if(x=='d'||x=='D') { if(Judge(hotPointx+1,hotPointy,curBlock)) { DeleteBlock(hotPointx,hotPointy,curBlock); hotPointx+=1; DrawBlock(hotPointx,hotPointy,curBlock); } } else if(x=='w'||x=='W') { int temp = curBlock; curBlock = Rotate(curBlock); if (Judge(hotPointx, hotPointy, curBlock)) { DeleteBlock(hotPointx, hotPointy, temp); DrawBlock(hotPointx, hotPointy, curBlock); } else curBlock = temp; } while(_kbhit()) { _getch(); } } i++; } } void main() { RB r1; r1.RunGame(); }

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

String s = new String(" a ") 到底产生几个对象?

老生常谈的一个梗,到2020了还在争论,你们一天天的,哎哎哎,我不是针对你一个,我是说在座的各位都是人才! 上图红色的这3个箭头,对于通过new产生一个字符串(”宜春”)时,会先去常量池中查找是否已经有了”宜春”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”宜春”对象的拷贝对象。 也就是说准确答案是产生了一个或两个对象,如果常量池中原来没有 ”宜春” ,就是两个。...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

Linux面试题(2020最新版)

文章目录Linux 概述什么是LinuxUnix和Linux有什么区别?什么是 Linux 内核?Linux的基本组件是什么?Linux 的体系结构BASH和DOS之间的基本区别是什么?Linux 开机启动过程?Linux系统缺省的运行级别?Linux 使用的进程间通信方式?Linux 有哪些系统日志文件?Linux系统安装多个桌面环境有帮助吗?什么是交换空间?什么是root帐户什么是LILO?什...

Linux命令学习神器!命令看不懂直接给你解释!

大家都知道,Linux 系统有非常多的命令,而且每个命令又有非常多的用法,想要全部记住所有命令的所有用法,恐怕是一件不可能完成的任务。 一般情况下,我们学习一个命令时,要么直接百度去搜索它的用法,要么就直接用 man 命令去查看守冗长的帮助手册。这两个都可以实现我们的目标,但有没有更简便的方式呢? 答案是必须有的!今天给大家推荐一款有趣而实用学习神器 — kmdr,让你解锁 Linux 学习新姿势...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

史上最全的 python 基础知识汇总篇,没有比这再全面的了,建议收藏

网友们有福了,小编终于把基础篇的内容全部涉略了一遍,这是一篇关于基础知识的汇总的文章,请朋友们收下,不用客气,不过文章篇幅肯能会有点长,耐心阅读吧爬虫(七十)多进程multiproces...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

85后蒋凡:28岁实现财务自由、34岁成为阿里万亿电商帝国双掌门,他的人生底层逻辑是什么?...

蒋凡是何许人也? 2017年12月27日,在入职4年时间里,蒋凡开挂般坐上了淘宝总裁位置。 为此,时任阿里CEO张勇在任命书中力赞: 蒋凡加入阿里,始终保持创业者的冲劲,有敏锐的...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

新一代神器STM32CubeMonitor介绍、下载、安装和使用教程

关注、星标公众号,不错过精彩内容作者:黄工公众号:strongerHuang最近ST官网悄悄新上线了一款比较强大的工具:STM32CubeMonitor V1.0.0。经过我研究和使用之...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

大学一路走来,学习互联网全靠这几个网站,最终拿下了一把offer

大佬原来都是这样炼成的

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

什么时候跳槽,为什么离职,你想好了么?

都是出来打工的,多为自己着想

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

你期望月薪4万,出门右拐,不送,这几个点,你也就是个初级的水平

先来看几个问题通过注解的方式注入依赖对象,介绍一下你知道的几种方式@Autowired和@Resource有何区别说一下@Autowired查找候选者的...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

立即提问
相关内容推荐