我罗斯方块汇报(1)
作业描述 | 详情 |
---|---|
这个作业属于哪个课程 | 2020年面向对象程序设计 |
这个作业的要求在哪里 | 我罗斯方块汇报(1) |
这个作业的目标 | 汇报自己这个阶段的开发进度。 |
作业正文 | 如下 |
参考资料 | 基于C实现双人俄罗斯方块 如何做一个超低配俄罗斯方块 |
项目地址 | Github |
小组成员 | 学号 |
卢浩玮 | 031902511 |
侯钦凯 | 031902505 |
开发进度
方块类(Block)除了碰撞测试外基本完成;
渲染类(render)还在学习中,目前略有成效,经过学习下一次应该就可以完成了;
游戏类(game)大致实现计时器功能,仍需要完善。
玩家类(player)还在学习中。
(详见GitHub)
开发难题
难题:方块初始化后不知道该做什么才能让地图有方块的坐标。
解决方法:只给方块最初始的坐标,然后左移右移下移都对该坐标进行改变,这个坐标的值为1,在地图中显示为方块,这样就解决了。(感觉很简单,但是做这个的人想了好久才想出来的。。。)
int Block_1form_1[8]={1,0,1,1,2,0,2,1};//分为4行4列,左行右列;00 01 10 11
int Block_2form_1[8]={1,1,2,1,2,2,2,3};//01 11 12 13
int Block_2form_2[8]={1,1,1,2,2,1,3,1};//
int Block_2form_3[8]={1,2,2,0,2,1,2,2};//
int Block_2form_4[8]={3,1,3,2,2,2,1,2};//
int Block_3form_1[8]={0,2,1,0,1,1,1,2};//02 10 11 12
int Block_3form_2[8]={0,1,1,1,2,1,2,2};//
int Block_3form_3[8]={1,1,2,1,2,2,2,3};//
int Block_3form_4[8]={1,1,1,2,2,2,3,2};//
int Block_4form_1[8]={1,1,2,0,2,1,2,2};//11 20 21 22
int Block_4form_2[8]={1,1,2,1,3,1,2,2};//
int Block_4form_3[8]={2,0,2,1,2,2,3,1};//
int Block_4form_4[8]={1,1,1,2,1,3,0,2};//
int Block_5form_1[8]={2,0,2,1,1,1,1,2};//20 21 11 12
int Block_5form_2[8]={0,0,1,0,1,1,2,1};//
int Block_6form_1[8]={0,1,0,2,1,0,1,1};//21 22 10 11
int Block_6form_2[8]={0,1,1,1,2,0,2,1};//
int Block_7form_1[8]={1,0,1,1,1,2,1,3};//10 11 12 13
int Block_7form_2[8]={0,1,1,1,2,1,3,1};//
void block::start()
{
memcpy(Block_now,Block_next,8*sizeof(int));
for(int i=0;i<4;i++) {map[Block_now[2*i+1]][Block_now[2*i]]=1;}//下落中在地图表示为1
}
难题:旋转方块这个函数难度有点大,也很复杂。
解决方法:不对7个初始的方块进行旋转,直接写19个初始方块,旋转变成旋转后的方块就好了。
void block::TurnBlock()//方块转变方向
{
switch(Block_form)
{
case 0: memcpy(Block_now,Block_1form_1,8*sizeof(int));break;
case 1: memcpy(Block_now,Block_2form_2,8*sizeof(int));break;
case 2: memcpy(Block_now,Block_2form_3,8*sizeof(int));break;
case 3: memcpy(Block_now,Block_2form_4,8*sizeof(int));break;
case 4: memcpy(Block_now,Block_2form_1,8*sizeof(int));break;
case 5: memcpy(Block_now,Block_3form_2,8*sizeof(int));break;
case 6: memcpy(Block_now,Block_3form_3,8*sizeof(int));break;
case 7: memcpy(Block_now,Block_3form_4,8*sizeof(int));break;
case 8: memcpy(Block_now,Block_3form_1,8*sizeof(int));break;
case 9: memcpy(Block_now,Block_4form_2,8*sizeof(int));break;
case 10: memcpy(Block_now,Block_4form_3,8*sizeof(int));break;
case 11: memcpy(Block_now,Block_4form_4,8*sizeof(int));break;
case 12: memcpy(Block_now,Block_4form_1,8*sizeof(int));break;
case 13: memcpy(Block_now,Block_5form_2,8*sizeof(int));break;
case 14: memcpy(Block_now,Block_5form_1,8*sizeof(int));break;
case 15: memcpy(Block_now,Block_6form_2,8*sizeof(int));break;
case 16: memcpy(Block_now,Block_6form_1,8*sizeof(int));break;
case 17: memcpy(Block_now,Block_7form_2,8*sizeof(int));break;
case 18: memcpy(Block_now,Block_7form_1,8*sizeof(int));break;
}
for(int i=0;i<4;i++) {map[Block_now[2*i+1]+y][Block_now[2*i]+x]=1;}
}
难题:不会用c++作图。
解决方法:在网上找到了easyX,里面还附带教程。
难题:用easyX做的主界面,但该怎么把我做的方块放里面呢?
解决方法:未解决。
难题:实时获取游戏开始后的运行时间。
解决方法:未解决。