荣光医院和种草及动物园游戏,近来玩者甚众,小生也不能免俗,忙中抽闲,小玩了一把.可惜技艺不精,级数较低,刚到中央区,人就被拉的惨不忍睹,有些还能回拉,遇到有些高级玩家,一回拉,竟然赏我了两个弹坑,实在影响医院美观.据说弹坑只有两个办法修补,一个是花钱买道具修补,一个是玩修补弹坑游戏过关也能修补,系统一般会概率性的出现修补弹坑游戏.咱这穷人,只能盼着系统出现这样的游戏了.不过这个游戏还真不容易通过,一是出现的时间短,二是修补的块会变色,手动抓图基本上是跟不上变化.除非眼快手快加大脑而那个弹坑也真的是影响市容,所以就想通过编程来帮助这个游戏过关.原理其实很简单,就是使用快捷键抓图.只抓与游戏有关的一小块区域,抓到后把图像内容从上到下刷到屏幕左边,左边刷满刷右边,只留下中间用来做游戏.

网上搜了一下,发现VCKBASE上作者Rover的文章<抓图程序开发实践>与我的需求非常接近,打算采用拿来主义对该程序作一些改造,有关抓图原理和快捷键用法,请参考Rover同志的文章.ROVER的文章是把图像保存为BMP,我这里不保存,直接贴到屏幕上.

http://www.vckbase.com/document/viewdoc/?id=263

打开Rover同志的代码,找到SaveBmp函数,该函数主要功能是实现抓图并保存,我们对这个函数进入手术加工.首先我们定义两个变量,用来计算贴图的位置,int x_i = 0, y_i = 0;然后我们修改该函数中抓图区域,定义四个变量x,y, width, height,后来为了防止贴图时超出屏幕,又定义了两个变量SWidth,SHeight:

#if 0
 int Width=GetSystemMetrics(SM_CXSCREEN);
 int Height=GetSystemMetrics(SM_CYSCREEN);
#elif (0)
 int x = 500;
 int y = 400;
 int Width = 500;
 int Height = 400;

int SWidth=GetSystemMetrics(SM_CXSCREEN);
 int SHeight=GetSystemMetrics(SM_CYSCREEN);

#endif

这四个变量的值x,y, width, height,是我根据自己电脑上游戏的显示区域设置的,根据需要自己修改吧.其实我最早时使用的是下面的代码来获取窗口,但是不知道什么原因,无法获取网页FLASH的对话框,后来不得已,抓图区域写死了,就成了上面的状态.精通的朋友指点一下为什么下面的代码无法获取网页的对话框.

CWnd* pWnd = GetActiveWindow();   //CWnd::GetForegroundWindow();
 RECT rc;
 
 pWnd->GetWindowRect(&rc);
 int x = rc.left;
 int y = rc.top;
 int Width= rc.right-x;
 int Height=rc.bottom - y;

能用就行,不管那么多,然后我们修改他的抓图代码,变成我们自己的,并添加刷屏代码,原来的代码是从(0,0)开始,抓整个屏幕,改后从(x,y)开始,抓Width,Height大小的区域,然后计算贴图位置,刷到DC上:

#if 0
 tdc.BitBlt(0,0,Width,Height,&dc,0,0,SRCCOPY);
#else
 tdc.BitBlt(0,0,Width,Height,&dc,x,y,SRCCOPY);
 if ((y_i+100) > SHeight)
 {
  y_i = 0;

if (x_i != 0)

{

x_i = 0;

}

else

{
  x_i = SWidth - 100;

}
 }
    dc.BitBlt(x_i,y_i,Width,Height,&tdc,0,0,SRCCOPY);
    y_i += 100;
#endif

这样手术完成,一个抓图程序成了一个小小的游戏助手.最后整个函数变成如下内容:

int x_i = 0, y_i = 0;
void CCaptureDlg::SaveBmp()
{
 CDC dc;
 //创建设备dc
 dc.CreateDC("DISPLAY",NULL,NULL,NULL);

CDC tdc;
 //创建与设备dc兼容的内存DC
 tdc.CreateCompatibleDC(&dc);

CBitmap bm;
#if 0
 int Width=GetSystemMetrics(SM_CXSCREEN);
 int Height=GetSystemMetrics(SM_CYSCREEN);
#elif (0)
 int x = 500;
 int y = 400;
 int Width = 500;
 int Height = 400;
#elif (1)
 int x = 500;
 int y = 400;
 int Width = 500;
 int Height = 100;
 int SWidth=GetSystemMetrics(SM_CXSCREEN);
 int SHeight=GetSystemMetrics(SM_CYSCREEN);

#else
 CWnd* pWnd = GetActiveWindow();
 RECT rc;
 
 pWnd->GetWindowRect(&rc);
 int x = rc.left;
 int y = rc.top;
 int Width= rc.right-x;
 int Height=rc.bottom - y;
#endif
//创建与dc兼容的BMP
 bm.CreateCompatibleBitmap(&dc,Width,Height);

CBitmap *pOld=tdc.SelectObject(&bm);
#if 0
 tdc.BitBlt(0,0,Width,Height,&dc,0,0,SRCCOPY);
#else
 tdc.BitBlt(0,0,Width,Height,&dc,x,y,SRCCOPY);
 if ((y_i+100) > SHeight)
 {
  y_i = 0;
  x_i = SWidth - 100;
 }
    dc.BitBlt(x_i,y_i,Width,Height,&tdc,0,0,SRCCOPY);
    y_i += 100;
#endif
 tdc.SelectObject(pOld);

BITMAP btm;
 bm.GetBitmap(&btm);
 DWORD size=btm.bmWidthBytes*btm.bmHeight;
 LPSTR lpData=(LPSTR)GlobalAllocPtr(GPTR,size);
/
 BITMAPINFOHEADER bih;
 bih.biBitCount=btm.bmBitsPixel;
 bih.biClrImportant=0;
 bih.biClrUsed=0;
 bih.biCompression=0;
 bih.biHeight=btm.bmHeight;
 bih.biPlanes=1;
 bih.biSize=sizeof(BITMAPINFOHEADER);
 bih.biSizeImage=size;
 bih.biWidth=btm.bmWidth;
 bih.biXPelsPerMeter=0;
 bih.biYPelsPerMeter=0;
///
 GetDIBits(dc,bm,0,bih.biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS);
// bm.GetBitmapBits(size,lpData); //此函数在处理5-5-5模式的16位色下会出现颜色混乱
//
 static int filecount=0;
 CString name;
 name.Format("pict%04d.bmp",filecount++);
 name=m_Path+name;
 BITMAPFILEHEADER bfh;
 bfh.bfReserved1=bfh.bfReserved2=0;
 bfh.bfType=((WORD)('M'<< 8)|'B');
 bfh.bfSize=54+size;
 bfh.bfOffBits=54;
 CFile bf;
 if(bf.Open(name,CFile::modeCreate|CFile::modeWrite)){
  bf.WriteHuge(&bfh,sizeof(BITMAPFILEHEADER));
  bf.WriteHuge(&bih,sizeof(BITMAPINFOHEADER));
  bf.WriteHuge(lpData,size);
  bf.Close();
  nCount++;
 }
 GlobalFreePtr(lpData);
 if(nCount==1)
  m_Number.Format("%d picture captured.",nCount);
 else
  m_Number.Format("%d pictures captured.",nCount);
 UpdateData(FALSE);
}

VC写一个荣光医院修补弹坑游戏助手相关推荐

  1. python是一门面向什么的语言用词语填空_使用pygame写一个古诗词填空通关游戏

    之前写的诗词填空的游戏支持python2,现在对程序进行了修改,兼容支持python2和python3,附下效果图. 下面是两个主程序 idiom_lib.py代码: # -*- coding=utf ...

  2. 【牛客刷题】上手用C语言写一个三子棋小游戏超详解哦(电脑优化)

    作者:[南航科院小张 南航科院小张的博客 专栏:从c语言的入门到进阶 学习知识不只是要懂,还要会用:想要找到好的工作,这里给大家介绍一件可以斩获诸多大厂offer的利器–牛客网 点击免费注册和我一起开 ...

  3. 你写一个web网页小游戏

    写一个 web 网页小游戏需要以下几个步骤: 选择一种编程语言,常用的有 HTML.CSS.JavaScript 和 Python. 使用编辑器创建一个 HTML 文件,这个文件将是你的网页的基础. ...

  4. c语言写一个简单的小游戏-推箱子

    在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...

  5. Qt写一个文档复制粘贴助手app

    Qt写一个文档复制粘贴助手app 环境如下 创建工程 打开Qt Creater 7.0.0(community) 下载安装环境的自行百度吧 我们点击文件-> New Project ->然 ...

  6. [废弃]想写一个玩魔方的游戏

    有一个idea, 想写一个玩魔方的游戏. P.S: 不过,根据本人的执行力,不知道啥时候可以写出来.盖个戳先吧. 注:想了一下,觉得不好玩.废弃之. 转载于:https://www.cnblogs.c ...

  7. 用Rust写一个斗兽棋游戏

    原文地址:用Rust写一个斗兽棋游戏 项目地址: Github: https://github.com/netcan/AnimalChess Crate.io: https://crates.io/c ...

  8. 一个简单的c 游戏编程语言,编程达人 c语言写一个简单的小游戏-推箱子

    在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...

  9. 用c++帮我写一个闯关小游戏

    很高兴为您写一个闯关小游戏!这个游戏将分为3个关卡,每个关卡都有不同的挑战.第一关的挑战是收集3个物品,这些物品分别在不同的位置,你必须找到它们才能过关.第二关的挑战是找到一个宝藏,你必须通过解决难题 ...

最新文章

  1. INFO:在InstallShield中修改安装包压缩.cab包的大小
  2. Java 常用类 -Arrays
  3. Django搭建个人博客:上传头像图片
  4. python输入多个字符串、输入最长的一串_无重复字符的最长子串(Python之暴力求解)...
  5. JS判断相等或者不等于(==、===、!=、!==)运算符
  6. MySQL中SELECT语句简单使用 1
  7. 【数据结构笔记05】堆栈及其顺序存储、链式存储
  8. 在虚拟DOM和Diff算法中为什么不建议使用index作为key值?
  9. Flask-SQLAlchemy - 不使用外键连表查询。记得常回来看我
  10. L2-010 排座位 (25 分)(并查集)
  11. iPXE部署Ubuntu无盘系统
  12. 球面坐标系与指标坐标系转换
  13. 微信开发JS接口安全域名 网页授权域名 业务域名
  14. 超级简单得App自动化demo,有手就会,Weditor + uiautomator2 实现app自动化
  15. 动态规划 — 钢条切割问题
  16. 网安实训(十)| Ms12-020 漏洞复现
  17. Vue——邂逅Vue
  18. 华为设备DHCP配置命令
  19. 参加计算机社团的英语作文,参加社团的英语作文短文欣赏
  20. java 延时的几种方法方法

热门文章

  1. showmoney钱包介绍
  2. 江苏计算机专业的学校排名2015,2015关于江苏省高校排名「最新」
  3. UG NX 12直纹曲面
  4. Molecular Representation Learning via Heterogeneous Motif Graph Neural Networks
  5. hive与Oracle
  6. 联想智能引擎:智能降噪让声音更清晰入耳
  7. 四川省信创联盟2023年第一次理事会顺利召开,MIAOYUN荣获“信创企业优秀奖”!
  8. 用Julia调用SCIP
  9. 第十三届蓝桥杯大赛软件赛省赛
  10. 一位软件工程师的财富自由之路