好用没用过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

C++ MFC棋牌类小游戏day1的更多相关文章

  1. C++ MFC棋牌类小游戏day6

    双人单机小游戏做完了,规则那部分还没介绍,暂时不打算介绍了,因为写的这个bug太多,我打算重新修改. 链接:https://pan.baidu.com/s/1XQKPSv0Tw36Qi2TeaRJiM ...

  2. C++ MFC棋牌类小游戏day5

    先整理一下之前的内容: 1.画了棋盘,把棋盘的每个点的状态都保存起来. 2.画棋子,分别用tiger类和people类画了棋子,并且保存了棋子的初始状态. 下面开始设计棋子的移动: 1.单机棋子,选中 ...

  3. C++ MFC棋牌类小游戏day4

    根据昨天的计划,今天开始做下面的内容. 1.鼠标点击事件 2.点击坐标进行处理.(坐标转换) 3.判断选中的位置是否有效. 4.确定选中的棋子,设置棋子的状态和棋子所在坐标的状态. 5.判断移动是否有 ...

  4. C++ MFC棋牌类小游戏day3

    今天开始设计小人棋子. 画法跟画虎一样,唯一不一样的是小人在刚开始会有重叠的情况,所以画起来可能比虎的棋子能够难一点. 我打算用Location结构体中的num来标记每个棋盘坐标存在棋子的个数,isH ...

  5. C++ MFC棋牌类小游戏day2

    反思了一下昨天的设计,觉得略有不足,我决定把棋盘做成单例模式.这样的话需要重新设计棋盘类,emmm,是新建棋盘类. Baord类 成员变量: Location  coordinate;//棋子坐标 b ...

  6. WEBGL学习笔记(七):实践练手1-飞行类小游戏之游戏控制

    接上一节,游戏控制首先要解决的就是碰撞检测了 这里用到了学习笔记(三)射线检测的内容了 以鸟为射线原点,向前.上.下分别发射3个射线,射线的长度较短大概为10~30. 根据上一节场景的建设,我把y轴设 ...

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

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

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

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

  9. Egret初体验–躲避类小游戏

    下面简单介绍一下我这个游戏:基本上就3个画面(准备再添加一个胜利的界面)开始画面,一个按钮,点击进入游戏游戏画面,滚动的背景,触摸移动的老鹰,从天而降的翔,以及右上角的时间条结束画面,显示结果,关注按 ...

随机推荐

  1. HDU 1255 覆盖的面积(线段树面积并)

      描述 给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. Input 输入数据的第一行是一个正整数T(1<=T<=100),代表测试数据的数量.每个测试数据的第一行是一个正 ...

  2. Delphi: 圆形进度(环形进度)

    起源: 重回DC5项目,资源下载美工提供圆形进度条,复习Delphi,为实现其颇觉有趣,遂研究其. 最终效果图如下: 实现: 制作TCircleProgress控件,实现方法参照系统之TGauge控件 ...

  3. mac上为nodejs设置环境变量

    Mac下面的环境变量设置和Linux差不多,一般为这几个文件(左边的先加载): /etc/profile /etc/paths ~/.bash_profile ~/.bash_login ~/.pro ...

  4. day 06 列表去重, 数据类型的补充,编码,深浅copy

    因为重要,所以放前面 列表去重 l1 = [1, 2, 3, 4, 5] l2 = [3, 4, 5, 6, 7] set = list(set(l1 + l2)) # set自动去重,然后变成lis ...

  5. c++ 中map 的find 函数用法

    Map中,find函数用来定位数据出现位置,当含有该数据,即查找成功时,返回数据所在未知的迭代器, 如果查找失败,则返回end()函数所在的迭代器,因此用是否等于end来判断是否查找成功. 程序示例: ...

  6. eclipse下创建maven项目并部署到tomcat服务器(转)

    maven项目部署到服务器有很多方法,可以利用jetty-maven-plugin或者tomcat-maven-plugin,这属于maven的知识点. 通常开发中,需要将项目放在服务器上借助开发工具 ...

  7. springboot 日志1

    技术交流群: 816227112 Spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util Logging,Log4J,  ...

  8. docker-ce-17.09 数据卷和数据卷容器

    docker容器中管理数据两种方式:1.数据卷(Data Volumes)2.数据卷容器(Data Volume Dontainers) 一.数据卷特性:1.数据卷可以在容器之间共享和重用2.对数据卷 ...

  9. 9.17-9.19h5日记

    9.17 ❤关于position(absolute.relative) position:relative: top:100px: right:200px: 如果relative设置值,则是根据它原来 ...

  10. Luogu1070-道路游戏-动态规划

    Solution 用对角线的前缀和快速进行转移,复杂度$O(N^3)$, 洛谷神机太快了$N^3$都能过 然而正解是单调队列优化, 能优化到$O(N^2)$,然而我弱得什么都不会 Code #incl ...