前言:
想起來做這個是因為那時候某天知道了原來黑框框里面的光標是可以控制的,而且又經常聽人說起這個,就鍛煉一下好了。
之前就完成了那1.0的版本,現在想放上來分享卻發現有蠻多問題的,而且最重要的是沒什么注釋【果然那時候太年輕】!現在看了也是被那時候的自己逗笑了,就修改了一些小bug,增加了算是詳盡而清楚的注釋,嗯,MSDN上面對各種函數的解釋很詳細的【又鍛煉一下英語】,順便讓開頭和結尾的展示“動”了起來,就當作1.5的版本好了。
這個只是給出了一個實現的思路,其中肯定也有很多不合理的地方和可優化之處,希望能供大家參考和交流。
過程:
期間也是遇到了蠻多困惑的。
1.最先的是怎么知道按了方向鍵,左查右找,說法有好幾個版本呢,就想看能不能自己測試一下自己的好了,再查再找,好了,感謝寫了測試方向鍵的人;
2.再比如說怎么消除窗口中一行的緩沖,因為不消除就一直在哪,視覺效果不好,翻查了一下資料,就寫了delLine()這個來做這個事情了;
3.設定顏色時,在cmd里面help color知道了顏色的參數,但是通過數字0-9來設定的太暗了,發現有更亮的,比如0A,在setColor()里面用它卻說類型不對,于是上MSDN,發現還可以用宏,就想通過如'BACKGROUND_INTENSITY | BACKGROUND_RED '之類來完成,就想怎么去代替那個宏,覺得每次寫一長串好麻煩。然后換了各種類型的參數類型和不定長參數什么的,發現還是不行,后來一想,萬一它支持數字10呢,A不就是10么?!一測,成了;
4.還有一些判斷狀態的順序,嗯啊,這些要先想好再下手,不然左改右改很麻煩呢;
5.別的困惑不怎么記得了。。。
代碼:
下面分別給出LittleMines【好弱的名字】,測試顏色,測試方向鍵的代碼?!痉从痴f有行號不好復制,那取消好了】
/********************************** c語言命令行+方向鍵簡易版掃雷* Author:AnnsShadoW* Version:1.5* Time:2015-11-29********************************//********************************* 運行環境:Windows10-64bit* 編譯環境:Codeblocks-13.12********************************///用到的都導進去吧#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <time.h>#include <windows.h>//定義各種判斷狀態的ASCII碼//MINE是定義翻開格子中的‘*'號#define MINE 42#define ESC 27#define ENTER 13#define SPACE 32#define UP 72#define DOWN 80#define LEFT 75#define RIGHT 77//定義類型狀態,方便后續判斷#define bool int#define true 1#define false 0#define ROW 10#define COLUMN 10#define ALL_MINES 15//當前位置的結構體typedef struct currentPosition_struct{ int x; int y;} currentPosition;//每一個小格的結構體typedef struct blockCondition_struct{ //是否被覆蓋了 bool beCovered; //以它為中心周圍的雷數 int minesNum;} blockCondition;//光標的位置數組currentPosition cursorPos[ROW][COLUMN];//雷區地圖的數組blockCondition minesMap[ROW][COLUMN];//剩下的格子數int leftBlocksNum = ROW * COLUMN;//光標在光標位置、雷區地圖中的下標int index_x = 0, index_y = 0;//設置窗口前后背景色void setColor(unsigned short color);//開頭的歡迎“動畫”void welcomeToMyGame();//游戲地圖初始化void gameInitailize();//以某格子為中心計算驚天雷數量void countMines();//獲取鍵盤的輸入void keyBoardInput();//指定光標的位置void setCurPos(int y, int x);//移動光標的位置void moveCursor(int y, int x);//檢測每一步的結果bool checkResult(int y, int x);//輸出游戲界面void printMap();//游戲退出后的“動畫”void gameOver(char *str);//刪除窗口中一行的緩沖void delLine(int y);int main(){ setColor(10); system("cls"); welcomeToMyGame(); gameInitailize(); countMines(); printMap(); for(;;) { setCurPos(cursorPos[index_y][index_x].y, cursorPos[index_y][index_x].x); keyBoardInput(); } return EXIT_SUCCESS;}void setColor(unsigned short color){ HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); //對設置之后的輸出有效 SetConsoleTextAttribute(hCon, color);};void welcomeToMyGame(){ int i = 0; char introductions0[] = "LittleMines"; char introductions1[] = "--"; char introductions2[] = "Version 1.5"; char introductions3[] = "Author:AnnsShadow,thank you
主站蜘蛛池模板:
凉山|
锡林郭勒盟|
格尔木市|
突泉县|
达州市|
汕头市|
滦平县|
邳州市|
洪江市|
武山县|
班玛县|
莱西市|
禄丰县|
新平|
内黄县|
双柏县|
保亭|
华安县|
博湖县|
湾仔区|
浑源县|
宜川县|
武冈市|
常熟市|
沁水县|
衡山县|
乌苏市|
寻乌县|
三台县|
丰镇市|
遂昌县|
永嘉县|
三门峡市|
温宿县|
庆安县|
东台市|
永清县|
马山县|
朔州市|
响水县|
公主岭市|