美文网首页
C++开发简易版俄罗斯方框(Window窗口版)

C++开发简易版俄罗斯方框(Window窗口版)

作者: 一只小菜鸟的进阶之路 | 来源:发表于2017-05-04 22:50 被阅读0次

简述

个人理解,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;
}

详细的代码见百度网盘分享链接: https://pan.baidu.com/s/1boDjYFl 密码: cdck

相关文章

网友评论

      本文标题:C++开发简易版俄罗斯方框(Window窗口版)

      本文链接:https://www.haomeiwen.com/subject/znndtxtx.html