1 / 13

本课内容

本课内容. 接下来的几节课,我们要利用 C 语言开发一些游戏. 本节课开发一个俄罗斯方块游戏. 游戏规则. 开发第一步. 打开资源视图:修改 Menu 的菜单选项:. 注:修改每一项的菜单 ID. 游戏规则. 导入 ICON 资源并修改其 ID :. 游戏规则( 牌型比较 ). 1: 添加一个设置对话框,并修改其 ID 为: IDD_DLG_SETTING. 2: 添加下面的控件,并修改其 ID. 开发第二步(进行游戏实战). 右键上图的对话框: 添加一个类名为: CSettingDlg. 开发第二步(进行游戏实战).

catrin
Download Presentation

本课内容

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 本课内容 接下来的几节课,我们要利用C语言开发一些游戏 本节课开发一个俄罗斯方块游戏 游戏规则

  2. 开发第一步 打开资源视图:修改Menu的菜单选项: 注:修改每一项的菜单ID

  3. 游戏规则 导入ICON资源并修改其ID:

  4. 游戏规则(牌型比较) 1:添加一个设置对话框,并修改其ID为:IDD_DLG_SETTING 2:添加下面的控件,并修改其ID

  5. 开发第二步(进行游戏实战) 右键上图的对话框: 添加一个类名为:CSettingDlg

  6. 开发第二步(进行游戏实战) 添加control bar 和 status bar: 第一步:MainFrm.h中添加成员变量: CToolBar m_wndToolBar; 第二步:MainFrm.cpp中修改OnCreate函数,添加如下代码: 1:CImageList img; //对图片进行处理的类 CString str; //设置按钮的宽度和长度 m_wndToolBar.GetToolBarCtrl().SetButtonWidth(40, 100); //改变属性 m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT |CBRS_TOOLTIPS | TBSTYLE_TRANSPARENT|TBBS_CHECKBOX ); //设置按钮数为 m_wndToolBar.SetButtons(NULL,4);

  7. 开发第二步(进行游戏实战) 2. 添加图像设置"热/hot"状态的的位图 img.Create(28, 28, ILC_COLOR8|ILC_MASK,2,2); img.SetBkColor(RGB(0, 0, 102)); 顺序增添按键的图标 img.Add(AfxGetApp()->LoadIcon(IDI_ICON_START)); img.Add(AfxGetApp()->LoadIcon(IDI_ICON_PAUSE)); img.Add(AfxGetApp()->LoadIcon(IDI_ICON_END)); img.Add(AfxGetApp()->LoadIcon(IDI_ICON_SET)); m_wndToolBar.GetToolBarCtrl().SetHotImageList(&img); img.Detach(); 设置"冷/cold"状态的位图 img.Create(32, 32, ILC_COLOR8|ILC_MASK, 2,2); img.SetBkColor(::GetSysColor(COLOR_BTNFACE));

  8. 开发第二步(进行游戏实战) 顺序增添按键的图标 img.Add(AfxGetApp()->LoadIcon(IDI_ICON_START)); img.Add(AfxGetApp()->LoadIcon(IDI_ICON_PAUSE)); img.Add(AfxGetApp()->LoadIcon(IDI_ICON_END)); img.Add(AfxGetApp()->LoadIcon(IDI_ICON_SET)); m_wndToolBar.GetToolBarCtrl().SetImageList(&img); img.Detach(); 3. 设置文字 m_wndToolBar.SetButtonInfo(0, ID_GAME_START, TBSTYLE_BUTTON, 0); m_wndToolBar.SetButtonText(0, "开始"); m_wndToolBar.SetButtonInfo(1, ID_GAME_PAUSH, TBSTYLE_BUTTON, 1); m_wndToolBar.SetButtonText(1, "暂停"); m_wndToolBar.SetButtonInfo(2, ID_GAME_END, TBSTYLE_BUTTON,2); m_wndToolBar.SetButtonText(2, "结束"); m_wndToolBar.SetButtonInfo(3, ID_GAME_OPTION, TBSTYLE_BUTTON,3); m_wndToolBar.SetButtonText(3, "设置");

  9. 开发第二步(进行游戏实战) 4:设置工具BAR开始的大小 CRect rectToolBar; //得到按钮的大小 m_wndToolBar.GetItemRect(0, &rectToolBar); //设置按钮的大小 m_wndToolBar.SetSizes(rectToolBar.Size(), CSize(32,32));

  10. 绘制游戏客户区 在视图类中添加一个OnDraw()虚函数: 1:函数体内添加DcInit(): if(m_bFistPlay) { m_bFistPlay = FALSE; //用默认的参数,获取当前屏幕设备环境 CDC *pWindowDC = GetDC(); //1.用于映射屏幕的内存设备环境 //获取游戏窗口的大小用于下面设置内存位图的尺寸 CRect windowRect; GetClientRect(&windowRect); m_nWidth = windowRect.Width(); m_nHeight = windowRect.Height(); //内存设备环境与屏幕设备环境关联(兼容) m_memDC.CreateCompatibleDC(pWindowDC); //内存位图与与屏幕关联(兼容),大小为游戏窗口的尺寸 m_memBmp.CreateCompatibleBitmap(pWindowDC,m_nWidth,m_nHeight); //内存设备环境与内存位图关联,以便通过m_memDC在内存位图上作画 m_memDC.SelectObject(&m_memBmp); //2.存储方块位图的内存资源 //内存设备环境与屏幕设备环境关联(兼容) m_memRectDC.CreateCompatibleDC(pWindowDC); //相当于将外部位图rect.bmp动态载入m_hMemRectBmp中 m_hMemRectBmp=(HBITMAP)LoadImage(NULL,"rect.bmp",IMAGE_BITMAP,150,30,LR_LOADFROMFILE); //内存设备环境与内存位图关联,以便通过m_memRectDC在内存位图上作画 SelectObject(m_memRectDC.m_hDC, m_hMemRectBmp); //黑色的黑笔 m_pBlackPen = new CPen(PS_SOLID,1,BLACK); //画刷 m_pGrayBrush = new CBrush(RGB(66,66,66)); m_pBlackBrush = new CBrush(BLACK); }

  11. 绘制游戏客户区 1:函数体内添加DrawGame (CDC *pCDC): 1:绘制游戏区域的背景 //选用黑色画刷,绘制整个游戏所在窗口的背景 pDC -> SelectObject(m_pBlackBrush); CRect rect; GetClientRect(&rect); pDC -> Rectangle(rect); //选用灰色画刷,绘制游戏区域的背景 pDC -> SelectObject(m_pGrayBrush); pDC -> Rectangle(m_iStartY ,m_iStartX, m_iStartY + 301, m_iStartX + 360); pDC->SelectObject(m_pBlackPen); 2:绘制网格

  12. 绘制游戏客户区 //画网格线 if (m_bDrawGrid) { //画横线 for (i=0;i<m_iRow;i++) { pDC->MoveTo(m_iStartY, m_iStartX + i*m_iLarge); pDC->LineTo(m_iStartY+300, m_iStartX +i*m_iLarge); } //画竖线 for (i=0;i<m_iCol;i++) { pDC->MoveTo(m_iStartY+i*m_iLarge, m_iStartX); pDC->LineTo(m_iStartY+i*m_iLarge, m_iStartX+360); } }

  13. 课程讲授完毕 感谢聆听! www.dut-px.com/

More Related