文档章节

C#开发 植物大战僵尸 修改阳光值 源码无私分享

编程码农
 编程码农
发布于 2016/05/15 11:31
字数 445
阅读 40
收藏 0
点赞 2
评论 0

源代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
//Win32 API
using System.Runtime.InteropServices;
using System.Timers;

/**
 *uint PROCESS_ALL_ACCESS = 0x001F0FFF; 
 */

namespace plantsVsZombiesAux
{
    public partial class Form1 : Form
    {
        public bool isStart = false;
        public bool isCheckStar = false;
        public uint processGame;
        public const string gameName = "PlantsVsZombies";
        public const uint PROCESS_ALL_ACCESS  = 0x001F0FFF;
        public const uint lpGameBaseAddr = 0x007794f8;
        public uint lpGameAddr = 0;
        public uint smallThreshold = 500;
        public uint bigThreshold = 50000;

        //导入win32 API
        [DllImport("kernel32.dll")]
        /**/
        public static extern uint ReadProcessMemory(
        uint hProcess,
        uint lpBaseAddress,
        uint[] lpBuffer,
        uint nSize,
        uint lpNumberOfBytesWritten
        );
        [DllImport("kernel32.dll")]
        public static extern uint OpenProcess(
        uint dwDesiredAccess, //渴望得到的访问权限(标志)
        bool bInheritHandle, // 是否继承句柄
        uint dwProcessId// 进程标示符
        );
        [DllImport("kernel32.dll")]
        public static extern uint WriteProcessMemory(
            uint hProcess,
            uint lpBaseAddress,
            string lpBuffer,
            UInt32 nSize,
            uint lpNumberOfBytesWritten
        );
        /**/
        public Form1()
        {
            InitializeComponent();
            
        }
        public static uint readMemory(uint processId,uint add)
        {
            uint[] r = new uint[1];
            try
            {
                ReadProcessMemory(processId, add, r, 4, 0);
                return r[0];
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
                return 0;
            }
        }

        public void initGamesInfo()
        {
            uint lpBuffer = 0;
            lpBuffer = readMemory(this.processGame, lpGameBaseAddr);
            uint lpBufferSec;
            lpBufferSec = lpBuffer + 0x868;
            lpBufferSec = readMemory(this.processGame, lpBufferSec);
            lpBuffer = lpBufferSec + 0x5578;
            //Convert.ToInt32(lpBuffer, 16);
            this.lpGameAddr = lpBuffer;
        }
        public uint getGamesSonValue(string sonVal = "")
        {
            if (sonVal.Length > 0)
            {
                WriteProcessMemory(this.processGame, this.lpGameAddr, sonVal, (UInt32)sonVal.Length, 0);
                return 1;
            }
            uint lpBuffer = 0;
            try
            {
                lpBuffer = readMemory(this.processGame,this.lpGameAddr);
               
                string valStr = lpBuffer.ToString();
                //更新控件变量
                sonValTextInput.Text = valStr;
                uint resVal = 0;
                uint.TryParse(valStr, out resVal);
                //更新控件
                Refresh();
                return resVal;

            }catch(Exception ex){
                MessageBox.Show(ex.ToString());
                return 0;
            }
            
        }
        //定时器自动修改阳光值
        private void autoSetTimer_Tick(object sender, EventArgs e)
        {
            this.isCheckStar = autoSetcheckBox.Checked;
            if (this.isStart && this.isCheckStar)
            {
                uint currSonVal = getGamesSonValue();
                if(currSonVal <= smallThreshold)
                {
                    getGamesSonValue(bigThreshold.ToString());
                }
            }
        }
        //点击开始按钮
        private void startButton_Click(object sender, EventArgs e)
        {
            this.isStart = true;
            /**/
            System.Diagnostics.Process[] GamesProcess
                = System.Diagnostics.Process.GetProcessesByName(gameName);
            if (GamesProcess.Length == 0)
            {
                MessageBox.Show("请运行植物大战僵尸!再启动本辅助!!");
                return;
            }
            uint ProcessID = (uint)GamesProcess[0].Id;
            /* */
            /*
            IntPtr hWnd = ::FindWindow(0,gameName);  //查找窗口句柄
            if(hWnd.ToInt32() == 0) return;
            
            uint ProcessID;
            GetWindowThreadProcessId(hWnd,&ProcessID);  //取得进程ID
             */
            this.processGame = OpenProcess(PROCESS_ALL_ACCESS, false, ProcessID);
            this.isCheckStar = autoSetcheckBox.Checked;
            //初始化游戏相关基址
            initGamesInfo();
            //获取阳光的值
            getGamesSonValue();

        }
        //暂停按钮
        private void pauseButton_Click(object sender, EventArgs e)
        {
            this.isStart = false;
        }
    }
}

效果图:

 

 

 

 

 

 

 

 

游戏参考:

http://www.pc6.com/z/zwdzjs2/

 

源码下载:

http://www.oschina.net/code/snippet_2697322_56153

 

© 著作权归作者所有

共有 人打赏支持
编程码农
粉丝 1
博文 19
码字总数 13170
作品 0
杭州
后端工程师
scratch中植物大战僵尸之会收集太阳的的太阳花

昨天我们已经学习了如何收集豌豆,那么太阳花如果想生产太阳的话,那么太阳怎么出现呢,我们该如何做呢?这个需要怎么实现呢,那么,这就需要考验大家对于昨天的收集豌豆的小游戏是不是完全掌...

h_snow_1 ⋅ 03/23 ⋅ 0

游戏AI的开发框架组件--Behaviac

Behaviac是游戏AI的开发框架组件,也是游戏原型的快速设计工具。支持行为树BT,状态机FSM,HTN等多种范式,方便的编辑和调试。支持全平台,适用于客户端和服务器,助力游戏快速迭代开发。 编...

匿名 ⋅ 2016/03/29 ⋅ 5

丁小未/Aladdin_XLua

#Aladdin_XLua [Unity XLua]热更新XLua入门(一)-基础篇 前言 前段时间腾讯开源了一个内部热更框架XLua在Unity开发群里引起一阵热议,也受到广大开发者的热捧,然后我当然也抱着好奇的心去学习...

丁小未 ⋅ 2017/01/14 ⋅ 0

浅谈C#浅拷贝和深拷贝

近来爱上一本书《编写高质量代码,改善C#程序的157个建议》,我想很多人都想编写高质量的代码,因为我们不仅仅是码农,更是一名程序员。 从今天开始,我将每天和大家分享这本书中的内容,并加...

WittCsharp ⋅ 2014/01/23 ⋅ 1

简婶活动 | 看了你的代码,我......

学霸程序员召唤计划 众所周知,简书平台拥有大量优质的程序员作者,许多开发同学无私地将自己的技术经验分享在简书平台上以供他人参考学习。 正是因为有这些乐于分享的程序员作者,才让简书的...

简书大婶 ⋅ 2017/12/08 ⋅ 0

iphone客户端的简介

@叶园 你好,想跟你请教个问题:我是刚刚入门ios开发,最近下载oschina的iphone客户端的源码,有很多地方都不明白,看到您写了一个项目介绍,希望您能给我权限让我看一下,希望能提高自己。同...

名字都被用了 ⋅ 2012/11/19 ⋅ 3

Android 正移植到C#

甲骨文和谷歌正就谷歌在Android中使用Java一案展开一场10亿美元的大较量。但是Java并非在Android中建立本地应用的唯一方法。事实上,它甚至不是最好的文法:Xamarin 开发组已经将C#提供给And...

长平狐 ⋅ 2012/11/12 ⋅ 0

车江毅/TaskManager

##分支说明## 该分支是基于BSF的基础上开发的分支。 修改内容 1)sdk以插件的形式扩展自BSF。 2)项目命名空间从Dyd.BaseService.TaskManager修改为TaskManager 3) 打包安装包,可以直接被第...

车江毅 ⋅ 2015/06/26 ⋅ 0

[deviceone开发]-底部弹出选择

一、简介 个人上传的第一个示例源码,两天空闲时间写的,一点简单组件,写的挺乱还没啥注释,仅供新手学习。 底部弹出选择,可滑动选择选项,如果停留在选项中间,可自动校正位置,加了一点简...

DoProject ⋅ 2016/12/22 ⋅ 0

【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信

源码(包含客户端与服务器端所有工程文件) 数据库文件 为了方便测试,我临时搭建了一个服务器可以安装apk文件,直接测试 apk文件下载地址 通信框架为来自英国的NetworkComms2.3.1开源通信框...

拉偶有所依 ⋅ 2015/03/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

6. Shell 函数 和 定向输出

Shell 常用函数 简洁:目前没怎么在Shell 脚本中使用过函数,哈哈,不过,以后可能会用。就像java8的函数式编程,以后获取会用吧,行吧,那咱们简单的看一下具体的使用 Shell函数格式 linux ...

AHUSKY ⋅ 7分钟前 ⋅ 0

MySQL 内核深度优化

MYSQL数据库适用场景广泛,相较于Oracle、DB2性价比更高,Web网站、日志系统、数据仓库等场景都有MYSQL用武之地,但是也存在对于事务性支持不太好(MySQL 5.5版本开始默认引擎才是InnoDB事务...

OSC_cnhwTY ⋅ 14分钟前 ⋅ 0

单片机软件定时器

之前写了一个软件定时器,发现不够优化,和友好,现在重写了 soft_timer.h #ifndef _SOFT_TIMER_H_#define _SOFT_TIMER_H_#include "sys.h"typedef void (*timer_callback_function)(vo...

猎人嘻嘻哈哈的 ⋅ 16分钟前 ⋅ 0

好的资料搜说引擎

鸠摩搜书 简介:鸠摩搜书是一个电子书搜索引擎。它汇集了多个网盘和电子书平台的资源,真所谓大而全。而且它还支持筛选txt,pdf,mobi,epub、azw3格式文件。还显示来自不同网站的资源。对了,...

乔三爷 ⋅ 24分钟前 ⋅ 0

Debian下安装PostgreSQL的表分区插件pg_pathman

先安装基础的编译环境 apt-get install build-essential libssl1.0-dev libkrb5-dev 将pg的bin目录加入环境变量,主要是要使用 pg_config export PATH=$PATH:/usr/lib/postgresql/10/bin 进......

玛雅牛 ⋅ 25分钟前 ⋅ 0

inno安装

#define MyAppName "HoldChipEngin" #define MyAppVersion "1.0" #define MyAppPublisher "Hold Chip, Inc." #define MyAppURL "http://www.holdchip.com/" #define MyAppExeName "HoldChipE......

backtrackx ⋅ 54分钟前 ⋅ 0

Linux(CentOS)下配置php运行环境及nginx解析php

【part1:搭建php环境】 1.选在自己需要安装的安装包版本,wget命令下载到服务器响应目录 http://php.net/releases/ 2.解压安装包 tar zxf php-x.x.x 3.cd到解压目录执行如下操作 cd ../php-...

硅谷课堂 ⋅ 今天 ⋅ 0

Nginx服务架构初探(四):nginx服务器的rewrite功能

nginx服务器的rewrite功能 1.nginx后端服务器组的配置 1>upstream name {…} name是给服务器组限的组名 2>server address [parameters]; address为服务器地址 parame......

余温灬未存 ⋅ 今天 ⋅ 0

layer.prompt使文本框为空的情况下也能点击确定

最近一直在使用layui,但是用到弹出层layer.prompt时,如果文本框是空的话点击确定没有反应,不能向下执行。 但是我又需要空值,看看我原来的代码。 123456789 layer.prompt...

孟飞阳 ⋅ 今天 ⋅ 0

Linux普通文件压缩工具gzip、Bzip2、xz

第六章 文件压缩和打包 6.1 压缩打包介绍 Linux环境常见压缩文件类型: .zip,.gz,.bz2,.xz, .tar.gz,.tar.bz2,.tar.xz 压缩打包的目的 方便文件传输 节省磁盘空间 减少传输花费的时间 ...

弓正 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部