好用没用过C++做一个完整一点的东西了,今天开始希望靠我这点微薄的技术来完成这个小游戏。

我现在的水平应该算是菜鸟中的战斗鸡了,所以又很多东西在设计和技术方面肯定会有很大的缺陷,我做这个小游戏的目的单纯为了证明一下我到底还是不是个程序员。。。

这个小游戏是我小时候玩过的一种棋盘类游戏,可能只在我们那边才会知道,不过现在小孩估计已经很少玩了,搞不好要失传了。。。这个游戏名叫马虎吃小人。

大概介绍一下游戏,下面是游戏布局

方框代表老虎,三角形代表小人,每次只能向前后左右一个方向移动一个格,不能斜着走,小人先走。

老虎吃小人规则是老虎附近有小人且小人后面有空格,这样老虎调到空格位置,然后就吃掉小人

游戏大概就是这样,我的计划是先画出棋盘和棋子,然后编写下棋规则,双人对战完成后写单人对战。如果可能的话我会把它放到服务器上,这样可以远程登录就可以玩了。希望都能完成吧。

嗯。。。做人不能好高骛远,先从设计棋盘开始吧。

棋盘是5*5,做成固定大小的太死板了,就按照窗口大小设计吧。

棋盘上下左右距离边框30像素

新建一个单文档,名称为TigerEatPeople,棋盘代码如下

#define BOARD_LINE 5
#define EDG_DISTANCE 30

void CTigerEatPeopleView::DrawBoard(CDC* pDC)
{CRect rect;GetClientRect(&rect);CPen pen1(PS_SOLID, 6, RGB(0, 0, 0));pDC->SelectObject(&pen1);//求水平、垂直间隔if (rect.bottom - rect.top < 60|| rect.right - rect.left < 60){return;}int space_horizontal = (int)((rect.bottom - rect.top - EDG_DISTANCE * 2) / 4);//水平int space_vertical = (int)((rect.right - rect.left - EDG_DISTANCE * 2) / 4);//垂直//画横线for (int i = 0; i < BOARD_LINE; i++){pDC->MoveTo(rect.left + EDG_DISTANCE, rect.top + EDG_DISTANCE + space_horizontal*i);pDC->LineTo(rect.right - EDG_DISTANCE, rect.top + EDG_DISTANCE + space_horizontal*i);}//画竖线for (int i = 0; i < BOARD_LINE; i++){pDC->MoveTo(rect.left + EDG_DISTANCE + space_vertical*i, rect.top + EDG_DISTANCE);pDC->LineTo(rect.left + EDG_DISTANCE + space_vertical*i, rect.bottom - EDG_DISTANCE);}}

  

 

一个很low的棋盘就做好了

然后是画棋子,我的计划是写一个父类

父类的成员变量:name,type,color,chose_color,location,height,weight,isChonse,isMove

父类的方法:Move,PaintPiece

暂时就这些吧,想到再加。

emmm感觉自己把自己坑了,分明几分钟就能开始画棋子的。。。

设计完父类和子类,准备研究画棋子了,可以分成2部分:

1.坐标转换

把电脑客户端像素坐标转换为棋盘坐标,根据棋盘坐标画棋子

2.设计棋子

根据棋盘坐标,设计棋子样式。

void Tiger::PaintPiece(CDC *pDC, CRect rect)
{Location t1, t2;//两个老虎的位置int space_horizontal = (int)((rect.bottom - rect.top - EDG_DISTANCE * 2) / 4);//水平int space_vertical = (int)((rect.right - rect.left - EDG_DISTANCE * 2) / 4);//垂直t1.x = rect.left + 30 + space_vertical;t1.y = rect.top + 30 + space_horizontal;t2.x = rect.left + 30 + space_vertical * 3;t2.y = rect.top + 30 + space_horizontal;CPen pen(PS_SOLID, 1, RGB(255, 0, 0));CBrush brush(RGB(255,0,0));CPen *oldpen = pDC->SelectObject(&pen);CBrush *oldbrush = pDC->SelectObject(&brush);pDC->Ellipse(t1.x - 20, t1.y - 20, t1.x + 20, t1.y + 20);pDC->Ellipse(t2.x - 20, t2.y - 20, t2.x + 20, t2.y + 20);pDC->SelectObject(oldpen);pDC->SelectObject(oldbrush);}

  

今天就先这样吧,今天的代码

链接:https://pan.baidu.com/s/1NVo6k64UhmTzVCXwHIbxOw 密码:pasm

转载于:https://www.cnblogs.com/smh2015/p/9677576.html

C++ MFC棋牌类小游戏day1相关推荐

  1. HTML5 Canvas 射击类小游戏 平滑的移动 思路

    这篇博客主要讲了如何处理HTML5 Canvas 游戏中的角色移动问题. 笔者这几天做了一个 HTML5 Canvas 的射击类小游戏,嗯,名字叫做<DroppingBalls>,大概就是 ...

  2. HTML5/Canvas太空射击类小游戏源码

    下载地址 JavaScript HTML5/Canvas太空射击类小游戏源码,非常值得学习的一款js射击小游戏代码,美术有点老旧,但是代码是完全开源的,有参考价值. dd:

  3. java文字类小游戏2.0版本

    java文字类小游戏 用javaFx面板显示文字类小游戏,目前正已完成基本打斗和打怪爆出武器的开发,后续会不断更新示例图如下: 运行这个类开始代码我已上传至码云,有需要的小伙伴自行拉取代码,git项目 ...

  4. 人与计算机猜数游戏,猜数字(古老的的密码破译类益智类小游戏)_百度百科...

    猜数字 (古老的的密码破译类益智类小游戏) 语音 编辑 锁定 讨论 上传视频 猜数字(又称 Bulls and Cows )是一种古老的的密码破译类益智类小游戏,起源于20世纪中期,一般由两个人或多人 ...

  5. 3D跑酷类小游戏开发实战

    今天,带领大家从零开始开发一款完整的3D跑酷类小游戏,主要面向有一定Egret2D开发经验的小伙伴,手把手教你学习EgretPro开发,快速开启您的EgretPro开发之旅. 下面是整个游戏的制作过程 ...

  6. 基于 Python 的横版 2D 动作类小游戏

    基于 Python 的横版 2D 动作类小游戏 游戏代码 游戏代码 游戏整体代码(基于 pygame 模块开发) // An highlighted block import pygame impor ...

  7. [安卓] 12、开源一个基于SurfaceView的飞行射击类小游戏

    前言  这款安卓小游戏是基于SurfaceView的飞行射击类游戏,采用Java来写,没有采用游戏引擎,注释详细,条理比较清晰,适合初学者了解游戏状态转化自动机和一些继承与封装的技巧. 效果展示    ...

  8. android开发之网络棋牌类在线游戏开发心得(服务器端、Java)

    转自:http://blog.csdn.net/bromon/article/details/253330 Bromon原创 请尊重版权 一个多人在线的棋牌类网络游戏的项目临近尾声,我参与了该项目的整 ...

  9. android开发之网络棋牌类在线游戏开发心得(服务器端、Java) 好文章值得收藏...

    标签: android服务器 2013-10-09 17:28 3618人阅读 评论(0) 收藏 举报 分类: android (11) 转自:http://blog.csdn.net/bromon/ ...

最新文章

  1. jquery改变css,改变style
  2. windows 8 安装iis .net 3.5
  3. maven 打包指定依赖包_Maven打包成Jar文件时依赖包的问题
  4. 这是我见过对 IOC 和 DI 解释的最清楚的一篇文章了!
  5. BUUCTF Web [强网杯 2019]随便注
  6. java流有什么用_在Java中,流比循环有什么优势?
  7. xrdp出现雪花屏,闪退怎么办?
  8. 《I'm a Mac:雄狮训练手册》——2.3 账户类型
  9. python requests下载zip文件_python requests 下载zip包
  10. 4.计算机网络 -- 4.6 综合布线
  11. 用selenium做模拟登录163邮箱(有两种方式,行为链)
  12. Verilog语言程序框架
  13. 计算机机房的安全知识有哪些,计算机机房消防安全管理制度
  14. np.arry()的用法
  15. 理解事务四大特性(Transaction)——原子性、一致性、隔离性和持久性(ACID)
  16. wpsjs插件开发-采用js和wps交互功能
  17. pyqt5代码实例2
  18. java ldap 根ou_【LDAP】LDAP 中 CN, OU, DC 的含义
  19. 一加手机怎么root权限_一加 A3010手机怎样Root,如何获取Root权限?
  20. 基金投资组合中的夏普率

热门文章

  1. 亚马逊鲲鹏系统一款自动下单留评软件
  2. LeakCanary简单分析
  3. 圣斗士星矢游戏抽奖计算机怎么计算,圣斗士星矢手游抽奖技巧解析 教你抽橙卡...
  4. 电子元器件、专业术语和芯片封装的基础知识
  5. Java实现五子棋对战小游戏【完整版】
  6. tl-wdr7300虚拟服务器怎么设置,TP-Link TL-WDR7300路由器怎么设置?
  7. oracle817字符集,Oracle817 版本 不同字符集之间的数据库导入 (转)
  8. PLC的扫描工作的三个过程
  9. mysql数据库课程设计机房管理系统_基于web的机房管理(完整源码+论文全套+教学视频)...
  10. 如何恢复录音删除的录音文件_硬盘分区数据误删除如何恢复?文件删除不用急...