summaryrefslogtreecommitdiff
path: root/Beginning_C++_through_game_programming/ch9.ipynb
diff options
context:
space:
mode:
Diffstat (limited to 'Beginning_C++_through_game_programming/ch9.ipynb')
-rwxr-xr-xBeginning_C++_through_game_programming/ch9.ipynb469
1 files changed, 469 insertions, 0 deletions
diff --git a/Beginning_C++_through_game_programming/ch9.ipynb b/Beginning_C++_through_game_programming/ch9.ipynb
new file mode 100755
index 00000000..4c67034d
--- /dev/null
+++ b/Beginning_C++_through_game_programming/ch9.ipynb
@@ -0,0 +1,469 @@
+{
+ "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",
+ "//Critter Farm\n",
+ "//Demonstrates object containment\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",
+ "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",
+ "//Friend Critter\n",
+ "//Demonstrates friend functions and operator overloading\n",
+ "'''\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",
+ "// Heap\n",
+ "// Demonstrates dynamically allocating memory\n",
+ "'''\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",
+ "//Heap Data Member\n",
+ "//Demonstrates an object with a dynamically allocated data member\n",
+ "'''\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",
+ "defining player and lobby classes\n",
+ "'''\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
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file