24点游戏中,每次点击一下发牌就会随机产生4张扑克牌。要实现这个效果,有两个问题需要解决。
- 1.如何随机出不同的扑克牌
- 2.如何将扑克牌显示在客户区
游戏效果图:
解决办法:
1.如何随机出不同的扑克牌:
这个问题很容易解决,直接用rand()随机函数就行了。
我们知道我们导入到BitMap里面的每个图片在resource.h里面都有一个宏定义,对应一个对应的数字。
所以,我们随机这些数字就行了。如:card1.LoadBitmap(140); //载入位图,140为ID值
当然这里的140我们用一个变量来代替。
2.如何显示扑克牌在界面上:
我这里举个例子,显示两张图片:在Onpaint()里面的else()语句里面添加如下代码。
void CPoint24Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CPaintDC pDC(this);
CBitmap card1,card2,card3,card4,*pOldBitMap;
CDC *dc, MemDC; //dc当前设备描述表,MemDC临时设备描述表
dc = GetDC(); //获得当前设备描述表指针
MemDC.CreateCompatibleDC(dc); //创建与当前设备描述表兼容的设备环境
card1.LoadBitmap(140); //载入位图,140为ID值
pOldBitMap = MemDC.SelectObject(&card1); //将扑克牌位图选进设备描述表中
dc->BitBlt(50,30,BitmapW,BitmapH,&MemDC,0,0,SRCCOPY); //拷贝临时DC中的位图到当前设备描述表
MemDC.SelectObject(pOldBitMap); //恢复原来DC位图
DeleteObject(&card1); //删掉扑克牌位图
////////////////////////
card2.LoadBitmap(141);
pOldBitMap=MemDC.SelectObject(&card2);
dc->BitBlt(130,30,BitmapW,BitmapH,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(pOldBitMap);
DeleteObject(&card2);
MemDC.DeleteDC();//删除后台DC
CDialog::OnPaint();
}
}