#cs ---------------------------------------------------------------------------- AutoIt Version: 3.3.6.1 Author: Matwachich Script Function: #ce ---------------------------------------------------------------------------- #include "autoitobject.au3" Global $oError = ObjEvent("AutoIt.Error", "_ErrFunc") Func _ErrFunc() ConsoleWrite("! COM Error ! Number: 0x" & Hex($oError.number, 8) & " ScriptLine: " & $oError.scriptline & " - " & $oError.windescription & @CRLF) Return EndFunc ;==>_ErrFunc #region ##### Class: Arme ##### Func _class_Arme($nom = "Aucune", $degats = 0) Local $class = _AutoItObject_Class() With $class .AddProperty("name", $ELSCOPE_READONLY, $nom) .AddProperty("damage", $ELSCOPE_READONLY, $degats) .AddProperty("owner", $ELSCOPE_PUBLIC) .AddMethod("_setOwner", "_Arme_SetOwner") .AddDestructor("_Arme_Destructor") EndWith Return $class.Object EndFunc Func _Arme_SetOwner($oSelf, $sOwner) $oSelf.owner = $sOwner ConsoleWrite("+> Weapon: " & $oSelf.name & " is now owned by: " & $oSelf.owner & @CRLF) EndFunc Func _Arme_Destructor($oSelf) ConsoleWrite("!> " & $oSelf.owner & "'s weapon " & $oSelf.name & " Destroyed!" & @CRLF) EndFunc #endregion ##### Class: Arme ##### #Region ##### Class: Personne ##### Func _class_Personne($arme, $nom = "noname", $age = 0, $sex = "m", $vie = 100) ; Definition de la classe personne Local $class = _AutoItObject_Class() If Not $sex = "m" And Not $sex = "f" Then $sex = "m" If $vie > 100 Then $vie = 100 If $vie < 0 Then $vie = 0 Local $isAlive = 0 If $vie > 0 Then $isAlive = 1 ;~ If $arme = 0 Then $arme = _class_Arme("Aucune", 0) $arme._setOwner($nom) With $class .AddProperty("name", $ELSCOPE_READONLY, $nom) .AddProperty("age", $ELSCOPE_READONLY, $age) .AddProperty("sex", $ELSCOPE_READONLY, $sex) .AddProperty("life", $ELSCOPE_READONLY, $vie) .AddProperty("isAlive", $ELSCOPE_READONLY, $isAlive) .AddProperty("weapon", $ELSCOPE_READONLY, $arme) .AddMethod("_Attack", "_Personne_Public_Attack") .AddMethod("_Subit", "_Personne_Public_Subit") .AddMethod("_Report", "_Personne_Public_Report") .AddMethod("_IsAliveString", "_Personne_Private_AliveToString") .AddDestructor("_Personne_Destructor") EndWith ConsoleWrite("> Created personne:" & @CRLF) ConsoleWrite(" Name: " & $nom & @CRLF) ConsoleWrite(" Age: " & $age & @CRLF) ConsoleWrite(" Sex: " & $sex & @CRLF) ConsoleWrite(" Life: " & $vie & @CRLF) ConsoleWrite(" Weapon: " & $arme.name & " (" & $arme.damage & ")" & @CRLF) ConsoleWrite("> ---------------------------" & @CRLF) Return $class.Object EndFunc Func _Personne_Public_Attack($oSelf, $oCible) ; Méthode de la classe personne ConsoleWrite("+> " & $oSelf.name & " - Attack -> " & $oCible.name & " With: " & $oSelf.weapon.name & " (" & $oSelf.weapon.damage & ")" & @CRLF) $oCible._Subit($oSelf.weapon.damage) EndFunc Func _Personne_Public_Subit($oSelf, $iDegats) ; Méthode de la classe personne ConsoleWrite("!> " & $oSelf.name & " <- Subit - (" & $iDegats & ") ") $oSelf.life = $oSelf.life - $iDegats If $oSelf.Life < 0 Then $oSelf.Life = 0 $oSelf.isAlive = 0 EndIf ConsoleWrite("New Life: " & $oSelf.life & " - IsAlive: " & $oSelf.isAlive & @CRLF) EndFunc Func _Personne_Public_Report($oSelf) ; Méthode de la classe personne ConsoleWrite("- " & $oSelf.name & " => Life: " & $oSelf.life & " (" & $oSelf._IsAliveString() & "); Age: " & $oSelf.age & "; Sex: " & $oSelf.sex & @CRLF) EndFunc Func _Personne_Private_AliveToString($oSelf) Local $alive If $oSelf.isAlive Then $alive = "Alive" Else $alive = "Dead" EndIf Return $alive EndFunc Func _Personne_Destructor($oSelf) ; Méthode de la classe personne $oSelf.weapon = 0 ; ##### là, ça coince! ConsoleWrite("!> " & $oSelf.name & " Destroyed!" & @CRLF) EndFunc #EndRegion ##### Class: Personne ##### ; ######################################### _AutoItObject_StartUp() $c_arme1 = _class_Arme("Epée", 50) $c_arme2 = _class_Arme() $c_David = _class_Personne($c_arme1, "David", 20, "m", 100) ; On créer une instance de la classe personne (la variable $david) $c_Goliath = _class_Personne($c_arme2, "Goliath", 21, "m", 80) ; On créer une instance de la classe personne (la variable $goliath) ;~ $c_David._Report() ;~ $c_Goliath._Report() ConsoleWrite($c_arme1.owner & @CRLF) ConsoleWrite($c_arme2.owner & @CRLF) $c_David._Attack($c_Goliath) $c_Goliath._Attack($c_David) $c_David._Attack($c_Goliath) ;~ $c_David._Report() ;~ $c_Goliath._Report() $c_David = 0 $c_Goliath = 0 _AutoItObject_Shutdown()