C++ ist für einen Flaggenator einfach Overkill.
Auch wenn man C++ kann sollte man wissen, dass es für manche Programme einfach keinen Sinn macht. Klar, man kann das Ganze in C++ viel performanter und ressourcensparender schreiben, aber das ist bei einem Flaggenerator irrelevant, weil er niemals auch nur annährend die Ressourcen eines PCs ausnutzen würde.
Ich schreib das Ding dann mal in Lua. Kappa.
Code:
ANTIFLAG = {
{"Weiblich", bit32.lshift(1, 0)},
{"Männlich", bit32.lshift(1, 1)},
{"Krieger", bit32.lshift(1, 2)},
{"Ninja", bit32.lshift(1, 3)},
{"Sura", bit32.lshift(1, 4)},
{"Schamane", bit32.lshift(1, 5)},
{"Handeln", bit32.lshift(1, 6)},
{"Fallen lassen", bit32.lshift(1, 7)},
{"Verkaufen", bit32.lshift(1, 8)},
{"Rotes Reich", bit32.lshift(1, 9)},
{"Gelbes Reich", bit32.lshift(1, 10)},
{"Blaues Reich", bit32.lshift(1, 11)},
{"Save", bit32.lshift(1, 12)},
{"Geben", bit32.lshift(1, 13)},
{"Aggro-Drop", bit32.lshift(1, 14)},
{"Stapelbar", bit32.lshift(1, 15)},
{"Im eigenen Laden", bit32.lshift(1, 16)},
{"Lagerbar", bit32.lshift(1, 17)},
}
FLAG = {
{"Uppbar", bit32.lshift(1, 0)},
{"Save", bit32.lshift(1, 1)},
{"Stapelbar", bit32.lshift(1, 2)},
{"Count per 1 Gold", bit32.lshift(1, 3)},
{"Langsame Query", bit32.lshift(1, 4)},
{"Unused01", bit32.lshift(1, 5)},
{"Einzigartig", bit32.lshift(1, 6)},
{"Zählbar", bit32.lshift(1, 7)},
{"Unlöschbar", bit32.lshift(1, 8)},
{"Bestätigen vor Benutzung", bit32.lshift(1, 9)},
{"Questbenutzung", bit32.lshift(1, 10)},
{"Doppelte Questbenutzung", bit32.lshift(1, 11)},
{"Quest geben", bit32.lshift(1, 12)},
{"Log", bit32.lshift(1, 13)},
{"Applicable", bit32.lshift(1, 14)},
}
WEARFLAG = {
{"Körper", bit32.lshift(1, 0)},
{"Kopf", bit32.lshift(1, 1)},
{"Füße", bit32.lshift(1, 2)},
{"Handgelenke", bit32.lshift(1, 3)},
{"Waffe", bit32.lshift(1, 4)},
{"Hals", bit32.lshift(1, 5)},
{"Ohr", bit32.lshift(1, 6)},
{"Schild", bit32.lshift(1, 7)},
{"Extraslot", bit32.lshift(1, 8)},
{"Pfeil", bit32.lshift(1, 9)},
{"Haare", bit32.lshift(1, 10)},
{"Taskbar", bit32.lshift(1, 11)},
{"Kostüm", bit32.lshift(1, 12)},
}
function calculateFlag(flagTable, flagNames)
local flag = 0
local flagNameSetTable = {}
for _, flagName in ipairs(flagNames) do
flagNameSetTable[flagName] = true
end
for _, v in ipairs(flagTable) do
if flagNameSetTable[v[1]] then
flag = bit32.bor(flag, v[2])
end
end
return flag
end
function reverseFlag(flagTable, flag)
local flagNames = {}
for _, v in ipairs(flagTable) do
if bit32.btest(flag, v[2]) then
table.insert(flagNames, v[1])
end
end
return flagNames
end
-- console start
while true do
-- mode selection
local mode = nil
repeat
io.write("test")
print("Names -> Flag / Flag -> Names? (1/2)")
mode = io.read()
until mode == "1" or mode == "2"
-- flagtype selection
local flagType = nil
repeat
print("ANTIFLAG, FLAG or WEARFLAG?")
flagType = io.read()
until flagType == "ANTIFLAG" or flagType == "FLAG" or flagType == "WEARFLAG"
local flagTable = ({
["ANTIFLAG"] = ANTIFLAG,
["WEARFLAG"] = WEARFLAG,
["FLAG"] = FLAG,
})[flagType]
if mode == "1" then-- names -> flag
print("You can choose from the following flags:")
for _, v in ipairs(flagTable) do
print(v[1])
end
print("Input all flags you want to set, seperated by space")
local flagNameStr = io.read()
local lastSpaceEnd = 1
local spaceStart, spaceEnd = string.find(flagNameStr, " ")
local flagNames = {}
while spaceStart do
table.insert(flagNames, string.sub(flagNameStr, lastSpaceEnd, spaceStart - 1))
lastSpaceEnd = spaceEnd
spaceStart, spaceEnd = string.find(flagNameStr, " ", spaceEnd + 1)
end
table.insert(flagNames, string.sub(flagNameStr, lastSpaceEnd, string.len(flagNameStr)))
print("Calculated flag:")
print(calculateFlag(flagTable, flagNames))
else-- flag -> names
local flag = nil
repeat
print("Your flag:")
flag = tonumber(io.read())
until flag
print("The following flags are set:")
for _, flagName in ipairs(reverseFlag(flagTable, flag)) do
print(flagName)
end
end
print("Continue? (y/n)")
if io.read() ~= "y" then
break
end
end