我罗斯汇报作业一

这个作业属于哪个课程 2020年面向对象程序设计
这个作业要求在哪里 我罗斯方块汇报(1)
这个作业的目标 1.汇报自己这个阶段的开发进度。(完成了哪几个模块)
2.讲述自己遇到的问题和尝试解决的方法和最后的结果(解决与否)
3.制作一篇开发日记,例子如此,描述自己开发某一个模块的过程。
成员 031902534 陈妍羽
031902541 许雅萍
仓库地址 https://github.com/smallgrape14/RussiaBlock.git
其他参考文献 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.由于界面会显示下一个方块的样式,打印下一个方块时需要将前一个打印出的样式删除。尝试用空格将前一个打印出的覆盖后再打印下一个方块。(未解决)

扫描二维码关注公众号,回复: 11249561 查看本文章

三.我们的开发日记

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;
}

猜你喜欢

转载自www.cnblogs.com/smallgrape/p/12940129.html