• 我罗斯方块第一次汇报


    这个作业属于那个课程 【2020面向对象程序设计张栋班】(https://edu.cnblogs.com/campus/fzu/2020OOP/homework/10729)
    这个作业的目标 本阶段作业进度汇报以及提出遇到的问题
    作业正文 【我罗斯方块第一次汇报】(https://www.cnblogs.com/dudu340/p/12934421.html)
    参考文献 【C++ 比较完美的俄罗斯方块(VS2017)】(https://blog.csdn.net/qq_35294564/article/details/82762737)
    项目地址 https://github.com/xanxusEX/Tetris
    小组成员 031902102 方文昱 031902142詹珊

    目前进度:

    在我罗斯方块的开发中,我们组创建了Block(方块类)、Player(玩家类)、Game_window(游戏类)以及Render(渲染类)。
    到目前为止,我们组主要是做了渲染类的部分,进行了界面的设计。

    因为之前从来没有自己去设计过一个项目,也没有写过这么长的代码,因此,我们在做我罗斯的开发中主要采用的就是分块去写函数,一小部分一小部分的去搞定,从而在最后形成一个完整的游戏。
    1)如何让光标移动到指定位置从而形成不同的方块类型:
    对此,我们可以在渲染类中定义一个gotoxy的成员函数,利用windows.h下的SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos)函数,posCOORD型变量,利用它来改变光标的横纵坐标。

    void Render::gotoxy(HANDLE hOut, int x, int y)
    {
     COORD pos;
     pos.X = x;  //横坐标
     pos.Y = y;  //纵坐标
     SetConsoleCursorPosition(hOut, pos);
    }
    

    2)游戏界面中边框的实现:
    首先可以利用HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE),则将hout定义成了一个句柄变量,将其赋初值为GetStdHandle(STD_OUTPUT_HANDLE),即标准输出句柄。
    接下来还是要利用上述定义的gotoxy函数,利用横纵坐标的变化,从而实现一整个边框的形成。以下为该部分的代码:

    void Render::set_frame(int x0,int y0 )
    {
    	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);  //定义显示器句柄变量
    	if(y0==F_Y0)
                   {
        	            gotoxy(hOut,x0+W_SINGLE-5,y0-2);   //打印游戏名称
                        cout<<"我罗斯方块"<<endl;
    	      }
    	gotoxy(hOut,x0+2*W_SINGLE+3,y0+3);
    	if(y0==F_Y0)
    	      {
    		    cout<<"P1"<<endl;
    		    gotoxy(hOut,x0+2*W_SINGLE+3,y0+5);
    		    cout<<"SCORE :  "<<p.score<<endl;
    	      }
    	else
    	      {
    		   cout<<"P2"<<endl;
    		   gotoxy(hOut,x0+2*W_SINGLE+3,y0+5);
    		   cout<<"SCORE :  "<<p.score<<endl;
    	      }
        gotoxy(hOut,x0+2*W_SINGLE+3,y0+7);  //打印选择菜单
        cout<<"**********下一个方块:"<<endl;
        gotoxy(hOut,x0+2*W_SINGLE+3,y0+13);
        cout<<"**********"<<endl;
        gotoxy(hOut,x0+2*W_SINGLE+3,y0+17);
        if(y0==F_Y0) cout<<"↑键:变体"<<endl;
        else cout<<"W 键:变体"<<endl;
        gotoxy(hOut,x0+2*W_SINGLE+3,y0+19);
        cout<<"空格:暂停游戏"<<endl;
        gotoxy(hOut,x0+2*W_SINGLE+3,y0+15);
        cout<<"Esc :退出游戏"<<endl;
        gotoxy(hOut,x0,y0);       //打印框角并记住该处已有图案
        cout<<"╔"<<endl;
        gotoxy(hOut,x0+2*W_SINGLE-2,y0);
        cout<<"╗"<<endl;
        gotoxy(hOut,x0,y0+H_SINGLE); 
        cout<<"╚"<<endl;
        gotoxy(hOut,x0+2*W_SINGLE-2,y0+H_SINGLE);
        cout<<"╝"<<endl;
        a[x0][y0+H_SINGLE]=2;     
        a[x0+2*W_SINGLE-2][y0+H_SINGLE]=2;
        for(i=2;i<2*W_SINGLE-2;i+=2)
              {
                  gotoxy(hOut,x0+i,y0);
                 cout<<"═"<<endl;         //打印上横框
              }
        for(i=2;i<2*W_SINGLE-2;i+=2)
              {
                  gotoxy(hOut,x0+i,y0+H_SINGLE);
                  cout<<"═"<<endl;         //打印下横框
                  a[x0+i][y0+H_SINGLE]=2;    //记住下横框有图案
              }
       for(i=1;i<H_SINGLE;i++)
              {
                  gotoxy(hOut,x0,y0+i); 
                  cout<<"║"<<endl;         //打印左竖框
                  a[x0][y0+i]=2;       //记住左竖框有图案
              }
       for(i=1;i<H_SINGLE;i++)
              {
                 gotoxy(hOut,x0+2*W_SINGLE-2,y0+i); 
                 cout<<"║"<<endl;         //打印右竖框
                 a[x0+2*W_SINGLE-2][y0+i]=2;   //记住右竖框有图案
              } 
    }
    
      以上就是本阶段我们组开发我罗斯的进度,接下来继续努力,争取尽快完成!
  • 相关阅读:
    VS2010 枚举注释任务
    osg例子中文翻译,半机翻
    怎么愉快地添加目标位置?
    变更路线节点。妈妈,我的强迫症有救啦!
    测试必备工具之抓包神器 Charles 如何抓取 https 数据包?
    测试必备工具之最强抓包神器 Charles,你会了么?
    ‘员工拒绝加班被判赔偿公司 1.8 万元’,作为测试猿你怕了么?
    全网最全测试点总结:N95 口罩应该如何测试?
    测试角度:如何看待三星大量手机系统崩溃并数据丢失事件?
    男生 vs 女生,谁更加适合做软件测试?
  • 原文地址:https://www.cnblogs.com/dudu340/p/12934421.html
Copyright © 2020-2023  润新知