Programm-Code

Aus BotE Wiki
Zur Navigation springen Zur Suche springen

Englisch-Symbol.jpg for English just click here

Quellcode

EDIT 2013: SourceCode was transferred to GitHub https://github.com/bote-team/bote -> see #Github


Der letzte freigegebene Quellcode zum Programm liegt unter https://github.com/bote-team/bote, hier die Commits(Änderungen): https://github.com/bote-team/bote/commits/master.

Das Urheberrecht ist zu beachten !


Threads:

SourceTree

Reg uses SourceTree (go to bitbucket e.g. https://bitbucket.org/kflanagan/section-31/overview, select CLONE, use the blue SourceTree-Download-Button) for accessing:

  • bitucket
  • Github

before he had used TortoiseSVN and TortoiseGIT, GitCola and some more.

GitHub

(Get more familiar with Git here)

Uploading (only authorized user)
  • before Uploading please make a Download before
  • for uploading with TortoiseGit: Git Commit -> "master" (not original folder, but "bote"-folder or below)
    • select files and put note and OK (after OK it will be zipped) ...next window: "Push" to upload it !!! ...next window: "OK" to upload it !!!
    • at uploads GitHub-Username (my one is "bote-reginald") and password will be requested
    • at first use of TortoiseGit there will be a request for GitHub-Username and Email
  • for DOWN-loading: "Git Sync", then "Pull" ...will take a while until "Success". At Commit-sheet expand message to see Commit-Text.


Threads:

Git

GitHub for Windows

For this option a GitHub-Account is requested.

After Log in choose Bote-Repository: name of it is "bote-team\bote".

Download will start, bar will get more and more darkness (it's round about 200 MB so depending on your internet speed it will take some time).

Repository will be placed (Win7) in user's area e.g. C:\Users\USERNAME\Documents\GitHub\bote

Screenshot:

GitHub_for_Windows-Screenshot1.jpg

Git-Cola (Linux, Mac OS X, Windows)

see here



old: SourceForge (only tested)
old: SourceForge (only tested)

Hier eine Anleitung: http://birth-of-the-empires.de/wiki_files/Downloads/BotE-Repository-Checkout(v2.0-Sourceforge).doc

Site: https://sourceforge.net/projects/bot-empires ("bote" was used already)

Commits ("History"): https://sourceforge.net/p/bot-empires/svn/commit_browser

Code: https://sourceforge.net/p/bot-empires/svn/HEAD/tree/


momentan (04/2013) wird überlegt, den Quellcode aufgrund von Problemen von Codeplex zu SourceForge (SF) zu übertragen.

old: Codeplex and SVN (until 04/2013)

SVN

Wer eine automatische Source-Code-Aktualisierung braucht, kann eine SVN verwenden. Als SVN (Subversion=Versionsverwaltung) kann VisualSVN verwendet werden (Download: http://www.visualsvn.com/visualsvn/download/) oder TortoiseSVN.

Die SVN hängt sich in den Windows-Explorer ein (rechte Maustaste).

Dort zunächst einen Ort für den Programm-Code festlegen (evtl. BotE-Verzeichnis des jeweiligen Users, wo ab V0.81 auch die bote.ini abgelegt wird), dort rechte Maustaste: SVN-Checkout (Volumen ca. 1 GB)

Als URL of repository angeben: https://Bote.svn.codeplex.com/svn oder -um nur den Source-Code zu laden- https://bote.svn.codeplex.com/svn/BotE%20Game/trunk (replace %20 by blank)

Wenn der SVN manchmal Problem macht, dann ist es am besten, sich den ganzen SVN nochmal (an neuer Stelle) runterzuladen, auch wenn's etliche MB sind.


Hier ist noch ein Thread im Forum dazu:


Letzter Eintrag:

svn und git sind beides Versionskontrollsysteme, wobei ein lokales git mit einem remote-svn kommunizieren kann, dafür muss man git-svn installiert haben. Hab ich bei codeplex und sourceforge gemacht.


und hier interne Threads:


Auch hilfreich könnte diese Beschreibung sein http://frickelblog.de/?p=336, über TortoiseSVN auch diese Aufstellung http://sopra.le-gousteau.de/Subversion.

Verwendete Sprache C++

Als Sprache wird C++ verwendet.

Verwendetes Programm Microsoft Visual Studio 2008

Als Programm wurde Microsoft Visual Studio 2008 verwendet (mindestens Version "Standard", die Express-Versionen besitzen keine MFC).


Download-Quelle für die Express-Version (da ist alles dabei, es ist zeitlich unbegrenzt verwendbar. Die Lizenz der Express Editions schreibt jedoch vor, dass damit keine kommerziellen Programme erstellt und anschließend verkauft werden dürfen. Zum Üben und Testen ist es jedoch perfekt geeignet. Damit geht auch nicht nur C++.

Nur BotE lässt sich mit den Express Editions nicht kompilieren. BotE benötigt die MFC (Microsoft Foundation Classes), welche eine Sammlung von C++ Klassen inkl. GUI Editor für Windows Programme ist.)


Beim Kompilieren auf "Release" gehen, sonst erhält man eine relativ große Debug-BotE.exe (ca. 8,5 MB). Sir Pustekuchen packt die Exe nach dem Kompilieren zusätzlich mit dem UPX-Packer.

Threads:


BotE Network.lib

see https://github.com/bote-team/bote/commit/93b3e585d03fd10a6f94d9d53802995bf0684edc (10.12.2013)

  • made that the self-compiled network lib form BotE Tools is linked in

Removed redundant versions of foundation, network and LZMA headers. Use the headers from network lib.

If you get linker errors, open BotE Tools\NetworkLib\BotE Network.sln and build that. It needs to be done for debug and release separately. This change should allow debugging into the network lib independently from who it does, as the paths to the cpp files are relative.

Alternative: Visual Studio 2008 Professional Edition (90-Tage-Testversion)

Eine Alternative wäre Visual Studio 2008 Professional Edition (90-Tage-Testversion). Mit dieser Version erstellte Programme dürfen jedoch nicht verkauft werden, aber das ist bei BotE ja eh nicht der Fall. Damit sollte sich BotE problemlos kompilieren lassen. Einfach die Projektdatei (.sln) aus dem BotE-Code-Verzeichnis doppelklicken und auf kompilieren drücken (meist F6), fertig.

http://www.microsoft.com/downloads/de-de/details.aspx?FamilyID=83C3A1EC-ED72-4A79-8961-25635DB0192B

Installiert werden müsste eigentlich nur die C++ Umgebung inkl. MFC, die restlichen Programmiersprachen und SQL-Server-Zeugs braucht man für BotE nicht. Kann sein das man noch das neuste ServicePack für VS2008 braucht. BotE ist jedenfalls mit diesem kompiliert.


XML

XML Parser: TinyXML

Threads: http://forum.birth-of-the-empires.de/viewtopic.php?p=29473#p29473

Ziel: deutschen und englische Listen mergen, das heißt z.B. <DescriptionDE>, <DescriptionEN> und zukünftig vielleicht auch ein <DescriptionFR> usw. Lediglich die Namen und Beschreibungen sind ja sprachabhängig. Für die Verwendung verschiedener Sprachen bräuchten wir noch ein Konzept.

Z.B. könnte man sich da an Civilization 4 orientieren. Da sind auch alle Informationen in XML Dateien abgespeichert. Hier ist ein Beispiel, wie die Städtenamen sprachabhängig sind:

<TEXT>
  <Tag>TXT_KEY_CITY_NAME_VIENNA</Tag>
  <English>Vienna</English>
  <French>Vienne</French>
  <German>Wien</German>
  <Italian>Vienna</Italian>
  <Spanish>Viena</Spanish>
</TEXT>
  • Shiplist.xsd Datei (XML Schema) ->Struktur und Validierung
  • Shiplist.xml Datei (basierend auf Shiplist.xsd) ->Die eigentlichen Daten

vielleicht pugixml: http://pugixml.googlecode.com/svn/tags/latest/docs/quickstart.html

schreiben vll. mit "sprintf" http://forum.birth-of-the-empires.de/viewtopic.php?p=29498#p29498

So könnte es aussehen:

   <?xml version="1.0" encoding="utf-8"?>
   
   <MajorRaceData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="MajorRace.xsd"
         version="0.81">
       
       <Race id="MAJOR1">
           
           <LanguageIndependentData>
             <NumberAssignedToBuildings>1</NumberAssignedToBuildings>
             <NumberAssignedToShips>1</NumberAssignedToShips>
           </LanguageIndependentData>
          
           <LanguageDependentData lang="de">
             <HomeSystem>Terra</HomeSystem>
             <BreedName>Menschen</BreedName>
           </LanguageDependentData>
   
           <LanguageDependentData lang="en">
             <HomeSystem>Terra</HomeSystem>
             <BreedName>Humans</BreedName>
           </LanguageDependentData>
   
           <LanguageDependentData lang="fr">
             <HomeSystem>Terre</HomeSystem>
             <BreedName>Gens</BreedName>
           </LanguageDependentData>
           
       </Race>
            
   </MajorRaceData>

Beispiele aus dem Programm-Code

String aus der Stringtable.txt holen

s = CResourceManager::GetString("DEMOGRAPHY_MENUE");


Exceldatei zu botf2Doc.cpp (58548)

Der Latest-Code ist hier direkt einsehbar.

Neben vielen anderen Unter-Programmen, wo z.B. Bildschirme gezeichnet werden oder Unterfunktionen (Kampf berechnen) ausgeführt werden, gibt es den Haupt-Code botf2Doc.cpp.

Hier eine Excel dazu (Spalte E ist das Hauptprogramm, allerdings Stand 58548, vorher sind Zeilen eingefügt z.B. Spalte B Filter "nichtleere anzeigen"). Die Datei ermöglicht einen ersten Überblick.

botf2Doc.cpp.xls.png

Weitere Exceldateien zum Programm-Code

Der Latest-Code ist hier direkt einsehbar.


\Gamedata\AI

AI(englisch) bzw. KI repräsentiert die Computergegner:

\Gamedata\Events

\Gamedata\Galaxy

\Gamedata\General

\Gamedata\Intel

\Gamedata\Races

\Gamedata\Ships

  • Ship.cpp (Schiff/Flotte: Symbol zeichnen, Tooltip, u.a.)
  • Starmap.cpp:
extended range by Rob_2_Play for 50x35

for CopyPaste see Wiki-SourceCode

default: { unsigned char tmpRangeMap[] = {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 3, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 3, 3, 3, 3, 2, 1, 0, 0, 0, 0, 0, 1, 2, 3, 3, 3, 3, 3, 3, 3, 2, 1, 0, 0, 0, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 0, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 0, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 0, 0, 0, 1, 2, 3, 3, 3, 3, 3, 3, 3, 2, 1, 0, 0, 0, 0, 0, 1, 2, 3, 3, 3, 3, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 3, 3, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0}; w = 15, h = 15, x0 = 7, y0 = 7;

\Gamedata\System

\Gamedata\Trade

\Gamedata\Troops


\GUI


Variablen etc.

definition short decription relevant files affects
CurrentHabitants Population (Bevölkerung) botf2doc.cpp AddPopSupportCosts
LetPlanetsGrowth Growth of population Sector.cpp