Another simple Class Demo

James


Code:
'=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
'SED_PBCC
'==============================================================================
'Automobile Simulation  C++ code from Planet-Source-Code.com converted to
'PBCC 5.0 Classes. Original C++ Author Brian Baugh
'******************************************************************************
'                                James C. Fuller
'                                August 9, 2008
'                             [email protected]
'******************************************************************************

#COMPILE EXE
#DIM ALL

%MAX_SPEED = 120
%MAX_REVERSE = -35
$AnyKey = "Any key to continue"
CLASS cAutomobile
	INSTANCE engine,lights,gear,speed,quit AS LONG
	CLASS METHOD CREATE
		gear = 2
	END METHOD

	INTERFACE iAutomobile : INHERIT IUNKNOWN
		METHOD DisplayStatus()
			CLS
			PRINT "--------------------------------"
			PRINT "Status:"
			PRINT "Engine: ";IIF$(engine,"On","Off")
			PRINT "Lights: ";IIF$(lights,"On","Off")
			PRINT "  Gear: ";CHOOSE$(Gear,"Reverse","Neutral","Drive")
			PRINT " Speed: ";FORMAT$(speed)
		END METHOD
'------------------------------------------------------------------------------
		METHOD ToggleEngine()
			engine = IIF&(engine,0,1)
		END METHOD
'------------------------------------------------------------------------------
		METHOD ToggleLights()
			lights = IIF&(lights,0,1)
		END METHOD
'------------------------------------------------------------------------------
		METHOD Accelerate()
			IF speed > 0 THEN
				IF (engine = 1) AND (speed < %MAX_SPEED) AND (gear = 3) THEN
					speed +=5
				ELSEIF engine <> 1 THEN
					PRINT "Engine is not on!!  -> ";$AnyKey
					WAITKEY$
				ELSEIF speed >= %MAX_SPEED THEN
					PRINT "Speed is at it's maximum!!  -> ";$AnyKey
					WAITKEY$
				ELSEIF gear <> 3 THEN
					PRINT "Gear is not in Drive!!    -> ";$AnyKey
					WAITKEY$
				END IF
			ELSEIF speed < 0 THEN
				IF (engine = 1) AND (speed > %MAX_REVERSE) AND (gear = 1) THEN
					speed -=5
				ELSEIF engine <> 1 THEN
					PRINT "Engine is not on!!  -> ";$AnyKey
					WAITKEY$
				ELSEIF speed <= %MAX_REVERSE THEN
					PRINT "Cannot reverse faster!!    -> ";$AnyKey
					WAITKEY$
				ELSEIF gear<> 1 THEN
					PRINT "Gear not in 'Reverse'!!    -> ";$AnyKey
					WAITKEY$
				END IF
			ELSEIF speed = 0 THEN

				IF gear = 3 THEN
					IF engine = 1 THEN
						speed +=5
					ELSE
						PRINT "Engine is not on!!    -> ";$AnyKey
						WAITKEY$
					END IF
				ELSEIF gear = 1 THEN
					IF engine = 1 THEN
						speed -= 5
					ELSE
						PRINT "Engine is not on!!    -> ";$AnyKey
						WAITKEY$
					END IF
				ELSEIF gear = 2 THEN
					PRINT "Gear is in Neutral!!    -> ";$AnyKey
					WAITKEY$
				END IF
			END IF
		END METHOD
'------------------------------------------------------------------------------
		METHOD brake()
			IF speed = 0  THEN
				PRINT "Car is already stopped!!    -> ";$AnyKey
				WAITKEY$
			ELSEIF speed > 0 THEN
				speed -= 5
			ELSEIF speed < 0 THEN
				speed += 5
			END IF

		END METHOD
'------------------------------------------------------------------------------
		METHOD ChangeGear()
			LOCAL GearChoice AS LONG
			IF speed = 0 THEN
				IF engine = 0 THEN
					PRINT "Engine must be running to change gears!!    -> ";$AnyKey
					WAITKEY$
					EXIT METHOD
				END IF
				PRINT "1 - Gear Up"
				PRINT "2 - Gear Down"
				INPUT "Choice: ",GearChoice
				SELECT CASE AS LONG GearChoice
					CASE 1
						IF gear < 3 THEN
							gear += 1
						ELSE
							PRINT "No Higher Gears  -> "; $AnyKey
							WAITKEY$
						END IF
					CASE 2
						IF gear > 1 THEN
							gear -=1
						ELSE
							PRINT "No Lower Gears    -> ";$AnyKey
							WAITKEY$
						END IF
					CASE ELSE
						PRINT "You did not enter a valid choice   -> ";$AnyKey
						WAITKEY$
				END SELECT
			ELSE
				PRINT "Car is Moving!!  -> ";$AnyKey
				WAITKEY$
			END IF
		END METHOD


	END INTERFACE

END CLASS



FUNCTION PBMAIN() AS LONG
	LOCAL oCar AS iAutomobile
	LOCAL UserChoice AS LONG
	oCar = CLASS "cAutomobile"

	DO
		oCar.DisplayStatus
		PRINT "-------------------------------------------"
		PRINT "What would you like to do?"
		PRINT "-------------------------------------------"
		PRINT "1 - Turn engine Off\On"
		PRINT "2 - Turn light Off\On"
		PRINT "3 - Change gears"
		PRINT "4 - Accelerate"
		PRINT "5 - Brake"
		PRINT "6 - Exit Sim Car"
		INPUT "Choice: ",UserChoice
	    SELECT CASE LONG UserChoice
			CASE 1
				oCar.ToggleEngine
			CASE 2
				oCar.ToggleLights
			CASE 3
				oCar.ChangeGear
			CASE 4
				oCar.Accelerate
			CASE 5
				oCar.Brake

		END SELECT
	LOOP UNTIL UserChoice = 6

END FUNCTION
Attached Files