用c语言写贪吃蛇(简易)(适用初学者)
(文章较长,看完大约需要一个小时,初学者能够通过这个项目学习很多课余知识是很棒的)
(ps:后续看到本文的读者,尽量用dev c++来运行本文代码,其它几个ide笔者尝试了,确实会出现一些未知的bug,可以先尝试用dev c++ 跑出代码,再根据自己喜欢用的ide调试)
目标人群
已掌握while for do…while if 等基本控制语句及数组相关知识的初学者
前言
-
本文意在增加刚入门 c语言的朋友的兴趣,目标是让读者朋友能感受到编码的乐趣,最后能自己独立写出此代码,并自行不断优化、完善。
-
本文会涉及到较多对于初学者较陌生的知识,希望大家不要产生畏难心理,笔者为了文章的流畅性会简单介绍,想深入了解的朋友可以点击文中对应篮字。
接下来让我们看看代码的全景(笔者ide用的是devC++5.11,用vscode的朋友在学习完本文,记得看一下评论)
代码
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#define High 20 //游戏画面尺寸 以向下为x的正半轴,向右为Y的正半轴
#define Width 30
//全局变量
int moveDirection; //小蛇移动位置 ,上下左右分别用1,2,3,4表示
int food_x,food_y; //食物的位置
int canvas[High][Width]={
0};//二维数组存储游戏画布中对应元素
//该函数是用于控制 控制台的光标的移动
void gotoxy(int x,int y)
{
HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE); //调用
COORD pos; //定义一个坐标
pos.X=x;
pos.Y=y;
SetConsoleCursorPosition(handle,pos);
}
//该函数是为了蛇的正常运动以及保证食物的持续出现
void moveSankeByDirection()
{
int i,j;
for(i=1;i<High-1;i++)
{
for(j=1;j<Width-1;j++)
{
if(canvas[i][j]>0)
canvas[i][j]++;
}
}
int oldTail_i,oldTail_j,oldHead_i,oldHead_j;
int max=0;
for(i=1;i<High-1;i++)
{
for(j=1;j<Width-1;j++)
{
if(canvas[i][j]>0)
{
if(max<canvas[i][j])
{
max=canvas[i][j];
oldTail_i=i;
oldTail_j=j;
}
if