使用C++制作GC Server過程詳解
最近很多人找我要GC Server的源代碼。我跟他們講環(huán)境要求的時(shí)候,很多人都不以為然,結(jié)果最后僅僅測試程序就報(bào)了幾千個(gè)Error。所以,我決定今天講一下如何搭建你自己的GC Server。(目前還沒有一個(gè)人成功,請量力而行,如果成功了記得在評論區(qū)告訴我~)
步驟
1. 系統(tǒng)配置
本文僅適用于Windows系統(tǒng),支持Win7及以后的大部分版本,Win10最佳。
2. 環(huán)境配置
首先,你需要一個(gè)支持C/C++的IDE(強(qiáng)烈推薦Visual Studio,后面的操作會(huì)更方便),然后你需要下載一個(gè)圖形庫,比如WinAPI。最后你需要將圖形庫安裝到你的IDE的配置里面,將include和lib都裝到要求的文件夾里,這就不必多說了,如果有問題請?jiān)谠u論區(qū)說明。
3. 編譯測試
注意!在此步驟下如果出現(xiàn)任何系統(tǒng)錯(cuò)誤,請立即停止操作!推薦在開始前將系統(tǒng)進(jìn)行備份!
Step 1 - 創(chuàng)建項(xiàng)目
在這一步里,需要你在你的IDE里創(chuàng)建一個(gè)C/C++的項(xiàng)目,確保創(chuàng)建正常且Hello world可以運(yùn)行。(我精心幫你準(zhǔn)備好了測試用的Hello World代碼^_^)
using namespace std;
int ()
{
cout<<"Hello,world!"<<endl;
return 0;
}
//C
#include <stdio.h>
int ()
{
printf("Hello,world!n");
return 0;
}
Step 2 - 圖形庫測試
你需要include你之前引入的圖形庫的頭文件,然后再設(shè)置一下比如這樣:
#include <graphics.h> // 引用圖形庫頭文件
#include <conio.h>
int ()
{
initgraph(640, 480); // 創(chuàng)建繪圖窗口,大小為 640x480 像素
setlinecolor(RGB(255, 0, 0)); // 設(shè)置當(dāng)前線條顏色
setfillcolor(RGB(0, 255, 0)); // 設(shè)置當(dāng)前填充顏色
fillcircle(200, 200, 100); // 畫圓,圓心(200, 200),半徑 100
system("pause"); // 按任意鍵繼續(xù),getch();亦可
closegraph(); // 關(guān)閉圖形環(huán)境
return 0;
}
如果上面的代碼你可以運(yùn)行成功,那么恭喜你,你可以進(jìn)入下面的步驟了~
Step 3 - 按鈕制作
很多人看到圖形庫的功能后都很吃驚,但是也有人問我,GC Server里面的那些不同顏色的按鈕時(shí)怎么畫出來的。因?yàn)?,圖形庫好像沒有自帶畫按鈕的功能啊~
很簡單,如下:
(下方代碼為GC Server 8.7最后更新的源代碼片段,為防止數(shù)據(jù)泄露,我們沒有采用最新版本的代碼,且在原版本的基礎(chǔ)上做了部分處理,不影響代碼的理解)
settextstyle(90, 0, _T("楷體"));
setbkcolor(RED);
outtextxy(20, 160, _T("歡迎您使用 GC Server!"));
setbkcolor(BLUE);
settextstyle(38, 0, _T("楷體"));
outtextxy(124, 301, _T("快速注冊"));
rectangle(120, 300, 280, 340);
outtextxy(404, 301, _T("程序信息"));
rectangle(400, 300, 560, 340);
outtextxy(684, 301, _T("立即登錄"));
rectangle(680, 300, 840, 340);
MOUSEMSG m;
while (true)
{
m = GetMouseMsg();
if (m.x >= 120 && m.x <= 280 && m.y >= 300 && m.y <= 340)
{
if (m.uMsg == WM_LBUTTONDOWN)
{
//此處為注冊代碼,安全起見被刪除
}
else
{
settextstyle(35, 0, _T("楷體"));
outtextxy(130, 302, _T("快速注冊"));
}
}
else if (m.x >= 400 && m.x <= 560 && m.y >= 300 && m.y <= 340)
{
if (m.uMsg == WM_LBUTTONDOWN)
{
//此處為程序信息代碼,安全起見被刪除
}
else
{
settextstyle(35, 0, _T("楷體"));
outtextxy(410, 302, _T("程序信息"));
}
}
else if (m.x >= 680 && m.x <= 840 && m.y >= 300 && m.y <= 340)
{
if (m.uMsg == WM_LBUTTONDOWN)
{
//此處為登錄代碼,安全起見被刪除
}
else
{
settextstyle(35, 0, _T("楷體"));
outtextxy(690, 302, _T("立即登錄"));
}
}
else
{
settextstyle(38, 0, _T("楷體"));
outtextxy(124, 301, _T("快速注冊"));
outtextxy(404, 301, _T("程序信息"));
outtextxy(684, 301, _T("立即登錄"));
}
}
代碼的思路:先把按鈕畫出來,然后再判定鼠標(biāo)動(dòng)作。如果鼠標(biāo)再指定區(qū)域內(nèi)且左鍵單擊,就說明用戶點(diǎn)擊了按鈕。
當(dāng)然了,你還可以搞些小花樣,比如說我之前做的lock項(xiàng)目(電腦安全鎖)就用到了鼠標(biāo)手勢代碼:
MOUSEMSG m2;
int flag1 = 0, flag2 = 0;
settextstyle(20, 0, _T("楷體"));
rectangle(600, 500, 650, 530);
outtextxy(605, 505, _T("確定"));
while (true)
{
m2 = GetMouseMsg();
if (m2.x >= 600 && m2.x <= 650 && m2.y >= 500 && m2.y <= 530)
{
settextstyle(25, 0, _T("Consolas"));
if (m2.uMsg == WM_MBUTTONDBLCLK)
{
flag1 = 1;
continue;
}
else if (m2.uMsg == WM_LBUTTONDOWN && flag1 == 1)
{
flag2 = 1;
continue;
}
else if (m2.uMsg == WM_RBUTTONDOWN && flag2 == 1)
{
break;
}
else
{
settextstyle(22, 0, _T("楷體"));
outtextxy(603, 503, _T("確定"));
}
}
else
{
settextstyle(20, 0, _T("楷體"));
outtextxy(605, 505, _T("確定"));
}
}
上述代碼就是要先雙擊鼠標(biāo)中鍵的滾輪(向下按),然后再左鍵一次右鍵一次即可。
Step 4 - 添加游戲
游戲可以直接在GC Coding發(fā)帖,我會(huì)回復(fù)的。目前來說,大部分在GC Server目前版本已經(jīng)開放的游戲代碼都可以直接找我要。
Step 5 - 設(shè)計(jì)插件更改模塊
你需要在Github上開一個(gè)repo,然后把你想用的插件打包傳上去,用戶想下載的時(shí)候,只需要用system調(diào)用打開瀏覽器訪問指定網(wǎng)址,然后提示用戶將下載的包放到安裝目錄中,再點(diǎn)擊某個(gè)神奇的按鈕后程序就自動(dòng)開始解析用戶下載的包,然后把文件加到下載目錄里去。程序再修改一個(gè)安裝目錄下的文件,比如把0改成1,然后開始加載這個(gè)插件。
一般來說用戶比較喜歡有卸載功能的插件,這個(gè)也很簡單,只需要加上一個(gè)卸載按鈕,一旦用戶點(diǎn)擊確定后就刪除包,然后把上面說的文件再改回去即可。
還可以再repo里加一個(gè)README,在程序里加一個(gè)說明,一點(diǎn)就打開README的網(wǎng)址,這也不難。
Step 6 - 加入一部分彩蛋
好吧,其實(shí)這一步是選做的不過我認(rèn)為一個(gè)程序要更有意思就應(yīng)該加入一些彩蛋。比如GC Server最近促使我添加“姓名登錄”的一個(gè)較為重要的原因就是想藏彩蛋。比如你輸入某些神奇的名字~~ 夠了不泄密了…
Step 7 - 完工
好的,如果你已經(jīng)按照前面的步驟順利完成了,生成exe文件的時(shí)候就到了。不出意外的話(這幾乎是不可能的),你會(huì)看到exe文件已經(jīng)在項(xiàng)目文件夾里等著你了。當(dāng)然,如果出現(xiàn)了不能解決的錯(cuò)誤,也歡迎你來留言哦~
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++數(shù)據(jù)結(jié)構(gòu)鏈表基本操作示例過程
這篇文章主要為大家介紹了C++數(shù)據(jù)結(jié)構(gòu)鏈表基本操作的示例過程有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2021-11-11
visual studio 2019工具里添加開發(fā)中命令提示符的方法
這篇文章主要介紹了visual studio 2019工具里添加開發(fā)中命令提示符的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
c語言求出給定范圍內(nèi)的所有質(zhì)數(shù)
本文主要介紹了c語言求出給定范圍內(nèi)的所有質(zhì)數(shù)的小程序。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-04-04
C語言實(shí)現(xiàn)學(xué)籍管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)學(xué)籍管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
成員初始化列表與構(gòu)造函數(shù)體中的區(qū)別詳細(xì)解析
無論是在構(gòu)造函數(shù)初始化列表中初始化成員,還是在構(gòu)造函數(shù)體中對它們賦值,最終結(jié)果是相同的。不同之處在于,使用構(gòu)造函數(shù)初始化列表的版本初始化數(shù)據(jù)成員,沒有定義初始化列表的構(gòu)造函數(shù)版本在構(gòu)造函數(shù)體中對數(shù)據(jù)成員賦值2013-09-09

