VC写一个荣光医院修补弹坑游戏助手
荣光医院和种草及动物园游戏,近来玩者甚众,小生也不能免俗,忙中抽闲,小玩了一把.可惜技艺不精,级数较低,刚到中央区,人就被拉的惨不忍睹,有些还能回拉,遇到有些高级玩家,一回拉,竟然赏我了两个弹坑,实在影响医院美观.据说弹坑只有两个办法修补,一个是花钱买道具修补,一个是玩修补弹坑游戏过关也能修补,系统一般会概率性的出现修补弹坑游戏.咱这穷人,只能盼着系统出现这样的游戏了.不过这个游戏还真不容易通过,一是出现的时间短,二是修补的块会变色,手动抓图基本上是跟不上变化.除非眼快手快加大脑而那个弹坑也真的是影响市容,所以就想通过编程来帮助这个游戏过关.原理其实很简单,就是使用快捷键抓图.只抓与游戏有关的一小块区域,抓到后把图像内容从上到下刷到屏幕左边,左边刷满刷右边,只留下中间用来做游戏.
网上搜了一下,发现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写一个荣光医院修补弹坑游戏助手相关推荐
- python是一门面向什么的语言用词语填空_使用pygame写一个古诗词填空通关游戏
之前写的诗词填空的游戏支持python2,现在对程序进行了修改,兼容支持python2和python3,附下效果图. 下面是两个主程序 idiom_lib.py代码: # -*- coding=utf ...
- 【牛客刷题】上手用C语言写一个三子棋小游戏超详解哦(电脑优化)
作者:[南航科院小张 南航科院小张的博客 专栏:从c语言的入门到进阶 学习知识不只是要懂,还要会用:想要找到好的工作,这里给大家介绍一件可以斩获诸多大厂offer的利器–牛客网 点击免费注册和我一起开 ...
- 你写一个web网页小游戏
写一个 web 网页小游戏需要以下几个步骤: 选择一种编程语言,常用的有 HTML.CSS.JavaScript 和 Python. 使用编辑器创建一个 HTML 文件,这个文件将是你的网页的基础. ...
- c语言写一个简单的小游戏-推箱子
在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...
- Qt写一个文档复制粘贴助手app
Qt写一个文档复制粘贴助手app 环境如下 创建工程 打开Qt Creater 7.0.0(community) 下载安装环境的自行百度吧 我们点击文件-> New Project ->然 ...
- [废弃]想写一个玩魔方的游戏
有一个idea, 想写一个玩魔方的游戏. P.S: 不过,根据本人的执行力,不知道啥时候可以写出来.盖个戳先吧. 注:想了一下,觉得不好玩.废弃之. 转载于:https://www.cnblogs.c ...
- 用Rust写一个斗兽棋游戏
原文地址:用Rust写一个斗兽棋游戏 项目地址: Github: https://github.com/netcan/AnimalChess Crate.io: https://crates.io/c ...
- 一个简单的c 游戏编程语言,编程达人 c语言写一个简单的小游戏-推箱子
在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...
- 用c++帮我写一个闯关小游戏
很高兴为您写一个闯关小游戏!这个游戏将分为3个关卡,每个关卡都有不同的挑战.第一关的挑战是收集3个物品,这些物品分别在不同的位置,你必须找到它们才能过关.第二关的挑战是找到一个宝藏,你必须通过解决难题 ...
最新文章
- INFO:在InstallShield中修改安装包压缩.cab包的大小
- Java 常用类 -Arrays
- Django搭建个人博客:上传头像图片
- python输入多个字符串、输入最长的一串_无重复字符的最长子串(Python之暴力求解)...
- JS判断相等或者不等于(==、===、!=、!==)运算符
- MySQL中SELECT语句简单使用 1
- 【数据结构笔记05】堆栈及其顺序存储、链式存储
- 在虚拟DOM和Diff算法中为什么不建议使用index作为key值?
- Flask-SQLAlchemy - 不使用外键连表查询。记得常回来看我
- L2-010 排座位 (25 分)(并查集)
- iPXE部署Ubuntu无盘系统
- 球面坐标系与指标坐标系转换
- 微信开发JS接口安全域名 网页授权域名 业务域名
- 超级简单得App自动化demo,有手就会,Weditor + uiautomator2 实现app自动化
- 动态规划 — 钢条切割问题
- 网安实训(十)| Ms12-020 漏洞复现
- Vue——邂逅Vue
- 华为设备DHCP配置命令
- 参加计算机社团的英语作文,参加社团的英语作文短文欣赏
- java 延时的几种方法方法