Der Trick sind Arrays. Du hast unmengen an redundanten Daten in deinem Programmcode. Immer wenn ein Ablauf nur von verschiedenen Daten, aber nicht von verschiedener "Struktur" abhängt, kann man Arrays nutzen. (z.B. du hast ein Label und willst dort 10 verschiedene Strings anzeigen lassen je nachdem was man anklickt. Dann speicherst du diese 10 Strings in einer Liste und benutzt z.B. Liste[0] um den ersten String zu bekommen).
Trick Nummer 2 sind MEHR ARRAYS ![]()
Wenn du einen Datensatz hast (bestehend aus Titel, OS, CPU, GPU, ... etc) ist dieser ein Array. Wenn du viele Datensätze hast, ist das ein Array welches Arrays enthält.
Trick Nummer 3: Generalisierung im Allgemeinen
Immer wenn man in der Programmierung eine Anzahl Probleme (z.B. der große ElseIf Teil, oder eine eigene Funktion für jedes Spiel LOL(), GTA(), ...()) hat, die sich sehr ähnlich sind, versucht man einen Schritt zurückzutreten und "alle" Probleme dieses Typs gleichzeitig zu lösen. Was passiert, wenn du ein Spiel hinzufügen willst? Im Optimalfall ergänzt du in einer Liste ein paar Zeilen und fertig, aber du möchtest keine neuen Funktionen schreiben, keine neuen GUIs erstellen, keine neuen Ctrls erstellen, etc.
Das klingt jetzt als würde ich dich angreifen, will ich aber wirklich nicht. Das sind alles Tips ![]()
Man wächst an seinen Aufgaben, und einfache Programme sind super geeignet um etwas zu lernen ![]()
Anbei gibt es auch gleich ein Grundgerüst für "eine" Lösung des Problems (es gibt immer sehr viele verschiedene richtige Wege ein Problem zu lösen, hier wird nur "einer" gezeigt. Jeder hat einen eigenen Programmierstil). Das UserInterface (GUI) ist selbstverständlich nicht ausgereift, ich habe auch nicht alle Spiele hinzugefügt und der Text der angezeigt wird ist nicht schön formatiert, vielleicht sind auch noch Bugs drin, habe das jetzt nicht 5 Stunden getestet. Das sind alles Sachen an denen du dich austoben kannst ![]()
; Yo
Global $aaInfo[4] ; aaInfo steht für Array of aInfo, also eine Liste die Arrays mit Infos enthält. Verschachteltes Array.
; Wenn du mehr als 4 Spiele unterstützen willst hier aus der [4] irgendwas höheres machen sodass es zur Anzahl Spiele passt.
For $i = 0 To UBound($aaInfo) - 1 Step 1
$aaInfo[$i] = InfoCreate()
Next
; Das habe ich hier extra so aufgebaut, damit man die Info später einfacher aus einer Ini holen kann wenn man will.
InfoSet($aaInfo[0], 'Titel' , 'CS:GO')
InfoSet($aaInfo[0], 'Betriebssystem', 'Windows 7/Vista/XP')
InfoSet($aaInfo[0], 'CPU' , 'Intel CoreTM 2 Duo E6600 or AMD PhenomTM X3 8750')
InfoSet($aaInfo[0], 'RAM' , '2 GB')
InfoSet($aaInfo[0], 'Grafik' , 'Die Grafikkarte muss mindestens 256 MB haben und sollte mit DirectX 9 Kompatibel sein, und Pixel Schader 3.0 unterstützen.')
InfoSet($aaInfo[0], 'DirectX' , 'Version 9.0c')
InfoSet($aaInfo[0], 'Festplatte' , '15 GB')
InfoSet($aaInfo[1], 'Titel' , 'League of Legends')
InfoSet($aaInfo[1], 'Betriebssystem', 'Windows XP')
InfoSet($aaInfo[1], 'CPU' , '2 GHz Prozessor')
InfoSet($aaInfo[1], 'RAM' , '1 GB')
InfoSet($aaInfo[1], 'Grafik' , 'Shader version 2.0 & DirectX capable video card.')
InfoSet($aaInfo[1], 'DirectX' , 'Version 9.0c')
InfoSet($aaInfo[1], 'Festplatte' , '12 GB')
InfoSet($aaInfo[2], 'Titel' , 'irgendein Spiel')
InfoSet($aaInfo[2], 'Betriebssystem', 'Windows 95+')
InfoSet($aaInfo[2], 'CPU' , '7 GHz Prozessor')
InfoSet($aaInfo[2], 'RAM' , '100 GB')
InfoSet($aaInfo[2], 'Grafik' , 'Shader version 31.41 & 2TB GDDR8')
InfoSet($aaInfo[2], 'DirectX' , 'Version 15.0c')
InfoSet($aaInfo[2], 'Festplatte' , '77 TB')
InfoSet($aaInfo[3], 'Titel' , 'irgendein Spiel (teil 3)')
InfoSet($aaInfo[3], 'Betriebssystem', 'Windows 94+')
InfoSet($aaInfo[3], 'CPU' , '9 GHz Prozessor')
InfoSet($aaInfo[3], 'RAM' , '100 TB')
InfoSet($aaInfo[3], 'Grafik' , 'Shader version 31.415 & 17TB GDDR0')
InfoSet($aaInfo[3], 'DirectX' , 'Version 19.0c')
InfoSet($aaInfo[3], 'Festplatte' , '12345 TB')
; Hier kann man einfach weitere sachen hinzufügen, die sind dann automatisch drin.
; Das UserInterface sah so lustiger aus. Aber das kann jeder so gestalten wie man will.
Global $iW = 320, $iH = 260
Global $hGUI = GUICreate('Ich bin ein Fenster', $iW, $iH)
Global $hDDM = GUICtrlCreateCombo(($aaInfo[0])[0][1], 10, 10, 150, 25) ; Ja man kann verschachtelte Arrays via (aaList[0])[...] ansprechen. Ist nicht sehr performant, ist hier aber egal.
For $i = 1 To UBound($aaInfo) - 1 Step 1
GUICtrlSetData($hDDM, ($aaInfo[$i])[0][1])
Next
Global $hBTN = GUICtrlCreateButton('Lets Go', 170, 10, 100, 25)
Global $hEDT = GUICtrlCreateEdit('Info', 10, 50, 300, 200, 0, 2048)
GUICtrlSetBkColor($hEDT, 0x404040)
GUICtrlSetFont($hEDT, 11, 400, 0, 'Consolas', 5) ; Wenn Consolas nicht installiert ist einfach Arial hier hinschreiben.
GUICtrlSetColor($hEDT, 0x40EE80)
GUISetBkColor(0x202020, $hGUI)
GUISetState(@SW_SHOW, $hGUI)
While True
Switch GUIGetMsg()
Case -3
Exit
Case $hBTN
Local $sRW = GUICtrlRead($hDDM)
; In hDDM ist jetzt ein String = Spielname. Der ist auch in (aaInfo[i])[0][1].
For $i = 0 To UBound($aaInfo) - 1 Step 1
If ($aaInfo[$i])[0][1] = $sRW Then
$sRW = ''
For $ii = 0 To UBound($aaInfo[$i]) - 1 Step 1
$sRW &= ($aaInfo[$i])[$ii][0] & ': ' & ($aaInfo[$i])[$ii][1] & @CRLF
Next
GUICtrlSetData($hEDT, $sRW)
ExitLoop
EndIf
Next
EndSwitch
WEnd
Func InfoCreate()
Local $aInfo[7][2] ; Wenn mehr Keys dazukommen, hier aus [6][2] ein [7][2] oder mehr machen.
$aInfo[0][0] = 'Titel'
$aInfo[1][0] = 'Betriebssystem'
$aInfo[2][0] = 'CPU'
$aInfo[3][0] = 'RAM'
$aInfo[4][0] = 'Grafikkarte'
$aInfo[5][0] = 'DirectX'
$aInfo[6][0] = 'Festplatte'
Return $aInfo
EndFunc
Func InfoSet(ByRef $aInfo, $sKey, $sValue)
For $i = 0 To UBound($aInfo) - 1 Step 1
If StringLeft($aInfo[$i][0], StringLen($sKey)) = $sKey Then ; Lineare Suche (reicht bei wenigen Keys), partial Match geht, also z.B. "Grafik" statt "Grafikkarte" schreiben.
$aInfo[$i][1] = $sValue
ExitLoop
EndIf
Next
EndFunc
Func InfoGet(ByRef $aInfo, $sKey)
For $i = 0 To UBound($aInfo) - 1 Step 1
If StringLeft($aInfo[$i][0], StringLen($sKey)) = $sKey Then Return $aInfo[$i][1]
Next
EndFunc
Alles anzeigen
lg
M