有人下载我的工程文件,“我很欣慰”,名字是“挖金子VC版源码”,大家多讨论。

上回讲哪了?地图加载了,物品能显示了。该显示画面上方摆动的叉子了。计算机图形学的“图形旋转”,当然,有一个WINDOWS API函数PlgBlt,可我没有用。网上有很多介绍图形旋转的文章,我还是讲解一下我这个函数:

void GAMECATCH::TcDrawAngleOff(HDC hdc,int *pv,float a,int num,int x0,int y0)
{
    int pvdest[20]={0};
//    int x0,y0;
    int i;
    int tempx,tempy;
    
    memcpy(pvdest,pv,sizeof(int)*num);
/*
    x0=pv[0];
    y0=pv[1];

//move
    for(i=0;i<num;i+=2)
    {
        pvdest[i]-=x0;
        pvdest[i+1]-=y0;
    }
*/
    //rotate
    for(i=0;i<num;i+=2)
    {
        tempx=pvdest[i];
        tempy=pvdest[i+1];
        pvdest[i]=tempx*cos(a)-tempy*sin(a);
        pvdest[i+1]=tempx*sin(a)+tempy*cos(a);
    }

//move,中心点坐标是320 58
    for(i=0;i<num;i+=2)
    {
        pvdest[i]+=x0;
        pvdest[i+1]+=y0;
    }

//绘制图形
    Draw(hdc,pvdest);
}

为什么我没有删除注释掉的代码?有原因。一个图形绕(x0,y0)旋转,总共分三步(耳熟):图形移动到坐标原点,旋转,再移动回原有位置。而我这个叉子的图形在哪里?就在原点。所以省略了第一步。叉子的图形,是画了几个线段,各端点坐标如下(x1,y1,x2,y2,...):

//设置爪子各顶点坐标
 int temp[12]={
 0,32,20,32,
 40,0,64,0,
 64,64,40,64
 };

再解释一下公式:

pvdest[i]=tempx*cos(a)-tempy*sin(a);
        pvdest[i+1]=tempx*sin(a)+tempy*cos(a);
屏幕坐标轴x向右,y向下,这个公式将逆时针旋转图形。

有一个问题,为什么不用一个位图?位图的显示效果虽然好,但是计算cos,sin时,会产生误差。这将使图像有一些变形,所以没有用位图。

绘制、摆动的问题解决了。下面是伸缩。

叉子的伸缩

关键是使用“状态机”。三种状态:摆动,伸出,拉回。我没有定义宏,应该批评。用0 1 2 表示的。

再次声明软件的“可维护性”,这种状态设置,也许琐碎,但有好处。

摆动状态:修改当前角度,当前摆动方向;

伸出状态:改变坐标,如果达到伸出的最大长度,则状态迁移:拉回;

拉回状态:改变坐标,如果“伸出长度”降为0,则状态迁移:摆动。

为了消除坐标计算的误差,伸出时,直接将坐标偏移值转为整型存储,如下:

xoff=10*cos(iAngle*10*1.57/90);
   yoff=10*sin(iAngle*10*1.57/90);
拉回的时候,也用相同的偏移值,只要再乘以一个系数,就实现了拉回的快慢不同。

按键检测

用户按“下”,叉子伸出。用按键消息来检测,代码为:

        case WM_KEYDOWN:
            switch(iGameState)
            {
            case GAME_STATE_MAIN:
                gamecatch.KeyProc(wParam);
void GAMECATCH::KeyProc(int iKey)
{
    switch(iKey)
    {
    case VK_DOWN:
        if(0==iState)
        {
            //摆动状态下才能变成伸出状态
            iState=1;
            xoff=10*cos(iAngle*10*1.57/90);
            yoff=10*sin(iAngle*10*1.57/90);
        }
        break;

目前,叉子能正常摆动,用户按“下”,叉子伸出,然后拉回。紧接着就是核心问题“抓到物品”,即“检测碰撞”,下回接着说。欢迎参考原工程“挖金子VC版源码”(在CSDN下载频道)。

怎样做小游戏挖金子(VC,源码4)相关推荐

  1. 怎样做小游戏挖金子(VC,源码1)

    <挖金子>这个游戏,以前就玩过,网上见到是FLASH做的.FLASH做的游戏,很棒,足以让人对脚本语言刮目相看.最近我用vc做了一个,基本实现了功能.但代码写得粗糙,有几处很笨拙.我还是想 ...

  2. 怎样做小游戏挖金子(VC,源码2)

    先别急着看源码,首先要解决的问题是程序框架. VC只是一个开发环境,支持的是C++.Windows下的程序,当然是用Windows API(Application Programming Interf ...

  3. java做小游戏扫雷(附源码)

    下载解压即可玩:扫雷 项目代码下载:java代码 目录 图片 怎么自己也能做 代码细节 感受 全部代码 GameWin.java类 : MapBottom.java类: GameUtil.java类: ...

  4. 编程语言用 Java 开发一个打飞机小游戏(附完整源码)

    编程语言用 Java 开发一个打飞机小游戏(附完整源码) 上图 写在前面 技术源于分享,所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习.java确实不适合写桌面应用,这里只是通过 ...

  5. “限时分享“ 本地80个小游戏 HTML+CSS+JS源码分享

    开源项目集合 1. "限时分享" 本地80个小游戏 HTML+CSS+JS源码分享 2. "限时分享" 别错过了,最全的微信小程序源码收集分享 里面有80款小游 ...

  6. c++编写手机小游戏代码_经典小游戏大集合(C++ 源码)

    [实例简介] 五子棋 贪吃蛇 俄罗斯方块 黑白棋 连连看 推箱子 扫雷等7个小游戏 C++源码 VC6.0 下编译运行. [实例截图] [核心代码] 经典小游戏大集合(C源码) └── 经典小游戏大集 ...

  7. 打砖块小游戏php程序,javascript实现打砖块小游戏(附完整源码)

    小时候玩一天的打砖块小游戏,附完整源码 在?给个赞? 实现如图 需求分析 1.小球在触碰到大盒子上.左.右边框,以及滑块后沿另一方向反弹,在碰到底边框后游戏结束: 2.小球在触碰到方块之后,方块消失: ...

  8. 用Python做雷霆战机小游戏【附素材+源码】

    前言 嗨嗨,我是小圆 最近很多朋友都在问我要一些游戏的代码 所以这篇文章就出来了 [想一键获取素材和源码的,点击文章末尾名片] 模块准备 import pygame, os import time i ...

  9. 用Python做雷霆战机小游戏【赠素材+源码】

    前言 嗨嗨,我是小圆 最近很多朋友都在问我要一些游戏的代码 所以这篇文章就出来了 [想一键获取素材和源码的,点击文章末尾名片] 模块准备 import pygame, os import time i ...

  10. H5——连连看小游戏实现思路及源码

    部门要求推广新产品用连连看小游戏的方式, 设计那边UI还没有排期,先撸个功能demo,正好记录一下: 连连看都玩过,程序的关键在于判断连续点击的两张图片是否能够消除,两个图片消除的条件有两个: 图片相 ...

最新文章

  1. 操作系统:了解一下磁盘结构
  2. PyQt4 开发入门
  3. JS事件委托的概念和作用
  4. 中getname_浅析JS中的class
  5. 【learning】中国剩余定理
  6. ffmpeg处理RTMP流媒体的命令 发送流媒体的命令(UDP,RTP,RTMP)
  7. LaTex中编译时出现“ Undefined control sequence”问题
  8. Sentence-BERT: 一种能快速计算句子相似度的孪生网络
  9. 数据库 的日志已满,备份该数据库的事务日志以释放一些日志空间的解决办法 ...
  10. java怎么实现事务_java实现简单的事务
  11. 大前端技术发展趋势刨析
  12. Transformer综述(A Survey on Vision Transformer) 阅读学习笔记(三)--Transformer应用的图像处理与视频处理的研究
  13. 献给2020年度虚假繁荣程序员的自己
  14. 计算机技术对艺术的影响,数字化技术对当代艺术发展的影响--理论
  15. c语言中invert什么意思_C语言中init 是什么意思?
  16. python听歌识曲爬虫_【python爬虫】 爬云音乐我和xxx共同听过的歌曲
  17. 解析解、闭合解和数值解
  18. PHP导出基类(PHPExcel,PhpSpreadsheet)
  19. Linux的777权限
  20. 你的设计应该「所见即所得」

热门文章

  1. ubuntu 安装 tree 命令
  2. lbp特征的matlab实现
  3. C4D OC渲染器混合材质置换问题求助
  4. c语言ascii码16进制,C语言附录ASCII码表.doc
  5. 杨辉三角(Python)
  6. 智能家居APP设计规格
  7. API激光跟踪仪SDK基础使用
  8. STM32+DWM1000开发uwb测距系列教程之二:源码分析及源码移植(基于STM32 cubemx+keil MDK)
  9. 常用MarkDown/LaTeX语法总结
  10. 工程师应用计算机考试题型,IE工程师考试试题