摘要:掃雷最原始的版本可以追溯到年一款名為方塊的游戲。兩年后,湯姆安德森在的基礎上又編寫出了游戲地雷,由此奠定了現代掃雷游戲的雛形。年,微軟公司的羅伯特杜爾和卡特約翰遜兩位工程師在系統上加載了該游戲,掃雷游戲才正式在全世界推廣開來。
行吧,開始了
#include#include//包含圖形庫頭文件#define ROW 9 //行#define COL 9 //列 共81個格子#define MINE_NUM 18//雷的數量#define IMG_SIZE 40
void GameInit(){ //1,創建窗口 一行有九張圖片每張圖片40px, initgraph(IMG_SIZE*ROW, IMG_SIZE*COL,SHOWCONSOLE); //加載圖片(賦值) load加載 第一個參數,存儲圖片的變量 錯誤:字符集問題 for (int i = 0; i < 12; i++) { char file[20] = ""; sprintf(file, "./image/%d.jpg", i); loadimage(&img[i], file, IMG_SIZE, IMG_SIZE); } //布雷 for (int i = 0; i < MINE_NUM; ) { //排除輔助區 int row = rand() % ROW+1;//0-8 1-9 int col = rand() % COL+1; if (mine[row][col] == 0) { mine[row][col] = 9; i++; } } //雷所在的九宮格,要加1(雷除外) for (int i = 1; i < ROW+1; i++) { for (int k = 1; k < COL+1; k++) { if (mine[i][k] == 9) { //遍歷雷的九宮格 細心 for (int a = i - 1; a <= i + 1; a++) { for (int b = k - 1; b <= k + 1; b++) { //非雷的格子加1 if (mine[a][b] != 9) { mine[a][b]++; } } } } } } //加密 開始時全部為掩碼圖 for (int i = 1; i < ROW + 1; i++) { for (int k = 1; k < COL + 1; k++) { mine[i][k] += 20; } }}
void MouseEvent(){ //檢測是否有鼠標消息 if (MouseHit()) { //獲取鼠標消息,坐標,左鍵還是右鍵 MOUSEMSG msg = GetMouseMsg(); //把坐標轉化成數組下標 openr = msg.y / IMG_SIZE+1; openc = msg.x / IMG_SIZE+1; //判斷是左鍵還是右鍵 switch (msg.uMsg) { case WM_LBUTTONDOWN: //如果格子沒有打開,就打開格子,否則不做處理 if (mine[openr][openc] > 9) { mine[openr][openc] -= 20; OpenNull(openr,openc); num++; } break; case WM_RBUTTONDOWN: //標記 if (mine[openr][openc] > 9 && mine[openr][openc] <= 29) { mine[openr][openc] += 20; } else { mine[openr][openc] -= 20; } break; } }}
//遞歸打開所有空白,以及空白周圍的數字void OpenNull(int row,int col){ //點擊的是空白才能打開 if (mine[row][col] == 0) { for (int i = row - 1; i <= row + 1; i++) { for (size_t k = col-1; k <= col+1; k++) { //如果為空或者不是雷就打開 if ((mine[i][k] == 20 || mine[i][k] != 29)&& mine[i][k]>9) { mine[i][k] -= 20; num++; OpenNull(i, k); } } } }}
void Jude(){ //判斷輸 if (mine[openr][openc] == 9) { int isok = MessageBox(GetHWnd(), "是否繼續!", "點到雷了", MB_OKCANCEL); if (isok == IDOK) { mine[openr][openc] += 20; } else { exit(666); } } //判斷贏 if (num == ROW*COL - MINE_NUM) { int isok = MessageBox(GetHWnd(), "是否繼續!", "點到雷了", MB_OKCANCEL); if (isok == IDOK) { num = 0; GameInit(); } else { exit(666); } }}
int main(){ GameInit(); show(); //循環處理游戲邏輯 while (1) { MouseEvent(); GameDraw(); Jude(); } getchar(); return 0;}
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/123179.html
摘要:如果覺得安裝太慢,還可以加入國內鏡像下載我比較習慣用豆瓣的。之前的文章有講過滴常用源鏡像清華阿里云中國科技大學華中理工大學山東理工大學豆瓣在里輸入打包成的命令。 ?導語 這篇文章是我之前很想寫的,但是拖到了今天! 咳咳咳......主要是有粉絲讓我安排一下!寵粉.jpg 很多新手小伙伴兒是...
摘要:如果覺得安裝太慢,還可以加入國內鏡像下載我比較習慣用豆瓣的。之前的文章有講過滴常用源鏡像清華阿里云中國科技大學華中理工大學山東理工大學豆瓣在里輸入打包成的命令。 ??導語 這篇文章是我之前很想寫的,但是拖到了今天! 咳咳咳......主要是有粉絲讓我安排一下!寵粉.jpg 很多新手小伙伴兒...
摘要:上一期咱們用語言實現了三子棋的小游戲語言實現三子棋今天我們再來寫個掃雷的游戲,說起掃雷,相信大家都不陌生,可能許多朋友還是玩掃雷的高手。 ? ? ?上一期咱們用C語言實現了三子棋的小游戲? C語言實現三子棋? ? ? ?今天我們再來寫個掃雷的游戲,說起掃雷,相信大家都不陌生,可能許多朋友還是...
摘要:條消息語言入門三子棋語言實現詳細版的博客博客條消息語言入門三子棋語言實現詳細版的博客博客我們將雷盤初始化為統一的符號。 目錄 1.原理簡介 2.分布目標及代碼實現 3.總結 1.原理簡介 ?首先我們需要一個空的雷盤,在其中隨機埋入十枚雷,當我們排這顆雷時,若此位置為雷,則游戲失敗,若不...
目錄 ?前言:●由于作者水平有限,文章難免存在謬誤之處,敬請讀者斧正,俚語成篇,懇望指教! ???????? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ——By 作者:新曉·故知 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ...
閱讀 2675·2023-04-25 15:15
閱讀 1316·2021-11-25 09:43
閱讀 1603·2021-11-23 09:51
閱讀 1079·2021-11-12 10:36
閱讀 2880·2021-11-11 16:55
閱讀 954·2021-11-08 13:18
閱讀 723·2021-10-28 09:31
閱讀 2048·2019-08-30 15:47