zoukankan      html  css  js  c++  java
  • 我罗斯方块第一次汇报

    这个作业属于那个课程 【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;   //记住右竖框有图案
              } 
    }
    
      以上就是本阶段我们组开发我罗斯的进度,接下来继续努力,争取尽快完成!
  • 相关阅读:
    C# int类型的GetProperty的PropertyType返回的是Int32,无法通过typeof(int)或者typeof(Int32)进行比较
    MVC5 Authentication身份认证
    java各个类型判断为空
    table固定列宽,每列超出部分用...代替,鼠标悬停显示全部内容
    web前后台数据交互的四种方式(转)
    List<Map<String,String>>操作(遍历,比较)
    JavaScript实现简单的打印功能
    Expected one result (or null) to be returned by selectOne(), but found: 2
    Eclipse Code Template 设置自动加注释(转)
    highcharts动态获取数据生成图表问题
  • 原文地址:https://www.cnblogs.com/dudu340/p/12934421.html
Copyright © 2011-2022 走看看