c++编写植物大战僵尸
生活随笔
收集整理的這篇文章主要介紹了
c++编写植物大战僵尸
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
源代碼
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <graphics.h>//圖形庫頭文件 #include <Windows.h> #define WIDTH 960 #define HEIGTH 640 #define STR_SIZE 20//數(shù)字雨素組最大村粗 #define STR_NUM 128//數(shù)字雨串速 #define STR_WIDTH 15//數(shù)字雨寬度 struct Rain//數(shù)字雨結(jié)構(gòu) {int x;//數(shù)字雨橫向位置int y;//Y坐標(biāo)int speed;//下降速度char str[STR_SIZE];//數(shù)字雨數(shù)組 }rain[STR_NUM]; char CreateCh() {char temp = 0;int flag = rand() % 3;//0,1,2if (flag == 0){temp = rand() % 26 + 'a';}else if (flag == 1){temp = rand() % 26 + 'A';}else{temp = rand() % 10 + '0';}return temp; } void GameInit() {for (int i = 0; i < STR_NUM; i++)//坐標(biāo)速度初始化{rain[i].x = i * STR_WIDTH;//循環(huán)乘以字符的寬度rain[i].y = rand() % HEIGTH;//Y隨機(jī)rain[i].speed = rand() % 5 + 5;//5 6 7 8 9 10}for (int i = 0; i < STR_NUM; i++){for (int j = 0; j < STR_SIZE; j++){rain[i].str[j] = CreateCh();}} } void GameDraw() {cleardevice();for (int i = 0; i < STR_NUM; i++){for (int j = 0; j < STR_SIZE; j++){outtextxy(rain[i].x, rain[i].y - STR_WIDTH * j, rain[i].str[j]);settextcolor(RGB(0, 70 - 13 * j, 0));}} } void GamePlay() {for (int i = 0; i < STR_NUM; i++){rain[i].y += rain[i].speed;if (rain[i].y - STR_SIZE * STR_WIDTH > HEIGTH){rain[i].y = 0;}} } void ChangeCh() {for (int i = 0; i < STR_NUM; i++){rain[rand() % STR_NUM].str[rand() % STR_SIZE] = CreateCh();}} int main() {//1,步驟查找植物大戰(zhàn)僵尸Plants vs. Zombies GOTY HWND hGameWnd = FindWindow(L"MainWindow", L"Plants vs. Zombies GOTY ");//沒有運(yùn)行游戲5if (hGameWnd == NULL){printf("沒有運(yùn)行這個(gè)游戲\n");return 0;}//2根據(jù)窗口句柄獲取進(jìn)程的PID,Process IDDWORD dwPID = 0;GetWindowThreadProcessId(hGameWnd, &dwPID);if (dwPID == 0){printf("獲取進(jìn)程PID失敗:%d\n", GetLastError());return 0;}//3.根據(jù)PID獲取進(jìn)程句柄HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);//打開哪個(gè)進(jìn)程,PID的進(jìn)程if (hProcess == NULL){printf("打開進(jìn)程失敗,錯(cuò)誤代碼:%d\n", GetLastError());return 0;}//4從指定位置進(jìn)程內(nèi)存區(qū)去讀取數(shù)據(jù)DWORD dwSunshineBase = 0x007794f8;DWORD dwSunshineAddressValue = 0;SIZE_T dwSize = 0;if (FALSE == ReadProcessMemory(hProcess,//讀取哪一個(gè)進(jìn)程(LPVOID)dwSunshineBase,//要讀取的基地址 &dwSunshineAddressValue,//接受進(jìn)程地址數(shù)據(jù)sizeof(DWORD),//DWORD=unsigned long 要讀取的4個(gè)字節(jié)數(shù)&dwSize)){printf("獲取陽光靜態(tài)地址失敗錯(cuò)誤代碼.\n", GetLastError());return 0;}DWORD dwMoneyBase = 0x007794f8;DWORD dwMoneyAddressValue = 0;SIZE_T dwMent = 0;if (FALSE == ReadProcessMemory(hProcess,//讀取哪一個(gè)進(jìn)程(LPVOID)dwMoneyBase,//要讀取的基地址 &dwMoneyAddressValue,//接受進(jìn)程地址數(shù)據(jù)sizeof(DWORD),//DWORD=unsigned long 要讀取的4個(gè)字節(jié)數(shù)&dwMent)){printf("獲取金幣靜態(tài)地址失敗錯(cuò)誤代碼.\n", GetLastError());return 0;}//5,獲取一級(jí)陽光便宜地址;DWORD dwSunshineOffsetFirst = 0X868;DWORD dwSunshineOffsetValue = 0;//讀 取出來的地址值保留到這個(gè)變量來if (FALSE == ReadProcessMemory(hProcess,(LPVOID)(dwSunshineAddressValue + dwSunshineOffsetFirst),&dwSunshineOffsetValue,sizeof(DWORD),&dwSize)){printf("獲取一級(jí)陽光偏移地址失敗,錯(cuò)誤代碼%d\n", GetLastError());return 0;}//5,獲取一級(jí)金幣偏移地址DWORD dwMoneyOffsetFirst = 0X950;DWORD dwMoneyOffsetValue = 0;//讀 取出來的地址值保留到這個(gè)變量來if (FALSE == ReadProcessMemory(hProcess,(LPVOID)(dwMoneyAddressValue + dwMoneyOffsetFirst),&dwMoneyOffsetValue,sizeof(DWORD),&dwMent)){printf("獲取一級(jí)金幣偏移地址失敗,錯(cuò)誤代碼%d\n", GetLastError());return 0;}//6,二級(jí)便宜DWORD dwSunshineOffsetSecond = 0x5578;//2級(jí)便宜的地址DWORD dwSunshine = 0;//2級(jí)便宜后直接的到我們的陽光值if (FALSE == ReadProcessMemory(hProcess,(LPVOID)(dwSunshineOffsetValue + dwSunshineOffsetSecond),&dwSunshine,sizeof(DWORD),&dwSize)){printf("2級(jí)偏移陽光地址失敗,錯(cuò)誤代碼%d\n", GetLastError());return 0;}DWORD dwMoneyOffsetSecond = 0x50;//2級(jí)便宜的地址DWORD dwMoney = 0;//2級(jí)便宜后直接的到我們的陽光值if (FALSE == ReadProcessMemory(hProcess,(LPVOID)(dwMoneyOffsetValue + dwMoneyOffsetSecond),&dwMoney,sizeof(DWORD),&dwMent)){printf("2級(jí)偏移金幣地址失敗,錯(cuò)誤代碼%d\n", GetLastError());return 0;}printf("陽光值是%d\n", dwSunshine);printf("請(qǐng)輸入你要修改的陽光值:\n");int nModifySunshine;scanf("%d", &nModifySunshine);WriteProcessMemory(hProcess,(LPVOID)(dwSunshineOffsetValue + dwSunshineOffsetSecond),&nModifySunshine,sizeof(DWORD),&dwSize);printf("金幣值是%d\n", dwMoney);//printf("請(qǐng)屬入你要修改的金幣值:\n");//int nModeMoney;//scanf("%d", &nModeMoney);//WriteProcessMemory(// hProcess,// (LPVOID)(dwMoneyOffsetValue + dwMoneyOffsetSecond),// &nModeMoney,// sizeof(DWORD),// &dwMent);*/initgraph(WIDTH, HEIGTH);srand(GetTickCount());GameInit();DWORD t1, t2;t1 = t2 = GetTickCount();//獲取電腦開機(jī)到現(xiàn)在所獲取的毫秒數(shù)while (1){ChangeCh();BeginBatchDraw();//雙緩沖if (t2 - t1 > 10){GamePlay();t1 = t2;}t2 = GetTickCount();GameDraw();EndBatchDraw();}CloseHandle(hProcess);return 0; }下載鏈接
https://download.csdn.net/download/m0_72703340/86268275
總結(jié)
以上是生活随笔為你收集整理的c++编写植物大战僵尸的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 场景编辑器竣工!
- 下一篇: windows系统c++多线程开发