sdk编写的俄罗斯方块 能不能做一个2个人一起玩的俄罗斯方块,a,s,d,w控制左边,方向键控制右边。如果已经有一个普通的俄罗斯方块源码,用最简单的方法实现,应该怎么改动呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不用改就能用啊,两个人使用同一个键盘,一个操作asdw,一个操作方向键。如果要把窗口分成两半,让两人操作。只需要在新的方块下落时做个位置的判断就可以了。 其实我是初学的,那程序我看了两天了,很简单的,什么功能都没有。我的目的是把它分割成两个窗口,box[4][4]={0};是接受随机值数组 State[ROW+1][COLUMN+2]={0};这是左边窗口数组在数组的列加12就是右边窗口。在绘制图形的时候,我就复制一下: for(i=0;i<4;i++)//画出小盒子 for(j=0;j<4;j++) { if(box[i][j]==1) BitBlt(hdc,(b+j-1)*bm.bmWidth,(a+i)*bm.bmHeight, bm.bmWidth,bm.bmHeight, hdcmem,0,0,SRCCOPY); } for(i=0;i<ROW+1;i++)//画出整个大盒子 for(j=1;j<COLUMN+1;j++) { if(State[i][j]==1) BitBlt(hdc,(j-1)*bm.bmWidth,i*bm.bmHeight,bm.bmWidth,bm.bmHeight,hdcmem,0,0,SRCCOPY); }修改列坐标。我觉得最难的地方是,在消息循环里只能对一个State数组进行判断, while(1) { if(GetMessage( &msg, NULL, 0, 0 ) ==0) break;//如果产生QUIT消息则退出这个死循环 if(!judgeFull(COLUMN))//没有全满 { (!judgeFall(x,y))//有方块了不能下落 { puton(x,y);//把方块放在以前的方块上 puton1(x,y); clearLine(ROW,COLUMN);//判断消行 //InvalidateRect( hwnd,NULL,TRUE); x=0; y=COLUMN/2-1; myrand();myrand1(); }不知道这样改行不行,只要明白消息循环我想我肯定可以自己改好这个程序。 消息循环可以这样:CGame_Canvas* pCGC = new MYGAME(&hWnd);//你自己的游戏类 MYGAME继承CGame_Canvas //消息循环并处理空闲时间 MSG msg; while(true) { if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) { if(!GetMessage(&msg, NULL, 0, 0)) return -1; TranslateMessage(&msg); DispatchMessage(&msg); } else if(gbActive)//全局BOOL { if(!pCGC->Game()) return -1; } else { if(!WaitMessage()) return -1; } } delete pCGC; win32 有什么函数可以重置串口状态? MFC中工具栏上的字怎么弄下划线? 组件服务被禁用是什么原因? 【急】初学ActiveX,不知道写好了怎么用,分全给了 请教一个MSDN中查找MSComm的问题 求教SQL语句 各位高工:请问如何在turbo2.1环境下,生成一个.lib文件,我不知道当.c文件需要.h文件的时候该怎么办 100分求多帧图像融合的超分辨率图像复原(POCS算法源代码) VS2010生成的setup无法安装 我想学VC,请推荐本好书 请教一个visual studio 2008的问题 请教超星图书目录BookContents.dat文件的文件头格式(前28H)问题
只需要在新的方块下落时做个位置的判断就可以了。
for(j=0;j<4;j++)
{
if(box[i][j]==1)
BitBlt(hdc,(b+j-1)*bm.bmWidth,(a+i)*bm.bmHeight, bm.bmWidth,bm.bmHeight, hdcmem,0,0,SRCCOPY);
}
for(i=0;i<ROW+1;i++)//画出整个大盒子
for(j=1;j<COLUMN+1;j++)
{
if(State[i][j]==1)
BitBlt(hdc,(j-1)*bm.bmWidth,i*bm.bmHeight,bm.bmWidth,bm.bmHeight,hdcmem,0,0,SRCCOPY); }
修改列坐标。我觉得最难的地方是,在消息循环里只能对一个State数组进行判断, while(1)
{
if(GetMessage( &msg, NULL, 0, 0 ) ==0)
break;//如果产生QUIT消息则退出这个死循环
if(!judgeFull(COLUMN))//没有全满
{
(!judgeFall(x,y))//有方块了不能下落
{
puton(x,y);//把方块放在以前的方块上
puton1(x,y);
clearLine(ROW,COLUMN);//判断消行
//InvalidateRect( hwnd,NULL,TRUE);
x=0;
y=COLUMN/2-1;
myrand();
myrand1();
}
不知道这样改行不行,只要明白消息循环我想我肯定可以自己改好这个程序。
CGame_Canvas* pCGC = new MYGAME(&hWnd);//你自己的游戏类 MYGAME继承CGame_Canvas
//消息循环并处理空闲时间
MSG msg;
while(true)
{
if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
{
if(!GetMessage(&msg, NULL, 0, 0))
return -1;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else if(gbActive)//全局BOOL
{
if(!pCGC->Game())
return -1;
}
else
{
if(!WaitMessage())
return -1;
}
} delete pCGC;