如何用C++实现一个django 控制台界面面的扫雷

C++实现简单的扫雷游戏(控制台版)
转载 & & 作者:咸猫
这篇文章主要为大家详细介绍了C++实现简单的扫雷游戏,控制台版的扫雷游戏希望大家喜欢,感兴趣的小伙伴们可以参考一下
C++新手的代码,请各位多包涵。
用C++写的一个简单的控制台版扫雷游戏。玩家通过输入方块的坐标来翻开方块。
只是一个雏形,能够让玩家执行翻开方块的操作并且判断输赢,还未添加标记方块、游戏菜单、记录游戏时间、重新开一局等等的功能。
玩家输入坐标的方式来翻开方块只适用于小型的“雷区”,若“雷区”大了,用坐标会变得很不方便。
代码片段扫雷V1.1
#include&stdio.h&
#include&Windows.h&
#define YELLOW FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY
#define CYAN FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY
#define ORANGE FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY
#define PURPLE FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY
const int STARTX = 30;
const int STARTY = 6;
const int MAXX = 9;//雷区的宽
const int MAXY = 9;//雷区的高
const int BOMBNUMBER = 10;//地雷数量
class Cube{
bool ifHaveB//该方块是否含有炸弹
bool ifO//该方块有无被玩家翻开
int nearBombN//该区块周围8格的含有炸弹的方块的数量
void setOpen() {
//将Open的值改为true
bool getOpen() {
//获取ifOpen的值
return ifO
void setNearBombNumber(int number) {
//给nearBombNumber赋值
nearBombNumber =
void haveBomb() {
//给方块放置地雷
ifHaveBomb =
bool getIfHaveBomb() {
//获取ifHaveBomb的值
return ifHaveB
int getNearBombNumber() {
//获取nearBombNumber的值
return nearBombN
void resetCube(bool ifhavebomb = false, bool ifopen = false, int nearbombnumber = 0){
//初始化成员数据
ifHaveBomb =
nearBombNumber =
Cube cube[MAXX][MAXY];
void GoTo(int x, int y);//定位光标
void setBomb(int bombNumber);//生成bombNumber个炸弹并且放进随机的方块中
void show();//显示地雷阵
int checkAndSetNearBombNumber(int x, int y);//检查当前方块周围的雷数量
void gameStart();//初始化游戏
void showXY();//显示雷区坐标
bool player(bool &life);//玩家输入坐标翻开方块
void message(bool life);//玩家游戏结束后输出的信息
void autoOpen(int x,int y);//玩家翻开的方块为不含雷且周围无雷的方块时,自动翻开周围无雷的方块
bool ifWin();//判断玩家是否扫雷成功
void showBomb();//游戏结束后显示地雷位置
int main() {
gameStart();
bool life = true, win =
while (player(life) && !ifWin()) {
message(life && ifWin());
void GoTo(int x, int y) {
//定位光标
COORD coord = { x,y };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
void setBomb(int bombNumber = BOMBNUMBER) {
//生成bombNumber个炸弹并且放进随机的方块中
srand((unsigned)GetCurrentTime());
while (bombNumber--) {
int x = MAXX + 1, y = MAXY + 1;
while ((x &= MAXX || y &= MAXY) || cube[x][y].getIfHaveBomb() == true) {
x = rand() % MAXX;
y = rand() % MAXY;
cube[x][y].haveBomb();
void show() {
//显示地雷阵
system("cls");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), CYAN);
for (int i = 0;i & MAXY;i++) {
GoTo(STARTX, STARTY + i);
for (int j = 0;j & MAXX;j++) {
if (cube[j][i].getOpen() == true) {
if (cube[j][i].getIfHaveBomb() == false) {
if (cube[j][i].getNearBombNumber() == 0) { //挖开无雷的方块显示该方块周围多少个方块含雷,若为0则显示空格
printf(" ");
printf(" %d", cube[j][i].getNearBombNumber());
printf("×");//有雷的方块被挖开后显示×
printf("■");//未翻开的方块用■显示
void showXY() {
//显示坐标轴
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), CYAN);
GoTo(STARTX - 3, STARTY + MAXY / 2);
printf("Y");
GoTo(STARTX + MAXX, STARTY - 2);
printf("X");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);
for (int i = 0;i & MAXY;i++) {
GoTo(STARTX - 1, STARTY + i);
printf("%d ", i);
for (int i = 0;i & 2 * MAXX;i += 2) {
GoTo(STARTX + i + 1, STARTY - 1);
printf("%d ", i / 2);
int checkAndSetNearBombNumber(int x, int y) {
//检查当前方块周围的雷数量
int num = 0;
if (cube[x][y].getIfHaveBomb() == true) {
//若该方块有地雷,则不用判断它周围有几个雷
//用两个循环当前方块周围8格扫一遍
for (int i = -1; i &= 1; i++) {
for (int j = -1; j &= 1; j++) {
int nx = x +
int ny = y +
if (!(ny == y && nx == x) && (nx &= 0 && nx &= MAXX - 1) &&
(ny &= 0 && ny &= MAXY - 1)) {
if (cube[nx][ny].getIfHaveBomb()) {
cube[x][y].setNearBombNumber(num);//设置该方块附近的地雷的数量
void gameStart() {
//初始化游戏
for (int i = 0;i & MAXY;i++) {
for (int j = 0;j & MAXX;j++) {
cube[j][i].resetCube();
setBomb();
for (int i = 0;i & MAXY;i++) {
for (int j = 0;j & MAXX;j++) {
checkAndSetNearBombNumber(j, i);
bool player(bool &life) {
//玩家输入坐标翻开方块
GoTo(STARTX - 3, STARTY + MAXY + 1);
printf("请输入坐标(x,y),x和y用空格隔开");
GoTo(STARTX + MAXX / 2, STARTY + MAXY + 2);
scanf("%d%d", &x, &y);
if ((x & 0) || (x & MAXX - 1) || (y & 0) || (y & MAXY - 1)) {
//当玩家输入的坐标超出范围时
GoTo(STARTX - 3, STARTY + MAXY + 3);
printf("该坐标不存在,请重新输入坐标");
GoTo(STARTX + MAXX / 2, STARTY + MAXY + 2);
} else if (cube[x][y].getIfHaveBomb() == true) {
//当玩家翻开的方块有地雷时
cube[x][y].setOpen();
} else if (cube[x][y].getOpen() == false) {
//当玩家翻开的方块无雷时
if (cube[x][y].getNearBombNumber() == 0) {
autoOpen(x, y);
cube[x][y].setOpen();
cube[x][y].setOpen();
} else if (cube[x][y].getOpen() == true) {
//当玩家输入已翻开方块的坐标时
GoTo(STARTX, STARTY + MAXY + 3);
printf("该方块已被挖开,请再次输入坐标");
GoTo(STARTX + MAXX / 2, STARTY + MAXY + 2);
void message(bool result) {
if (result == true) {
//玩家胜利时输出的信息
showBomb();
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), YELLOW);
GoTo(STARTX - 1, STARTY + MAXY + 1);
printf("祝贺你,你胜利了!");
GoTo(STARTX, STARTY + MAXY + 2);
//玩家失败时输出的信息
showBomb();
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), PURPLE);
GoTo(STARTX - 1, STARTY + MAXY + 1);
printf("××你踩中地雷了××");
GoTo(STARTX, STARTY + MAXY + 2);
void autoOpen(int x, int y) {
//玩家翻开的方块为不含雷且周围无雷的方块时,自动翻开周围无雷的方块
for (int i = -1; i &= 1; i++) {
for (int j = -1; j &= 1; j++) {
int nx = x +
int ny = y +
if (!(ny == y && nx == x) && (nx &= 0 && nx &= MAXX - 1) &&
(ny &= 0 && ny &= MAXY - 1) && cube[nx][ny].getOpen() == false) {
if (cube[nx][ny].getNearBombNumber() == 0) {
cube[nx][ny].setOpen();
autoOpen(nx, ny);
cube[nx][ny].setOpen();
bool ifWin() {
//判断玩家是否扫雷成功达到游戏结束条件
int num = 0;
for (int i = 0;i & MAXX;i++) {
for (int j = 0;j & MAXY;j++) {
if (cube[j][i].getOpen() == false) {
if (num == BOMBNUMBER) {
void showBomb() {
//游戏结束后显示地雷位置
for (int i = 0;i & MAXY;i++) {
for (int j = 0;j & MAXX;j++) {
if (cube[j][i].getIfHaveBomb() == true) {
cube[j][i].setOpen();
以上就是本文的全部内容,希望对大家的学习有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具Win32API下用VC写扫雷游戏(一)_百度经验
&&&&&&&&&电脑软件Win32API下用VC写扫雷游戏(一)<div class="audio-wp audio-wp-1" data-text='Win32API下用VC写扫雷游戏(一)写在前面的话:首先,我是一个业余爱好者而非专业的程序员,因此在描述一些专业术语以及代码编写的风格上难免会显得不够专业,请各位大师专家们勿喷,谢谢。我们探讨的重心放在如何构思,如何编写,以及在编写过程中出现的各类问题应该如何去解决等方面。希望给大家提供一些学习上的借鉴与帮助,让大家少走点弯路,这也是我写这系列文章的初衷。' data-for=''>听语音
百度经验:jingyan.baidu.com写在前面的话:首先,我是一个业余爱好者而非专业的程序员,因此在描述一些专业术语以及代码编写的风格上难免会显得不够专业,请各位大师专家们勿喷,谢谢。我们探讨的重心放在如何构思,如何编写,以及在编写过程中出现的各类问题应该如何去解决等方面。希望给大家提供一些学习上的借鉴与帮助,让大家少走点弯路,这也是我写这系列文章的初衷。百度经验:jingyan.baidu.com一台装有VC6.0软件的电脑 百度经验:jingyan.baidu.com1
要写一个扫雷游戏,第一步我想应该是先构思,可以找个本子拿根笔写一下,主要思考以下几个问题:
一、我这个扫雷要做成什么样子的?与他人的扫雷有何区别?
重复一个别人的作品我想意义并不太大,关键是要有自己原创的东西。我做的扫雷游戏主要是增加了音效、增加了爆炸特效、增加了倒计时模式,其目的只有一个是为了营造一个紧张刺激的扫雷氛围,所以我才会给这个游戏起名为“雷霆拆雷”,是“拆”而不是“扫”。
二、我要用什么样的开发环境和编程语言来编写?
无论你用什么,关键一个就是你要熟悉的。目前主流的编程语言应该都能写出扫雷游戏来。我是用VC6.0写的win32下的C语言版扫雷。
三、我要如何设计这个游戏的主界面?
主界面要先设计好。如果一开始没设计好后期要来修改就会发现困难重重。
1、我是设计了一个9格X 9格的扫雷,先从简单的入手,不要眼高手低,简单有简单的好处,在调试的过程中容易找到问题并排除。
2、要提供菜单给用户,像爆炸特效并不是每次都出现就好,出现多次反而会降低用户体验,要提供给别人选择的机会,象音效图标也是这么一回事。
3、图标资源我选用别人设计的一套hello kitty图标(在chinaz上下载的免费图标资源),因为我之前做的定时关机器和MP3播放器等软件也是用这个系列的,这样做是出于保持一致性和个性化风格的考虑。
4、各种位图资源的设计我遵照模仿windows自带扫雷位图资源的原则进行设计,软件外观皮肤我也是用了别人设计的皮肤进行直接套用。以下为扫雷游戏主界面效果图:
四、我要从何入手?
我想这必然是最难的一步,如何迈出第一步是写程序最难的。每个人的第一步估计都不一样。我的切入点是从绘制雷区开始的,我的想法是先能够在软件上显示出雷区,然后鼠标点一下雷区,相应的位置就能够凹陷下去。
可能你们思考的问题与我有些不同,但是最重要的就是头脑里要先有一个大概的想法,然后再一步步去尝试与实践,逐步修正与完善软件的制作。
END百度经验:jingyan.baidu.com
本系列文章只适合已经掌握C语言及windows程序设计理论知识,想尝试独立编写一个windows程序的朋友,对零基础学习的朋友我不推荐一上来就拿这个程序练手。
& 本扫雷游戏提供下载参考的地址:
http://pan.baidu.com/share/link?shareid=220647&uk=
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。投票(1)已投票(1)有得(0)我有疑问(0)◆◆说说为什么给这篇经验投票吧!我为什么投票...你还可以输入500字◆◆只有签约作者及以上等级才可发有得&你还可以输入1000字◆◆如对这篇经验有疑问,可反馈给作者,经验作者会尽力为您解决!你还可以输入500字相关经验003213热门杂志第1期你不知道的iPad技巧3722次分享第1期win7电脑那些事6551次分享第2期新人玩转百度经验1375次分享第1期Win8.1实用小技巧2631次分享第1期小白装大神1874次分享◆请扫描分享到朋友圈586被浏览53,247分享邀请回答zhihu.com/question/24786878/answer/对了,//------------------------分割线 原答案----------hhhhhh我花了一两天无聊做的打飞机游戏,一个字符当一个像素,一个二维数组当图片。设置好一个游戏主循环,每次渲染就是std::cout来输出字符布满一个屏幕(当然更好的做法是移动控制台的光标,在需要画图的地方输出字符,会更快,控制台输出字符真的巨慢),停顿些许时间之后可以用system("cls")来清空屏幕,然后进入下一个循环。不过如果你说比较厉害的游戏,那肯定只用控制台是搞不定的,你可以学一下DirectX或者OpenGL等渲染API,2D游戏可以cocos2dx等等。渲染api是一堆一堆的,关键是你的游戏逻辑要写好,剩下渲染反而不是最重要的问题。最近学校在搞什么“黑框框”程序设计比赛,准备写个简单点3D soft renderer试试=v=-??????????????更新:好吧只是std::cout这种基础的字符输出比较慢…还是建议使用stdio.h的windows api。解决闪屏可以使用双缓冲,CreateConsoleScreenBuffer得到另一个屏幕缓冲区,WriteConsoleOutputCharacter()和WriteConsoleOutputAttribute()来写一整串带颜色的文字,一块一块地写会比一个一个写快很多,就像3d渲染引擎里Draw Call太多也会变得慢。代码写的比较随便…老实说是不能看的… 28152 条评论分享收藏感谢收起764 条评论分享收藏感谢收起扫雷核心算法c++实现
#include &time.h&
#include &stdio.h&
#include &iostream&
class Algo{
Algo(int w=10,int h=10);
void show();
void flip(int x,int y);
bool satisfy(int x,int y);
int**//0,1,2,3,4,5,6,7,8
int** fieldM//0,1
int**//0,1
#include &coreAlgo.h&
Algo::Algo(int w,int h){
//initialize h&w.
this-&w=w;
this-&h=h;
//initialize field&mine array.
field=new int*[w];
fieldMine=new int*[w];
shadow=new int*[w];
for(int i=0;i&w;i++){
field[i]=new int[h];
fieldMine[i]=new int[h];
shadow[i]=new int[h];
srand( (unsigned)time( NULL ) );
for(int i=0;i&w;i++){
for(int j=0;j&h;j++){
if(rand()%100&50)
fieldMine[i][j]=0;
fieldMine[i][j]=1;
shadow[i][j]=1;
int result=0;
for(int i=0;i&w;i++){
for(int j=0;j&h;j++){
if(satisfy(i-1,j-1) && fieldMine[i-1][j-1]==1)
if(satisfy(i,j-1)&& fieldMine[i][j-1]==1)
if(satisfy(i+1,j-1)&& fieldMine[i+1][j-1]==1)
if(satisfy(i-1,j)&& fieldMine[i-1][j]==1)
if(satisfy(i+1,j)&& fieldMine[i+1][j]==1)
if(satisfy(i-1,j+1)&& fieldMine[i-1][j+1]==1)
if(satisfy(i,j+1)&& fieldMine[i][j+1]==1)
if(satisfy(i+1,j+1)&& fieldMine[i+1][j+1]==1)
field[i][j]=
void Algo::show(){
for(int i=0;i&w;i++){
for(int j=0;j&h;j++){
cout&&fieldMine[i][j]&&& &;
cout&&&&&&&&&&&& &;
for(int j=0;j&h;j++){
cout&&field[i][j]&&& &;
cout&&&&&&&&&&&& &;
for(int j=0;j&h;j++){
cout&&shadow[i][j]&&& &;
void Algo::flip(int x,int y){
//(x-1,y-1)(x,y-1)(x+1,y-1)
//(x-1,y)(x,y)(x+1,y)
//(x-1,y+1)(x,y+1)(x+1,y+1)
int result=0;
if(satisfy(x,y) && fieldMine[x][y]==0 && shadow[x][y]==1){
shadow[x][y]=0;
flip(x-1,y-1);
flip(x,y-1);
flip(x+1,y-1);
flip(x-1,y);
flip(x+1,y);
flip(x-1,y+1);
flip(x,y+1);
flip(x+1,y+1);
bool Algo::satisfy(int x,int y){
if(x&w && x&=0 && y&h && y&=0)
作者:doom_ood如何用C++写扫雷?????????????_百度知道
如何用C++写扫雷?????????????
用于存放12个小位图 int m_//指示当前游戏的级别 bool m_&#47,其对应的mfc类为csort。定制input对话框,则再查看周围八个区域是否有雷直到有雷为止并显示;6和60分别是横纵的附加值;周围雷数
// 4. 重载cmainframe中precreatewindow,并设置相应属性,使其窗体大小固定,其相应的mfc类为ccustomer。定制sort对话框,内含九个静态文本控件;/控制区的位图按钮 int m_//最大的地雷区域 cstring m_ //雷的列数 int m_ibombfound,如果未知区域有雷,游戏停止; &#47,应用面向对象的可视化编程语言visual c++给出了个功能模块的具体实现方法;/&#47用VC++编写扫雷游戏用VC++编写扫雷游戏 王洪亚 本文从分析windows扫雷游戏的功能特点开始、标题条;2+8,其中六个显示排行榜的姓名和时间。
将雷全部扫清后,则显示一对话框将你的姓名记入排行榜。以时间排序。
为完成上述功能、控制区域。 5,则将其置为有雷而不管是否真的有雷。可选择初。
雷区上部左侧显示总雷数减被标明有雷区域的数目,m_ibombnum。该对话框用于定制雷数;/决定初始时是否是雷 bool issel。 2. 在资源编辑器中对应于雷区的每个小区域的13个属性。用画笔或其他绘图工具绘制出相对应的13个10乘10的16色小位图.cx/2-8,10;/判断递归时是否被处理过
/&#47、高级(id-game-senior)、自定义(id-game-custom)、颜色(id-game-color)、英雄榜(id-game-sort)、退出(id-game-exit),当要显示被炸死的状态时应动态销毁该按钮.create(&new&quot. 游戏的主要工作就是呈现不断变换的图形或动画,并按用户的输入交互进行显示,而windows文档-----视窗构架中的视窗的功能正是接受用户输入并负责显示,因此由cview类来完成扫雷的大部分工作,rcclient.cx&#47,这样就固定了显示区域的大小为初始10乘10个雷和外加雷区上部的控制区域。
雷区上部中间位置显示一按钮用于开局和显示鼠标动作的结果。
雷区上部右侧显示扫雷的时间。如果没雷,则显示周围雷数,如果周围没雷;指示被认为是雷的数目 cbitmapbutton m_/排雷者认为是雷时置一(但是不一定真是雷) } ,用于边框、菜单,去除打印和状态条支持,在资源编辑器中修改菜单和相应的加速键、高三级并可自定义雷数和区域大小;/指示当前是彩色还是单色 cbitmap m_bmbomb[12];用于记录并显示扫雷时间 ctime m_///&#47,并重新创建一位图对应正常和被炸死两种状态,将该位图按钮的id号定为id_game_begin,这样一来当点击按钮时便可重新开始游戏. 定义类bomb,封装每颗雷的相关属性: 1. 应用appwizard创建基于sdi的应用程序/雷的数目 int m_&#47,使其与windows扫雷游戏一致。具体为开局(id-game-begin)、帮助(id-help);/游戏未结束置0,已清除所有的雷置1,被炸死置2。
重载cbombview中oncreate函数创建位图按钮,该位图按钮的两幅位图对应了正常、排雷正确两种状态;/雷的行数 int m_/判断区域是否被处理过且周围有雷 / m_/&#47,三个对应于小人表情的20乘20的16色小位图,供更换颜色时使用的一套与前16个对应的单色位图,显示时间和雷数的0~9十个数字位图(底色为黑色).cy = 10*15+6; cs.cx = 10*15+60; /&#47,这其实是一个递归过程。
点击鼠标右键于未知区域、初级(id-game-junior)、中级(id-game-middle)。
定制customer对话框,内含三个静态文本控件和三个编辑控件,三个编辑控件分别对应成员m_irownum,m_icolumnnum,内含一个静态文本控件和一个编辑控件,20),部分代码如下。 cs.style=ws_overlapped|ws_sysmenu| ws_border|ws_minimizebox。 class bomb { public: &#47。在cbombview中定义下列成员变量记录相关操作的结果或对象的状态。 bomb m_bomb[30][30],部分代码如下。
getclientrect(&rcclient); crect rect( cs、中,编辑控件用于在游戏成功结束时输入姓名,其对应的mfc类为cinput。 3;/定时器是否开启 int m_/,bs_defpushbutton|ws_visible| bs_ownerdraw,rect,this,id_game_begin); m_button.loadbitmaps(idb_face1, idb_face2);
显示时间的功能相对比较简单,在响应第一个wm_lbuttomdown消息时开启定时器,并记录游戏开始的时间,在wm_time消息响应函数ontimer中获得当前时间,减去游戏开始时的时间,在显示时间的客户区域显示得到的时间差(用数字位图),当游戏结束时(排完全部雷或被炸死)关闭定时器,停止显示。
wm_lbuttomdown消息响应函数onlbuttomdown是处理用户输入的主要执行者,函数首先判断点中位置是否是雷,是则关闭定时器,销毁原位图按钮,创建一对应正常和被炸死两种状态的新位图按钮,并调用setstate将其设置为pushdown(小人哭的状态),将m_bgameover,置为true标志游戏结束,否则先调用setstate 设置位图按钮为pushdown (小人笑的状态),并在onlbuttomup中设置位图按钮为正常状态,然后调用caculate函数记下周围雷的数目,最后调用invalidate使客户区无效,迫使ondraw函数重绘客户区域,在调用invalidate时不应重画背景,避免闪烁,这样就完成了在雷区按下左键的响应动作。
wm_rbuttomdown消息响应函数onlbuttomdown将被认为有雷位置的m_ibombnum.findbomb置一,减少左上角的雷记数,然后判断是否真正全部排完了雷,是则结束游戏弹出input对话框,让扫雷的人输入姓名,在响应idok通知码时将其写入注册表,没有全部排完则使客户区无效,迫使ondraw函数重绘客户区域完成在雷区按下右键的动作。
ondraw函数在每次点击左键或右键时都会被调用重雷区和控制区域,因为点击情况的复杂性和雷属性的多元化导致ondraw函数需要精心设计。
函数caculate计算某个雷周围的雷数,根据前面的分析知道,计算某个雷周围的雷数本身就是一个递归过程,在编制时应注意递归的边界条件,稍不注意会陷入无穷递归而耗尽了系统的资源。 6. 菜单命令的响应是游戏交互的另一个重要方式,下面的九个命令响应函数分别与九个菜单项相对应,用以完成用户的更新和设置命令。
ongamebegin完成初始时间清零,随机布雷,依据颜色指示装载12幅小位图,使雷区无效调用ondraw重绘等工作。其中随机布雷就是多次调用rand(),根据其返回值决定m_bomb[i][j].isbomb的值。
ongamecustom首先弹出ccustomer对话框,在用户输入设置后响应idok通知码时将用户输入的雷数、行列数分别赋给cview的数据成员m_ibombnum、m_irow、m_icolumn,得到框架窗口的指针,用其调用movewindow将窗口调至所需大小,销毁原位置的位图按钮,并在x轴坐标为新窗口宽1/2减8处,y轴坐标为新窗口顶部加30的位置创建一新按钮。最后调用ongamebegin重新开始游戏。
ongamejunior、ongamemiddle、ongamesenior三个函数与ongamecustom类似,只不过将分别赋给cview的数据成员m_ibombnum、m_irow、m_icolumn以固定的值,其大小可由编程者自定,笔者定为junior(20,8,8,)、middle(40,13,13)、senior(99,20,25)。
ongamecolor函数销毁原位图按钮,根据重新装载位图的标志m_iscolor来创建新的位图按钮,将装载12幅单色位图的标志取反,调用ongamebegin重新开始游戏。
ongamesort函数根据当前游戏级别从注册表中读出排名并弹出sort对话框显示结果。到现在为止,一个自己编制的扫雷游戏就基本完成了,将数百行代码编译一下,找出小错误,最后build一遍,run一下,好了,可爱的扫雷游戏就出现在你的面前了。怎么样,自己的劳动成果并不比microsoft的差吧,而且你还可以把小位图画成各种样子,当然你自己要认得出才行了。; &#47,应用visual c++的具体技术细节如下,行列数,显示所有的地雷,并提供了编写小游戏程序的一般方法和visual c++的一些使用技巧。
首先分析扫雷的最基本功能。
点击鼠标左键于未知区域;记录游戏开始时的时间 bool m_&#47
采纳率:21%
为您推荐:
其他类似问题
您可能关注的内容
扫雷的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 c语言控制台好看界面 的文章

 

随机推荐