zoukankan      html  css  js  c++  java
  • 2048控制台版本

    #include <iostream>  
    #include <windows.h>  
    #include <ctime>  
    using namespace std;  
     
    int const ROW = 4;  
    int const COL = 4;  
    int game[ROW][COL] = {0};  
     
    //上下左右  
    int const UP = 1;  
    int const DOWN = 2;  
    int const LEFT = 3;  
    int const RIGHT = 4;  
     
    //游戏所处的状态  
    int const GAME_OVER = 1;  
    int const GAME_WIN = 2;  
    int const GAME_CONTINUE = 3;  
      
    enum GameNum  
    {  
        Game_2 = 2,  
        Game_4 = 4,  
        Game_8 = 8,  
        Game_16 = 16,  
        Game_32 = 32,  
        Game_64 = 64,  
        Game_128 = 128,  
        Game_256 = 256,  
        Game_512 = 512,  
        Game_1024 = 1024,  
        Game_2048 = 2048,  
    };  
      
    //打印所得的数组  
    void Print()  
    {  
        system("cls");  
        cout << "*****************  2048 控 制 台 版  ******************" << endl;  
        cout << "*****************  By baihe (samsung) ******************" << endl << endl;  
        for (int i = 0; i < ROW; ++i)  
        {  
            cout << "---------------------------------"<< endl;  
            for (int j = 0; j < COL; ++j)  
            {  
                if (game[i][j] == 0)  
                {  
                    cout <<"|   	";  
                }  
                else   
                {  
                    cout <<"|   " << game[i][j] << "	";  
                }  
            }  
            cout << "|" << endl;  
        }  
        cout << "---------------------------------"<< endl;  
    }  
        
    bool CreateNumber()  
    {  
        int x = -1;  
        int y = -1;  
        int times = 0;  
        int maxTimes = ROW * COL;  
        //三分之二的概率生成2,三分之一的概率生成4  
        int whitch = rand() % 3;  
        do   
        {  
            x = rand() % ROW;  
            y = rand() % COL;  
            ++times;  
        } while (game[x][y] != 0 && times <= maxTimes);  
      
        //说明格子已经满了  
        if(times >= maxTimes)  
        {  
            return false;  
        }  
        else  
        {  
            GameNum num;  
            if(whitch == 0)  
            {  
                num = Game_4;  
            }  
            else if(whitch)  
            {  
                num = Game_2;  
            }  
            game[x][y] = num;  
        }  
      
        return true;  
    }  
      
    void Process(int direction)  
    {  
        switch (direction)  
        {  
        case UP:  
            //最上面一行不动  
            for(int row = 1; row < ROW; ++row)  
            {  
                for(int crow = row; crow >= 1; --crow)  
                {  
                    for(int col = 0; col < COL; ++col)  
                    {  
                        //上一个格子为空  
                        if(game[crow-1][col] == 0)  
                        {  
                            game[crow-1][col] = game[crow][col];  
                            game[crow][col] = 0;  
                        }  
                        else   
                        {  
                            //合并  
                            if(game[crow-1][col] == game[crow][col])  
                            {  
                                game[crow - 1][col] *= 2;  
                                game[crow][col] = 0;  
                            }  
      
                        }  
                    }  
                }  
            }  
            break;  
        case DOWN:  
            //最下面一行不动  
            for(int row = ROW - 2; row >= 0; --row)  
            {  
                for(int crow = row; crow < ROW - 1; ++crow)  
                {  
                    for(int col = 0; col < COL; ++col)  
                    {  
                        //上一个格子为空  
                        if(game[crow + 1][col] == 0)  
                        {  
                            game[crow + 1][col] = game[crow][col];  
                            game[crow][col] = 0;  
                        }  
                        else   
                        {  
                            //合并  
                            if(game[crow + 1][col] == game[crow][col])  
                            {  
                                game[crow + 1][col] *= 2;  
                                game[crow][col] = 0;  
                            }  
      
                        }  
                    }  
                }  
            }  
            break;  
        case LEFT:  
            //最左边一列不动  
            for(int  col = 1; col < COL; ++col)  
            {  
                for(int ccol = col; ccol >= 1; --ccol)  
                {  
                    for(int row = 0; row < ROW; ++row)  
                    {  
                        //上一个格子为空  
                        if(game[row][ccol-1] == 0)  
                        {  
                            game[row][ccol - 1] = game[row][ccol];  
                            game[row][ccol] = 0;  
                        }  
                        else   
                        {  
                            //合并  
                           if(game[row][ccol - 1] == game[row][ccol])  
                            {  
                               game[row][ccol - 1] *= 2;  
                                game[row][ccol] = 0;  
                           }  
      
                        }  
                   }  
                }  
           }  
            break;  
        case RIGHT:  
            //最右边一列不动  
            for(int  col = COL - 2; col >= 0; --col)  
            {  
                for(int ccol = col; ccol <= COL - 2; ++ccol)  
                {  
                    for(int row = 0; row < ROW; ++row)  
                    {  
                        //上一个格子为空  
                       if(game[row][ccol + 1] == 0)  
                       {  
                           game[row][ccol + 1] = game[row][ccol];  
                          game[row][ccol] = 0;  
                      }  
                        else   
                       {  
                           //合并  
                           if(game[row][ccol + 1] == game[row][ccol])  
                           {  
                              game[row][ccol + 1] *= 2;  
                                game[row][ccol] = 0;  
                          }  
                          }               }             }  
           }  
            break;  
        }  
     
    }  
      
    //处理输入输出,返回上下左右  
    int Input()  
    {  
        //读取上下左右四个方向键  
        int upArrow = 0;  
        int downArrow = 0;  
        int leftArrow = 0;  
       int rightArrow = 0;  
        int direction = 0;  
       while (true)  
        {  
            upArrow = GetAsyncKeyState(VK_UP);  
            downArrow = GetAsyncKeyState(VK_DOWN);  
           leftArrow = GetAsyncKeyState(VK_LEFT);  
           rightArrow = GetAsyncKeyState(VK_RIGHT);  
      
           if(upArrow)  
            {  
                direction = UP;  
                break;  
            }  
            else if(downArrow)  
           {  
               direction = DOWN;  
                break;  
            }  
           else if(leftArrow)  
           {  
               direction = LEFT;  
               break;  
           }  
            else if(rightArrow)  
           {  
                direction = RIGHT;  
                break;  
           }  
    
            Sleep(100);  
      }  
      
       return direction;  
    }   
    //判断游戏状态  
    int Judge()  
    {  
       //赢得游戏  
       for(int i = 0; i < ROW; ++i)  
       {  
            for(int j = 0; j < COL; ++j)  
           {  
              if(game[i][j] == 2048)  
               {  
                  return GAME_WIN;  
                    break;  
                }  
            }  
        }  
      
        //横向检查  
       for(int i = 0 ; i < ROW; ++i)  
        {  
           for(int j = 0; j < COL - 1; ++j)  
           {  
                if(!game[i][j] || (game[i][j] == game[i][j+1]))  
               {  
                   return GAME_CONTINUE;  
                    break;  
                }  
            }  
        }  
       //纵向检查  
        for(int j = 0; j< COL; ++j)  
       {  
            for(int i = 0; i < ROW -1; ++i)  
            {  
                if(!game[i][j] || (game[i][j] == game[i+1][j]))  
               {  
                   return GAME_CONTINUE;  
                    break;  
               }  
            }  
        }  
     
        //不符合上述两种状况,游戏结束  
        return GAME_OVER;  
     
    }  
      
    int main()  
    {  
        //设置一个随机数种子  
        srand((unsigned int)time(0));  
        CreateNumber();  
        CreateNumber();  
        Print();  
        int direction = 0;  
       int gameState = -1;  
        while(true)  
       {  
           direction = Input();  
      
            gameState = Judge();  
            if(direction && gameState == GAME_CONTINUE)  
            {  
                Process(direction);  
               CreateNumber();  
                Print();  
                Sleep(100);  
            }  
            else if(gameState == GAME_WIN)  
            {  
               Print();  
                cout << "You Win!" << endl;  
                break;  
            }  
            else if(gameState == GAME_OVER)  
            {  
                Print();  
              cout <<"You lose!" << endl;  
               break;  
           }  
       }  
     
        return 0;  
    }  
    大多数想法要么平庸,要么更糟糕,这很大程度上因为绝妙的想法难得一见,而且他们还要在我们身边这个充斥了各种恶俗的所谓常识的环境中孕育生长。
  • 相关阅读:
    Wine 的安装与解决微信文字不可见,无法聚焦问题。#Wine教程
    Utuntu / CentOS设置环境变量 #java #maven
    真机安装Linux系统 (CentOS与Ubuntu)
    scrollUtils.js #触底触发上拉加载更多 #越线 #上下滚动事件
    微信小程序 bus.js
    svchost.exe占网速的解决办法
    Linux常用的解压缩命令
    本博客标题指示灯代码
    Jenkins持续集成
    jenkins.plugins.publish_over.BapPublisherException: Failed to connect and initialize SSH connection. Message: [Failed to connect session for config [master_server]. Message [Auth fail]]
  • 原文地址:https://www.cnblogs.com/linux0537/p/6100616.html
Copyright © 2011-2022 走看看