能不能做一个2个人一起玩的俄罗斯方块,a,s,d,w控制左边,方向键控制右边。如果已经有一个普通的俄罗斯方块源码,用最简单的方法实现,应该怎么改动呢?

解决方案 »

  1.   

    不用改就能用啊,两个人使用同一个键盘,一个操作asdw,一个操作方向键。如果要把窗口分成两半,让两人操作。
    只需要在新的方块下落时做个位置的判断就可以了。
      

  2.   

    其实我是初学的,那程序我看了两天了,很简单的,什么功能都没有。我的目的是把它分割成两个窗口,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();
    }
    不知道这样改行不行,只要明白消息循环我想我肯定可以自己改好这个程序。
      

  3.   

    消息循环可以这样:
    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;