毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 论文 >> 正文

VC++长沙麻将毕业设计论文 第5页

更新时间:2008-4-19:  来源:毕业论文

VC++长沙麻将毕业设计论文 第5页

 else if(pai[i]>9&[pai]<17)

            {

                tirteen=0;

                break;

            }

           else if(pai[i]>18&[pai]<26)

            {

                tirteen=0;

                break;

            }//如果任何一张牌为非么九和非字牌,则不能胡十三么,

           if(tirteen) return 1;//如果全部是么九和字牌,加上进入该段程序的牌只有一个对,则十三么胡牌

       }

    }

    else//可能为全不靠

    {

      nowordpos=14;//记录下最后一个不是字牌的位置

      for (i=13;i>=0;i--)

       {

          if(pai[i]<=26)

             {

              nowordpos=i;

              break;

             }

       }

      if(nowordpos<=8)//如果非字牌有9个以上,肯定不能胡全不靠

     {

      istirteen=1;

      for(i=0;i<=nowordpos;i++)

        {

           if(pai[i+1]-pai[i]<3&&pai[i+1]/9==pai[i]/9)//如果存在同一花色里两张可以吃别人的牌,则不能胡全不靠

           {

              istirteen=0;

              break;

            }

        }

      if(istirteen)

      {

       for(i=0;i<=nowordpos-1;i++)

 

        {

           for(j=i+1;j<=nowordpos;j++)

              if(pai[i]==pai[j] mod 9)

               {

                  istirteen=0;

                  break;

               }

            if(istirteen==0) break;

        }

     }

 

if(istirteen) return 1;

    }

    }

}

 

2.4麻将功能的实现

在完成游戏的基本的功能后,接下来就可以进行对游戏内部功能的设计和实现,然后针对性把游戏完成.

2.4.1界面的绘制

主表面(primary surface)是用户在屏幕上可以看到的,它是显示内存的一部分。所有DirectDraw程序都有主表面,而且只有一个。它在DirectDraw表面对象之前就已经存在了,因此不能改变它的尺寸、格式和位置。主表面有一个很重要的特性——翻转。页面翻转用于程序中,可以产生相当平滑、不闪烁的动画。一个可以翻转的主表面实际上是两个表面,一个是可见的,一个是不可见的。不可见的表面称为后备缓冲区。当发生表面翻转时,后备缓冲区就成为可见的,而以前的可见表面则成为后备缓冲区

 

从屏外表面位块传输

DDSURFACEDESC2 desc;

desc.dwSize = sizeof(desc);

desc.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;

desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; //这是离屏页面

desc.dwWidth = w;

desc.dwHeight = h;

dwFlags指明了程序使用DDSCAPS结构,并设置缓冲区的高和宽。由DDSCAPS结构中的DDSCAPS_OFFSCREEN标志指定该表面是屏外缓冲区,在DDSURFACEDESC结构中将高和宽设为wh,然后使用IDirectDraw::CreateSurface方法来创建表面。因为两个屏外表面的大小一样,创建第二个缓冲区只需要再运行一次IDirectDraw::CreateSurface即可(当然要用不同的指针)。你还可以在DDSCAPS中设置DDSCAPS_SYSTEMMEMORYDDSCAPS_VIDEOMEMORY 来指定屏外缓冲区放在显示内存还是系统内存。将位图存放在显示内存可以加快后台缓冲区与屏外表面之间的数据传输速度,这在位图动画中非常重要。但是,如果你为屏外缓冲区指定了DDSCAPS_VIDEOMEMORY又没有足够的显示内存调入整个位图,当创建该表面时,程序就会返回一个DDERR_OUTOFVIDEOMEMORY的错误值。
 
 将位图文件调入屏外表面

 

::ColorKey()//镂空的实现

{

    key.dwColorSpaceHighValue = RGB(255,255,255);

    key.dwColorSpaceLowValue = RGB(255,255,255);

    pic->SetColorKey(DDCKEY_SRCBLT,&key);

    return;

}
 
 
给出了设置colorkey的两种不同方法。第一种方法是注释内的3行,先设定DDCOLORKEY结构中color key的范围,再调IDirectDrawSurface::SetColorKey方法将color key 设置成黑色(假定位图在颜色表中以黑色作为调色板索引项255)。第二种方法是调用DDSetColorKey函数设置颜色的RGB值来选择color key,黑色就是RGB(0,0,0)DDSetColorKey 函数调用了DDColorMatch函数,DDColorMatch存储放置于lpDDSOne表面的位图的0,0位置像素的颜色值,然后用提供的RGB值赋给0,0位置的像素,并将该颜色值屏蔽。
  完成了这一步骤后,原来的颜色就可重新放回0,0处并用正确的Color Key调用DDSetColorKey函数,调用成功后,color key就放入DDCOLORKEY 结构中的成员变量dwColorSpaceLowValue ,同时也拷贝到dwColorSpaceHighValue成员,然后再调用IDirectDrawSurface::SetColorKey设置Color key CLR_INVALIDDDSetColorKey DDColorMatch函数中另一个有用的变量。如果在DDSetColorKey中以该值作为color key,位图左上角的像素就会作为color key使用。要想实现这一功能,需要调入位图文件All.bmp,将0,0处的像素值该为黑色,保存更改,然后如下改变对DDSetColorKey的调用: DDSetColorKey(lpDDSOne, CLR_INVALID);重新编译DDEX4DDEX4就会使用0,0处的像素值作为color key了。
 

 

    if(colorkey==1)

    {//拷贝源表面到目标表面dd

    dd->pBackSurf->BltFast(x,y,this->pic,&rt,DDBLTFAST_WAIT|DDBLTFAST_SRCCOLORKEY);

上一页  [1] [2] [3] [4] [5] [6] [7] [8] 下一页

VC++长沙麻将毕业设计论文 第5页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。