前言:
想起來做這個是因為那時候某天知道了原來黑框框里面的光標是可以控制的,而且又經常聽人說起這個,就鍛煉一下好了。
之前就完成了那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【好弱的名字】,測試顏色,測試方向鍵的代碼。【反映說有行號不好復制,那取消好了】
/********************************** 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 主站蜘蛛池模板: 久久免费视频播放 | 三级网站大全 | 在线中文字幕视频 | 欧美成人一区二区三区片免费 | 久久青青 | 久久99这里只有精品 | 成人1区2区| 欧美色综合天天久久综合精品 | 日韩一二三区视频 | 中文字幕免费看 | 欧美一区 | 黄色片在线观看免费 | 精品免费一区 | 亚洲毛片在线观看 | 日本精品视频网站 | 91在线一区| 成人精品 | 91中文字幕在线观看 | 国产精品嫩草99av在线 | 日韩精品免费视频 | 国产精品美女视频一区二区三区 | 97视频在线| 国产免费观看一区二区三区 | 国产精品自产拍 | 国产一区精品视频 | 欧美日韩精选 | 成人精品在线视频 | 欧美一区二区三区成人 | 日日做夜夜操 | 久久av一区二区三区 | 亚洲精品视频在线观看免费视频 | 污视频网站在线观看 | 精品亚洲一区二区 | 亚洲一级毛片 | 久久久久久久久久国产 | 操操网| 射久久| 一区二区久久久 | 四虎成人在线视频 | 欧美99 | 欧美性猛片aaaaaaa做受 |