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

📄 erluosi.txt

📁 专注于C,C++,VC 饿罗斯方块
💻 TXT
📖 第 1 页 / 共 2 页
字号:

  case 1:
   //▓▓▓▓
   org[0][0]=block[0][0] =4; org[0][1]=block[0][1] =0;
   org[1][0]=block[1][0] =5; org[1][1]=block[1][1] =0;
   org[2][0]=block[2][0] =6; org[2][1]=block[2][1] =0;
   org[3][0]=block[3][0] =7; org[3][1]=block[3][1] =0;
   for(i=0;i<4;i++)
   {
       org2[i][0]=org[i][0]+11;
       org2[i][1]=org[i][1]+5;
   }

   break;


  case 2:
   //▓
   //▓▓
   //   ▓
   org[0][0]=block[0][0] =5; org[0][1]=block[0][1] =0;
   org[1][0]=block[1][0] =5; org[1][1]=block[1][1] =1;
   org[2][0]=block[2][0] =6; org[2][1]=block[2][1] =1;
   org[3][0]=block[3][0] =6; org[3][1]=block[3][1] =2;
   for(i=0;i<4;i++)
   {
       org2[i][0]=org[i][0]+11;
       org2[i][1]=org[i][1]+5;
   }

   break;

  case 3:
   //   ▓
   //▓▓
   //▓
   org[0][0]=block[0][0] =6; org[0][1]=block[0][1] =0;
   org[1][0]=block[1][0] =6; org[1][1]=block[1][1] =1;
   org[2][0]=block[2][0] =5; org[2][1]=block[2][1] =1;
   org[3][0]=block[3][0] =5; org[3][1]=block[3][1] =2;
   for(i=0;i<4;i++)
   {
       org2[i][0]=org[i][0]+11;
       org2[i][1]=org[i][1]+5;
   }

   break;
   
  case 4:
   //▓
   //▓
   //▓▓
   org[0][0]=block[0][0] =5; org[0][1]=block[0][1] =0;
   org[1][0]=block[1][0] =5; org[1][1]=block[1][1] =1;
   org[2][0]=block[2][0] =5; org[2][1]=block[2][1] =2;
   org[3][0]=block[3][0] =6; org[3][1]=block[3][1] =2;
   for(i=0;i<4;i++)
   {
       org2[i][0]=org[i][0]+11;
       org2[i][1]=org[i][1]+5;
   }

   break;

  case 5:
   //   ▓
   //   ▓
   //▓▓
   org[0][0]=block[0][0] =5; org[0][1]=block[0][1] =0;
   org[1][0]=block[1][0] =5; org[1][1]=block[1][1] =1;
   org[2][0]=block[2][0] =5; org[2][1]=block[2][1] =2;
   org[3][0]=block[3][0] =4; org[3][1]=block[3][1] =2;
   for(i=0;i<4;i++)
   {
       org2[i][0]=org[i][0]+11;
       org2[i][1]=org[i][1]+5;
   }

   break;
  case 6:
   //   ▓
   //▓▓▓
   org[0][0]=block[0][0] =5; org[0][1]=block[0][1] =0;
   org[1][0]=block[1][0] =4; org[1][1]=block[1][1] =1;
   org[2][0]=block[2][0] =5; org[2][1]=block[2][1] =1;
   org[3][0]=block[3][0] =6; org[3][1]=block[3][1] =1;
   for(i=0;i<4;i++)
   {
       org2[i][0]=org[i][0]+11;
       org2[i][1]=org[i][1]+5;
   }

          SendMessage (hwnd, MS_NEXTBLOCK, 0, 0);
   break;

  default:
   
   SendMessage (hwnd, MS_NEWBLOCK, 0, 0);
   SendMessage (hwnd, MS_NEXTBLOCK, 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] ])
   { 
    SendMessage (hwnd, MS_NEXTBLOCK, 0, 0);

    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, "游戏结束,即将退出 !\n四川大学软件学院", "退出", 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_NEXTBLOCK:

        hdc=GetDC(hwnd);   
  Cover(hdc,org2);
//   DrawBlock(hdc,org2);


  return 0;

 // 清除当前【方块】,并在新的位置重新绘制【方块】
 case MS_DRAW:
 
  hdc =GetDC (hwnd);
  Cover (hdc, org);

  DrawBlock(hdc,org2);

  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);
  DrawGamePlace(hdc);
  TextOut(hdc,15*CELL,12*CELL,"Score",lstrlen("Score"));
   TextOut(hdc,15*CELL,13*CELL,"i",lstrlen("i"));
  TextOut(hdc,15*CELL,15*CELL,"Level",lstrlen("Level"));
  TextOut(hdc,15*CELL-5,19*CELL,"钱彦江",lstrlen("钱彦江"));
  hpen =CreatePen (PS_SOLID,1,RGB(0,255,0));
  SelectObject (hdc,hpen);
  for (i=top; i    for(j=1; j<=W-8; 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);
}

 /*************************-----结------束------*******************************/

⌨️ 快捷键说明

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