{
 "metadata": {
  "name": ""
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "Chapter 9 : Advanced Classes and Dynamic Memory: Game Lobby"
     ]
    },
    {
     "cell_type": "heading",
     "level": 3,
     "metadata": {},
     "source": [
      "example 9.1 page no : 288"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "class Critter:\n",
      "    def __init__(self,name=\"\"):\n",
      "        self.m_Name = name\n",
      "\n",
      "    def GetName(self):\n",
      "        return self.m_Name;\n",
      "\n",
      "class Farm:\n",
      "    def __init__(self,spaces = 1):\n",
      "        self.m_Critters = []\n",
      "\n",
      "    def Add(self,aCritter):\n",
      "        self.m_Critters.append(aCritter);\n",
      "\n",
      "    def RollCall(self):\n",
      "        for i in self.m_Critters:\n",
      "            print i.GetName() , \" here.\";\n",
      "\n",
      "crit = Critter(\"Poochie\");\n",
      "print \"My critter's name is \" , crit.GetName()\n",
      "print \"\\nCreating critter farm.\";\n",
      "myFarm = Farm(3)\n",
      "print \"Adding three critters to the farm.\";\n",
      "myFarm.Add(Critter(\"Moe\"));\n",
      "myFarm.Add(Critter(\"Larry\"));\n",
      "myFarm.Add(Critter(\"Curly\"));\n",
      "print \"Calling Roll. . .\";\n",
      "myFarm.RollCall();"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "My critter's name is  Poochie\n",
        "\n",
        "Creating critter farm.\n",
        "Adding three critters to the farm.\n",
        "Calling Roll. . .\n",
        "Moe  here.\n",
        "Larry  here.\n",
        "Curly  here.\n"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "heading",
     "level": 3,
     "metadata": {},
     "source": [
      "example 9.2 page no : 293"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "\n",
      "class Critter:\n",
      "    def __init__(self,name=\"\"):\n",
      "        self.m_Name = name\n",
      "\n",
      "    def GetName(self):\n",
      "        return self.m_Name;\n",
      "\n",
      "\n",
      "def Peek(aCritter):\n",
      "    print aCritter.m_Name\n",
      "\n",
      "def print_(aCritter):\n",
      "    print \"Critter Object - \",\n",
      "    print \"m_Name: \" , aCritter.m_Name,\n",
      "\n",
      "\n",
      "crit = Critter(\"Poochie\");\n",
      "print \"Calling Peek() to access crit's private data member, m_Name: \";\n",
      "Peek(crit);\n",
      "print \"Sending crit object to cout with the , operator:\";\n",
      "print_(crit)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Calling Peek() to access crit's private data member, m_Name: \n",
        "Poochie\n",
        "Sending crit object to cout with the , operator:\n",
        "Critter Object -  m_Name:  Poochie\n"
       ]
      }
     ],
     "prompt_number": 2
    },
    {
     "cell_type": "heading",
     "level": 3,
     "metadata": {},
     "source": [
      "example 9.3 page no : 297"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "def intOnHeap():\n",
      "    pTemp = []\n",
      "    return pTemp;\n",
      "\n",
      "def leak1():\n",
      "    drip1 = []\n",
      "\n",
      "def leak2():\n",
      "    drip2 = []\n",
      "\n",
      "\n",
      "pHeap = 10;\n",
      "print \"*pHeap: \" , pHeap\n",
      "pHeap2 = intOnHeap();\n",
      "print \"pHeap2: \" , pHeap2 \n",
      "print \"Freeing memory pointed to by pHeap.\"; # python automatically deletes the memory.\n",
      "print \"Freeing memory pointed to by pHeap2.\";\n",
      "pHeap = 0;\n",
      "pHeap2 = 0;"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "*pHeap:  10\n",
        "pHeap2:  []\n",
        "Freeing memory pointed to by pHeap.\n",
        "Freeing memory pointed to by pHeap2.\n"
       ]
      }
     ],
     "prompt_number": 3
    },
    {
     "cell_type": "heading",
     "level": 3,
     "metadata": {},
     "source": [
      "example 9.4 page no : 304"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "\n",
      "\n",
      "class Critter:\n",
      "    def __init__(self,name=None,age=None):\n",
      "        if (age!=None and name != None) or (age==None and name==None):\n",
      "            print \"Constructor called\";\n",
      "            self.m_pName = name\n",
      "            self.m_Age = age\n",
      "        else:\n",
      "            print \"Copy Constructor called\";\n",
      "            self.m_pName = name.m_pName\n",
      "            self.m_Age = name.m_Age;\n",
      "\n",
      "    def GetName(self):\n",
      "        return self.m_Name;\n",
      "\n",
      "    def __del__(self):\n",
      "        print \"Destructor called\\n\";\n",
      "\n",
      "    def operator(self,c):\n",
      "        print \"Overloaded Assignment Operator called\";\n",
      "        return self\n",
      "        \n",
      "    def Greet(self):\n",
      "        print \"I'm \" , self.m_pName , \" and I'm \" , self.m_Age , \" years old.\";\n",
      "        print \"&m_pName: \" , \n",
      "        print id(self.m_pName)\n",
      "\n",
      "\n",
      "def testDestructor():\n",
      "    toDestroy = Critter(\"Rover\", 3);\n",
      "    toDestroy.Greet();  \n",
      "\n",
      "def testCopyConstructor(aCopy):\n",
      "    aCopy.Greet();\n",
      "\n",
      "def testAssignmentOp():\n",
      "    crit1 = Critter(\"crit1\", 7);\n",
      "    crit2 = Critter(\"crit2\", 9);\n",
      "    crit1 = crit2;\n",
      "    crit1.Greet();\n",
      "    crit2.Greet();\n",
      "    crit3 = Critter(\"crit\", 11);\n",
      "    crit3 = crit3;\n",
      "    crit3.Greet();\n",
      "\n",
      "testDestructor();\n",
      "print ''\n",
      "crit = Critter(\"Poochie\", 5);\n",
      "crit.Greet();\n",
      "testCopyConstructor(crit);\n",
      "crit.Greet();\n",
      "print ''\n",
      "testAssignmentOp();"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Constructor called\n",
        "I'm  Rover  and I'm  3  years old.\n",
        "&m_pName:  30745776\n",
        "Destructor called\n",
        "\n",
        "\n",
        "Constructor called\n",
        "I'm  Poochie  and I'm  5  years old.\n",
        "&m_pName:  30744672\n",
        "I'm  Poochie  and I'm  5  years old.\n",
        "&m_pName:  30744672\n",
        "I'm  Poochie  and I'm  5  years old.\n",
        "&m_pName:  30744672\n",
        "\n",
        "Constructor called\n",
        "Constructor called\n",
        "Destructor called\n",
        "\n",
        "I'm  crit2  and I'm  9  years old.\n",
        "&m_pName:  30725152\n",
        "I'm  crit2  and I'm  9  years old.\n",
        "&m_pName:  30725152\n",
        "Constructor called\n",
        "I'm  crit  and I'm  11  years old.\n",
        "&m_pName:  30744624\n",
        "Destructor called\n",
        "\n",
        "Destructor called\n",
        "\n"
       ]
      }
     ],
     "prompt_number": 4
    },
    {
     "cell_type": "heading",
     "level": 3,
     "metadata": {},
     "source": [
      "example 9.5 and 9.6 page no : 318"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "\n",
      "class Player:\n",
      "    def __init__(self,name):\n",
      "        self.m_Name =name\n",
      "        self.m_pNext = 0\n",
      "\n",
      "    def GetName(self):\n",
      "        return self.m_Name;\n",
      "\n",
      "    def GetNext(self):\n",
      "        return self.m_pNext;\n",
      "\n",
      "    def SetNext(self,next):\n",
      "        self.m_pNext = next;\n",
      "        \n",
      "class Lobby:\n",
      "    def __init__(self):\n",
      "        self.m_pHead =0\n",
      "\n",
      "    def __del__(self):\n",
      "        self.Clear();\n",
      "\n",
      "    def AddPlayer(self):\n",
      "        #create a new player node\n",
      "        print \"Please enter the name of the new player: \",\n",
      "        name = 'abc' #raw_input()\n",
      "        pNewPlayer = Player(name);\n",
      "        #if list is empty, make head of list this new player\n",
      "        if (self.m_pHead == 0):\n",
      "            self.m_pHead = pNewPlayer;\n",
      "        #otherwise find the end of the list and add the player there\n",
      "        else:\n",
      "            pIter = self.m_pHead;\n",
      "            while (pIter.GetNext() != 0):\n",
      "                pIter = pIter.GetNext();\n",
      "            pIter.SetNext(pNewPlayer);\n",
      "    \n",
      "    def RemovePlayer(self):\n",
      "        if (self.m_pHead == 0):\n",
      "            print \"The game lobby is empty.\"\n",
      "        else:\n",
      "            pTemp = self.m_pHead;\n",
      "            self.m_pHead = self.m_pHead.GetNext();\n",
      "\n",
      "    def Clear(self):\n",
      "        while (self.m_pHead != 0):\n",
      "            RemovePlayer();\n",
      "\n",
      "    def print_(self):\n",
      "        pIter = self.m_pHead;\n",
      "\n",
      "        print \"Here's who's in the game lobby:\";\n",
      "        if (pIter == 0):\n",
      "            print \"The lobby is empty.\\n\";\n",
      "        else:\n",
      "            while (pIter != 0):\n",
      "                print pIter.GetName()\n",
      "                pIter = pIter.GetNext();\n",
      "\n",
      "myLobby = Lobby()\n",
      "choice = 1 \n",
      "choices = [1,2,3,0]\n",
      "i = 0\n",
      "while (choice != 0):\n",
      "    print myLobby.print_();\n",
      "    print \"\\nGAME LOBBY\";\n",
      "    print \"0 - Exit the program.\";\n",
      "    print \"1 - Add a player to the lobby.\";\n",
      "    print \"2 - Remove a player from the lobby.\";\n",
      "    print \"3 - Clear the lobby.\";\n",
      "    print \"\\nEnter choice: \",\n",
      "    choice = choices[i] #int(raw_input())\n",
      "    i += 1\n",
      "    if choice ==0:\n",
      "        print \"Good-bye.\"\n",
      "    elif choice ==1:        \n",
      "        myLobby.AddPlayer()\n",
      "    elif choice==2:            \n",
      "        myLobby.RemovePlayer(); \n",
      "    elif choice==3:            \n",
      "        myLobby.Clear()\n",
      "    else:\n",
      "        print \"That was not a valid choice.\\n\";"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " Here's who's in the game lobby:\n",
        "The lobby is empty.\n",
        "\n",
        "None\n",
        "\n",
        "GAME LOBBY\n",
        "0 - Exit the program.\n",
        "1 - Add a player to the lobby.\n",
        "2 - Remove a player from the lobby.\n",
        "3 - Clear the lobby.\n",
        "\n",
        "Enter choice:  Please enter the name of the new player:  Here's who's in the game lobby:\n",
        "abc\n",
        "None\n",
        "\n",
        "GAME LOBBY\n",
        "0 - Exit the program.\n",
        "1 - Add a player to the lobby.\n",
        "2 - Remove a player from the lobby.\n",
        "3 - Clear the lobby.\n",
        "\n",
        "Enter choice:  Here's who's in the game lobby:\n",
        "The lobby is empty.\n",
        "\n",
        "None\n",
        "\n",
        "GAME LOBBY\n",
        "0 - Exit the program.\n",
        "1 - Add a player to the lobby.\n",
        "2 - Remove a player from the lobby.\n",
        "3 - Clear the lobby.\n",
        "\n",
        "Enter choice:  Here's who's in the game lobby:\n",
        "The lobby is empty.\n",
        "\n",
        "None\n",
        "\n",
        "GAME LOBBY\n",
        "0 - Exit the program.\n",
        "1 - Add a player to the lobby.\n",
        "2 - Remove a player from the lobby.\n",
        "3 - Clear the lobby.\n",
        "\n",
        "Enter choice:  Good-bye.\n"
       ]
      }
     ],
     "prompt_number": 7
    }
   ],
   "metadata": {}
  }
 ]
}