C语言版彩色版贪吃蛇
代码如下
#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include <malloc.h>
#include <time.h>
#include <stdlib.h>
void setmouth(int x, int y);//设置光标
void background();//背景生成
void setcolour(int a);//设置颜色
void init();//初始化
void hidemouth();//隐藏光标
void startfood();//初始创建食物
void startsnack();//初始创建小蛇
void snackmove(int,int);//小蛇移动
int checksnack(int);//小蛇碰撞检测
void snackdie();//小蛇死亡
void showing();//输出最新的show
void screenRefresh(int);//屏幕刷新
void newfood();//创建新食物
void updategoal();//更新得分
int movedire(int,int);//获取小蛇的移动方向
int snacklength = 3;//小蛇长度
int snackhead=2;//蛇头
int snacktail=0;//蛇尾
int MaxLine = 40, MaxLie = 40;//定义最大行数,列数
//结构体保存各个事物的属性
struct map {
int colour;
int kind;
char *display;
}
show[40][40], //展示地图
wall = {
0x6C,1,"■" },//墙体
livearea = {
0x7F,2,"□" },//小蛇活动区域
food = {
0x7C,3,"★" },//食物
snack = {
0x7A,4,"●" };//小蛇蛇体的属性
struct SnackMap
{
int x;
int y;
}SnackSite[100],FoodSite;
/***************************************
主程序
****************************************/
int main()
{
int olddirection='w'; //初始键盘信号
int newdirection =0;//获取键盘信号
init();//初始化
setmouth(60, 0);
setcolour(0xF0);
printf("\n得分:");
printf("%d\n", snacklength - 3);
printf("请切换为英文输入法\n");
printf("W A S D键分别表示:上 左 下 右\n");
printf(" Copyright [2020.12.13] by [/^Mike^/] ");
while (1) {
if (_kbhit()) {
//检测缓冲区中是否有数据
newdirection = tolower(_getch()); //将缓冲区中的数据以字符的形式读出
if (newdirection == 27) {
break;
}
else {
//获取小蛇新的移动方向
newdirection=movedire(olddirection, newdirection);
if (newdirection != olddirection)
{
olddirection = newdirection;
}
}
}
screenRefresh(newdirection);
Sleep(10);
}
return 0;
}
//更新得分
void updategoal()
{
setcolour