C++ MFC棋牌类小游戏day1

Stella981
• 阅读 537

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

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

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

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

C++ MFC棋牌类小游戏day1

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

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

C++ MFC棋牌类小游戏day1

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

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

棋盘是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);
    }

}

 C++ MFC棋牌类小游戏day1

一个很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

点赞
收藏
评论区
推荐文章
Python进阶者 Python进阶者
2年前
基于HTML5打造的一款别踩白板小游戏
背景简介别踩白板这个游戏相信大家都玩过,这个是基于HTML5打造的简单小游戏,在PC端和移动端都能够运行,适应多种平台,今天我们使用原生JS搭配JQuery构建这个小游戏别踩白板。一、思路分析整体页面是一个大的矩形,长宽比例大概是3:2,然后游戏开始,不断有白板降落,然后一行是4个板,一块黑色板块,其余三块是白色板块,通过板块的点击事件绑定,然后判定是什么
Easter79 Easter79
2年前
three.js
第1章课程介绍介绍了微信小游戏的概念以及相关的由来,从宏观上对于微信小游戏的定位和价值有一个明确的认识第2章微信小游戏平台与特性讲了微信小游戏平台的相关特性,包括微信小游戏工程的建立,微信小游戏开发工具的详细使用,以及微信小游戏相关API的实战等第3章THREEJS与WebGL核心概念通过理论和实战,讲解了什么是webgl、什
Stella981 Stella981
2年前
Protobuf在微信小游戏开发中的使用技巧
微信小游戏发布后,许多HTML5游戏开发者希望把现有的HTML5游戏迁移到微信小游戏中,但由于一些技术上的问题导致进程卡壳。通过梳理Egret社区、白鹭小游戏开发技术讨论群等途径的反馈后发现,有不少开发者遇到的难题在于「如何在微信小游戏中使用Protobuf」。白鹭引擎架构师王泽在近期发布了一个开源项目protobufegret,提供了一个可
Wesley13 Wesley13
2年前
JAVA游戏编程学习笔记(四)Java PinBall 简单弹球小游戏【1】
之前写了一个非常简单的Java2D小游戏底层框架,为了把这个游戏框架丰富起来,这阵子需要实际完成几个小游戏代码,这样才能在实际中检验游戏框架使用性!先来一个简单的小游戏:JavaPinBall简单弹球小游戏 先上图!!(http://static.oschina.net/uploads/space/2015/1110/202955_
Stella981 Stella981
2年前
LayaAir:用3D项目演示老项目如何适配微信小游戏
在QQ上线玩一玩后,引擎部同事彻夜鏖战,刚刚终于上线了1.7.15beta版。推出了QQ玩一玩与微信小游戏的一键发布功能。小编送上一篇刚出炉的技术干货,希望能给开发者带来帮助。之前有介绍过微信小游戏的创建与调试全流程,从1.7.15beta开始,这个流程更加完善,尤其是TS与JS的开发者,也可以做到一键发布微信小游戏了。本篇尽可
Stella981 Stella981
2年前
Spring cloud微服务安全实战
热点规则热点就是经常访问的数据。很多时候我们希望争对某一些热点数据,然后来进行限制。比如说商品的信息这个服务,我们给它做一个限流,qps是100,某一天我想做一个秒杀活动,可能会有很大的流量,这个时候一个商品的qps就达到100了,这个时候就会把流量给他控制住。其他的商品就都看不了。我希望秒杀这个商品,只把秒杀这个上商品id来的请求,它的qps限
Stella981 Stella981
2年前
React入门教程第二课
相信大家看过不少项目,对这个文件的说明都很少。不知道是大家默认了都会,还是说默认都不去更改这个文件。反正我刚开始看总觉得很难看懂。这篇教程,我根据项目构建需求编写这个文件。将会对这个文件的内容做一个比较详细的说明。里面用到的工具只保证满足需求,不保证是最好用的。后续也会对这个文件做持续的优化。一、首先我们先看看现在的gulpfil
Stella981 Stella981
2年前
Egret白鹭开发微信小游戏程序跳转功能(由一个小游戏跳转到另一个小游戏)
假设我们要实现的功能是从小游戏A跳转到小游戏B对于小游戏A:(1)在platform.ts中添加代码如下:!(https://oscimg.oschina.net/oscnet/7b57e0521728aa535881f153dee952fb118.png)/平台数据接口。由于每款游戏
Wesley13 Wesley13
2年前
2048小游戏开发过程以及感想
2048小游戏开发过程以及感想以前我就是一个忠实的2048粉丝,曾一度沉迷于其中,然而最好的战绩却也是止步于两个4096,这让我羞愧不已。今日,我利用了一些空些时间,整理了一下思路,创作了这个小游戏,虽然功能不是很完善,但是麻雀虽小五脏俱全。一开始我便确定了整体的界面:分为4\4方格,然后定义每个方格(UIView)中的属性:用于显示数字
Stella981 Stella981
2年前
29天吐血整理前端学习路线,送给那些正在自学或准备自学前端的人!
前言最近这段时间经常有朋友问我前端技术现在如此繁杂,我到底应该如何学习。这个话题太大了,几句话回答不好;也由于这个问题确实困扰了很多前端开发人员,所以我也就着手系统的输出这篇文章。虽然这篇文章花了很长时间,肯定也有其局限性;希望各位不吝指出。入题我们俨然能感受到前端岗位现在已经发展成了最重要的研发岗位之一,所以对我们