我罗斯方块最终篇

这个作业属于哪个课程 | 2020年面向对象程序设计

  • | - | -
    这个作业要求在哪里 | 我罗斯方块最终篇
    这个作业的目标 | 1.代码的 git 仓库链接
      | 2.运行截图/运行视频。
      | 3.代码要点
      | 4.收获与心得
      | 5.依然存在的问题
    成员 | 031902335方静怡
     |031902343张妍
    项目地址 | github地址

运行截图




运行视频

代码要点

方块类作为基类,其中初始化方块的种类和变形

int block[7][4][4][4];//block[方块种类][4种变形][][] 
class Tetris {//方块类
public:
	Tetris();
};

游戏类继承于方块类

class Tetris_Game :public Tetris {//游戏类
public:
	void pause_();//暂停函数
	void end1_();//结束函数1
	void end2_();//结束函数2
};

玩家类

两个玩家类其中有部分函数是相同的,有想过合并起来,但是还没有实现出来

    
class Tetris_Player1 :public Tetris {//玩家类1 
public:
	int nx, ny;
	int t0, t1;//暂时保存 
	int blocknow[4][4];
	int blocknext[4][4];
	int turn;
	int type;
	DWORD time_now;
	Tetris_Player1()
	{
		nx = 1; ny = 16;
		time_now = 0;
		for (int i = 4; i <= 29; i++)
		{
			map1[i][2] = 1;
			map1[i][3] = 1;
			map1[i][35] = 1;
			map1[i][36] = 1;
		}
		for (int j = 3; j <= 35; j++)
		{
			map1[29][j] = 1;
		}
	}
	Tetris_Player1(int x, int y) :nx(x), ny(y) {}
	void create_block();
	void remove_block();
	void print_block();
	int readkey();
	void left_block();
	void right_block();
	void turn_block();
	void normalfall_block();
	void speedfall_block();
	int fall_block();
	bool judgetop_block(int xn);
	bool judgebottom(int xn);
	bool judgebottom_block();
	void forecast_block();
	void nexttonow();
	void clear_forecast();
	void run();
	bool judgeleft();
	bool judgeright(); 
	bool detectCollision();
	void markmap();
	void clear_line();
	void gameover();
};
class Tetris_Player2 :public Tetris {//玩家类2 
public:
	int nx, ny;
	int blocknow[4][4];
	int blocknext[4][4];
	int turn;
	int type;
	int t0, t1;
	DWORD time_now;
	Tetris_Player2()
	{
		nx = 1; ny = 87;
		time_now = 0;
		for(int i=4;i<=29;i++)
		{
			map2[i][73]=1;
			map2[i][107]=1;
		 } 
		 for(int j=74;j<=106;j++)
		 {
		 	map2[29][j]=1;
		 }
	}
	Tetris_Player2(int x, int y) :nx(x), ny(y) {}
	void create_block();
	void remove_block();
	void print_block();
	int readkey();
	void left_block();
	void right_block();
	void turn_block();
	void normalfall_block();
	void speedfall_block();
	int fall_block();
	bool judgetop_block(int xn);
	bool judgebottom(int xn);
	bool judgebottom_block();
	void forecast_block();
	void nexttonow();
	void clear_forecast();
	void run();
	bool judgeleft();
	bool judgeright(); 
	bool detectCollision();
	void markmap();
	void clear_line();
	void gameover();
};

渲染类

class Tetris_xuanran :public Tetris {//渲染类
public:
	void Welcome();//进入界面 
	void Setname();//命名
	void SetFrame();//游戏界面
};

存在问题

因为组内两个人都是新手小白级别(非常小白那种),知识储备比较少,经验也少,所以存在的问题很多。就目前没有解决的问题有:

1.键盘操作方面,没有办法做到两个玩家同时操作并且键盘识别也不是特别灵敏(目前是当光标在哪边,另一边就能识别),尝试过很多方法,都没有办法解决,特别识别的灵敏度,调出来识别灵敏,但是同步下降又没法实现,总之好像没办法都顾及到。

2.预测方块与方块变形似乎有些矛盾,导致变形方块的时候会变形成下个方块变形后的形态。

3.没有实现此消彼长,尝试了几种方法,没有办法达到想要的效果。

4.方块在前五行的时候,如果左右移动,会有方块部分印记残留原来的位置。

5.消行的时候暂时没法做到多行一起消除,一次只能消除一行。(存在的问题包括但不限于以上所述,这些问题,今后有能力会继续完善)

6.设计了暂停界面,但是还没有找到接口

收获与心得

这是我们两个新手小白第一次做游戏的设计,虽然我们的我罗斯方块可能完成得不如别的组那么好,但是我们在这次设计中有极大的收获。通过这次的游戏制作,我们深刻感受到了游戏制作的不易。做PTA上的练习题的时候,都是题目给你限定了各种条件,甚至限定了类的内容,做题只需要填充内容就可以了。而做我罗斯方块,需要自己确定框架,界面,自己建立变量,设计每个模块运行的条件,还要通过搜索学习一些不会在做题中碰到的一些操作(比如获取方向键,获取鼠标点击等等)。自己设计游戏是什么都要自己想的。在做的过程中,我们终于能深刻领会老师之前说的会打代码最重要的是会debug,这也是最令我们崩溃的地方,经常会碰到的情况是,一个地方出现bug,需要不断的回到各种函数里,设计不同的辅助输出去找,有时候会一两天都找不到这个bug,甚至是解决了这个bug,另一个bug又产生了,但是每次能成功解决的时候是特别感动的。还有一点,我们体会特别深刻,就是细节的重要性,往往是一个地方打错了就会影响整个代码的运行,导致debug的时候特别困难。


posted @ 2020-06-13 22:08  jasf  阅读(265)  评论(2编辑  收藏  举报