C语言版贪吃蛇:第一部分
概述
这是一篇关于如何用最简单的C语言知识,编写出一个控制台版本的贪吃蛇的教程。
教程只要求最基本的C语言知识:
- 基本的语句,变量,函数。
- 一点点结构体的知识。
- 不需要指针,文件操作等等高级知识。
教程分为4部分,并且每一个部分都将能够实现一些功能,然后能够先运行起来。
最终的程序
一张截图
需要实现的基本的功能:
- 绘制围墙
- 绘制蛇,食物
- 实现蛇的运动
- 判断蛇是否吃到食物,并增长身体
- 判断是否撞墙,吃到自己
Chapter 1
在这一部分,我们要实现第一个功能
- 绘制围墙
流程如下:
头文件
这里介绍一下几个不常见的头文件
1. 生成随机数需要用到 time.h
2. 移动光标函数在 windows.h
里面,不同电脑可能有差异
3. 有时候可能程序会闪一下就没了,这时候需要用到 stdlib.h
里的一个函数 system("pause");
光标移动函数
示例代码
//头文件
#include<windows.h>
void gotoxy(int x,int y)
{
COORD coord={x,y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}
//使用方法
int main()
{
//将光标移动到(20,2)
gotoxy(20,2);
//打印一个符号
printf("#");
return 0;
}
- 这是Windows.h里的一个函数,函数有两个参数x,y,通过这个函数能够将控制台里的光标移动到(x,y)这个位置。
- 坐标的起始点在左上角,示意图如下
绘制围墙
考虑围墙的大小
- 这里我采用的围墙大小为 70*20 (即长70,宽20)
- 示意图如下
- 我们用 # 表示围墙
利用循环语句和光标移动函数和输出函数在控制台上打印出围墙
- for( );
- gotoxy( );
- printf( )
编写代码
- 我们首先测试一下围墙右下角那个点的位置
void printwall()
{
// chapter 1 绘制围墙部分
// 围墙大小 70*20, 长70,宽20
gotoxy(70,20);
printf("#");
}
- 测试能够在控制台上正常显示后再进行完整围墙的位置
- 用两个循环语句绘制围墙
void printwall()
{
// 绘制水平围墙,
for (int i = 1; i <= 70; i++)
{
gotoxy(i, 1);
printf("#");
gotoxy(i, 20);
printf("#");
}
// 绘制竖直围墙
for (int i = 1; i <= 20; i++)
{
gotoxy(1, i);
printf("#");
gotoxy(70, i);
printf("#");
}
}
- 效果图如下
第一部分源码
附上第一部分完整源代码,改变gotoxy()的参数,结合循环语句,即可绘制一个简单的图像
/*
这里是贪吃蛇源代码
chapter 1:
解释下头文件:
time.h 生成随机数要用到
windows.h 要用到里面的函数 gotoxy
---------
1.画围墙
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <windows.h>
// 光标移动函数
void gotoxy(int x, int y)
{
COORD coord = {x, y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
// 绘制围墙
void printwall()
{
/*
chapter 1 绘制围墙部分
围墙大小 70*20, 长70,宽20
*/
// 绘制水平围墙,
for (int i = 1; i <= 70; i++)
{
gotoxy(i, 1);
printf("#");
gotoxy(i, 20);
printf("#");
}
// 绘制竖直围墙
for (int i = 1; i <= 20; i++)
{
gotoxy(1, i);
printf("#");
gotoxy(70, i);
printf("#");
}
}
void init()
{
printwall();
}
int main()
{
init(); // 初始化函数,绘制围墙
system("pause");
return 0;
}