Code:
#COMPILE EXE #DIM ALL 'Fred Harris on 18 AUG 2008 'https://forum.powerbasic.com/forum/user-to-user-discussions/source-code/39206-old-mcdonnald-had-a-farm-e-i-e-i-_-o?p=456128#post456128 INTERFACE ICare : INHERIT IUNKNOWN METHOD Groom() AS STRING METHOD Deworm() AS STRING END INTERFACE CLASS Blob INSTANCE m_strName AS STRING INTERFACE IBlob : INHERIT IUNKNOWN PROPERTY GET ItsName() AS STRING PROPERTY=m_strName END PROPERTY PROPERTY SET ItsName(BYVAL strName AS STRING) m_strName=strName END PROPERTY METHOD Move() AS STRING METHOD = "I Can't Move! I'm Just An " & m_strName & "!" END METHOD METHOD Eat() AS STRING METHOD = "Bring Me Something To Eat! I Can't Move!" & " I'm Just " & m_strName & "!" END METHOD METHOD MakeSound() AS STRING METHOD="I'm A Talking Immovable Blob!" END METHOD END INTERFACE END CLASS CLASS MovableAnimal INTERFACE IMovableAnimal : INHERIT Blob, IBlob OVERRIDE PROPERTY SET ItsName(BYVAL strName AS STRING) MyBase.ItsName=strName END PROPERTY OVERRIDE METHOD Move() AS STRING METHOD="Since I'm " & Me.ItsName() & ", I Can Scurry/Slither/Fly About" & _ "(as the case may be) In Search Of Food!" END METHOD OVERRIDE METHOD Eat() AS STRING METHOD=Me.ItsName & " Moved About And Ate Whatever It Is That Movable Animals Eat!" END METHOD OVERRIDE METHOD MakeSound() AS STRING METHOD=Me.ItsName & " Made a Moving Animal Sound" END METHOD END INTERFACE END CLASS CLASS Horse INTERFACE IHorse : INHERIT MovableAnimal, IMovableAnimal OVERRIDE PROPERTY SET ItsName(BYVAL strName AS STRING) MyBase.ItsName=strName END PROPERTY OVERRIDE METHOD Move() AS STRING METHOD=Me.ItsName() & " Can Run Across The Prairie!" END METHOD OVERRIDE METHOD Eat() AS STRING METHOD=Me.ItsName & " Ate Some Oats As It Moved About Across The Prairie." END METHOD OVERRIDE METHOD MakeSound() AS STRING METHOD=Me.ItsName & " Made A Whinny Sound As It Ran!" END METHOD END INTERFACE INTERFACE ICare : INHERIT IUNKNOWN METHOD Groom() AS STRING METHOD="You Brush The Horse." END METHOD METHOD Deworm() AS STRING METHOD="You Give The Horse A Dose Of Dewormer." END METHOD END INTERFACE END CLASS CLASS Sheep INTERFACE ISheep : INHERIT MovableAnimal, IMovableAnimal OVERRIDE PROPERTY SET ItsName(BYVAL strName AS STRING) MyBase.ItsName=strName END PROPERTY OVERRIDE METHOD Move() AS STRING METHOD=Me.ItsName() & " Can Amble About Eating Grass!" END METHOD OVERRIDE METHOD Eat() AS STRING METHOD=MyBase.ItsName & " Ate Some Grass." END METHOD OVERRIDE METHOD MakeSound() AS STRING METHOD=Me.ItsName & " Went Baaaaaah!" END METHOD END INTERFACE INTERFACE ICare : INHERIT IUNKNOWN METHOD Groom() AS STRING METHOD="You Shear The Sheep." END METHOD METHOD Deworm() AS STRING METHOD="You Give The Sheep A Dose Of Dewormer." END METHOD END INTERFACE END CLASS FUNCTION PBMAIN() AS LONG LOCAL a_blob AS IBlob LOCAL a_movable_animal AS IMovableAnimal LOCAL a_horse AS IHorse, horse_care AS ICare LOCAL a_sheep AS ISheep, sheep_care AS ICare LOCAL ePrint AS STRING 'Console Set Screen 25,100 LET a_blob = CLASS "Blob" a_blob.ItsName="An Immovable Blob" ePrint = ePrint & a_blob.ItsName() & $CRLF ePrint = ePrint & a_blob.Move() & $CRLF ePrint = ePrint & a_blob.Eat() & $CRLF ePrint = ePrint & a_blob.MakeSound() & $CRLF ePrint = ePrint & $CRLF LET a_movable_animal = CLASS "MovableAnimal" a_movable_animal.ItsName="A Movable Animal" ePrint = ePrint & a_movable_animal.ItsName() & $CRLF ePrint = ePrint & a_movable_animal.Move() & $CRLF ePrint = ePrint & a_movable_animal.Eat() & $CRLF ePrint = ePrint & a_movable_animal.MakeSound() & $CRLF ePrint = ePrint & $CRLF LET a_horse = CLASS "Horse" a_horse.ItsName="A Running Horse" ePrint = ePrint & a_horse.ItsName() & $CRLF ePrint = ePrint & a_horse.Move() & $CRLF ePrint = ePrint & a_horse.Eat() & $CRLF ePrint = ePrint & a_horse.MakeSound() & $CRLF LET horse_care = CLASS "Horse" ePrint = ePrint & horse_care.Groom() & $CRLF ePrint = ePrint & horse_care.Deworm() & $CRLF ePrint = ePrint & $CRLF LET a_sheep = CLASS "Sheep" : LET sheep_care = CLASS "Sheep" a_sheep.ItsName="The Sheep" ePrint = ePrint & a_sheep.ItsName & $CRLF ePrint = ePrint & a_sheep.Move() & $CRLF ePrint = ePrint & a_sheep.Eat() & $CRLF ePrint = ePrint & a_sheep.MakeSound() & $CRLF ePrint = ePrint & sheep_care.Groom() & $CRLF ePrint = ePrint & sheep_care.Deworm() & $CRLF ePrint = ePrint & $CRLF ? ePrint 'Waitkey$ PBMAIN=0 END FUNCTION
Leave a comment: