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