zoukankan      html  css  js  c++  java
  • C语言控制台贪食蛇

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

    https://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;
    }
  • 相关阅读:
    进程和线程的概念、区别和联系
    Python高级语法-GIL-理解(4.1.1)
    Web服务器-并发服务器-Epoll(3.4.5)
    Web服务器-并发服务器-长连接(3.4.4)
    Web服务器-并发服务器-单进程单线程非堵塞方式(3.4.3)
    Web服务器-并发服务器-协程 (3.4.2)
    Web服务器-并发服务器-多进程(3.4.1)
    Web服务器-服务器开发-返回浏览器需要的页面 (3.3.2)
    Web服务器-服务器开发-返回固定页面的HTTP服务器(3.3.1)
    Web服务器-HTTP相关-快速整一个服务器响应浏览器(3.2.1)
  • 原文地址:https://www.cnblogs.com/PureMilk/p/1856481.html
Copyright © 2011-2022 走看看