前言
最近呆在家裏,學STM32學的太自閉了,然後突然從別人手上拿到了一個基於C語言的貪喫蛇的課設,所以閒下來寫這一系列文章,給對這個項目感興趣,卻無從下手的童鞋們參考下。我會講的非常詳細,來方便大家理解,理論上只要學過c語言基礎的童鞋都木的問題!
emmm,,,前提是我講的夠好,,紅火火恍恍惚惚。。。。
源碼自取,原版的註釋大多都是英文的而且超級少,,所以我加了點註釋
鏈接:https://pan.baidu.com/s/1eQIGYKTYEQFM5iy3BzgpKg
提取碼:m36y
頁面預覽
項目框架
大家可以先大概看下這個圖,心裏大概有個底,這樣寫起程序來纔不會無從下手。
開發準備知識
通過上面這個圖,我們可以大致瞭解到,這次的東西並不怎麼複雜,主要難度都集中在蛇的移動上面。
大家剛學完c語言基礎的童鞋可能現在會有些懵逼了,怎麼才能在用c語言輸入能動的東西欸。以前都沒學過這種東西啊,,,毫無頭緒欸。。。
其實我們遇到的大多數的課設都會用到一些windows提供的API來幫助我們達到更好的效果。所以如大家所想,我們這次就用到了一些這種函數。。。(大家就把他們當成是c的普通函數使用就可以了。。)
下面我把這些函數整理出來,告訴大家怎麼使用的。。
sleep()函數
C語言標準庫中沒有sleep這個函數,它實際上是一個系統API函數。 SLEEP是一種函數,作用是延時。
說白了,就是一個延時函數,括號裏面輸入的是int型變量,延時的單位是毫秒。
使用它之前,要在文件頂部包含windows.h文件。
這樣:
#include <windows.h>
使用樣例:
sleep(500)//就是休眠0.5s
這個函數我們在貪喫蛇中主要用於控制蛇的速度,,大家可以試試用for循環輸出一個數,然後每次循環都sleep下,隨着sleep括號內的數值減少,輸出的東西就看上去越快,嘿嘿嘿。。
system()函數
system是一個C語言和C++下的函數。windows操作系統下system () 函數詳解主要是在C語言中的應用,system函數需加頭文件後方可調用。
我們這個項目使用這個函數只幹一件事——清屏。
和上一個一樣需要導入windows.h頭文件
system("cls");//效果清屏
至於爲啥子要清屏,嘿嘿,當然是把之前顯示的東西清理掉,實時更新畫面,達到“動態”的效果啦。。
getch()函數
getch()函數使用前也要導入頭文件: conio.h。主要作用從控制檯讀取一個字符,但不顯示在屏幕上。emmm可以理解爲getchar()的升級版吧。。。
goto
emm,,,我也不知道怎麼說他,,功能就是無條件跳轉。應該屬於c語言裏的語法,這裏提下,免主要是怕大家忘記了。
隨機數生成
在遊戲中,食物是要隨機生成的,怎麼隨機生成嘞?其實有這樣的函數,我們只要調用就可以了。
我們使用的下面的模板:
記得包含下time.h的頭文件哦!
srand(time(NULL));//使用時間作爲隨機的種子
food = rand() ;//使用變量food接收
或許大家會有疑問,萬一rand()函數返回的值特別大什麼的,怎麼辦?我們可以使用取餘符號“%”來把它的隨機出來的值進行處理沒從卡在地圖內。這個後面寫到了再詳細解釋叭。。。
定點輸出函數
這個主要用於頂點輸出東西,從而實現可視化的操作,它也是window.h裏面的函數,我們還是一樣套用模板就可以了。
HANDLE hout; //Defining handle objects
COORD cor; //Defining coordinate objects
hout = GetStdHandle(STD_OUTPUT_HANDLE); //Get the handle of the output screen buffer
cor.X = y;
cor.Y = x;
SetConsoleCursorPosition(hout, cor); //Move Cursor
其中,x,y是窗口中點的座標。
#include<cstdio>
#include<cstring>
#include<iostream>
#include <windows.h>
using namespace std;
int main() {
for(int i=0;i<5;i++){
HANDLE hout; //Defining handle objects
COORD cor; //Defining coordinate objects
hout = GetStdHandle(STD_OUTPUT_HANDLE); //Get the handle of the output screen buffer
cor.X = i;
cor.Y = i;
SetConsoleCursorPosition(hout, cor); //Move Cursor
cout<<"<-此點座標爲 "<<i<<","<<i;
}
return 0;
}
效果圖:
大家看代碼可以發現,我沒有使用\n這種換行的代碼,也沒有在開頭空格,它就達到了這種效果。大家可以現在去試試。
關於準備知識就講到這裏,下一章會大致介紹下c語言的結構體的使用,以及怎麼自己寫.h文件,之後就可以開始愉快的寫代碼啦~~