一篇关于c的杂文,无意中乱写整理

来源:互联网 发布:网络直销做什么产品好 编辑:程序博客网 时间:2024/06/05 04:40

我们先来说一下,物体的运动,我们高中就知道,物体的运动有如下几种:

比如物体的速度大小发生变化,方向不变的变加速运动,减速运动,匀加速,匀减速运动。

比如速度大小不变,方向发生变化,如匀速圆周运动

还有就是速度的大小与方向都发生变化,如简谐运动,也就是说按照正弦,余弦方式函数运动。

既然说到了高中物理,我们就俩多说几个公式吧。

我们来说一下,匀变速直线运动的几个公式:

Vt=v0+at

S=v0t+1/2at^2

Vt^2-v0^2=2as

S=v0+vt/2*t

我们记几个上面的公式就可以了。

然后我们切换几个概念:

帧数:就是在1秒钟之内传输图片的数目,也可以理解为图形处理器,每秒可以刷新几次,通常用fps表示。每一帧都是静止的图像。高的帧率可以得到更流畅,更加逼真的动画。

帧率:测量显示帧数的度量,也就是说每秒显示帧数(fps)

一般来说30fps是可以接受的。但是将帧率提升至60fps就可以有明显的交互感与逼真感。但是超过75fps则没有明显的流畅度了,因为显示太快了。

3D:120HZ

液晶显示器:60HZ

既然就是说,我们要求的是刷新率越快越好,为什么没有必要追求太高的刷新率呢?

原因就是说,在分辨率不变的情况下,fps越高,则对显卡的处理能力要求也就越高。

电脑中所显示的画面,都是由显卡进行输出的,因此屏幕上面的每一个像素的填充都是由显卡来进行计算,输出的。

我们举个例子来说明一下啊,当画面的分辨率是1024*76的时候,画面的刷新率要达到24/秒,,那么显卡在一秒钟需要处理的像素量就达到1024*76*24

你想一下,如果帧率越高,那么显卡1秒钟处理像素的能力是不是要进行提升呢。所以,我们不适宜设置很大的帧率,只要在合理范围就可以了。显卡处理能力越大,画面肯定就会不流畅。

一般来说到下一个画面的切换时间帧速率为1/60秒,如果让物体每帧增加3个像素的距离,那么1秒就会移动180个像素的大小。

好了,抛弃上面不说,下面做一个让一个应用程序从左往右移动,又从右往左移动。我们就俩让qq这个应用程序来移动吧。

先来说一下,如何看电脑上的坐标图:

从电脑左上角开始,往下面是y轴,往右面是x轴。还有就是system()这个函数可以向控制台发送指令。

来说一个cmd命令:

 

下面我们看一下面这个程序代码:

#include <stdio.h>

#include <stdlib.h>

#include <Windows.h>

 

//打开qq应用程序

void openQQ()

{

ShellExecuteA(0, "open", "\"C:\\Program Files(x86)\\Thunder Network\\Thunder\\Program\\Thunder.exe\" -StartType:DesktopIcon", 0, 0, 3);

}

 

//关闭qq应用程序

void closeQQ()

{

system("taskkill /f /im Thunder.exe");//强制性结束进程

}

//模拟移动qq,从左向开始移动

void leftMoveQQ()

{

//一般从左开始移动,设定一个编号为0

int i = 0;

//要进行移动,就要先找到这个窗口的编号,也就是窗口句柄

HWND win1 = FindWindowA("XLUEFrameHostWnd", "迅雷7");//一个是类名,一个是标题

//对函数返回结果做一个处理

if (NULL == win1)

{

printf("没有找到QQ这个应用窗口\n");

}

//下面就是找到了,处理一下程序的位置

SetWindowPos(win1, NULL, 0, 0, 400, 400, 0);//窗口编号,保留参数,坐标,窗口的长度与宽度

//根据电脑分辨率不同,来进行设置不同的移动长度

//我的电脑分辨率是1366*768,加上本身qq就占用了400的长度,所以,我就让它移动966个像素,差不多

while (i < 966)

{

//最开始的i是设置的为0,后来就要移动,按固定长度移动

SetWindowPos(win1, NULL, i, 0, 400, 400, 0);

//而且我们移动的中间,缓冲一秒钟,不要移动的太快

Sleep(1000);//缓冲1

i += 30;//每次移动30个像素,并且让它移动的过程中若隐若现的移动

if (i / 10 % 2 == 1)

{

//如果十位数是奇数,就让它隐藏

ShowWindow(win1, SW_HIDE);//让窗口隐藏

}

else

{

ShowWindow(win1, SW_SHOW);//让窗口显示

}

}

}

 

//下面我们又要从右向左移动

void rightMoveQQ()

{

//这个时候就要从屏幕最右边开始定位了

int i = 966;

HWND win1 = FindWindowA("XLUEFrameHostWnd", "迅雷7");//还是通过类名与标题来找到句柄

//对函数的返回结果我们必须要判定一下

if (NULL == win1)

{

printf("没有找到QQ这个引用窗口\n");

}

//下面我们再来设置初始位置,从最右边开始移动

SetWindowPos(win1, NULL,966, 0, 400, 400, 0);

//当位置小于0的时候,就不移动了

while (i > 0)

{

SetWindowPos(win1, NULL, i, 0, 400, 400, 0);

Sleep(1000);//缓冲1秒钟

i -= 30;

}

}

 

//上面各项功能差不多就做好了,下面我们就要来写入口函数

int main()

{

closeQQ();//在打开前,我们先关闭之前打开的QQ

openQQ();//打开QQ

//在做一个死循环移动qq

while (1)

{

Sleep(3000);

leftMoveQQ();//从左开始移动qq

Sleep(3000);

rightMoveQQ();//从右开始移动QQ

}

 

system("pause");

return 0;

}

上面就是移动在屏幕上从左向右,又从右向左移动的一个小程序,下面我们让它沿对角线移动,下面是程序代码:

#include <stdio.h>

#include <stdlib.h>

#include <Windows.h>

 

//我们还是先打开QQ这个应用程序

void openQQ()

{

//先打开应用程序

ShellExecuteA(0, "open", "\"C:\\Program Files(x86)\\Tencent\\QQ\\Bin\\QQScLauncher.exe\"", 0, 0, 3);//先来打开这个引用程序

}

 

//然后关闭qq这个应用程序

void closeQQ()

{

system("taskkill /f /im QQProtect.exe");

}

 

//开始移动

void moveQQ()

{

//要移动一个窗口,我们必须先知道这个窗口的句柄

int i = 0;

HWND win1 = FindWindowA("TXGuiFoundation", "QQ");//一个是类名,一个是标题

//找到了之后,就开始设置一下它的初始位置

SetWindowPos(win1, NULL, 0, 0, 400, 400, 0);//初始位置,还有长度与宽度

//这里关于沿对角线移动的一个设置,每个计算机分辨率不一样,自然也就不一样

//x移动两倍,y移动一倍,注意,引用窗口本身还有400的长度

while (i < 368)//768-400

{

//我们需要来设置一下位置

SetWindowPos(win1, NULL, 2 * i, i, 400, 400, 0);//每一次的i都是在不断发生变化的

Sleep(1000);//让这个程序缓冲1秒执行

i += 10;

//让窗口一闪一闪的移动

if ((i / 10 % 2) == 1)

{

//这个时候我们就隐藏窗口

ShowWindow(win1, SW_HIDE);//隐藏

}

else

{

ShowWindow(win1, SW_SHOW);//显示

}

}

}

 

int main()

{

//把上面函数用起来就可以了

closeQQ();

openQQ();

while (1)

{

Sleep(2000);//缓冲两秒钟执行

moveQQ();//移动qq

}

system("pause");

return 0;

}

下面我们做一个植物大战僵尸自动加血外挂:

首先,我们需要在电脑上面下载这款单机游戏,然后运行:

然后打开vs2013开发工具:

我们这里的目标是,当太阳数小于100的时候,自动回升到200

其实也就是写一个dll,然后载入到程序里面去。

把原来的exe项目改成dll应用程序就可以了。

 

其实原理就是找到这个代表太阳数的变量,然后通过指针来做修改

我们必须通过一款软件找到这个变量的地址:

比如CE软件:


很明显我们已经到了这个太阳的地址。

#include <Windows.h>

 

_declspec(dllexport) void change()

{

int *p = (int *)1FD87590;

while (1)

{

if (*p < 100)

{

*p = 200;

}

Sleep(2000);//每两秒就检查一次

}

}

上面就是目标代码

下面我们通过项目-》属性->把配置类型变成dll文件。

下面我们又要通过一款软件把这个dll注入进去。注意要重新生成一下解决方案。注意在生成解决方案之前,就要把项目变成dll文件,然后生成解决方案,不然不会成功。


上面找到dll注入就可以了。


0 0
原创粉丝点击