好用没用过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. Java-分治算法

    一.分治算法的原理 分治算法就是将一个规模为N的问题分解成K个规模较小的子问题,这些子问题相互独立且与原问题性质相同,求出子问题的解,就可以得出原问题的解 二.分治算法的伪代码实现 合并算法Merge ...

  2. UVa 1600 Patrol Robot(三维广搜)

    A robot has to patrol around a rectangular area which is in a form of m x n grid (m rows and ncolumn ...

  3. 读取properties文件的信息

    1.properties配置文件的信息 fcsimage_path=C://FCSImage 2.Java代码 public final class Config { private static f ...

  4. JFinal Web开发学习(八)后台集成H-ui-admin前端框架

    h-ui-admin是一个很不错的前端框架h-ui实现的一个后台管理系统的前端. 1.在WebRoot目录下新建admin目录 2.下载h-ui-admin(当前最新是2.5版本)并解压至admin文 ...

  5. spingmvc项目根路径访问不到

    问题: 如何改mvc中项目的欢迎页,或者叫做根路径 一个东西快弄完了,就剩下一个问题,应该是个小问题.就是mvc项目的欢迎页,怎么给改下呢 访问根路径http://localhost/demo 怎么都 ...

  6. Linux入门命令1

    查询及帮助 man查看命令帮助,命令的词典,显示Unix联机参考手册的页面 info从Info参考系统中显示文件 help查看Linux内置命令的帮助,比如cd命令. whatis 为指定命令显示一行 ...

  7. Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

    最近在Tomcat上配置一个项目,在点击一个按钮,下载一个文件的时候,老是会报上面的错误.试了很多方法,如对server.xml文件中,增加MaxHttpHeaderSize的大小,改端口,改Tomc ...

  8. UIImageView中的UIButton不响应事件解决方案

    如下: CGRect imageRect = (CGRect){, , , }; UIImageView *imageView = [[[UIImageView alloc] initWithFram ...

  9. centos 7下安装mysql

    可参考: http://blog.csdn.net/xyang81/article/details/51759200 1.去mysql官方网站查询最新的版本: 2.运行指令: wget http:// ...

  10. 请简要介绍Sping MVC、IoC和AOP

    Sping MVC是在Spring框架上发展起来的框架,它提供了构建Web应用程序的全功能MVC模块,使用了Spring可插入的MVC架构,可以自由的选择各个模块所使用的架构,非常灵活.Spring ...