我罗斯最终作业

这个作业属于哪个课程 2020年面向对象程序设计
这个作业要求在哪里 我罗斯最终
作业正文 我罗斯
这个作业的目标 代码的 git 仓库链接,运行截图/运行视频,代码要点收获与心得,依然存在的问题。
参考文献 新手向c++俄罗斯方块
俄罗斯方块界面怎么实现
小组成员 许哲珲031902426
林铭钰031902411
GitHub地址 GitHub地址

运行截图

代码要点

  • 界面及其控制
void make_frame()
{
 HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);  //定义显示器句柄变量
 gotoxy(hOut,FrameX+Frame_width-5,FrameY-2);   //打印游戏名称
 
cout<<"玩家1"<<endl;
 gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+7);  //打印选择菜单
cout<<"**********下一个方块:"<<endl;
 gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+13);
cout<<"**********"<<endl;
 gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+17);
cout<<"↑键:变体"<<endl;
 gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+19);
cout<<"空格:暂停游戏"<<endl;
 gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+15);
cout<<"Esc :退出游戏"<<endl;
 gotoxy(hOut,FrameX,FrameY);       //打印框角并记住该处已有图案
cout<<"╔"<<endl;
 gotoxy(hOut,FrameX+2*Frame_width-2,FrameY);
cout<<"╗"<<endl;
 gotoxy(hOut,FrameX,FrameY+Frame_height);
cout<<"╚"<<endl;
 gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+Frame_height);
cout<<"╝"<<endl;
 a[FrameX][FrameY+Frame_height]=2;     
 a[FrameX+2*Frame_width-2][FrameY+Frame_height]=2;
 for(i=2;i<2*Frame_width-2;i+=2)
 {
  gotoxy(hOut,FrameX+i,FrameY);
 cout<<"═"<<endl;         //打印上横框
 }
 for(i=2;i<2*Frame_width-2;i+=2)
 {
  gotoxy(hOut,FrameX+i,FrameY+Frame_height);
 cout<<"═"<<endl;         //打印下横框
  a[FrameX+i][FrameY+Frame_height]=2;    //记住下横框有图案
 }
 for(i=1;i<Frame_height;i++)
 {
  gotoxy(hOut,FrameX,FrameY+i); 
 cout<<"║"<<endl;         //打印左竖框
  a[FrameX][FrameY+i]=2;       //记住左竖框有图案
 }
 for(i=1;i<Frame_height;i++)
 {
  gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+i); 
 cout<<"║"<<endl;         //打印右竖框
  a[FrameX+2*Frame_width-2][FrameY+i]=2;   //记住右竖框有图案
 }
  //HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);  //定义显示器句柄变量
 gotoxy(hOut,FrameX+Frame_width-5+50,FrameY-2);   //打印游戏名称
}
  • 方块制作
void make_tetris(struct Tetris *tetris)
{
 a[tetris->x][tetris->y]=b[0];    //中心方块位置的图形状态:1-有,0-无
 switch(tetris->flag)            //共6大类,19种类型
 {
  case 1:         //田字方块
   {  
    a[tetris->x][tetris->y-1]=b[1];
    a[tetris->x+2][tetris->y-1]=b[2];
    a[tetris->x+2][tetris->y]=b[3];
    break;
   }
  case 2:         //直线方块:----
   {  
    a[tetris->x-2][tetris->y]=b[1];
    a[tetris->x+2][tetris->y]=b[2];
    a[tetris->x+4][tetris->y]=b[3];
    break;
   }
  case 3:         //直线方块: |
   {  
    a[tetris->x][tetris->y-1]=b[1];
    a[tetris->x][tetris->y-2]=b[2];
    a[tetris->x][tetris->y+1]=b[3];
    break;
   }
  case 4:         //T字方块
   {  
    a[tetris->x-2][tetris->y]=b[1];
    a[tetris->x+2][tetris->y]=b[2];
    a[tetris->x][tetris->y+1]=b[3];
    break;
   }
  case 5:         //T字顺时针转90度方块
   {  
    a[tetris->x][tetris->y-1]=b[1];
    a[tetris->x][tetris->y+1]=b[2];
    a[tetris->x-2][tetris->y]=b[3];
    break;
   }
  case 6:         //T字顺时针转180度方块
   {  
    a[tetris->x][tetris->y-1]=b[1];
    a[tetris->x-2][tetris->y]=b[2];
    a[tetris->x+2][tetris->y]=b[3];
    break;
   }
  case 7:         //T字顺时针转270度方块
   {  
    a[tetris->x][tetris->y-1]=b[1];
    a[tetris->x][tetris->y+1]=b[2];
    a[tetris->x+2][tetris->y]=b[3];
    break;
   }
  case 8:         //Z字方块
   {  
    a[tetris->x][tetris->y+1]=b[1];
    a[tetris->x-2][tetris->y]=b[2];
    a[tetris->x+2][tetris->y+1]=b[3];
    break;
   }
  case 9:         //Z字顺时针转90度方块
   {  
    a[tetris->x][tetris->y-1]=b[1];
    a[tetris->x-2][tetris->y]=b[2];
    a[tetris->x-2][tetris->y+1]=b[3];
    break;
   }
  case 10:        //Z字顺时针转180度方块
   {  
    a[tetris->x][tetris->y-1]=b[1];
    a[tetris->x-2][tetris->y-1]=b[2];
    a[tetris->x+2][tetris->y]=b[3];
    break;
   }
  case 11:        //Z字顺时针转270度方块
   {  
    a[tetris->x][tetris->y+1]=b[1];
    a[tetris->x+2][tetris->y-1]=b[2];
    a[tetris->x+2][tetris->y]=b[3];
    break;
   }
  case 12:        //7字方块
   {  
    a[tetris->x][tetris->y-1]=b[1];
    a[tetris->x][tetris->y+1]=b[2];
    a[tetris->x-2][tetris->y-1]=b[3];
    break;
   }
  case 13:        //7字顺时针转90度方块
   {  
    a[tetris->x-2][tetris->y]=b[1];
    a[tetris->x-2][tetris->y+1]=b[2];
    a[tetris->x+2][tetris->y]=b[3];
    break;
   }
  case 14:        //7字顺时针转180度方块
   {  
    a[tetris->x][tetris->y-1]=b[1];
    a[tetris->x][tetris->y+1]=b[2];
    a[tetris->x+2][tetris->y+1]=b[3];
    break;
   }
  case 15:        //7字顺时针转270度方块
   {
    a[tetris->x-2][tetris->y]=b[1];
    a[tetris->x+2][tetris->y-1]=b[2];
    a[tetris->x+2][tetris->y]=b[3];
    break;
   }
  case 16:        //倒7字方块
   { 
    a[tetris->x][tetris->y+1]=b[1];
    a[tetris->x][tetris->y-1]=b[2];
    a[tetris->x+2][tetris->y-1]=b[3];
    break;
   }
  case 17:        //倒7字顺指针转90度方块
   { 
    a[tetris->x-2][tetris->y]=b[1];
    a[tetris->x-2][tetris->y-1]=b[2];
    a[tetris->x+2][tetris->y]=b[3];
    break;
   }
  case 18:        //倒7字顺时针转180度方块
   {  
    a[tetris->x][tetris->y-1]=b[1];
    a[tetris->x][tetris->y+1]=b[2];
    a[tetris->x-2][tetris->y+1]=b[3];
    break;
   }
  case 19:        //倒7字顺时针转270度方块
   {  
    a[tetris->x-2][tetris->y]=b[1];
    a[tetris->x+2][tetris->y+1]=b[2];
    a[tetris->x+2][tetris->y]=b[3];
    break;
   }
 } 
}

收获心得

  • 学习了用windows.h在控制台运行界面绘图,初步接触了界面的操作,和键盘控制的一些操作,比之前只是做题的方式要多了很多乐趣
  • 开始着手做的时候,完全无从下手,知道要怎样设计,但是具体步骤的实现感觉完全不懂,到后面一点点做一点点学,这个过程我觉得是很宝贵的
  • 学到了开发一个项目的大致步骤,和方法,团队合作,即使一开始你毫无思绪感觉自己怎么可能做的到,但一步步走所有问题就会慢慢解决。

依然存在的问题

  • 问题还是比较多,双人部分几乎还是半成品,双人不同操作的实现还需要完善。
  • 在边界问题上,方框处于边界时,变换形态有时会判断为已经到底部而停止,判断是否下落部分还需要完善。
  • 代码比较乱,没有优化,精简。
posted @ 2020-06-13 20:56  .Hui  阅读(156)  评论(1编辑  收藏  举报