你咋这么牛逼呢 发表于 2016-1-20 13:05:32

贪吃蛇 ???

想在vc++6.0下写一个简单的贪吃蛇游戏可是我对他其中用到的一些函数不是很懂 ,有哪位大神能帮我列举几个他的功能和用法吗?

ligen超越 发表于 2016-1-20 15:14:17

一个打印函数,一个清屏函数,一个随机函数;
好像就只要这几个,我现在也看到这个地方了,看完了就写个贪吃蛇{:10_249:}

ligen超越 发表于 2016-1-23 12:51:55

传送门 我写的贪吃蛇{:10_254:}

shuofxz 发表于 2016-2-1 22:09:37

我这里有一个贪吃蛇的事例代码,不过要先导入ege图形包
代码相对比较简单,不明白可以用调试一步一步的走一遍,基本就能明白了
#include "graphics.h"
#include <stdlib.h>

#define MAP_W 40
#define MAP_H 30
const int GCOLOR[] = {DARKGRAY, GREEN, RED};

int gw, gh;

struct SNAKE {
    int dir, head, inc, tail;
    int pool;
} game;

inline void drawAt( const int &i ) {
    int x = ( i % MAP_W ) * gw, y = ( i / MAP_W ) * gh;
    setfillcolor( GCOLOR >> 16] );
    bar( x, y, x + gw, y + gh );
}

void newFruit( void ) {
    int nf;
    while ( game.pool >> 16 );
    game.pool = 0x20000, drawAt( nf );
}

int moveSnake( const int dx, const int dy, const bool u = false ) {
    if ( u && dx + ( game.dir & 3 ) == 1 && dy + ( game.dir >> 2 ) == 1 ) return 1;
    int nh;
    if ( dx && !dy ) {
      nh = game.head % MAP_W + dx;
      if ( nh < 0 || nh >= MAP_W ) return 0;
      nh = game.head + dx;
    } else {
      nh = game.head / MAP_W + dy;
      if ( nh < 0 || nh >= MAP_H ) return 0;
      nh = game.head + dy * MAP_W;
    }
    int s = game.pool >> 16;
    if ( s == 1 ) return 0;
    if ( s == 2 ) game.inc += 5, newFruit();
    if ( game.inc > 0 ) --game.inc;
    else {
      game.tail = game.pool & 0xffff;
      game.pool = 0, drawAt( s );
    }
    game.pool |= nh;
    game.pool = 0x10000, drawAt( nh );
    game.dir = ( dx + 1 ) | ( ( dy + 1 ) << 2 );
    return 1;
}

void gameInit( void ) {
    int data[] = {6, 0, 2, 0, 0x10000};
    memset( game.pool, 0, sizeof( game.pool ) );
    memmove( &game, data, sizeof( data ) );
}

void gameScene( void ) {
    setbkcolor( DARKGRAY );
    setfillcolor( GREEN );
    bar( 0, 0, gw, gh );
    newFruit();
    for ( int c = -1; is_run(); delay_fps( 60 ), --c ) {
      while ( kbhit() ) {
            int key = getch() | 0x20;
            if ( key == ( 27 | 0x20 ) ) return;
            if ( key == 'a' || key == 'd' ) {
                if ( !moveSnake( ( ( key - 'a' ) >> 1 << 1 ) - 1, 0, true ) ) return;
            } else if ( key == 's' || key == 'w' ) {
                if ( !moveSnake( 0, 1 - ( ( key - 's' ) >> 2 << 1 ), true ) ) return;
            }
      }
      if ( c < 0 ) {
            if ( !moveSnake( ( game.dir & 3 ) - 1, ( game.dir >> 2 ) - 1 ) ) return;
            c = 20;
      }
    }
}

int main( void ) {
    setinitmode( INIT_ANIMATION );
    initgraph( 640, 480 );
    gw = getwidth() / MAP_W, gh = getheight() / MAP_H;
    randomize();
    gameInit();
    gameScene();
    return 0;
}

自古天道酬勤 发表于 2016-2-9 23:32:15

学习一下

zhaochengdong 发表于 2016-12-3 15:50:09

运行不了呀
页: [1]
查看完整版本: 贪吃蛇 ???