在我学习游戏开发的过程中,遇到的最大的麻烦就是不知道一个游戏的完整实现过程,代码倒是其次。

这里,总结一下我做过的游戏,主要是梳理整每个步骤。

先看下最终的效果

第1步,准备素材图片

包括鸡蛋、骨头,还有数字以及骨头标识和砸鸡蛋用的小锤。

第2步,声明 Egg类

它只包含2个成员变量

class CEgg
{
public:int bitmap;      //位图int num;        //数目
};

第2步,初始化界面

1.1 还是要在CMainFrame中设置窗口参数以及图标

1.2 和 五子棋游戏 不同,这里,要删掉工具栏和状态栏。(详见代码中CMainFrame类中的OnCreate()函数)

2.加载各个资源、初始化骨头数目、已标记骨头数目、时间等

3.1 随机设置若干个位置,用于显示有骨头的鸡蛋,(num为-1代表有骨头的鸡蛋)

//设置25根骨头    int aa=0;do    {       //以当前秒数为产生随机算法      int k=(rand()*s)%rowNum;       int l=(rand()*s)%colNum;   if(egg[k][l].num!=-1)          {           egg[k][l].num=-1;          aa++;             }               }while(aa!=bone);

3.2 之后计算每个鸡蛋周围的骨头数目。

//给方格赋值,计算骨头数 for(int a=0;a<rowNum;a++)     for(int b=0;b<colNum;b++)         if(egg[a][b].num==0)              {               for(int c=a-1;c<a+2;c++)             for(int d=b-1;d<b+2;d++)                     if(c>=0&&c<rowNum&&d>=0&&d<colNum)                            if(egg[c][d].num==-1)                             egg[a][b].num++;                                      }

3.3  在C**View的OnDraw()函数中显示雷数、显示按钮位图、显示彩色鸡蛋位图(通过随机函数)

//显示按钮
Dc.SelectObject(button[0]);
pDC->BitBlt(250,10,160,160,&Dc,0,0,SRCCOPY);

代码比较多,不全部贴出来了

3.4  设置 当鼠标移动到视类界面时,显示锤子

BOOL CBoneInEggView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{// TODO: 在此添加消息处理程序代码和/或调用默认值if(nHitTest==HTCLIENT){SetCursor(cur);return 1;}return CView::OnSetCursor(pWnd, nHitTest, message);
}

第3步,完成游戏动作响应功能

现在界面已经做好了,只要完成左键按下、左键松开、右键按下功能函数,以及 重新开始功能、扫描功能即可。

分析下每个动作所要完成的功能

左键按下:

首先判断按下的位置,只有在 按钮位图 上面 和 鸡蛋上面 按下左键才是有效的;

如果是在 按钮位图上面单击,则 改变按钮位图的图片(左键松开的时候再重新初始化)

如果是在 鸡蛋位图上面单击,若鸡蛋里没有骨头,则显示相应数字,并重画周围8个位置,当鸡蛋里有骨头时,游戏结束,停止计时

左键松开:

如果是在 按钮位图上面,则 重新初始化界面

如果是在 鸡蛋位图上面,提示玩家,游戏结束

右键按下:(只在鸡蛋上,且 鸡蛋是初始位图状体,该操作有效)

若第一次按下,当前位置显示 警告标志,左上角显示的骨头数目-1

若第二次按下,消除 警告 标志,左上角显示的骨头数目+1

重新开始:

和初始化操作一样,也要设置计时。

扫描功能:

如果当前位置不是带骨头的鸡蛋,且周围有0个带骨头的鸡蛋,则扫描它周围的8个位置,并显示相应的数字

void CBoneInEggView::scan(void)
{for(int i=0;i<rowNum;i++)for(int j=0;j<colNum;j++)if(egg[i][j].num==0&&egg[i][j].bitmap==1){for(int n=i-1;n<i+2;n++)for(int m=j-1;m<j+2;m++)if(n>=0&&n<rowNum&&m>=0&&m<colNum)if(egg[n][m].num!=-1&&egg[n][m].bitmap==0){egg[n][m].bitmap=1;CRect rect;rect.left=n*30+10;rect.right=n*30+40;rect.top=m*30+50;rect.bottom=m*30+80;InvalidateRect(&rect);        }}
}

代码地址

鸡蛋里挑骨头

【VC++游戏开发】智力游戏——鸡蛋里挑骨头(仿扫雷)相关推荐

  1. QQ2006 界面编程之鸡蛋里挑骨头

    QQ2006 界面编程之鸡蛋里挑骨头 作者:韩山师范学院02届 黄锐坤 下载源代码 2007新的一年即将来临,新版本的QQ估计也要跟我们相见.在此献上本人写于8月份的一个练习程序.主要是希望腾讯做界面 ...

  2. 游戏开发技术——游戏引擎

    游戏开发技术--游戏引擎 是什么:游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件.这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易 ...

  3. Unity游戏开发之游戏存档方式

    目录 1.Unity自带存储方式PlayerPrefs 2.XML存储方式 3.Json类型存储方式 1.Unity的序列化问题 2.Unity中支持序列化的类 3.Unity中Json的使用方法 4 ...

  4. 游戏开发、游戏发行与游戏代理之间是一种怎样的关系?

    一款游戏是怎么从无到有地被开发生产出来?又是如何走向市场,为我们广大玩家所接触到?这就要涉及到游戏的开发.发行及代理. 这些看似简单的概念对于刚刚步入游戏世界的新手玩家来说,可能是他们常感困惑的一些疑 ...

  5. HTML5游戏开发/微信游戏开发--猜灯谜游戏源代码分析

    最近码友问我:"你的CSDN是不是废了?",我一看,握了个大草,1年半没更新了--工作.家里琐事太多,每天挤遍全身乳沟也不超过3个小时,所以--所以这全TMD都是借口!有好几个码友 ...

  6. [libGDX游戏开发教程]使用LibGDX进行游戏开发(1)-游戏设计

    声明:本章是一个系列的开始,英文原文是<Learning libGDX Game Development>,大家请周知. [libgdx游戏开发教程]使用Libgdx进行游戏开发(2)-游 ...

  7. 微信小游戏开发教程-游戏实现3

    微信小游戏开发教程-游戏实现3 对象池 由于游戏过程中会创建很多临时对象,这些对象很快又不再使用,垃圾回收器也能帮我们主动回收这部分垃圾,但是回收时间不可控制,同时增大了创建对象的开销,所以我们使用对 ...

  8. 微信小游戏开发教程-游戏实现2

    微信小游戏开发教程-游戏实现2 绘制地面 类似于绘制背景,读者自行完成代码.src/runtime/land.js 简易View系统 坐标布局对于复杂的页面来说维护相当困难,因此这里我们引入布局的概念 ...

  9. 微信小游戏开发教程-游戏实现1

    微信小游戏开发教程-游戏实现1 概述 微信开发者工具官方提供一个飞机大战的游戏Demo,这里我们不再使用这个demo,我们以FlappyBird为例,为了让读者更加容易理解. 源码 https://g ...

最新文章

  1. Codeforces Round #686 (Div. 3) F. Array Partition(二分+线段树)
  2. 孩子听不进道理怎么办?
  3. DevExpress控件使用的一点小问题
  4. codeforces Gym 100338E Numbers (贪心,实现)
  5. [How TO]-ubuntu20.10上安装Pulse Secure客户端
  6. MegaCli命令总结
  7. matlab 聚类 源程序,聚类——KFCM的matlab程序
  8. 7 -- Spring的基本用法 -- 6... Spring 3.0 提供的Java配置管理
  9. 第四周任务:wordCountPro
  10. SVN下载安装及入门使用教程_win10_64位
  11. python alpha beta 剪枝_AlphaBeta剪枝算法
  12. php是什么电器元件,电子元件TP是什么意思 如何封装tp的自定义标签,每个方法代表一个...
  13. 为什么苹果手机拍照会模糊?一起来看手机维修师如何解决
  14. javascript数字转汉字中文数字
  15. wxpython多个面板_wxpython笔记:Wxpython pannel切换
  16. 有隔板高效过滤器和无隔板高效过滤器区别在哪里
  17. php语音信息,PHP代码示例_PHP语音验证接口 | 微米-中国领先的短信彩信接口平台服务商...
  18. EM算法估计GMM (二维高斯混合模型)参数 python 2.7(西瓜书版)
  19. 明源笔试题目--将一个正整数分解质因数
  20. matlab 计算物理,计算物理的MATLAB解法与可视化

热门文章

  1. Openjudge:石头剪刀布
  2. Java面试题总结(乱序版,2020-09-03)
  3. sql 排序时如何加条件进行排序
  4. angularjs 关于ui-router分层使用
  5. 关于contentWindow和contentDocument
  6. Linux - 磁盘基础知识、磁盘管理(类型、引导、分区、挂载、raid、LVM、loop、overlayfs)
  7. 2017.2.18Codeforces Round #398 (Div. 2)
  8. Java垃圾回收(一)
  9. 开源远程连接工具【RustDesk】
  10. 实战PyQt5: 052-停靠窗口控件QDockWidget