扫雷游戏 C语言实现
实现了如下功能:
鼠标控制
左键点开
右键标记
中键自动翻开(效果同windows扫雷)
首次点击不会中雷
下面是几张效果图:
这是初始界面,3种难度级别,难度同经典版windows扫雷
Beginner
不同颜色的数字和标记功能
赢了!
游戏结束,可以点击Restart重新开始
Expert级别难度
可以点击这里下载玩:
最后是代码,VS2013编译运行成功(Release):
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define _X_ 0
#define _Y_ 0
#define GotoXY(x,y) CC.X=x,CC.Y=y,SetConsoleCursorPosition(hOut,CC)
#define DoAt(x,y,p) tmpCC=CC,GotoXY(x,y),p,CC=tmpCC,SetConsoleCursorPosition(hOut,CC)
#define SetColor(fc,bc) SetConsoleTextAttribute(hOut, fc|bc)
//#define WHITESKIN //注释掉这一行就是黑色,否则就是白色
#ifndef WHITESKIN
#define F_BLACK 0 //前景黑色
#define F_LBLACK FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE //前景灰色
#define F_WHITE FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY //前景白色
#define F_LRED FOREGROUND_RED|FOREGROUND_INTENSITY //前景浅红
#define F_LBLUE FOREGROUND_BLUE|FOREGROUND_INTENSITY //前景浅蓝
#define F_LGREEN FOREGROUND_GREEN|FOREGROUND_INTENSITY //前景浅绿
#define F_LBLUEGREEN FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_INTENSITY //前景浅蓝绿
#define F_LPURPLE FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_INTENSITY //前景浅紫
#define F_LYELLOW FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY //前景浅黄
#define B_BLACK 0 //背景黑色
#define CORORSET
#else
#define F_BLACK FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY //前景白
#define F_LBLACK FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE //前景灰色
#define F_WHITE 0 //前景黑色
#define F_LRED FOREGROUND_RED //前景红
#define F_LBLUE FOREGROUND_BLUE //前景蓝
#define F_LGREEN FOREGROUND_GREEN //前景绿
#define F_LBLUEGREEN FOREGROUND_BLUE|FOREGROUND_GREEN //前景蓝绿
#define F_LPURPLE FOREGROUND_RED|FOREGROUND_BLUE //前景紫
#define F_LYELLOW FOREGROUND_RED|FOREGROUND_GREEN //前景黄
#define B_BLACK BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE|BACKGROUND_INTENSITY //背景白
#define CORORSET system("color f0")
#endif
//■□☆★●◎※①②③④⑤⑥⑦⑧⑨⑩┓┛━┗┏┫┣┻┳╋┃
#define UNDIG "■"
#define BLANK "□"
#define MINE "●"
#define MARKED "★"
COORD CC = { 0, 0 };
COORD tmpCC = { 0, 0 };
HANDLE hOut, hIn;
DWORD dwMode, nOER;
INPUT_RECORD inRecord;
SMALL_RECT rc;
struct rfMouse{
int Button; //1-left 2-right 3-mid
COORD position;
} rfmouse;
int level[3][7] = {
/*
level[lv][0~1] w h
level[lv][2] Number of Mine
level[lv][3~4] RemnantMines (X,Y)
level[lv][5~6] Restart Back (X,Y)
*/
{ 8, 8, 10, 4, 12, 4, 14 },
{ 16,