简述
个人理解,C++去掉面向对象知识后就是C语言,在学习C++时,如果有C语言基础,则在上手C++时是很快的。最近在学习C++,由于之前学过C语言,由于复习C语言,就开发了一款简易版的俄罗斯方框,没有界面运行与window黑框程序。
功能叙述
常规的左移、右移、向下快速移动以及翻转变形。
左移:键盘左键(键值——75)
右移:键盘右键(键值——77)
向下:键盘下键(键值——80)
翻转:键盘上键(键值——72)
简图
开始图形
start.jpg
堆积图形
common.png
消除图形
clear.png
使用方法
void gotoPosition(HANDLE hOut, int x, int y);
void traversalArrayBlock(HANDLE hOutput);
void initialSaveSpaceValue();
void traversalArray();
void assignValue(int iValue[4][4]);
void produceRandBlock();
void movePosition(int arrayBlock[4][4], int iDown_x, int iDown_y);
void clearBlock(int iDown_x, int iDown_y);
bool repeatDetection(int arayShowBlock[4][4], int iPos_x, int iPos_y);
bool borderDetection(int iDirection, int iPos_x);
void afterStopReset(int iPos_x, int iPos_y);
void changeCurentShape(int x, int y);
void removeRaw();
bool checkGameOver();
void gameOver(HANDLE hOut);
main函数
int main(){
initial:
HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
initialSaveSpaceValue();
bool bIsStop = true;
int iMove_x = 0, iMove_y = 0;
int iTimerCount = 0;
while (true){
if (bIsStop){
iMove_x = -2, iMove_y = 4;
bIsStop = false;
produceRandBlock();
movePosition(g_middleData, iMove_x, iMove_y);//初始化第一个方块位置。
traversalArrayBlock(hOutput);
}
iTimerCount++;
Sleep(100);
if (iTimerCount == 10){
iTimerCount = 0;
clearBlock(iMove_x, iMove_y);
iMove_x++;
if (repeatDetection(g_middleData,iMove_x,iMove_y)){
afterStopReset(iMove_x-1, iMove_y);
removeRaw();
if (checkGameOver()){
gameOver(hOutput);
goto initial;
}
bIsStop = true;
}
else{
movePosition(g_middleData, iMove_x, iMove_y);
traversalArrayBlock(hOutput);
}
}
if (_kbhit()){
int key = _getch();
switch (key){
case 72: //up
changeCurentShape(iMove_x,iMove_y);
break;
case 75://left
if (repeatDetection(g_middleData, iMove_x, iMove_y)){
if (borderDetection(0, iMove_x))
break;
}
clearBlock(iMove_x, iMove_y);
iMove_y--;
movePosition(g_middleData, iMove_x, iMove_y);
traversalArrayBlock(hOutput);
break;
case 77://right
if (repeatDetection(g_middleData, iMove_x, iMove_y)){
if (borderDetection(1, iMove_x)){
break;
}
}
clearBlock(iMove_x, iMove_y);
iMove_y++;
movePosition(g_middleData, iMove_x, iMove_y);
traversalArrayBlock(hOutput);
break;
case 80://down
clearBlock(iMove_x, iMove_y);
iMove_x++;
if (repeatDetection(g_middleData,iMove_x,iMove_y)){
afterStopReset(iMove_x-1, iMove_y);
removeRaw();
if (checkGameOver()){
gameOver(hOutput);
goto initial;
}
bIsStop = true;
break;
}
movePosition(g_middleData, iMove_x, iMove_y);
traversalArrayBlock(hOutput);
break;
default:break;
}
}
}
return 0;
}