开发日记
2020.5.17
作为一名低配c++程序员,我连渲染是什么都不知道,看见别的同学用c++画的示意图,我默默地去网上搜索教程了,查用windows.h绘图出来一些很奇怪的东西,然后去同学博客中的参考资料中找到了easyX,然后花了几个小时进行学习,还好里面自带教程,最后学会了怎么用c++画方框画直线这样的方法。还好俄罗斯方块本身需要的绘图水准不高,两个方框几行字加上方块就完成了。
#include <easyx.h> // 引用图形库头文件
#include <conio.h>
#include<iostream>
#include<cstring>
int main()
{
initgraph(1050, 780); // 创建绘图窗口,大小为 1050x780 像素
TCHAR s1[] = _T("score:");
TCHAR s2[] = _T("Player1");
TCHAR s3[] = _T("Player2");
TCHAR s4[] = _T("Pause");
TCHAR s5[] = _T("下一个方块");
TCHAR s6[] = _T("W/↑:转向");
TCHAR s7[] = _T("S/↓:加速");
TCHAR s8[] = _T("A/←:左移");
TCHAR s9[] = _T("D/←:右移");
settextstyle(40, 10, s1);
outtextxy(30, 110, s1);
outtextxy(880, 110, s1);
outtextxy(30, 30, s2);
outtextxy(880, 30, s3);
outtextxy(25, 300, s5);
outtextxy(880,300, s5);
outtextxy(480, 560, s4);
outtextxy(470, 600, s6);
outtextxy(470, 640, s7);
outtextxy(470, 680, s8);
outtextxy(470, 720, s9);
rectangle(150, 40, 450, 550);
rectangle(550, 40, 850, 550);
rectangle(25, 350, 140, 450);
rectangle(880, 350, 995, 450);
_getch();//停顿
return 0;
}
用这些代码写出了我罗斯方块的示意图!!!这只是游戏的一小步,但却是我的一大步!虽然看起来这些代码写得是有点蠢,以后技术提高会改进的。我在定义字符串时本来想用string的,但和函数库里的不符,用char[]也不行,后来查了好久,找到了TCHAR这个类型。
2020.5.21
我要写方块类,就找了很多俄罗斯方块的资料,看看他们是怎么初始化方块类的,但很多都看不懂,最终我找到了一个我能看懂的,他的做法是先把七个初始方块写出来,然后再写一个旋转的函数旋转他们,但我看着太复杂了,然后灵光一现,写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;}
}
我对坐标的概念还有点乱,用easyX做的主界面,但该怎么把我做的方块放里面呢?这个要思考一下。