C++ MFC棋牌类小游戏day1

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

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

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

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

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

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

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

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

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

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

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

#define BOARD_LINE 5
#define EDG_DISTANCE 30

1void CTigerEatPeopleView::DrawBoard(CDC* pDC) 2{ 3 CRect rect; 4 GetClientRect(&rect); 5 CPen pen1(PS_SOLID, 6, RGB(0, 0, 0)); 6 pDC->SelectObject(&pen1); 7 8 //求水平、垂直间隔 9 if (rect.bottom - rect.top < 60 10 || rect.right - rect.left < 60) 11 { 12 return; 13 } 14 int space_horizontal = (int)((rect.bottom - rect.top - EDG_DISTANCE * 2) / 4);//水平 15 int space_vertical = (int)((rect.right - rect.left - EDG_DISTANCE * 2) / 4);//垂直 16 //画横线 17 for (int i = 0; i < BOARD_LINE; i++) 18 { 19 pDC->MoveTo(rect.left + EDG_DISTANCE, rect.top + EDG_DISTANCE + space_horizontal*i); 20 pDC->LineTo(rect.right - EDG_DISTANCE, rect.top + EDG_DISTANCE + space_horizontal*i); 21 } 22 //画竖线 23 for (int i = 0; i < BOARD_LINE; i++) 24 { 25 pDC->MoveTo(rect.left + EDG_DISTANCE + space_vertical*i, rect.top + EDG_DISTANCE); 26 pDC->LineTo(rect.left + EDG_DISTANCE + space_vertical*i, rect.bottom - EDG_DISTANCE); 27 } 28 29}

 

一个很low的棋盘就做好了

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

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

父类的方法:Move,PaintPiece

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

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

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

1.坐标转换

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

2.设计棋子

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

1void Tiger::PaintPiece(CDC *pDC, CRect rect) 2{ 3 Location t1, t2;//两个老虎的位置 4 int space_horizontal = (int)((rect.bottom - rect.top - EDG_DISTANCE * 2) / 4);//水平 5 int space_vertical = (int)((rect.right - rect.left - EDG_DISTANCE * 2) / 4);//垂直 6 t1.x = rect.left + 30 + space_vertical; 7 t1.y = rect.top + 30 + space_horizontal; 8 9 t2.x = rect.left + 30 + space_vertical * 3; 10 t2.y = rect.top + 30 + space_horizontal; 11 12 CPen pen(PS_SOLID, 1, RGB(255, 0, 0)); 13 CBrush brush(RGB(255,0,0)); 14 CPen *oldpen = pDC->SelectObject(&pen); 15 CBrush *oldbrush = pDC->SelectObject(&brush); 16 pDC->Ellipse(t1.x - 20, t1.y - 20, t1.x + 20, t1.y + 20); 17 pDC->Ellipse(t2.x - 20, t2.y - 20, t2.x + 20, t2.y + 20); 18 19 pDC->SelectObject(oldpen); 20 pDC->SelectObject(oldbrush); 21 22}

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

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

点赞
收藏

评论区

加载中...

相关推荐

基于HTML5打造的一款别踩白板小游戏

背景简介别踩白板这个游戏相信大家都玩过,这个是基于HTML5打造的简单小游戏,在PC端和移动端都能够运行,适应多种平台,今天我们使用原生JS搭配JQuery构建这个小游戏别踩白板。一、思路分析整体页面是一个大的矩形,长宽比例大概是3:2,然后游戏开始,不断有白板降落,然后一行是4个板,一块黑色板块,其余三块是白色板块,通过板块的点击事件绑定,然后判定是什么

three.js

第1章课程介绍介绍了微信小游戏的概念以及相关的由来,从宏观上对于微信小游戏的定位和价值有一个明确的认识第2章微信小游戏平台与特性讲了微信小游戏平台的相关特性,包括微信小游戏工程的建立,微信小游戏开发工具的详细使用,以及微信小游戏相关API的实战等第3章THREEJS与WebGL核心概念通过理论和实战,讲解了什么是webgl、什

Protobuf在微信小游戏开发中的使用技巧

微信小游戏发布后,许多HTML5游戏开发者希望把现有的HTML5游戏迁移到微信小游戏中,但由于一些技术上的问题导致进程卡壳。通过梳理Egret社区、白鹭小游戏开发技术讨论群等途径的反馈后发现,有不少开发者遇到的难题在于「如何在微信小游戏中使用Protobuf」。白鹭引擎架构师王泽在近期发布了一个开源项目protobufegret,提供了一个可

JAVA游戏编程学习笔记(四)Java PinBall 简单弹球小游戏【1】

之前写了一个非常简单的Java2D小游戏底层框架,为了把这个游戏框架丰富起来,这阵子需要实际完成几个小游戏代码,这样才能在实际中检验游戏框架使用性!先来一个简单的小游戏:JavaPinBall简单弹球小游戏 先上图!!(http://static.oschina.net/uploads/space/2015/1110/202955_

LayaAir:用3D项目演示老项目如何适配微信小游戏

在QQ上线玩一玩后,引擎部同事彻夜鏖战,刚刚终于上线了1.7.15beta版。推出了QQ玩一玩与微信小游戏的一键发布功能。小编送上一篇刚出炉的技术干货,希望能给开发者带来帮助。之前有介绍过微信小游戏的创建与调试全流程,从1.7.15beta开始,这个流程更加完善,尤其是TS与JS的开发者,也可以做到一键发布微信小游戏了。本篇尽可

Spring cloud微服务安全实战

热点规则热点就是经常访问的数据。很多时候我们希望争对某一些热点数据,然后来进行限制。比如说商品的信息这个服务,我们给它做一个限流,qps是100,某一天我想做一个秒杀活动,可能会有很大的流量,这个时候一个商品的qps就达到100了,这个时候就会把流量给他控制住。其他的商品就都看不了。我希望秒杀这个商品,只把秒杀这个上商品id来的请求,它的qps限

C++ MFC棋牌类小游戏day1 - HelloWorld