鱼C论坛

 找回密码
 立即注册
查看: 3012|回复: 5

贪吃蛇 ???

[复制链接]
发表于 2016-1-20 13:05:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
想在vc++6.0下写一个简单的贪吃蛇游戏  可是我对他其中用到的一些函数不是很懂 ,有哪位大神能帮我列举几个他的功能和用法吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-1-20 15:14:17 | 显示全部楼层
一个打印函数,一个清屏函数,一个随机函数;
好像就只要这几个,我现在也看到这个地方了,看完了就写个贪吃蛇
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-23 12:51:55 | 显示全部楼层
传送门 我写的贪吃蛇
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-1 22:09:37 | 显示全部楼层
我这里有一个贪吃蛇的事例代码,不过要先导入ege图形包
代码相对比较简单,不明白可以用调试一步一步的走一遍,基本就能明白了
  1. #include "graphics.h"
  2. #include <stdlib.h>

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

  6. int gw, gh;

  7. struct SNAKE {
  8.     int dir, head, inc, tail;
  9.     int pool[MAP_W* MAP_H];
  10. } game;

  11. inline void drawAt( const int &i ) {
  12.     int x = ( i % MAP_W ) * gw, y = ( i / MAP_W ) * gh;
  13.     setfillcolor( GCOLOR[game.pool[i] >> 16] );
  14.     bar( x, y, x + gw, y + gh );
  15. }

  16. void newFruit( void ) {
  17.     int nf;
  18.     while ( game.pool[nf = random( MAP_W * MAP_H )] >> 16 );
  19.     game.pool[nf] = 0x20000, drawAt( nf );
  20. }

  21. int moveSnake( const int dx, const int dy, const bool u = false ) {
  22.     if ( u && dx + ( game.dir & 3 ) == 1 && dy + ( game.dir >> 2 ) == 1 ) return 1;
  23.     int nh;
  24.     if ( dx && !dy ) {
  25.         nh = game.head % MAP_W + dx;
  26.         if ( nh < 0 || nh >= MAP_W ) return 0;
  27.         nh = game.head + dx;
  28.     } else {
  29.         nh = game.head / MAP_W + dy;
  30.         if ( nh < 0 || nh >= MAP_H ) return 0;
  31.         nh = game.head + dy * MAP_W;
  32.     }
  33.     int s = game.pool[nh] >> 16;
  34.     if ( s == 1 ) return 0;
  35.     if ( s == 2 ) game.inc += 5, newFruit();
  36.     if ( game.inc > 0 ) --game.inc;
  37.     else {
  38.         game.tail = game.pool[s = game.tail] & 0xffff;
  39.         game.pool[s] = 0, drawAt( s );
  40.     }
  41.     game.pool[game.head] |= nh;
  42.     game.pool[game.head = nh] = 0x10000, drawAt( nh );
  43.     game.dir = ( dx + 1 ) | ( ( dy + 1 ) << 2 );
  44.     return 1;
  45. }

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

  51. void gameScene( void ) {
  52.     setbkcolor( DARKGRAY );
  53.     setfillcolor( GREEN );
  54.     bar( 0, 0, gw, gh );
  55.     newFruit();
  56.     for ( int c = -1; is_run(); delay_fps( 60 ), --c ) {
  57.         while ( kbhit() ) {
  58.             int key = getch() | 0x20;
  59.             if ( key == ( 27 | 0x20 ) ) return;
  60.             if ( key == 'a' || key == 'd' ) {
  61.                 if ( !moveSnake( ( ( key - 'a' ) >> 1 << 1 ) - 1, 0, true ) ) return;
  62.             } else if ( key == 's' || key == 'w' ) {
  63.                 if ( !moveSnake( 0, 1 - ( ( key - 's' ) >> 2 << 1 ), true ) ) return;
  64.             }
  65.         }
  66.         if ( c < 0 ) {
  67.             if ( !moveSnake( ( game.dir & 3 ) - 1, ( game.dir >> 2 ) - 1 ) ) return;
  68.             c = 20;
  69.         }
  70.     }
  71. }

  72. int main( void ) {
  73.     setinitmode( INIT_ANIMATION );
  74.     initgraph( 640, 480 );
  75.     gw = getwidth() / MAP_W, gh = getheight() / MAP_H;
  76.     randomize();
  77.     gameInit();
  78.     gameScene();
  79.     return 0;
  80. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-2-9 23:32:15 | 显示全部楼层
学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-3 15:50:09 | 显示全部楼层
运行不了呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-17 17:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表