本程序为贪吃蛇游戏,想必大家都玩过这个游戏,程序源代码用TC2.0编译通过,需要图形驱动文件的支持,在TC2.0的集成环境中有.
本程序利用数据结构中的链表,来将蛇身连接,同时当蛇吃到一定数目的东西时会自动升级,及移动速度会加快,程序会时刻将一些信息显示在屏幕上,包括所得分数,要吃多少东西才能升级,并且游戏者可以自己手动选择游戏级别,级别越高,蛇的移动速度越快.
另外,此游戏可能与CPU的速度有关系.
源代码如下:
**********************************************************************************
/*******************************COMMENTS**********************************/
/* snake_game.c
*/
/* it is a game for entermainment.
*/
/* in the begin,there is only a snake head,and it will have to eat
food */
/* to become stronger,and it eat a piece of food each time,it will
*/
/* lengthen it's body,with the number of food the snake eats going
up,it */
/* will become long more and more,and the score will goes up also.
*/
/* there is always useful information during the game process.
*/
/* if the path by which the snake goes to eat food is the
shortest,the */
/* score will add up a double.
*/
/*
*/
/* enjoy yourself,and any problem,contact
*/
/*************************************************************************/
/* all head file that will be used
*/
#include
#include
#include
#include
#include
#include
/* useful MACRO */
#define FOOD_SIZE 8
#define SCALE 8
#define UP_KEY 0x4800
#define DOWN_KEY 0x5000
#define LEFT_KEY 0x4b00
#define RIGHT_KEY 0x4d00
#define MOVE_UP 1
#define MOVE_LEFT 2
#define MOVE_DOWN 3
#define MOVE_RIGHT 4
#define INVALID_DIRECTION 0
#define QU99v_KEYC 0x1051
#define QU99v_KEY 0x1071
#define SELECT_KEYC 0x1f53
#define SELECT_KEY 0x1f73
#define PAUSE_KEYC 0x1950
#define PAUSE_KEY 0x1970
#define DEFAULT_LEVEL 1
#define HELP_COLOR WH99vE
#define WELCOME_COLOR WH99vE
#define DEFAULT_COLOR GREEN
/* define the macro as follows to improve the game in future
*/
#define FOOD_COLOR YELLOW
#define SNAKE_HEAD_COLOR RED
#define DEFAULT_SNAKE_COLOR YELLOW
#define EX99v_COLOR WH99vE
#define SCORE_COLOR YELLOW
/* sturcture for snake body mainly ,and
food also */
typedef struct food_infor *FOOD_INFOR_PTR;
typedef struct food_infor{
int posx; /* position for each piece of snake body */
int posy;
int next_move; /* next move direction */
int pre_move; /* previous move direction,seems unuseful */
int beEaten; /* xidentifier for snake body or food */
FOOD_INFOR_PTR next; /* pointer to next piece of snake body
*/
FOOD_INFOR_PTR pre; /* pointer to previous piece of snake body
*/
}FOOD_INFOR;
/* structure for snake head */
typedef struct _snake_head{
int posx;
int posy;
int next_move;
int pre_move;
int eatenC; /* number of food that have been eaten */
int hop; /* number of steps to eat food */
FOOD_INFOR_PTR next; /* pointer to the first piece of eaten food
*/
}SNAKE_HEAD;
/* the left-up corner and right-down
corner */
typedef struct point{
int x;
int y;
}POINT;
/* standards for game speed
*/
/* before level 5,the time interval is level_b[level - 1] / 10,and
after */
/* level 5,the time interval is 1.00 / level_b[level - 1] */
float level_b[9] =
{10.0,8.0,6.0,3.0,1.0,20.0,40.0,160.0,640.0};
/* available varary */
SNAKE_HEAD snake_head;
FOOD_INFOR *current; /* always point to food */
POINT border_LT,border_RB;
int driver,mode; /* for graphics driver */
int maxx,maxy; /* max length and width of screen,in pixel */
int eaten; /* identifier if the food is eaten */
int score = 0; /* total score */
int level = DEFAULT_LEVEL; /* level or speed */
float interval; /* based on speed */
int snake_color = DEFAULT_SNAKE_COLOR; /* snake body color */
int hopcount = 0; /* the shortest number of steps for snake
*/
/* to eat food
*/ 未完下一页