C语言版贪吃蛇:第一部分

C语言版贪吃蛇:第一部分

概述

这是一篇关于如何用最简单的C语言知识,编写出一个控制台版本的贪吃蛇的教程。

教程只要求最基本的C语言知识:
- 基本的语句,变量,函数。
- 一点点结构体的知识。
- 不需要指针,文件操作等等高级知识。

教程分为4部分,并且每一个部分都将能够实现一些功能,然后能够先运行起来。


最终的程序

一张截图

这里写图片描述

需要实现的基本的功能:

  • 绘制围墙
  • 绘制蛇,食物
  • 实现蛇的运动
  • 判断蛇是否吃到食物,并增长身体
  • 判断是否撞墙,吃到自己

Chapter 1

在这一部分,我们要实现第一个功能

  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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章