C语言控制台贪食蛇

给同学写了一个vc6.0的C语言的控制台贪食蛇,做练习用的。没什么意思,又丑又没成就感。话说,用控制台写比用OpenGL写还麻烦。想当年我没几分钟就写完了,现在竟然写了一个半小时,水平大不如从前了,要好好加油才行。

http://files.cnblogs.com/PureMilk/SnakeWithC.rar

这几天有点自信心过度膨胀的状态,主要是写车牌识别写的手感太好了。不知道做完这个项目,是不是可以找一份不错的工作。忽然觉得工作也是没什么意思的事情,无非就是有钱拿。工作真的只是为了赚钱吗?我想我还是希望自己是个有用的人。可是这样就是个有用的人了吗?应该不是的吧。那,有用是开心的吗?我不知道。现在的我,还是很想赚钱的,恩。不知道等一切我想要的都要到了,我该做什么呢。也许再不会有什么可以让自己很有活力的事情,每天只要简单的,满足的就好了吧。

把源码贴上来吧。

 

#include  < stdio.h >
#include 
< stdlib.h >
#include 
< conio.h >
#include 
< time.h >
#include 
< windows.h >

enum  block{
    BLANK 
=   0 , FOOD, SNAKE, HEAD
};

int  snake[ 800 ][ 2 =  { 0 };
int  len  =   0 ;
int  food[ 2 =  { 0 };
enum  block map[ 20 ][ 80 =  {HEAD};
int  gameOver  =   0 ;

void  CreatFood(  void  )
{
    
int  flag  =   1 ;
    
int  i;
    
while ( flag  ==   1  )
    {
        flag 
=   0 ;
        food[
0 =  rand() % 80 ;
        food[
1 =  rand() % 20 ;
        printf( 
" %d,%d\n " , food[ 0 ], food[ 1 ] );
        
for  ( i  =   0 ; i  <  len;  ++ i )
        {
            
if  ( snake[i][ 0 ==  food[ 0 &&  snake[i][ 1 ==  food[ 1 ] )
            {
                flag 
=   1 ;
            }
        }
    }
}

void  Init(  void  )
{
    
int  i;
    
// 初始化蛇
    len  =   3 ;
    
for  ( i  =   0 ; i  <  len;  ++ i )
    {
        snake[i][
0 =  len - i;
    }
    
// 初始化食物
    CreatFood();
}

void  Draw(  void  )
{
    
int  i,j;

    
for  ( i  =   0 ; i  <   20 ++ i )
    {
        
for  ( j  =   0 ; j  <   80 ++ j )
        {
            map[i][j] 
=  BLANK;
        }
    }
    
// 把蛇画到map里
    map[snake[ 0 ][ 1 ]][snake[ 0 ][ 0 ]]  =  HEAD;
    
for  ( i  =   1 ; i  <  len;  ++ i )
    {
        map[snake[i][
1 ]][snake[i][ 0 ]]  =  SNAKE;
    }
    
// 把食物画到map里
    map[food[ 1 ]][food[ 0 ]]  =  FOOD;
    system( 
" cls "  );
//     printf( "%d,%d\n", food[0], food[1] );
     for  ( i  =   0 ; i  <   20 ++ i )
    {
        
for  ( j  =   0 ; j  <   80 ++ j )
        {
            
switch  ( map[i][j] )
            {
            
case  BLANK:
                putchar(
'   ' );
                
break ;
            
case  FOOD:
                putchar(
' $ ' );
                
break ;
            
case  SNAKE:
                putchar(
' * ' );
                
break ;
            
case  HEAD:
                putchar(
' @ ' );
                
break ;
            
default :
                
break ;
            }
        }
    }
}

int  Eat(  void  )
{
    
if  ( snake[ 0 ][ 0 ==  food[ 0 &&  snake[ 0 ][ 1 ==  food[ 1 ] )
    {
        
return   1 ;
    }
    
return   0 ;
}

int  Die(  void  )
{
    
int  i;
    
// 撞边界死
     if  ( snake[ 0 ][ 0 <   0   ||  snake[ 0 ][ 0 >   80  )
    {
        
return   1 ;
    }
    
if  ( snake[ 0 ][ 1 <   0   ||  snake[ 0 ][ 1 >   20  )
    {
        
return   1 ;
    }
    
// 撞自己死
     for  ( i  =   1 ; i  <  len;  ++ i )
    {
        
if  ( snake[i][ 0 ==  snake[ 0 ][ 0 &&  snake[i][ 1 ==  snake[ 0 ][ 1 ] )
        {
            
return   1 ;
        }
    }
    
return   0 ;
}

void  Move(  char  key )
{
    
int  x, y;
    
int  pos  =   0 ;
    
int  i;
    
int  d[ 4 ][ 2 =  {
        {
0 , - 1 },
        {
- 1 , 0 },
        {
0 , 1 },
        {
1 , 0 },
    };
    
switch  ( key )
    {
    
case   ' w ' :
        pos 
=   0 ;
        
break ;
    
case   ' a ' :
        pos 
=   1 ;
        
break ;
    
case   ' s ' :
        pos 
=   2 ;
        
break ;
    
case   ' d ' :
        pos 
=   3 ;
        
break ;
    
default
        
break ;
    }
    x 
=  snake[len - 1 ][ 0 ];
    y 
=  snake[len - 1 ][ 1 ];
    
for  ( i  =  len - 1 ; i  >   0 -- i )
    {
        snake[i][
0 =  snake[i - 1 ][ 0 ];
        snake[i][
1 =  snake[i - 1 ][ 1 ];
    }
    snake[
0 ][ 0 +=  d[pos][ 0 ];
    snake[
0 ][ 1 +=  d[pos][ 1 ];
    
if  ( Eat() )
    {
        snake[len][
0 =  x;
        snake[len][
1 =  y;
        
++ len;
        CreatFood();
    }
    
else   if  ( Die() )
    {
        gameOver 
=   1 ;
    }
}

char  Judge(  char  key,  char  lastKey )
{
    
if  ( key  ==   ' d '   &&  lastKey  ==   ' a '  )
    {
        
return  lastKey;
    }
    
if  ( key  ==   ' a '   &&  lastKey  ==   ' d '  )
    {
        
return  lastKey;
    }
    
if  ( key  ==   ' w '   &&  lastKey  ==   ' s '  )
    {
        
return  lastKey;
    }
    
if  ( key  ==   ' s '   &&  lastKey  ==   ' w '  )
    {
        
return  lastKey;
    }
    
return  key;
}

int  main(  int  argc,  char   *  argv[] )
{
    
char  lastKey  =   ' d ' ;
    
char  key  =  lastKey;
    
int  lastTime  =  GetTickCount();

    srand( (unsigned 
int )GetTickCount() );
    Init();
    Draw();
    
while  (  1  )
    {
        
while  (  ! kbhit() )
        {
            
while  ( GetTickCount() - lastTime  <   500  )
            {
                Sleep(
1 );
            }
            lastTime 
=  GetTickCount();
            Move( key );
            
if  (  ! gameOver )
            {
                Draw();
            }
        }
        key 
=  getch();
        key 
=  Judge( key, lastKey );
        lastKey 
=  key;
        Move( key );
        
if  (  ! gameOver )
        {
            Draw();
        }
        
else
        {
            puts( 
" You Lose! " );
            
break ;
        }
    }
    
return   0 ;
}

 

 

转载于:https://www.cnblogs.com/PureMilk/archive/2010/10/20/1856481.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值