zoukankan      html  css  js  c++  java
  • 我罗斯汇报作业一

    这个作业属于哪个课程2020年面向对象程序设计
    这个作业要求在哪里 我罗斯方块汇报(1)
    这个作业的目标 1.汇报自己这个阶段的开发进度。(完成了哪几个模块)
    2.讲述自己遇到的问题和尝试解决的方法和最后的结果(解决与否)
    3.制作一篇开发日记,例子如此,描述自己开发某一个模块的过程。
    成员 031902534 陈妍羽
    031902541 许雅萍
    仓库地址 https://github.com/smallgrape14/RussiaBlock/tree/master/r2
    其他参考文献 https://blog.csdn.net/cmm0401/article/details/54599083
    https://blog.csdn.net/viafcccy/article/details/84262393
    https://blog.csdn.net/qian_su/article/details/96157395

    一.汇报这个阶段的开发进度。(完成了哪几个模块

    1. 在玩家类中打印初始页面及边框的函数PrintScreen,已初步完成。
    2.在玩家类中随机生成方块的函数randblock,未完全完成。
    3. 在方块类中设计方块打印的函数printblock,未完全完成。
    4. 完成对七种方块形状及它们各自旋转后的形状的定义。

    二.讲述遇到的问题和尝试解决的方法和最后的结果(解决与否)

    1. 在存在两个玩家对象的情况下,不太清楚如何同时进行输入,以及打印时光标的移动如何切换。(努力解决中,还未实现)
    2.一些函数相互需要调用,且不同类所需的部分有重复,很难分清需要放在哪个类。例如,在随机生成方块时,需要由于两个玩家的速度可能不同,需要由玩家来调用函数,但是同时要将方块的形状、颜色等传给对象。尝试将一个类设为其他的友元,但是未能实现,在返回参数时有时需要传递多个参数,因此又考虑在一个类中增加另一个类的对象。(未解决)
    3.由于界面会显示下一个方块的样式,打印下一个方块时需要将前一个打印出的样式删除。尝试用空格将前一个打印出的覆盖后再打印下一个方块。(未解决)

    三.我们的开发日记

    2020.5.13

    今天,讨论了一下分工,各自去了解些相关资料,学习一些很必要的做游戏的知识。制定了下任务的目标,打算先从游戏画面开始做起,首先是了解了一些设计游戏画面的一些必要的函数。

    2020.5.14

    今天,主要是综合两个人学到的一些知识,收集到的一些资料,交流讨论目前的一些亟待解决的问题。

    2020.5.15

    今天,鉴于有些难度比较高的问题,还未解决,打算先试试水,用所掌握到的知识,先着手实现游戏界面的设计。

    2020.5.16

    今天,制定了目前的首要任务,先把window.h库中的有关函数,和目前所收集的参考资料,运用于游戏界面的设计。

    2020.5.17

    由于,我们的指导方针是先努力实现类中的一系列函数,通过主函数的内容来补充一些必要的数据成员,之后再考虑,类与类之间的 关系,进行各种优化。

    所以,今天,是把学习到的windows. h里的一些函数,比如设置方块字体的颜色,移动光标实现起来。

    2020.5.18

    由于,正常不断的输入,输出,屏幕是会移动的,并不会固定于一个位置,而不发生滑动,所以,查询资料,用了SetConsoleScreenBufferSize();函数(更改指定的控制台屏幕缓冲区的大小的函数),还有基本把两个玩家的界面都设计出来了,并在主函数中把它实现了。

    2020.5.19

    昨天,虽然把整个我罗斯方块中的最简单的部分完成了,但是因为考虑到一些因素,我们一致决定,想把设计游戏界面的工作,扔到玩家类中,在我们看来,是更好一些的,

    虽说,还没实现什么,看过很多的俄罗斯,有好多都没有颜色,灰扑扑的,本来我们还以为,这些给俄罗斯方块上个色很困难,实际上今天,去学习了一番,发现,还挺好实现的,就说说这个函数

    SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);

    我们原先还以为,它是可以实现随机的上色,一会蓝的,一会绿的,原来只是我们想多了,它是把两个颜色叠加在一起,原来如此。

    2020.5.21

    今天,是实现方块的一些函数的一天,方块的形状有七种,用七个4x4的二位数组实现;随机生成方块的函数,用到了掷骰子的函数,实现随机生成哪一种方块,并且要实现打印方块的函数。

    2020.5.22

    今天,讨论了好多东西,就哪个函数要放在哪个类中,要实现玩家类的对象在游戏时,要随机生成某一方块,之类的问题,又加了一些数据成员,修改了一些函数。

    结果:

    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    void SetPos(HANDLE hOut,int x, int y);//移动光标
    void initialWindow(HANDLE hOut);//初始界面 
    
    void SetPos(HANDLE hOut,int x, int y)//移动光标
    {
        COORD pos={x,y};
        SetConsoleCursorPosition(hOut,pos);
    }
    void initialWindow(HANDLE hOut)//初始界面 
    {
        SetConsoleTitle("俄罗斯方块");
        COORD size = { 1000, 30 };
        SetConsoleScreenBufferSize(hOut, size);
        SMALL_RECT rc = { 0, 0, 99, 30 };
        SetConsoleWindowInfo(hOut, true, &rc);
        CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
        SetConsoleCursorInfo(hOut, &cursor_info);
    }
    
    
    class Block
    {
    private:
        int positionX[4], positionY[4];//方块的坐标
        bool check;//检测方块是否结束进程 
        int val;//方块下落速度
    public:
        void roundBlock();//随机生成方块
        bool collisionDetection();//检测是否碰撞到边框 
        void myLeft();//左移
        void myRight();//右移
        void myUp();//顺时针旋转90度
        int myDown();//加速下落
    
    };
    class Player
    {
        private:
            int x,y,num,score,newblock[4][4],nextblock[4][4];
            Block block;
        public:
            Player(int n,const int x0,int y0)
            {
                num=n;
                x=x0;
                y=y0;
                score=0;
            }
            void randBlock(HANDLE hOut);
            void printBlock(HANDLE hOut, int block[4][4]);//打印 
            void PrintScreen();//打印窗口
    };
    
    void Player::PrintScreen()//打印窗口
    {
        SetPos(hOut, x+8, y+23);
        cout<<"Player"<<num;
        SetPos(hOut, x, y);
        for (int i = 0; i < 20; i++)
        {
            SetPos(hOut, x, y+i);
            cout << "■                    ■                    ■" << endl;
        } 
        SetPos(hOut, x+0, y+20);
        cout << "■■■■■■■■■■■■";
        SetPos(hOut, x+24, y);
        cout << "☆☆☆☆☆☆☆☆☆☆";
        SetPos(hOut, x+24, y+20);
        cout << "☆☆☆☆☆☆☆☆☆☆■";
        SetPos(hOut, x+26, y+1);
        cout << "分    数:      ";
        
        SetPos(hOut, x+26, y+4);
        cout << "下一方块:";
    } 
    void Player::printBlock(HANDLE hOut, int block[4][4])
    {
        switch (block[0][0])
        {
        case 1: 
            SetConsoleTextAttribute(hOut, FOREGROUND_GREEN);
            break;
        case 2:
            SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
            break;
        case 3: 
            SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
            break;
        case 4:
            SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
            break;
        case 5:
            SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
            break;
        case 6:
            SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_INTENSITY);
            break;
        case 7:
            SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_INTENSITY);
            break;
        default:
            break;
        }
        for (int i = 0; i < 4; ++i)
        {
           if (i+x+5>= 0)
            {
                for (int j = 0; j < 4; ++j)
                {
                    if (block[i][j] == 1)
                    {
    
                        SetPos(hOut, 2*(x/2+15+j), y+5+i);
                        cout << "";
                    }
                }
            }
        }
    }
    加上主函数用于测试:
    #include <iostream>
    #include <windows.h>
    #include<string>
    #include<ctime>
    #include<cstdlib>
    #include<conio.h>
    #define x1 0
    #define y1 0
    #define x2 48
    #define y2 0
    using namespace std;
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    void SetPos(HANDLE hOut,int x, int y);//移动光标
    void initialWindow(HANDLE hOut);//初始界面 
    class Block
    {
    private:
        int positionX[4], positionY[4];//方块的坐标
        bool check;//检测方块是否结束进程 
        int val;//方块下落速度
    public:
        void roundBlock();//随机生成方块
        bool collisionDetection();//检测是否碰撞到边框 
        void myLeft();//左移
        void myRight();//右移
        void myUp();//顺时针旋转90度
        int myDown();//加速下落
    
    };
    
    
    class Player
    {
        private:
            int x,y,num,score,newblock[4][4],nextblock[4][4];
            Block block;
        public:
            Player(int n,const int x0,int y0)
            {
                num=n;
                x=x0;
                y=y0;
                score=0;
            }
            void randBlock(HANDLE hOut);
            void printBlock(HANDLE hOut, int block[4][4]);//打印 
            void PrintScreen();//打印窗口
    };
    int main()
    {
     int n0;
     initialWindow(hOut);
    // SetConsoleTextAttribute(hOut, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
     Player player1(1,x1,y1),player2(2,x2,y2);
     player1.PrintScreen();
     player2.PrintScreen();
     player1.randBlock(hOut);
     player2.randBlock(hOut);
     while(1)
     {
      
     }
     return 0;
    }
  • 相关阅读:
    ThreadPoolExecutor线程池参数设置技巧
    函数式接口
    Mac下进入MySQL命令行
    Java8 特性
    Java8 :: 用法 (JDK8 双冒号用法)
    事务传播
    新版IDEA配置tomcat教程(2018)
    Java8 Map的compute()方法
    Spring 普通类与工具类调用service层
    简单工厂(三)——JDK源码中的简单工厂
  • 原文地址:https://www.cnblogs.com/smallgrape/p/12940129.html
Copyright © 2011-2022 走看看