summaryrefslogtreecommitdiff
path: root/Beginning_C++_through_game_programming/ch10.ipynb
diff options
context:
space:
mode:
authorJovina Dsouza2014-07-09 14:16:11 +0530
committerJovina Dsouza2014-07-09 14:16:11 +0530
commite9c8c9201198909af53ace24755d70e30bc24950 (patch)
treef8e8f64b7e2b7109729b501eb2363d2b66e48a77 /Beginning_C++_through_game_programming/ch10.ipynb
parent14e9455fda0dbd61d1e8539d9e9b8ce303e81d06 (diff)
downloadPython-Textbook-Companions-e9c8c9201198909af53ace24755d70e30bc24950.tar.gz
Python-Textbook-Companions-e9c8c9201198909af53ace24755d70e30bc24950.tar.bz2
Python-Textbook-Companions-e9c8c9201198909af53ace24755d70e30bc24950.zip
adding book
Diffstat (limited to 'Beginning_C++_through_game_programming/ch10.ipynb')
-rwxr-xr-xBeginning_C++_through_game_programming/ch10.ipynb670
1 files changed, 670 insertions, 0 deletions
diff --git a/Beginning_C++_through_game_programming/ch10.ipynb b/Beginning_C++_through_game_programming/ch10.ipynb
new file mode 100755
index 00000000..393c4d1c
--- /dev/null
+++ b/Beginning_C++_through_game_programming/ch10.ipynb
@@ -0,0 +1,670 @@
+{
+ "metadata": {
+ "name": "ch10"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 10 : Inheritance and Polymorphism: Blackjack"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ "example 10.1 page no: 334"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "//Simple Boss\n",
+ "//Demonstrates inheritance\n",
+ "'''\n",
+ "\n",
+ "class Enemy:\n",
+ " def __init__(self):\n",
+ " self.m_Damage = 10\n",
+ "\n",
+ " def Attack(self):\n",
+ " print \"An enemy attacks and inflicts \" , self.m_Damage , \" damage points!\";\n",
+ " \n",
+ " def __del__(self):\n",
+ " print \"In Enemy destructor, deleting m_pDamage.\\n\";\n",
+ "\n",
+ "class Boss(Enemy):\n",
+ " def __init__(self):\n",
+ " Enemy.__init__(self)\n",
+ " self.m_DamageMultiplier = 3\n",
+ "\n",
+ " def SpecialAttack(self):\n",
+ " print \"A boss attacks and inflicts \" , (self.m_DamageMultiplier * self.m_Damage),\n",
+ " print \" damage points!\";\n",
+ "\n",
+ "print \"Creating an enemy.\\n\";\n",
+ "enemy1 = Enemy()\n",
+ "enemy1.Attack();\n",
+ "print \"\\nCreating a boss.\\n\";\n",
+ "boss1 = Boss()\n",
+ "boss1.Attack();\n",
+ "boss1.SpecialAttack();"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Creating an enemy.\n",
+ "\n",
+ "An enemy attacks and inflicts 10 damage points!\n",
+ "\n",
+ "Creating a boss.\n",
+ "\n",
+ "An enemy attacks and inflicts 10 damage points!\n",
+ "A boss attacks and inflicts 30 damage points!\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ "example 10.2 page no : 338"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "//Simple Boss 2.0\n",
+ "//Demonstrates access control under inheritance\n",
+ "'''\n",
+ "\n",
+ "\n",
+ "class Enemy:\n",
+ " def __init__(self):\n",
+ " self.m_Damage = 10\n",
+ "\n",
+ " def Attack(self):\n",
+ " print \"Attack inflicts \" , self.m_Damage , \" damage points!\";\n",
+ "\n",
+ "class Boss(Enemy):\n",
+ " def __init__(self):\n",
+ " Enemy.__init__(self)\n",
+ " self.m_DamageMultiplier = 3\n",
+ "\n",
+ " def SpecialAttack(self):\n",
+ " print \"Special Attack inflicts \" , (self.m_DamageMultiplier * self.m_Damage),\n",
+ " print \" damage points!\";\n",
+ "\n",
+ "print \"Creating an enemy.\\n\";\n",
+ "enemy1 = Enemy()\n",
+ "enemy1.Attack();\n",
+ "print \"\\nCreating a boss.\\n\";\n",
+ "boss1 = Boss()\n",
+ "boss1.Attack();\n",
+ "boss1.SpecialAttack();"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Creating an enemy.\n",
+ "\n",
+ "Attack inflicts 10 damage points!\n",
+ "\n",
+ "Creating a boss.\n",
+ "\n",
+ "Attack inflicts 10 damage points!\n",
+ "Special Attack inflicts 30 damage points!\n"
+ ]
+ }
+ ],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ "example 10.3 page no : 343"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "//Overriding Boss\n",
+ "//Demonstrates calling and overriding base member functions\n",
+ "'''\n",
+ "class Enemy:\n",
+ " def __init__(self,d=10):\n",
+ " self.m_Damage = d\n",
+ "\n",
+ " def Attack(self):\n",
+ " print \"Attack inflicts \" , self.m_Damage , \" damage points!\";\n",
+ "\n",
+ " def Taunt(self):\n",
+ " print \"The enemy says he will fight you.\";\n",
+ " __Attack = Attack \n",
+ "\n",
+ "\n",
+ "class Boss(Enemy):\n",
+ " def __init__(self,d=30):\n",
+ " Enemy.__init__(self)\n",
+ " self.m_DamageMultiplier = d\n",
+ "\n",
+ " def SpecialAttack(self):\n",
+ " print \"Special Attack inflicts \" , (self.m_DamageMultiplier * self.m_Damage),\n",
+ " print \" damage points!\";\n",
+ "\n",
+ " def Taunt(self): #override base class member function\n",
+ " print \"The boss says he will end your pitiful existence.\"\n",
+ "\n",
+ " def Attack(self): #override base class member function\n",
+ " #call base class member function\n",
+ " Enemy.Attack(self)\n",
+ " print \" And laughs heartily at you.\\n\";\n",
+ "\n",
+ "\n",
+ "print \"Enemy object :\";\n",
+ "enemy1 = Enemy()\n",
+ "enemy1.Taunt()\n",
+ "enemy1.Attack();\n",
+ "print \"\\n boss object.\\n\";\n",
+ "boss1 = Boss()\n",
+ "boss1.Taunt()\n",
+ "boss1.Attack();\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enemy object :\n",
+ "The enemy says he will fight you.\n",
+ "Attack inflicts 10 damage points!\n",
+ "\n",
+ " boss object.\n",
+ "\n",
+ "The boss says he will end your pitiful existence.\n",
+ "Attack inflicts 10 damage points!\n",
+ " And laughs heartily at you.\n",
+ "\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ "example 10.4 page no : 341,348"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "//Polymorphic Bad Guy\n",
+ "//Demonstrates calling member functions dynamically\n",
+ "'''\n",
+ "\n",
+ "class Enemy:\n",
+ " def __init__(self,d=10):\n",
+ " self.m_Damage = d\n",
+ "\n",
+ " def Attack(self):\n",
+ " print \"Attack inflicts \" , self.m_Damage , \" damage points!\";\n",
+ "\n",
+ " def __del__(self):\n",
+ " print \"In Enemy destructor, deleting m_pDamage.\";\n",
+ " \n",
+ "class Boss(Enemy):\n",
+ " def __init__(self,d=30):\n",
+ " Enemy.__init__(self)\n",
+ " self.m_DamageMultiplier = d\n",
+ "\n",
+ " def SpecialAttack(self):\n",
+ " print \"Special Attack inflicts \" , (self.m_DamageMultiplier * self.m_Damage),\n",
+ " print \" damage points!\";\n",
+ "\n",
+ " def Taunt(self): #override base class member function\n",
+ " print \"The boss says he will end your pitiful existence.\"\n",
+ "\n",
+ " def Attack(self): #override base class member function\n",
+ " #call base class member function\n",
+ " Enemy.Attack(self)\n",
+ " print \" And laughs heartily at you.\\n\";\n",
+ "\n",
+ " def __del__(self):\n",
+ " Enemy.__del__(self)\n",
+ " print \"In Boss destructor, deleting m_pMultiplier.\";\n",
+ " self.m_pMultiplier = 0;\n",
+ "\n",
+ "print \"Calling Attack() on Boss object through pointer to Enemy:\"\n",
+ "pBadGuy = Boss();\n",
+ "pBadGuy.Attack();\n",
+ "print \"\\nDeleting pointer to Enemy:\\n\";\n",
+ "pBadGuy = 0;"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Calling Attack() on Boss object through pointer to Enemy:\n",
+ "Attack inflicts 10 damage points!\n",
+ " And laughs heartily at you.\n",
+ "\n",
+ "\n",
+ "Deleting pointer to Enemy:\n",
+ "\n",
+ "In Enemy destructor, deleting m_pDamage.\n",
+ "In Boss destructor, deleting m_pMultiplier.\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ "example 10.5 page no : 353"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "//Abstract Creature\n",
+ "//Demonstrates abstract classes\n",
+ "'''\n",
+ "class Creature :\n",
+ " def __init__(self,h=100):\n",
+ " self.m_Health = h\n",
+ " \n",
+ " def Greet(self): # pure virtual member function\n",
+ " pass\n",
+ "\n",
+ " def DisplayHealth(self):\n",
+ " print \"Health: \" , self.m_Health\n",
+ "\n",
+ "\n",
+ "class Orc(Creature):\n",
+ " def __init__(self,h=120):\n",
+ " Creature.__init__(self,h)\n",
+ "\n",
+ " def Greet(self):\n",
+ " print \"The orc grunts hello.\\n\";\n",
+ "\n",
+ "pCreature = Orc();\n",
+ "pCreature.Greet();\n",
+ "pCreature.DisplayHealth();"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "The orc grunts hello.\n",
+ "\n",
+ "Health: 120\n"
+ ]
+ }
+ ],
+ "prompt_number": 5
+ },
+ {
+ "cell_type": "heading",
+ "level": 3,
+ "metadata": {},
+ "source": [
+ "example 10.6, page no : 361-379"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "'''\n",
+ "defining game class.\n",
+ "Note : this would give error as we have not initialized player class here.\n",
+ "'''\n",
+ "\n",
+ "ACE = 1\n",
+ "TWO = 2\n",
+ "THREE = 3\n",
+ "FOUR = 4\n",
+ "FIVE = 5\n",
+ "SIX = 6\n",
+ "SEVEN = 7\n",
+ "EIGHT = 8\n",
+ "NINE = 9\n",
+ "TEN = 10\n",
+ "JACK = 11\n",
+ "QUEEN = 12\n",
+ "KING = 13\n",
+ "\n",
+ "CLUBS = 0\n",
+ "DIAMONDS = 1\n",
+ "HEARTS = 2\n",
+ "SPADES = 3\n",
+ "\n",
+ " \n",
+ "class Card:\n",
+ " def __init__(self,r = ACE,s = SPADES,ifu = True): #returns the value of a card, 1 - 11\n",
+ " self.m_Rank = r\n",
+ " self.m_Suit = s\n",
+ " self.m_IsFaceUp =ifu\n",
+ "\n",
+ " def GetValue(self):\n",
+ " #if a cards is face down, its value is 0\n",
+ " value = 0;\n",
+ " if (m_IsFaceUp):\n",
+ " #value is number showing on card\n",
+ " value = m_Rank;\n",
+ " #value is 10 for face cards\n",
+ " if (value > 10):\n",
+ " value = 10;\n",
+ " return value;\n",
+ "\n",
+ " def Flip(self):\n",
+ " self.m_IsFaceUp = not (m_IsFaceUp);\n",
+ "\n",
+ "class Hand:\n",
+ " def __init__(self):\n",
+ " self.m_Cards = []\n",
+ "\n",
+ " def __del__(self):\n",
+ " self.Clear() \n",
+ "\n",
+ " def Add(self,pCard):\n",
+ " self.m_Cards.append(pCard);\n",
+ "\n",
+ " def Clear(self):\n",
+ " #iterate through vector, freeing all memory on the heap\n",
+ " self.m_Cards = []\n",
+ "\n",
+ " def GetTotal(self):\n",
+ " #if no cards in hand, return 0\n",
+ " if (self.m_Cards.empty()):\n",
+ " return 0;\n",
+ " #if a first card has value of 0, then card is face down; return 0\n",
+ " if (m_Cards[0].GetValue() == 0):\n",
+ " return 0;\n",
+ " #add up card values, treat each ace as 1\n",
+ " total = 0;\n",
+ " for i in self.m_Cards:\n",
+ " total += i.GetValue()\n",
+ " #determine if hand contains an ace\n",
+ " containsAce = False;\n",
+ " for i in self.m_Cards:\n",
+ " if i.GetValue() == Card.ACE:\n",
+ " containsAce = True;\n",
+ "\n",
+ " #if hand contains ace and total is low enough, treat ace as 11\n",
+ " if (containsAce and total <= 11):\n",
+ " #add only 10 since we've already added 1 for the ace\n",
+ " total += 10;\n",
+ " return total;\n",
+ "\n",
+ "\n",
+ "class GenericPlayer(Hand):\n",
+ " def __init__(self,name):\n",
+ " self.m_Name = name\n",
+ "\n",
+ " def __del__(self):\n",
+ " pass\n",
+ "\n",
+ " def IsBusted(self):\n",
+ " return (self.GetTotal() > 21);\n",
+ "\n",
+ " def Bust(self):\n",
+ " print self.m_Name , \" busts.\";\n",
+ "\n",
+ "class Player(GenericPlayer):\n",
+ " def _init_(self,name):\n",
+ " GenericPlayer.__init__(self,name)\n",
+ " \n",
+ " def _del_(self):\n",
+ " pass\n",
+ "\n",
+ " def IsHitting(self):\n",
+ " print self.m_Name , \", do you want a hit? (Y/N): \",\n",
+ " response = raw_input()\n",
+ " return (response == 'y' or response == 'Y');\n",
+ "\n",
+ " def Win(self):\n",
+ " print self.m_Name , \" wins.\";\n",
+ "\n",
+ " def Lose(self):\n",
+ " print self.m_Name , \" loses.\";\n",
+ "\n",
+ " def Push(self):\n",
+ " print self.m_Name , \" pushes.\";\n",
+ "\n",
+ "class House(GenericPlayer):\n",
+ " def __init__(self,name):\n",
+ " GenericPlayer.__init__(self,name)\n",
+ "\n",
+ " def __del__(self):\n",
+ " pass\n",
+ "\n",
+ " def IsHitting(self):\n",
+ " return (self.GetTotal() <= 16)\n",
+ "\n",
+ " def FlipFirstCard(self):\n",
+ " if (not self.m_Cards):\n",
+ " m_Cards[0].Flip();\n",
+ " else:\n",
+ " print \"No card to flip!\";\n",
+ " \n",
+ "class Deck(Hand):\n",
+ " def __init__(self):\n",
+ " self.m_Cards = []\n",
+ " self.Populate();\n",
+ " \n",
+ " def __del__(self):\n",
+ " pass\n",
+ " \n",
+ " def Populate(self):\n",
+ " self.Clear();\n",
+ " #create standard deck\n",
+ " for s in range(Card.CLUBS,Card.SPADES+1):\n",
+ " for r in range(Card.ACE,Card.KING+1):\n",
+ " self.Add(Card(r,s))\n",
+ "\n",
+ " def Shuffle(self):\n",
+ " pass\n",
+ "\n",
+ " def Deal(self, aHand):\n",
+ " if (not m_Cards):\n",
+ " aHand.Add(self.m_Cards[-1]);\n",
+ " self.m_Cards.pop();\n",
+ " else:\n",
+ " print \"Out of cards. Unable to deal.\";\n",
+ "\n",
+ " def AdditionalCards(self,aGenericPlayer):\n",
+ " print ''\n",
+ " #continue to deal a card as long as generic player isn't busted and\n",
+ " #wants another hit\n",
+ " while ( not (aGenericPlayer.IsBusted()) and aGenericPlayer.IsHitting() ):\n",
+ " self.Deal(aGenericPlayer);\n",
+ " print aGenericPlayer\n",
+ " if (aGenericPlayer.IsBusted()):\n",
+ " aGenericPlayer.Bust();\n",
+ " \n",
+ "\n",
+ "class Game:\n",
+ " def __init__(self,names):\n",
+ " #create a vector of players from a vector of names\n",
+ " self.pName = []\n",
+ " for i in names:\n",
+ " self.pName.append(Player(i))\n",
+ " self.m_Deck.Populate();\n",
+ " self.m_Deck.Shuffle();\n",
+ "\n",
+ " def __del__(self):\n",
+ " pass\n",
+ " \n",
+ " def Play(self):\n",
+ " # deal initial 2 cards to everyone\n",
+ " for i in range(2):\n",
+ " for pPlayer in self.m_Players:\n",
+ " self.m_Deck.Deal(*pPlayer);\n",
+ " self.m_Deck.Deal(m_House);\n",
+ " #hide house's first card\n",
+ " self.m_House.FlipFirstCard();\n",
+ " for pPlayer in self.m_Players:\n",
+ " print pPlayer \n",
+ "\n",
+ " print self.m_House\n",
+ " #deal additional cards to players\n",
+ " \n",
+ " for pPlayer in self.m_Players:\n",
+ " self.m_Deck.AdditionalCards(pPlayer);\n",
+ "\n",
+ " #reveal house's first card\n",
+ " self.m_House.FlipFirstCard();\n",
+ " print self.m_House;\n",
+ " #deal additional cards to house\n",
+ " self.m_Deck.AdditionalCards(m_House);\n",
+ " if (self.m_House.IsBusted()):\n",
+ " #everyone still playing wins\n",
+ " for pPlayer in self.m_Players:\n",
+ " if ( not (pPlayer.IsBusted()) ):\n",
+ " pPlayer.Win();\n",
+ " else:\n",
+ " #compare each player still playing to house\n",
+ " for pPlayer in self.m_Players:\n",
+ " if ( not (pPlayer.IsBusted()) ):\n",
+ " if (pPlayer.GetTotal() > self.m_House.GetTotal()):\n",
+ " pPlayer.Win();\n",
+ " elif (pPlayer.GetTotal() < self.m_House.GetTotal()):\n",
+ " pPlayer.Lose();\n",
+ " else:\n",
+ " pPlayer.Push();\n",
+ "\n",
+ " #remove everyones cards\n",
+ " for pPlayer in self.m_Players:\n",
+ " pPlayer.Clear();\n",
+ "\n",
+ " self.m_House.Clear();\n",
+ "\n",
+ "print \"\\t\\tWelcome to Blackjack!\\n\";\n",
+ "numPlayers = 0;\n",
+ "while (numPlayers < 1 or numPlayers > 7):\n",
+ " print \"How many players? (1 - 7): \";\n",
+ " numPlayers = int(raw_input())\n",
+ "\n",
+ "names = []\n",
+ "name = ''\n",
+ "for i in range(numPlayers):\n",
+ " print \"Enter player name: \";\n",
+ " name = raw_input()\n",
+ " names.append(name); \n",
+ "\n",
+ "print ''\n",
+ "#the game loop\n",
+ "aGame = Game(names);\n",
+ "again = 'y'\n",
+ "while (again != 'n' and again != 'N'):\n",
+ " aGame.Play();\n",
+ " print \"\\nDo you want to play again? (Y/N): \",\n",
+ " again = raw_input()\n",
+ "\n",
+ "#overloads << operator so Card object can be sent to cout\n",
+ "def print_(aCard):\n",
+ " RANKS = [\"0\", \"A\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\",\"10\", \"J\", \"Q\", \"K\"]\n",
+ " SUITS = [\"c\", \"d\", \"h\", \"s\"]\n",
+ " if (aCard.m_IsFaceUp):\n",
+ " print RANKS[aCard.m_Rank] , SUITS[aCard.m_Suit];\n",
+ " else:\n",
+ " print \"XX\";\n",
+ " \n",
+ "\n",
+ "def print__(aGenericPlayer):\n",
+ " print aGenericPlayer.m_Name\n",
+ " pCard = []\n",
+ " if (not aGenericPlayer.m_Cards):\n",
+ " for pCard in aGenericPlayer.m_Cards:\n",
+ " print pCard\n",
+ " \n",
+ " if (aGenericPlayer.GetTotal() != 0):\n",
+ " print \"(\" , aGenericPlayer.GetTotal() , \")\";\n",
+ " else:\n",
+ " print \"<empty>\";"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "ename": "StdinNotImplementedError",
+ "evalue": "raw_input was called, but this frontend does not support stdin.",
+ "output_type": "pyerr",
+ "traceback": [
+ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mStdinNotImplementedError\u001b[0m Traceback (most recent call last)",
+ "\u001b[1;32m<ipython-input-11-33b9c51ff816>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 63\u001b[0m \u001b[1;32mwhile\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mnumPlayers\u001b[0m \u001b[1;33m<\u001b[0m \u001b[1;36m1\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0mnumPlayers\u001b[0m \u001b[1;33m>\u001b[0m \u001b[1;36m7\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 64\u001b[0m \u001b[1;32mprint\u001b[0m \u001b[1;34m\"How many players? (1 - 7): \"\u001b[0m\u001b[1;33m;\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 65\u001b[1;33m \u001b[0mnumPlayers\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mraw_input\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 66\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 67\u001b[0m \u001b[0mnames\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;32m/home/jay/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/IPython/zmq/ipkernel.pyc\u001b[0m in \u001b[0;36m<lambda>\u001b[1;34m(prompt)\u001b[0m\n\u001b[0;32m 343\u001b[0m \u001b[0mraw_input\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mlambda\u001b[0m \u001b[0mprompt\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m''\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_raw_input\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mprompt\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mident\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mparent\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 344\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 345\u001b[1;33m \u001b[0mraw_input\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mlambda\u001b[0m \u001b[0mprompt\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m''\u001b[0m \u001b[1;33m:\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_no_raw_input\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 346\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 347\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mpy3compat\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mPY3\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;32m/home/jay/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/IPython/zmq/ipkernel.pyc\u001b[0m in \u001b[0;36m_no_raw_input\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 686\u001b[0m \"\"\"Raise StdinNotImplentedError if active frontend doesn't support\n\u001b[0;32m 687\u001b[0m stdin.\"\"\"\n\u001b[1;32m--> 688\u001b[1;33m raise StdinNotImplementedError(\"raw_input was called, but this \"\n\u001b[0m\u001b[0;32m 689\u001b[0m \"frontend does not support stdin.\") \n\u001b[0;32m 690\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;31mStdinNotImplementedError\u001b[0m: raw_input was called, but this frontend does not support stdin."
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "\t\tWelcome to Blackjack!\n",
+ "\n",
+ "How many players? (1 - 7): \n"
+ ]
+ }
+ ],
+ "prompt_number": 11
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+} \ No newline at end of file