共有回帖数 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号
意见反馈 |
关于直线 |
版权声明 |
会员须知