c++编写植物大战僵尸
生活随笔
收集整理的這篇文章主要介紹了
c++编写植物大战僵尸
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
源代碼
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <graphics.h>//圖形庫頭文件 #include <Windows.h> #define WIDTH 960 #define HEIGTH 640 #define STR_SIZE 20//數字雨素組最大村粗 #define STR_NUM 128//數字雨串速 #define STR_WIDTH 15//數字雨寬度 struct Rain//數字雨結構 {int x;//數字雨橫向位置int y;//Y坐標int speed;//下降速度char str[STR_SIZE];//數字雨數組 }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++)//坐標速度初始化{rain[i].x = i * STR_WIDTH;//循環乘以字符的寬度rain[i].y = rand() % HEIGTH;//Y隨機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,步驟查找植物大戰僵尸Plants vs. Zombies GOTY HWND hGameWnd = FindWindow(L"MainWindow", L"Plants vs. Zombies GOTY ");//沒有運行游戲5if (hGameWnd == NULL){printf("沒有運行這個游戲\n");return 0;}//2根據窗口句柄獲取進程的PID,Process IDDWORD dwPID = 0;GetWindowThreadProcessId(hGameWnd, &dwPID);if (dwPID == 0){printf("獲取進程PID失敗:%d\n", GetLastError());return 0;}//3.根據PID獲取進程句柄HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);//打開哪個進程,PID的進程if (hProcess == NULL){printf("打開進程失敗,錯誤代碼:%d\n", GetLastError());return 0;}//4從指定位置進程內存區去讀取數據DWORD dwSunshineBase = 0x007794f8;DWORD dwSunshineAddressValue = 0;SIZE_T dwSize = 0;if (FALSE == ReadProcessMemory(hProcess,//讀取哪一個進程(LPVOID)dwSunshineBase,//要讀取的基地址 &dwSunshineAddressValue,//接受進程地址數據sizeof(DWORD),//DWORD=unsigned long 要讀取的4個字節數&dwSize)){printf("獲取陽光靜態地址失敗錯誤代碼.\n", GetLastError());return 0;}DWORD dwMoneyBase = 0x007794f8;DWORD dwMoneyAddressValue = 0;SIZE_T dwMent = 0;if (FALSE == ReadProcessMemory(hProcess,//讀取哪一個進程(LPVOID)dwMoneyBase,//要讀取的基地址 &dwMoneyAddressValue,//接受進程地址數據sizeof(DWORD),//DWORD=unsigned long 要讀取的4個字節數&dwMent)){printf("獲取金幣靜態地址失敗錯誤代碼.\n", GetLastError());return 0;}//5,獲取一級陽光便宜地址;DWORD dwSunshineOffsetFirst = 0X868;DWORD dwSunshineOffsetValue = 0;//讀 取出來的地址值保留到這個變量來if (FALSE == ReadProcessMemory(hProcess,(LPVOID)(dwSunshineAddressValue + dwSunshineOffsetFirst),&dwSunshineOffsetValue,sizeof(DWORD),&dwSize)){printf("獲取一級陽光偏移地址失敗,錯誤代碼%d\n", GetLastError());return 0;}//5,獲取一級金幣偏移地址DWORD dwMoneyOffsetFirst = 0X950;DWORD dwMoneyOffsetValue = 0;//讀 取出來的地址值保留到這個變量來if (FALSE == ReadProcessMemory(hProcess,(LPVOID)(dwMoneyAddressValue + dwMoneyOffsetFirst),&dwMoneyOffsetValue,sizeof(DWORD),&dwMent)){printf("獲取一級金幣偏移地址失敗,錯誤代碼%d\n", GetLastError());return 0;}//6,二級便宜DWORD dwSunshineOffsetSecond = 0x5578;//2級便宜的地址DWORD dwSunshine = 0;//2級便宜后直接的到我們的陽光值if (FALSE == ReadProcessMemory(hProcess,(LPVOID)(dwSunshineOffsetValue + dwSunshineOffsetSecond),&dwSunshine,sizeof(DWORD),&dwSize)){printf("2級偏移陽光地址失敗,錯誤代碼%d\n", GetLastError());return 0;}DWORD dwMoneyOffsetSecond = 0x50;//2級便宜的地址DWORD dwMoney = 0;//2級便宜后直接的到我們的陽光值if (FALSE == ReadProcessMemory(hProcess,(LPVOID)(dwMoneyOffsetValue + dwMoneyOffsetSecond),&dwMoney,sizeof(DWORD),&dwMent)){printf("2級偏移金幣地址失敗,錯誤代碼%d\n", GetLastError());return 0;}printf("陽光值是%d\n", dwSunshine);printf("請輸入你要修改的陽光值:\n");int nModifySunshine;scanf("%d", &nModifySunshine);WriteProcessMemory(hProcess,(LPVOID)(dwSunshineOffsetValue + dwSunshineOffsetSecond),&nModifySunshine,sizeof(DWORD),&dwSize);printf("金幣值是%d\n", dwMoney);//printf("請屬入你要修改的金幣值:\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();//獲取電腦開機到現在所獲取的毫秒數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
總結
以上是生活随笔為你收集整理的c++编写植物大战僵尸的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 场景编辑器竣工!
- 下一篇: s3c2440移植MQTT