簡(jiǎn)述
個(gè)人理解,C++去掉面向?qū)ο笾R(shí)后就是C語(yǔ)言,在學(xué)習(xí)C++時(shí),如果有C語(yǔ)言基礎(chǔ),則在上手C++時(shí)是很快的。最近在學(xué)習(xí)C++,由于之前學(xué)過(guò)C語(yǔ)言,由于復(fù)習(xí)C語(yǔ)言,就開(kāi)發(fā)了一款簡(jiǎn)易版的俄羅斯方框,沒(méi)有界面運(yùn)行與window黑框程序。
功能敘述
常規(guī)的左移、右移、向下快速移動(dòng)以及翻轉(zhuǎn)變形。
左移:鍵盤左鍵(鍵值——75)
右移:鍵盤右鍵(鍵值——77)
向下:鍵盤下鍵(鍵值——80)
翻轉(zhuǎn):鍵盤上鍵(鍵值——72)
簡(jiǎn)圖
開(kāi)始圖形

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函數(shù)
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);//初始化第一個(gè)方塊位置。
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;
}