某天晚上闲着无聊就写了个贪吃蛇链表,然后第二天就开始就主程序了,很快就写完了,所以大家如果有好的思路,不妨也动动手嘛。好记性不如烂笔头嘛。贪吃蛇的思路挺简单的,就是用一个链表来保存蛇的路线,不过这个链表是经过特殊构造的,主要思路就是把客户区分成若干个小方格子,然后链表会保存x和y坐标,这个算是最重要的了,其它的都挺简单的,在这里就不赘述了。
打开vc6,然后新建一个win32空项目就可以了。
这个是运行截图
这个是snake_list.h
#ifndef SNAKE_LIST_H
#define SNAKE_LIST_H
#define CLIENT_WIDTH 600
#define CLIENT_HEIGHT 600
#define ARRAY_COUNT 1600
#define ARRAY_WIDTH 40
#define ARRAY_HEIGHT 40
#define SANKE_UNIT 15
#define SNAKE_NUM 5
//定制版贪吃蛇链表
typedef struct Snake_List{
int x;//x坐标
int y;//y坐标
struct Snake_List* next;
}snake_list;
extern void init_snake(snake_list** head, char* snake_array);//初始化蛇
extern int add_head_hit(const int* x, const int* y, snake_list** head, char* snake_array);//撞上蛇
extern int add_head_no_hit(const int* x, const int* y, snake_list** head, char* snake_array);//没撞上蛇
extern void destory(snake_list* head);//清空蛇
extern void get_head_info(snake_list* head, int *x, int *y);//获取蛇头
#endif
这个是snake_list.c
#include "snake_list.h"
#include <stdio.h>
#include <stdlib.h>
static snake_list* snake_tail;//蛇伪尾巴
static void set_snake_tail(snake_list* head);//设置新的蛇伪尾巴
void init_snake(snake_list** head, char* snake_array)
{
snake_list *p, *q;
int i, max_num;
max_num = 18 + SNAKE_NUM;
for (i = 18; i < max_num; i++) {//默认蛇长5个单位 坐标从20*ARRAY_WIDTH 13开始
p = (snake_list* )malloc(sizeof(snake_list));
if (i == 18) {
*head = p;
} else {
q->next = p;
if (i == max_num - 2) {
snake_tail = p;//设置伪尾巴
}
}
p->x = 30;
p->y = i;
snake_array[p->x*ARRAY_WIDTH+p->y] = 1;//更改蛇数组的位
q = p;
}
p->next = NULL;
}
//x, y是撞击的位置坐标,撞击后头部改变,尾巴不变
int add_head_hit(const int* x, const int* y, snake_list** head, char* snake_array)
{
snake_list *p, *q;
p = (snake_list*)malloc(sizeof(snake_list));
q = *head;
*head = p;
(*head)->x = *x;
(*head)->y = *y;
(*head)->next = q;
snake_array[*x*ARRAY_WIDTH+*y] = 1;
return 1;
}
//x, y是前进的位置坐标,前进后头部改变,尾巴改变
int add_head_no_hit(const int* x, const int* y, snake_list** head, char* snake_array)
{
snake_list *p, *q;
p = (snake_list*)malloc(sizeof(snake_list));
q = *head;
*head = p;
(*head)->x = *x;
(*head)->y =