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

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

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

先看下终于的效果

第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()函数中显示雷数、显示button位图、显示彩色鸡蛋位图(通过随机函数)

//显示按钮
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步,完毕游戏动作响应功能

如今界面已经做好了。仅仅要完毕左键按下、左键松开、右键按下功能函数,以及 又一次開始功能、扫描功能就可以。

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

左键按下:

首先推断按下的位置,仅仅有在 button位图 上面 和 鸡蛋上面 按下左键才是有效的。

假设是在 button位图上面单击。则 改变button位图的图片(左键松开的时候再又一次初始化)

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

左键松开:

假设是在 button位图上面。则 又一次初始化界面

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

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

若第一次按下。当前位置显示 警告标志。左上角显示的骨头数目-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);
							}
			}
}

代码地址

鸡蛋里挑骨头

时间: 2024-08-04 13:10:11

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

鸡蛋里挑骨头——读《浪潮之巅》

本书在业界的口碑很好,作者视角很大,不仅把 IT 史的时间线梳理的很好,很多见解读起来也给人颇多启发.但仔细读,还是会发现有很多地方值得推敲. 首先,在我个人阅读的过程中,很明显感觉到,作者评判这些科技企业时,没有做到客观中立.作者对一家公司及其行为的褒贬很大程度上基于结局的好坏.比如前两章的 AT&T 和 IBM.作者提到 1925 年 AT&T 拆分北电时用的词是"专注于美国市场"."歪打正着",因为结局是好的:后来提到 AT&T 第一次

在线捉鬼游戏开发之一 - 游戏流程介绍与技术选用

看过芒果台某知名节目的朋友们应该对“谁是卧底”不会陌生:N人参与,N-1人拿到同一个词(如馒头),剩余一人拿到另一个词(如包子),N人都只能看到自己的词,故没人知道自己是否和别人描述的不一样.游戏采用轮流发言制,想尽办法描述自己手中的词,让自己不被怀疑,且又不能让真正的卧底猜出自己和别人不一样,直到猜出谁是卧底. 此类游戏的有趣之处在于描述的尺度要拿捏在明确且不点破之间,机器没有人的智慧那么发散,人的参与感就更重要了(不然好比我喜欢的飞行棋,你还真不知道网络对面的对手是不是条狗). 捉鬼 这个游

JavaFX横幅类游戏开发 教训 游戏贴图

上一节课,我们即将完成战旗Demo有了一个大概的了解.教训这,我们将学习绘制游戏地图. 由于JavaFX 2.2中添加了Canvas相关的功能,我们就能够使用Canvas来实现游戏绘制了. 游戏地图绘制主要用到GraphicsContext.drawImage方法. drawImage(Image image,double sx,double sy,double sw,double sh,double dx,double dy,double dw,double dh); 当中image 表示源图

Android游戏开发之游戏帧动画的播放与处理

带你走进游戏开发的世界之游戏帧动画的处理<ignore_js_op> 1.帧动画的原理 帧动画帧动画顾名思义,一帧一帧播放的动画就是帧动画. 帧动画和我们小时候看的动画片的原理是一样的,在相同区域快速切换图片给人们呈现一种视觉的假象感觉像是在播放动画,其实不过是N张图片在一帧一帧的切换罢了.            如图所示:人物行走动画的实现方式, 4帧行走动画在播放区域 一帧一帧向左切换播放 给人们一种播放动画的假象 ,图片就动了起来, 很简单吧,其它三方向播放动画的方法类似我就不再一一举例

cocos2d-x游戏开发之游戏主循环

首先还是就我个人的理解,讲讲游戏引擎的处理流程. 其实游戏逻辑简单化就是一个死循环,如下: 1 2 bool game_is_running = true; 3 4 while( game_is_running ) { 5 update_game(); 6 display_game(); 7 } 我们所看到的游戏画面,游戏音乐,以及一些触控,输入等.在逻辑上就是这么一个死循环.这个循环一直在跑,期间会处理一些列的事件,简化之就是上面的两个函数. cocos2d-x引擎也是如此,所有的逻辑都是在这

unity3f游戏开发之游戏设计中运营重用体系

游戏设计中,运用重用体系重用资源包括有以下几个设计目的: 1).方便玩家识别 为了方便玩家识别某一类游戏中的要素,而采用的设计目的.如某种某种动物的皮毛的道具图标.为了区分不同,除了基本图素相同外,不同之处只是以变换颜色和更改名称加以区分,这样可以方便玩家快速识别图标. 2).降低客户端的容量 游戏中最占用硬盘空间的,其实是大量的资源,如模型文件.贴图等美术资源文件.为了降低客户端的容量,开发者除了要采用压包技术进行资源压包外,在设计的过程中,设计师还要考虑到客户端容量大小的问题(特别是某些2D

unity3d游戏开发之 游戏贴图、模型基本规范(Q&amp;A)

一个游戏角色的好坏的贴图可以说起了70%的作用.对于面数比较低的角色而言游戏角色的大部分细节都是靠贴图来表现的. Q 游戏的贴图在尺寸上有些什么要求?是不是必须是正方形的? A 游戏贴图的长宽都必须是2的倍数的任意组合,例如2,4,8,16,32,64.....1024等.并不一定必须是正方形,例如长宽可以是256,128也可以是1024*32. Q 一个游戏角色是否只可以有一张贴图? A 不是.一个角色可以有好几张贴图,根据不同情况有不同要求.例如有些网络游戏,它的角色的上身,下身,手脚头的贴

csdn vip文章:Unity游戏开发-小游戏-非常简单的游戏-unity-

原文https://blog.csdn.net/qq_20484877/article/details/81841190 1*创建物体 Create菜单下 3D Object菜单下Cube 1.1设置属性x100   z100作为地面  1.2在创建一个立方体物体 1.3 Create菜单下 3D Object菜单下Cube 1.4复制立方体 创建一个空物体放立方体 代码 #pragma strict function Start () { } var speed : int =5; var s

Unity3D游戏开发之如何发布Android游戏

怎么在Unity3D游戏开发软件里,发布Android游戏?如果你感到有疑问,不如看看下面笔者的介绍. 新装的软件会自带一个demo,我们的讲解就是拿demo打不一款Android游戏,点击File -> build seting.如果你已经创建好一个场景需要发布,也可以加载进来跟着以下的步骤进行. 我们要发布到Android平台上,所以在这里就需要选择Android平台,再点击player settings.当然这里还需要你对游戏的部署信息进行写修改,值得注意的是:如果你使用的是破解版Unit