签到

06月20日
尚未签到

共有回帖数 0

    幻梦如戏

    等级:



    表示自己还没通关.
    2048 原版
    http://gabrielecirulli.github.io/2048/
    自己刚写的 =,




    #include "stdio.h"
    #include "stdlib.h"
    #include "string.h"
    #include "conio.h"


    #define ROW 5
    #define COL ROW


    enum
    {
    BOX_NONE = 0
    };


    int g_iBox[ROW][COL];


    int g_iGameStatus = 0;


    void show_rect();
    void generate_box();
    void calc_moveAfter( char c );


    int main()
    {
    memset( g_iBox, BOX_NONE, sizeof( g_iBox ) );
    generate_box();
    show_rect();


    while( 1 )
    {
    int n = _getch();
    calc_moveAfter( (char)n );
    }


    return 0;
    }


    void show_rect()
    {
    system("cls");


    printf( "n 2048 控制台版 啦啦啦" );
    printf( "nnn" );


    for( int i = 0; i  ROW; i ++ )
    {
    for( int j = 0; j  COL; j ++ )
    {
    if( g_iBox[j] != 0 )
    {
    printf( "%5d", g_iBox[j] );
    }else
    {
    printf( " %s", "口" );
    }
    }


    printf( "n" );
    for( int i = 0; i  COL * 5; i ++ )
    {
    printf( " ");
    }
    printf( "n" );
    }


    printf( "n" );


    if( g_iGameStatus == 1 )
    {
    printf( "恭喜,您已通关,不过可以继续玩~nn" );
    }


    printf( "w, s, a, d 为上下左右.nc 为重新开始" );
    }


    void generate_box()
    {
    int* p_i[ ROW * COL ];
    int count = 0;


    for( int i = 0; i  ROW; i ++ )
    {
    for( int j = 0; j  COL; j ++ )
    {
    if( g_iBox[j] == BOX_NONE )
    {
    p_i[count++] = &g_iBox[j];
    }
    }
    }


    if( count == 0 )
    {
    return;
    }


    *p_i[ rand()%count ] = ( 1 + rand()%2 ) * 2;
    }


    int box_replace( int *des, int *res )
    {
    int tmp;


    tmp = *des;
    *des = *res;
    *res = tmp;


    return 1;
    }


    int box_combine( int *res, int *des )
    {
    *des += *res;
    *res = BOX_NONE;


    return *des;
    }


    void calc_moveAfter( char c )
    {
    bool isSuccess = false;


    if( c != 'w' && c != 's' && c!= 'a' && c != 'd' )
    {
    if( c == 'c' )
    {
    memset( g_iBox, 0, sizeof( g_iBox ) );
    isSuccess = true;
    g_iGameStatus = 0;
    }
    }
    else
    {
    int mX = 0;
    int mY = 0;
    int posX = 0;
    int posY = 0;;


    int c_row = ROW;
    int c_col = COL;


    switch( c )
    {
    case 'w':
    mY = -1;


    break;
    case 's':
    mY = 1;


    break;
    case 'a':
    mX = -1;
    c_row = COL;
    c_col = ROW;
    break;
    case 'd':
    mX = 1;
    c_row = COL;
    c_col = ROW;
    break;
    }


    isSuccess = false;


    for( int i = 0; i  c_row; i ++ )
    {
    for( int j = 0; j  c_col; j ++ )
    {
    switch( c )
    {
    case 'w':
    mY = -1;
    posX = j;
    posY = i;
    break;
    case 's':
    mY = 1;
    posX = j;
    posY = c_row - i - 1;
    break;
    case 'a':
    mX = -1;
    posX = i;
    posY = j;
    break;
    case 'd':
    mX = 1;
    posX = c_row - i - 1;
    posY = j;
    break;
    }


    int x = posX + mX;
    int y = posY + mY;


    while( 1 )
    {
    if( x = 0 && x  COL && y = 0 && y  ROW && g_iBox[posY][posX] != BOX_NONE )
    {
    if( g_iBox[y][x] == BOX_NONE )
    {
    x += mX;
    y += mY;


    if( x = 0 && x  COL && y = 0 && y  ROW )
    {
    }else
    {
    x -= mX;
    y -= mY;


    if( x == posX && y == posY )
    {


    }else
    {
    box_replace( &g_iBox[posY][posX], &g_iBox[y][x] );
    isSuccess = true;
    }
    break;
    }


    }else
    {
    if( g_iBox[y][x] == g_iBox[posY][posX] )
    {
    if( box_combine( &g_iBox[posY][posX], &g_iBox[y][x] ) == 2048 )
    {
    g_iGameStatus = 1;
    }


    isSuccess = true;
    }else
    {
    x -= mX;
    y -= mY;


    if( x == posX && y == posY )
    {


    }else
    {
    box_replace( &g_iBox[posY][posX], &g_iBox[y][x] );
    isSuccess = true;
    }
    }
    break;
    }
    }else
    {
    break;
    }
    }
    }
    }
    }


    if( isSuccess )
    {
    generate_box();
    }


    show_rect();


    }

    楼主 2015-06-24 23:36 回复

共有回帖数 0
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知