C语⾔实现贪吃蛇(使⽤链表,适合初学者)
前⾔
最近在学习C语⾔,做了⼀个C语⾔经典⼩项⽬贪吃蛇。
功能如下:
⽬录结构:
没有分太多的⽂件结构,偷懒了下,就⼀个⼊⼝main⽂件和Init初始化⽂件(其实初始化⾥边还细分很多的操作),真正的项⽬开发其实这样不是很好,结构不清晰。
main⼊⼝⽂件
#include<stdio.h>
#include<stdlib.h>
#include"Init.h"
void main(){
//初始化
Init();
while(1){
//画地图
DrawMap();
//判断有没有⽅向键输⼊directSelect();
//蛇的移动moveSnake();
//清空屏幕
system("cls");
}
}
Init头⽂件
/*********宏定义区**************/
#ifndef C_SNAKE
#define C_SNAKE
#include<stdio.h>
#include<time.h>
#include <windows.h>
#include<stdlib.h>
#include<conio.h>//kbhit 遇到kbhit不会停与getch()区别
#define FOOD 1
#define INIT_X 5 //蛇出⽣点
#define INIT_Y 2
#define MIN_SPEED 100
#define MAX_SPEED 10
#define INIT_LENTH 5 //初始长度
/*********结构体定义区****************/
typedef struct node
{
/*蛇⾝节点*/
int x;
int y;
//定义链表
struct node *next;
}SnakeNode;
typedef struct body{
char direct;
int speed;
int length;
}SnakeBody;
typedef struct Food{
int x;
int y;
}SnakeFood;
/********函数定义区**********/
void DrawMap();
void createSnake();
void createFood();
void printSnake();
SnakeNode *createNode(SnakeNode *head,SnakeNode *data);
void setColor(unsigned short ForeColor,unsigned short BackGroundColor); void gameOver();
void continueGame();
void directSelect();
void moveSnake();
void Init();
/****************************/
#endif
init.c⽂件
#include"Init.h"
SnakeNode *p;
SnakeBody *b;
SnakeFood *food;
SnakeNode *currentNode=NULL;
//设置光标位置
void setPos(int x,int y){
HANDLE handle =GetStdHandle(STD_OUTPUT_HANDLE);    COORD pos ={0};
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle, pos);
}
//初始化程序
void Init(){
char ch;
system("cls");
setPos(40,10);
printf("******************************");c语言游戏贪吃蛇源码
setPos(40,12);
printf("  欢迎来到贪吃蛇游戏!");
setPos(40,14);
printf("******************************");
setPos(40,18);
system("pause");
//清除屏幕
system("cls");
setPos(70,5);
printf("请选择<1开始 2退出>:");
setPos(70,7);
printf("使⽤↑↓←→控制⽅向");
setPos(70,9);
printf("4加速,5减速\n");
setPos(70,11);
printf("按空格暂停/继续,ESC退出");
setPos(70,13);
printf("当前速度:");
setPos(70,15);
printf("得分:");
setPos(92,5);
/
/判断键盘输⼊
wait:
if(kbhit()){
if((ch=getchar())=='1'){
createSnake();
}
if((ch=getchar())=='2'){
setPos(25,13);
setColor(4,2);
puts("Game over!");
setPos(0,28);
exit(0);
}
}
else goto wait;
}
//画地图
void DrawMap(){
setColor(7,2);
setPos(70,5);
printf("请选择<1开始 2退出>:");
setPos(70,7);
printf("使⽤↑↓←→控制⽅向");
setPos(70,9);
printf("4加速,5减速\n");
setPos(70,11);
printf("按空格暂停/继续,ESC退出");
setPos(70,13);
printf("当前速度:%ld",10000/b->speed);
setPos(70,15);
printf("得分:%ld",b->length-1);
setPos(92,5);
setPos(0,0);
/
/长为30 宽为27  也可以⽤循环的⽅法⽣成
printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n"); printf("■■\n");
printf("■■\n");
printf("■■\n");
printf("■■\n");
printf("■■\n");
printf("■■\n");
printf("■■\n");
printf("■■\n");
printf("■■\n");
printf("■■\n");
printf("■■\n");
printf("■■\n");
printf("■■\n");
printf("■■\n");
printf("■■\n");
printf("■■\n");
printf("■■\n");
printf("■■\n");
printf("■■\n");
printf("■■\n");
printf("■■\n");
printf("■■\n");
printf("■■\n");
printf("■■\n");
printf("■■\n");
printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n"); }
//初始化蛇
void createSnake(){
int x,y;
//设置播种随机⽣成位置
srand((int)time(0));

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。