实现效果如图:
目前得分代码还有问题不能正确输出,且改颜色也未完善,其他功能正常,有问题待改进。
代码如下:
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#define height 28 //方块高度
#define width 60 //方块宽度,必须为偶数
//--------------函数声明---------------------
void GameStare(); //启动画面
void GameOver(); //结束画面
void draw_cube(); //画边框
void initialization(); //初始化蛇身
void gotoxy(int x, int y); //移动坐标
void move(); //蛇身移动
void p_move(); //处理蛇头移动后蛇身指针的移动
void food(); //产生食物
void judge_head(); //判断蛇头的位置
void static_info(); //静态信息,如游戏侧栏文字提示
void dynamic_info(); //动态信息,如游戏得分
//--------------------------------------------
//--------------全局变量-----------------------
struct snake
{
int x, y; //坐标
struct snake* next; //
}*head = NULL, * scan = NULL, * pf = NULL, * pb = NULL;
int speed = 300; //移动速度(毫秒)
int length = 4; //初始蛇长
char direction = 'd'; //蛇头方向:w/s/a/d
int food_x, food_y; //食物坐标
int tail_x, tail_y; //蛇尾坐标
int snake_xy[1024]; //存储蛇身上每一个节点的坐标
short score = 0; //游戏得分
short music = 1; //吃到食物后响铃
//------------------------------------------------
//---------------函数定义区-----------------------
void draw_cube()
{
int i;
for (i = 1;i <= height;i++)//左右方框
{
gotoxy(0, i); printf("■");
gotoxy(width, i); printf("■");
}
for (i = 0;i <= width + 1;i += 2)//上下方框
{
gotoxy(i, 0); printf("■");
gotoxy(i, height + 1); printf("■");
}
}
void initialization() //游戏开始后的初始界面绘制
{
int i;
draw_cube(); //画方格框架
for (i = 1;i <= length;i++) //画出初始蛇身
{
pb = (struct snake*)malloc(sizeof(struct snake));
pb->y = 17; //初始纵坐标y=17
pb->x = 28; //初始横坐标x=28
if (i == 1