zoukankan      html  css  js  c++  java
  • 【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);		
    							}
    			}
    }


    代码地址

    鸡蛋里挑骨头

  • 相关阅读:
    Ajax实现表格实时编辑
    自定义简单分页
    有趣的 0
    关于AJAX的一些事
    JQ中的FormData对象 ajax上传文件
    订单导出
    javaScript事件委托
    javascript递归函数
    详解javascript中this的工作原理
    详解JavaScript对象继承方式
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7080383.html
Copyright © 2011-2022 走看看