CHAPTER 13B Object Oriented Programming (Tutorial)
Course Evaluations Today you will evaluate the lecture portion of the course Call number: Semester: 5 On Monday we will evaluate the TAs
Tutorial: Maze Program Problem Analysis Create a program in which a mouse navigates a maze looking for the hidden cheese The maze consists of a two-dimensional array of cells The Mouse is an object created from a Mouse class definition Each cell in the maze is an object created from a Cell class defintion
Problem Analysis
Development (continued)
The Mouse Class Definition Class variables Various icons of mouse facing different directions private data members row and column locations of the mouse in the maze ( row and col ) Icon private methods Default constructor – Mouse()
The Mouse Class Definition (continued) public methods Initializing constructor – Mouse(int, int) Accessor methods getRow() getCol() getIcon() Mutator methods setRow() setCol()
The Mouse Class Definition (continued) public methods Utility methods goRight() goLeft() goUp() goDown()
The Mouse Class Definition (continued)
The Cell Class Definition private data members row : int – row location of Cell in maze col : int – column location of Cell in maze access : bool – indicates whether Mouse can enter this Cell hasCheese : bool – indicates whether cheese is in this Cell private methods Default constructor – Cell()
The Cell Class Definition (continued) public methods Initializing constructor – Cell(int, int) Accessor methods getRow() getCol() getAccess() getCheese() Mutator methods setAccess() setCheese()
The Cell Class Definition (continued)
Design A maze consists of rows and columns Rows run horizontally Columns run vertically Each cell has a row and column location
Design (continued)
The interface contains two buttons (used to start and stop the animation) A Timer control is used to perform Mouse movement The Mouse moves from one Cell to another Previous cells are colored brown When the mouse reaches the cell with the cheese a MessageBox pops up
Design (continued)
The size of Cells and the number of rows and columns of Cells in the maze are constants
Design (continued)
The maze is a two-dimensional array of Cells Use the Array template as a foundation for this
Design (continued) Instance variables include the mouse, maze and a variable to indicate which direction the mouse is moving
Design (continued) Creating the maze requires the instantiation of 320 Cell objects (20 in each row)
Design (continued) The Form1_Load() event will construct the interface, complete with maze, mouse and cheese
Design (continued) Drawing the maze (nested loops for rows and columns)
Design (continued) Drawing and positioning the Mouse
Design (continued) Keep the mouse in the maze by checking for edges
Development Interface construction (only two buttons) Timer control used to control movement Form1_Load() will draw the maze initially The maze and mouse are redrawn in each Timer_Tick() event
Development (continued)
The Mouse and Cell classes must both be included at the top of the client (Form1.h)
Development (continued) Instance variables, constants and object handles
Development (continued) Form1_Load() constructs the maze
Development (continued) The start button creates the mouse and cheese
Development (continued) The mouse and cheese icons are displayed in Rectangles
Development (continued) The maze cells are drawn in drawMaze( )
Development (continued) At each interval of the Timer, its Tick() event Redraws the maze Draws the mouse at its new location The animation can be halted with btnStop_Click()
Development (continued) The Timer1_Tick() event Creates a Rectangle based on the cell in which the mouse currently resides ( oldRect )
Development (continued) If mouse is not at edge then move in current direction
Development (continued) If mouse moves into cell with cheese congratulations! If mouse was at an edge then choose new direction
Development (continued) Check for edges by checking row and column
Testing When btnStart is clicked Maze appears (16 rows x 20 columns of cells) Mouse and cheese appear Mouse moves across the maze from left to right When mouse reaches the edge it turns and follows the edges around Reposition the cheese so that the mouse finds it in its path
On Your Own Stronger mutators Do not allow negative values Private instance methods verifyRow() and verifyCol() for Mouse class New UML class diagram Add verifyRow() and verifyCol() to Mouse UML diagram