c语言实现ai程序,C语言手把手教你实现贪吃蛇AI(下).pdf

C语语言言手手把把手手教教你你实实现现贪贪吃吃蛇蛇AI ((下下))

本文实例为大家分享了C语言实现贪吃蛇A I的具体代码,供大家参 ,具体内容如下

1. 目目标标

这一部分的目标是把之前写的贪吃蛇加入A I功能,即自动的去寻找食物并吃掉。

2. 控控制制策策略略

为了保证蛇不会走入“死地”,所以蛇每前进一步都需要检查,移动到新的位置后,能否找到走到蛇尾的路径,如果可以,

才可以走到新的位置;否则在当前的位置寻找走到蛇尾的路径,并按照路径向前走一步,开始循环之前的操作,如下图所示。这

个策略可以工作,但是并不高效,也可以尝试其他的控制策略,比如易水寒的贪吃蛇A I

运行效果如下:

3. 源源代代码码

需要注意的是,由于mapnode的数据量比较大,这里需要把栈的大小设置大一点,如下图所示,否则会出现栈溢出的情况。

整个项目由以下三个文件组成:

a. snake A I.h

#ifndef SNAKE_H_

#define SNAKE_H_

#include

#include //SetConsoleCursorPosition, slee 函数的头函数

#include //time()的头函数

#include //malloc()的头函数

#define N 32 //地图大小

#define snake_mark '# '//表示蛇身

#define food_mark '$'//表示食物

#define slee time 50//间隔时间

#define W 10//权重

ty edef struct STARNODE{

int x;//节点的x,y坐标

int y;

int G;//该节点的G, H值

int H;

int is_snakebody;//是否为蛇身,是为1,否则为0;

int in_o en_table;//是否在o en_table中,是为1,否则为0;

int in_close_table;//是否在close_table中,是为1,否则为0;

struct STARNODE* ParentNode;//该节点的父节点

} starnode, * starnode;

extern starnode (*ma node)[N + 4];

extern starnode o entable[N*N / 2];

extern starnode closetable[N*N / 2];

extern int o ennode_count;

extern int closenode_count;

/*表示蛇身坐标的结构体*/

ty edef struct SNAKE{

int x; //行坐标

int y; //列坐标

struct SNAKE* next;

}snake_body, * snake;

extern snake snake;

extern snake food;

extern snake snaketail;

extern snake nextnode;

void set_cursor_ osition(int x, int y);

void initial_ma ();

void initial_ma node();

void u date_ma node();

void rinte_ma ();

你可能感兴趣的:(c语言实现ai程序)