zoukankan      html  css  js  c++  java
  • C++ MFC棋牌类小游戏day1

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

  • 相关阅读:
    安装MongoDB
    power mode idea 插件
    安装nodejs,运行打包Vue项目
    我的爬虫随笔(一)
    用sql实现背包问题
    HTML基础
    CSS配置颜色和文本
    MongoDB技术实践与应用案例征集活动
    7、消息队列的高可用、高可靠
    运行asp.net core webapi 时报502错误
  • 原文地址:https://www.cnblogs.com/smh2015/p/9677576.html
Copyright © 2011-2022 走看看