使用C++制作GC Server过程详解

最近很多人找我要GC Server的源代码。我跟他们讲环境要求的时候,很多人都不以为然,结果最后仅仅测试程序就报了几千个Error。所以,我决定今天讲一下如何搭建你自己的GC Server。(目前还没有一个人成功,请量力而行,如果成功了记得在评论区告诉我~)

步骤

1. 系统配置

本文仅适用于Windows系统,支持Win7及以后的大部分版本,Win10最佳。

2. 环境配置

首先,你需要一个支持C/C++的IDE(强烈推荐Visual Studio,后面的操作会更方便),然后你需要下载一个图形库,比如WinAPI。最后你需要将图形库安装到你的IDE的配置里面,将include和lib都装到要求的文件夹里,这就不必多说了,如果有问题请在评论区说明。

3. 编译测试

注意!在此步骤下如果出现任何系统错误,请立即停止操作!推荐在开始前将系统进行备份!

Step 1 - 创建项目

在这一步里,需要你在你的IDE里创建一个C/C++的项目,确保创建正常且Hello world可以运行。(我精心帮你准备好了测试用的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你之前引入的图形库的头文件,然后再设置一下比如这样:

#include <graphics.h>        // 引用图形库头文件
#include <conio.h>
int ()
{
  initgraph(640, 480);      // 创建绘图窗口,大小为 640x480 像素
  setlinecolor(RGB(255, 0, 0));  // 设置当前线条颜色
  setfillcolor(RGB(0, 255, 0));  // 设置当前填充颜色
  fillcircle(200, 200, 100);   // 画圆,圆心(200, 200),半径 100
  system("pause");        // 按任意键继续,getch();亦可
  closegraph();          // 关闭图形环境
  return 0;
}

如果上面的代码你可以运行成功,那么恭喜你,你可以进入下面的步骤了~

Step 3 - 按钮制作

很多人看到图形库的功能后都很吃惊,但是也有人问我,GC Server里面的那些不同颜色的按钮时怎么画出来的。因为,图形库好像没有自带画按钮的功能啊~

很简单,如下:

(下方代码为GC Server 8.7最后更新的源代码片段,为防止数据泄露,我们没有采用最新版本的代码,且在原版本的基础上做了部分处理,不影响代码的理解)

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("立即登录"));
  }
}

代码的思路:先把按钮画出来,然后再判定鼠标动作。如果鼠标再指定区域内且左键单击,就说明用户点击了按钮。

当然了,你还可以搞些小花样,比如说我之前做的lock项目(电脑安全锁)就用到了鼠标手势代码:

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("确定"));
  }
}

上述代码就是要先双击鼠标中键的滚轮(向下按),然后再左键一次右键一次即可。

Step 4 - 添加游戏

游戏可以直接在GC Coding发帖,我会回复的。目前来说,大部分在GC Server目前版本已经开放的游戏代码都可以直接找我要。

Step 5 - 设计插件更改模块

你需要在Github上开一个repo,然后把你想用的插件打包传上去,用户想下载的时候,只需要用system调用打开浏览器访问指定网址,然后提示用户将下载的包放到安装目录中,再点击某个神奇的按钮后程序就自动开始解析用户下载的包,然后把文件加到下载目录里去。程序再修改一个安装目录下的文件,比如把0改成1,然后开始加载这个插件。

一般来说用户比较喜欢有卸载功能的插件,这个也很简单,只需要加上一个卸载按钮,一旦用户点击确定后就删除包,然后把上面说的文件再改回去即可。

还可以再repo里加一个README,在程序里加一个说明,一点就打开README的网址,这也不难。

Step 6 - 加入一部分彩蛋

好吧,其实这一步是选做的不过我认为一个程序要更有意思就应该加入一些彩蛋。比如GC Server最近促使我添加“姓名登录”的一个较为重要的原因就是想藏彩蛋。比如你输入某些神奇的名字~~ 够了不泄密了…

Step 7 - 完工

好的,如果你已经按照前面的步骤顺利完成了,生成exe文件的时候就到了。不出意外的话(这几乎是不可能的),你会看到exe文件已经在项目文件夹里等着你了。当然,如果出现了不能解决的错误,也欢迎你来留言哦~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C++中进行txt文件读入和写入的方法示例

    前言 大家可能大部分写代码都是在devc或者 vs里面直接输入数据,这一般常见于简单算法和数据的处理,但是一旦处理大数据的话,几百万,几千万,上亿个数据手打似乎不能轻易实现的,那么这篇文章我们来搞懂C++环境下如何进行io流读取txt文件,其实我们需要一个简单的代码进行分析. 这里直接给出源码, 可以进行直接编译 #include <fstream> #include <iostream> using namespace std; int main() { int a[10]; i

  • C++设计模式之观察者模式(Observer)

    观察者模式通常的叫法叫做订阅-发布模式,类似于报刊杂志的订阅,观察者和被观察者就是读者和邮局的关系,读者先要在邮局订阅想要的报刊,当报刊发行时,邮局会将报刊邮寄到读者家里.观察者(Observer)和被观察者(Listener)也是这种关系,Observer将自己attach到Listener中,当Listener触发时Notify所有Observer. 作用 在观察者模式中,被观察者维护观察者对象的集合,当被观察者对象变化时,它会通知观察者.观察者模式主要是用于解决对象之间一对多的关系. 类视

  • C++编程产生指定范围内的随机数

    C/C++编程产生指定范围内的随机数,直接上个小程序: #include <stdlib.h> #include <time.h> #include <stdio.h> #include <string> #include <string.h> /* * 获取随机数 * return : 随机数 */ int commonGetRandNumber(const int low, const int high) { int randNum = 0;

  • C++实现推箱子小游戏源码

    本文实例为大家分享了C++实现推箱子小游戏的具体代码,供大家参考,具体内容如下 功能尚为完善. // ConsoleApplication2.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include<windows.h> #define KEY_DOWN(vk_code) GetAsyncKeyState(vk_code) & 0x8000 ? 1 : 0 using

  • C++实现简单射击小游戏

    使用c++制作简单的横板射击小游戏,供大家参考,具体内容如下 #include <easyx.h> #include <time.h> #include <conio.h> class Bullet; class Tank; class E_Bullet; class Boss; bool dead = false; bool wined = false; struct pos//坐标类 { int a; int b; }; class E_Bullet//敌人打出的子

  • C#与C++之间类型的对应知识点总结

    Windows Data Type .NET Data Type BOOL, BOOLEAN Boolean or Int32 BSTR String BYTE Byte CHAR Char DOUBLE Double DWORD Int32 or UInt32 FLOAT Single HANDLE (and all other handle types, such as HFONT and HMENU) IntPtr, UintPtr or HandleRef HRESULT Int32 o

  • c++读取sqlserver示例分享

    复制代码 代码如下: // ReadSqlConsole.cpp: 主项目文件. #include "stdafx.h"#include <iostream>#include<iostream>#include<iomanip>//for setw()#include"windows.h" #import "C:\Program Files\Common Files\System\ado\msado15.dll"

  • python或C++读取指定文件夹下的所有图片

    本文实例为大家分享了python或C++读取指定文件夹下的所有图片,供大家参考,具体内容如下 1.python读取指定文件夹下的所有图片路径和图片文件名 import cv2 from os import walk,path def get_fileNames(rootdir): data=[] prefix = [] for root, dirs, files in walk(rootdir, topdown=True): for name in files: pre, ending = pa

  • 使用C++制作GC Server过程详解

    最近很多人找我要GC Server的源代码.我跟他们讲环境要求的时候,很多人都不以为然,结果最后仅仅测试程序就报了几千个Error.所以,我决定今天讲一下如何搭建你自己的GC Server.(目前还没有一个人成功,请量力而行,如果成功了记得在评论区告诉我~) 步骤 1. 系统配置 本文仅适用于Windows系统,支持Win7及以后的大部分版本,Win10最佳. 2. 环境配置 首先,你需要一个支持C/C++的IDE(强烈推荐Visual Studio,后面的操作会更方便),然后你需要下载一个图形

  • Toolbar制作菜单条过程详解

    文章来源:互联网 作者:ggg82/CSDN 现在许多用户界面都使用工具栏制作菜单条,小弟最近对此感兴趣,便从网上求助,可是得到的帮助大多是BCGControlBar的源代码或者是SizableRebar的源代码,对于只希望是自己的界面具有该功能的朋友来说,这也许是不错的选择,只要看一下demo,然后直接调用别人的类库就可以了,但对于我等对此话题感兴趣,希望弄懂其来龙去脉的读者来说,直接看这些没有详细解释的源代码,要从中弄出个所以然来,实不是件容易的是,至少对于像我这样的菜鸟来说是这样的,本文出

  • 破解IDEA(Goland)注册码设置 license server一直有效不过期的过程详解

    原文地址:https://blog.csdn.net/animatecat/article/details/81483174 PS:2018年9月10日 目前jar包为:JetbrainsCrack-3.1-release-enc.jar 破解的详细过程: 1.从下面地址下载一个jar包,名称是  JetbrainsCrack-2.10-release-enc.jar 下载地址是http://idea.lanyus.com/,进去之后点击这个网址 . 2.将你下载好的JetbrainsCrack

  • 使用Matlab制作大富翁小游戏的过程详解

    目录 1.自定义头像及名称 2.买地.收费.破产 3.部分代码展示 gui_init.m self_init.m 4.修改记录 5.下载地址 大富翁大家都玩过,走到建筑的位置可以买地,第二圈走到买过的地可以升级,别人经过后需要付过路费,每次经过起点都会获得一定资金,玩到最后还没破产的就是胜者,这里我用MATLAB制作了一款MATLAB版的大富翁小游戏: 1.自定义头像及名称 点击方框内加号可换头像,点击文本区域可改昵称: 当然即使不换头像点击开始后,也会自动分配头像和名称: 2.买地.收费.破产

  • 基于Python制作炸金花游戏的过程详解

    目录 前言 一.思路 二.解决方案 三.总结 前言 <诈金花>又叫三张牌,是在全国广泛流传的一种民间多人纸牌游戏.比如JJ比赛中的诈金花(赢三张),具有独特的比牌规则.游戏过程中需要考验玩家的胆略和智慧.--<百度百科> 前几天在交流群里边,有个叫[^-^]的粉丝分享了一道扑克牌诈金花的题目,要求用Python实现,题目如下: 自己写一个程序,实现发牌.比大小判断输赢. 游戏规则: 一付扑克牌,去掉大小王,每个玩家发3张牌,最后比大小,看谁赢. 有以下几种牌: 豹子:三张一样的牌,

  • 基于tomcat配置文件server.xml详解

    1. 入门示例:虚拟主机提供web服务 该示例通过设置虚拟主机来提供web服务,因为是入门示例,所以设置极其简单,只需修改$CATALINA_HOME/conf/server.xml文件为如下内容即可.其中大部分都采用了默认设置,只是在engine容器中添加了两个Host容器. <?xml version="1.0" encoding="UTF-8"?> <Server port="8005" shutdown="SH

  • yum安装CDH5.5 hive、impala的过程详解

    一.安装hive 组件安排如下: 172.16.57.75 bd-ops-test-75 mysql-server 172.16.57.77 bd-ops-test-77 Hiveserver2 HiveMetaStore 1.安装hive 在77上安装hive: # yum install hive hive-metastore hive-server2 hive-jdbc hive-hbase -y 在其他节点上可以安装客户端: # yum install hive hive-server2

  • Springcould多模块搭建Eureka服务器端口过程详解

    这篇文章主要介绍了Springcould多模块搭建Eureka服务器端口过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1创建一个普通父maven 在pom修改为因为spring could依赖spring boot所以首先在父maven <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-star

  • Spring Cloud应用实现配置自动刷新过程详解

    这篇文章主要介绍了Spring Cloud应用实现配置自动刷新过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 通过spring cloud 的消息总线,将配置github 等源代码仓库的变更通知到spring cloud 的所有组件. spring-bus 需要用到rabbitmq ,所以需要提前准备rabbitmq消息队列环境 配置中心调整 1.配置中心配置引用pom <dependency> <groupId>org.

  • python从内存地址上加载python对象过程详解

    这篇文章主要介绍了python从内存地址上加载pythn对象过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在python中我们可以通过id函数来获取某个python对象的内存地址,或者可以通过调用对象的__repr__魔术函数来获取对象的详细信息 def tt(): print(111) print(tt.__repr__()) print(id(tt)) 但是不知大家是否想过,其实这个内存地址可以直接加载python对象的.有两种方

随机推荐