共有回帖数  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 回复 
 
 
   
             
                  
                  
 
 
 
     
	 
  
	Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
	
	意见反馈 | 
	关于直线 | 
	版权声明 | 
	会员须知