📄 gameframe.cpp
字号:
// GameFrame.cpp : implementation file
//
#include "stdafx.h"
#include "GameApp.h"
#include "GameFrame.h"
#include "resource.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CGameFrame
IMPLEMENT_DYNCREATE(CGameFrame, CFrameWnd)
CGameFrame::CGameFrame()
{
RECT rect;
Create(NULL,"牌类游戏-拱猪", WS_SYSMENU|WS_CAPTION );
CClientDC dc(this);
int width=dc.GetDeviceCaps(HORZRES);
int height=dc.GetDeviceCaps(VERTRES);
GetWindowRect(&rect);
width=(width-(rect.right-rect.left))/2;
height=(height-(rect.bottom-rect.top))/2;
MoveWindow(width,height,(rect.right-rect.left),(rect.bottom-rect.top),true);
for(int i=0;i<4;i++)
{
m_gameinfo[i].m_nNumber=13;
memset(&m_gameinfo[i].m_name,0,20);
m_gameinfo[i].m_score=0;
m_gameinfo[i].m_nMyorient=0; //方位
m_gameinfo[i].m_nGameState=0;
m_gameinfo[i].currentchupai=-1;
}
for(i=0;i<13;i++)
m_gameinfo[0].m_nmycardNumber[i]=(i*4)%52;
newgame=0;
numbertime=0;
m_card_lbuttondown=-1;
list=NULL;
listchart=NULL;
m_ntimetotal=27;
cardfangxiang=0;
flagredrawchupai=0;
}
CGameFrame::~CGameFrame()
{
if(list!=NULL)
delete list;
if(listchart!=NULL)
delete listchart;
}
BEGIN_MESSAGE_MAP(CGameFrame, CFrameWnd)
//{{AFX_MSG_MAP(CGameFrame)
ON_WM_PAINT()
ON_WM_ERASEBKGND()
ON_WM_CREATE()
ON_WM_LBUTTONDOWN()
ON_WM_TIMER()
ON_COMMAND(123,Onstart)
ON_COMMAND(124,Onsend)
ON_COMMAND(125,Onquit)
ON_COMMAND(126,Onchupai)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CGameFrame message handlers
void CGameFrame::OnPaint()
{
CPaintDC dc(this);
CRect rectWnd;
this->GetClientRect(&rectWnd);
CBrush brush;
brush.CreateSolidBrush(RGB(60,120,40));
CBrush *l=dc.SelectObject(&brush);
// rectWnd.
dc.FillRect(&rectWnd,&brush);
dc.SelectObject(l);
dc.SetBkColor(RGB(60,120,40));
dc.SetTextColor(RGB(0,0,255)); //设定文字显示颜色
dc.TextOut(250,490," --合肥电子工程学院制作--"); //输出文字至dc
CPen*penyellow;
penyellow=new CPen;
penyellow->CreatePen(PS_SOLID,1,RGB(250,255,0));
CPen*old=dc.SelectObject(penyellow);
dc.MoveTo(508,0);
dc.LineTo(508,508);
delete penyellow;
dc.BitBlt(229,465,50,50,mdcgame,0,0,SRCCOPY);
dc.BitBlt(229,5,50,50,mdcgame,0,0,SRCCOPY);
dc.BitBlt(10,229,50,50,mdcgame,0,0,SRCCOPY);
dc.BitBlt(465,229,50,50,mdcgame,0,0,SRCCOPY);
CDC *dc1=GetDC();
CBitmap ok;
ok.LoadBitmap(IDB_BITMAP_OK);
CDC memDC;
memDC.CreateCompatibleDC(dc1);
memDC.SelectObject(&ok);
if(m_gameinfo[0].m_nGameState==1)
dc1->BitBlt(225,430,40,20,&memDC,0,0,SRCCOPY);
if(m_gameinfo[2].m_nGameState==1)
dc1->BitBlt(225,55,40,20,&memDC,0,0,SRCCOPY);
if(m_gameinfo[3].m_nGameState==1)
dc1->BitBlt(65,234,40,20,&memDC,0,0,SRCCOPY);
if(m_gameinfo[1].m_nGameState==1)
dc1->BitBlt(400,234,40,20,&memDC,0,0,SRCCOPY);
static int initnum=0;
if(initnum==0)
{
initnum=1;;
DrawInit();
}
flagredrawchupai=1;
if(newgame=1)
{
DrawMycard();
Drawoppsitecard();
Drawleftcard();
Drawrightcard();
Onchupai();
OnOppsitechupai(m_gameinfo[2].currentchupai);//对家出牌
Onrightchupai(m_gameinfo[1].currentchupai); //右邻居出牌
Onleftchupai(m_gameinfo[3].currentchupai); //左邻居出牌
}
if(cardfangxiang==0)
OnTimer(0);
flagredrawchupai=0;
DrawScore();
}
BOOL CGameFrame::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
CRect rectWnd;
this->GetClientRect(&rectWnd);
CBrush brush;
brush.CreateSolidBrush(RGB(60,120,40));
CBrush *l=pDC->SelectObject(&brush);
pDC->FillRect(&rectWnd,&brush);
pDC->SelectObject(l);
pDC->SetBkColor(RGB(60,120,40));
pDC->SetTextColor(RGB(0,0,255)); //设定文字显示颜色
pDC->TextOut(250,490," --合肥电子工程学院制作--"); //输出文字至dc
return TRUE;
}
int CGameFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
CClientDC dc(this);
mdc=new CDC;
mdcgame = new CDC;
bitmapcard=new CBitmap;
mdc->CreateCompatibleDC(&dc);
mdcgame->CreateCompatibleDC(&dc);
bitmapcard->m_hObject = (HBITMAP)::LoadImage(NULL,"res\\card.bmp",IMAGE_BITMAP,798,300,LR_LOADFROMFILE);
mdc->SelectObject(bitmapcard);
CBitmap m_gamebitmap;
m_gamebitmap.LoadBitmap(IDB_BITMAP_GAME);
mdcgame->SelectObject(&m_gamebitmap);
SetTimer(0,100,NULL);
return 0;
}
void CGameFrame::Drawleftcard()
{
//画左邻居
int m_startpoint;
CDC*pdc=GetDC();
CRect rectWnd;
rectWnd.left=55;
rectWnd.right=112;
rectWnd.top=122;
rectWnd.bottom=392;
CBrush brush;
brush.CreateSolidBrush(RGB(60,120,40));
CBrush *l=pdc->SelectObject(&brush);
pdc->FillRect(&rectWnd,&brush);
m_startpoint=254-(m_gameinfo[3].m_nNumber)*75/10-35;
for(int i=0;i<m_gameinfo[3].m_nNumber;i++)
{
pdc->BitBlt(55,m_startpoint+i*75*0.2,57,75,mdc,741,150,SRCCOPY);
}
}
void CGameFrame::Drawrightcard()
{
//画右邻居
int m_startpoint;
CDC*pdc=GetDC();
CRect rectWnd;
rectWnd.left=400;
rectWnd.right=457;
rectWnd.top=122;
rectWnd.bottom=392;
CBrush brush;
brush.CreateSolidBrush(RGB(60,120,40));
CBrush *l=pdc->SelectObject(&brush);
pdc->FillRect(&rectWnd,&brush);
m_startpoint=254-(m_gameinfo[1].m_nNumber)*75/10-35;
for(int i=0;i<m_gameinfo[1].m_nNumber;i++)
{
pdc->BitBlt(400,m_startpoint+i*75*0.2,57,75,mdc,741,150,SRCCOPY);
}
}
void CGameFrame::Drawoppsitecard()
{
//画对家
CDC*pdc=GetDC();
CRect rectWnd;
//this->GetClientRect(&rectWnd);
rectWnd.left=130;
rectWnd.right=400;
rectWnd.top=45;
rectWnd.bottom=120;
CBrush brush;
brush.CreateSolidBrush(RGB(60,120,40));
CBrush *l=pdc->SelectObject(&brush);
pdc->FillRect(&rectWnd,&brush);
// pdc->SelectObject(l);
int m_startpoint;
m_startpoint=254-(m_gameinfo[2].m_nNumber)*57/8-20;//牌的开始显示位置
for(int i=0;i<m_gameinfo[2].m_nNumber;i++)
{
int k,j;
k=(57*i)%741;
j=((57*i)/741)*75;
pdc->BitBlt(m_startpoint+k*0.25,45,57,75,mdc,741,150,SRCCOPY);
}
}
void CGameFrame::DrawInit()
{
list=new CListCtrl;
list->Create(LVS_SMALLICON|LVS_ALIGNTOP|WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER| WS_BORDER,CRect(510,0,760,100),this,120);
list->SetBkColor( RGB(200,220,200) );
list->SetTextBkColor( RGB(200,220,200) );
//list->InsertItem(0,"你好");
//list->InsertItem(1,"欢迎使用此软件");
list->InsertColumn(0,"用户名",LVCFMT_CENTER,100);
list->InsertColumn(1,"战斗次数",LVCFMT_CENTER,80);
list->InsertColumn(2,"积分",LVCFMT_CENTER,70);
DWORD dwStype=GetWindowLong(list->GetSafeHwnd(),GWL_STYLE);
dwStype&=~LVS_TYPEMASK; //Remove the current stype flags
dwStype|=LVS_REPORT; //Add the List stype
dwStype|=LVS_SHOWSELALWAYS;
dwStype|=LVS_NOLABELWRAP;
SetWindowLong(list->GetSafeHwnd(),GWL_STYLE,dwStype); //Set it back into the list view
DWORD dwStyle = list->SendMessage(LVM_GETEXTENDEDLISTVIEWSTYLE,0,0);
dwStyle |= LVS_EX_FULLROWSELECT ;//| LVS_EX_GRIDLINES | LVS_EX_HEADERDRAGDROP;
list->SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM)dwStyle);
DWORD dwEx = list->GetExtendedStyle();
list->SetExtendedStyle(dwEx|LVS_EX_FLATSB);
//list->SetRedraw(true);
//list->SetItemText(1,0,"lyh");
// list->SetItemText(1,1,"5");
//list->SetItemText(1,2,"50");
LV_ITEM lvitem;
lvitem.mask=LVIF_TEXT;//|LVIF_IMAGE;
lvitem.iItem = 0;
lvitem.iSubItem =0;
//lvitem.iImage=0;
lvitem.pszText =_T("wlgc");
list->InsertItem(&lvitem);
list->SetItemText(0,1,"5");
list->SetItemText(0,2,"50");
listchart=new CListCtrl;
listchart->Create(LVS_SMALLICON|LVS_ALIGNTOP|WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,CRect(510,252,760,430),this,121);
listchart->SetBkColor( RGB(200,220,200) );
listchart->SetTextBkColor( RGB(200,220,200) );
/* for (int k=0;k<20;k++)
{
LV_ITEM lvitem1;
lvitem1.mask=LVIF_TEXT;//|LVIF_IMAGE;
lvitem1.iItem = k;
lvitem1.iSubItem =0;
//lvitem.iImage=0;
lvitem1.pszText =_T("lyh ");
listchart->InsertItem(&lvitem1);
}*/
listchart->InsertItem(0,"你好 ");
listchart->InsertItem(1,"欢迎使用此软件 ");
// listchart->InsertItem(2,"你好 ");
// listchart->InsertItem(3,"欢迎使用此软件2 ");
talk.Create(CBS_DROPDOWN | WS_VSCROLL|WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,CRect(510,432,760,460),this,122);
talk.InsertString(0,"你好");
talk.SetCurSel(0);
talk.InsertString(1,"该你了");
// talk.InsertString(2,"该你了1");
// talk.InsertString(3,"该你了2");
m_buttonStart.Create("开始",BS_FLAT| WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,CRect(515,465,565,505),this,123);
m_buttonSend.Create("发送消息",BS_FLAT| WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,CRect(570,465,698,505),this,124);
m_ButtonExit.Create("退出",BS_FLAT| WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,CRect(703,465,753,505),this,125);
buttonchupai.Create("aaaa",WS_CHILD|WS_VISIBLE|BS_OWNERDRAW,CRect(220,349,276,366),this,126);
buttonchupai.LoadBitmaps(IDB_BITMAP17, IDB_BITMAP18, IDB_BITMAP17, IDB_BITMAP17);
buttonchupai.ShowWindow(SW_HIDE);
// buttonliangpai.Create("aaaa",WS_CHILD|WS_VISIBLE|BS_OWNERDRAW,CRect(220,349,274,366),this,127);
// buttonliangpai.LoadBitmaps(IDB_BITMAP19, IDB_BITMAP20, IDB_BITMAP19, IDB_BITMAP19);
// buttonchupai.ShowWindow(SW_HIDE);
//CDC*pdc=GetDC();
//m_card_lbuttondown
// pdc->BitBlt(229,270,57,75,mdc,0,0,SRCCOPY);
}
void CGameFrame::DrawMycard()
{
CDC*pdc=GetDC();
CRect rectWnd;
//this->GetClientRect(&rectWnd);
rectWnd.left=130;
rectWnd.right=400;
rectWnd.top=370;
rectWnd.bottom=455;
CBrush brush;
brush.CreateSolidBrush(RGB(60,120,40));
CBrush *l=pdc->SelectObject(&brush);
pdc->FillRect(&rectWnd,&brush);
pdc->SelectObject(l);
int m_startpoint;
m_startpoint=254-(m_gameinfo[0].m_nNumber)*57/8-20;//牌的开始显示位置
for(int i=0;i<m_gameinfo[0].m_nNumber;i++)
{
int tem=m_gameinfo[0].m_nmycardNumber[i];
int k,j;
k=57*(tem%13);
j=(tem/13)*75;
if(m_card_lbuttondown==i)
pdc->BitBlt(m_startpoint+57*i*0.25,370,57,75,mdc,k,j,SRCCOPY);
else
pdc->BitBlt(m_startpoint+57*i*0.25,380,57,75,mdc,k,j,SRCCOPY);
}
//CDC* pdc=GetDC();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -