games.ipynb 33,4 ko
Newer Older
   "source": [
    "for _ in range(10):\n",
    "    print(ttt.play_game(alphabeta_player, alphabeta_player))"
   ]
  },
  {
   "cell_type": "markdown",
   "source": [
    "A `random_player` should never win against an `alphabeta_player`. Let's test that."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "O . X \n",
      ". . O \n",
      "X O X \n",
      "O O X \n",
      "O X O \n",
      "X O X \n",
      "0\n",
      "O X O \n",
      "O X X \n",
      ". . O \n",
      ". O X \n",
      "O O O \n",
      ". X X \n",
      "-1\n",
      "O O O \n",
      ". . X \n",
      ". X X \n",
      ". X X \n",
      "-1\n",
      "X O X \n",
      ". O X \n",
      ". O . \n",
      "-1\n",
      "O X O \n",
      "X O X \n",
      "O X . \n",
   "source": [
    "for _ in range(10):\n",
    "    print(ttt.play_game(random_player, alphabeta_player))"
   ]
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Canvas_TicTacToe(Canvas)\n",
    "\n",
    "This subclass is used to play TicTacToe game interactively in Jupyter notebooks. TicTacToe class is called while initializing this subclass.\n",
    "\n",
    "Let's have a match between `random_player` and `alphabeta_player`. Click on the board to call players to make a move."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "<script type=\"text/javascript\" src=\"./js/canvas.js\"></script>\n",
       "<div>\n",
       "<canvas id=\"bot_play\" width=\"300\" height=\"300\" style=\"background:rgba(158, 167, 184, 0.2);\" onclick='click_callback(this, event, \"bot_play\")'></canvas>\n",
       "</div>\n",
       "\n",
       "<script> var bot_play_canvas_object = new Canvas(\"bot_play\");</script>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<script>\n",
       "bot_play_canvas_object.strokeWidth(5);\n",
       "bot_play_canvas_object.clear();\n",
       "bot_play_canvas_object.stroke(0, 0, 0);\n",
       "bot_play_canvas_object.line(15, 100, 285, 100);\n",
       "bot_play_canvas_object.line(15, 200, 285, 200);\n",
       "bot_play_canvas_object.line(100, 15, 100, 285);\n",
       "bot_play_canvas_object.line(200, 15, 200, 285);\n",
       "bot_play_canvas_object.fill_text(\"Player 1's move(random)\", 30, 30);\n",
       "</script>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "bot_play = Canvas_TicTacToe('bot_play', 'random', 'alphabeta')"
   ]
  },
  {
   "cell_type": "markdown",
   "source": [
    "Now, let's play a game ourselves against a `random_player`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "<script type=\"text/javascript\" src=\"./js/canvas.js\"></script>\n",
       "<div>\n",
       "<canvas id=\"rand_play\" width=\"300\" height=\"300\" style=\"background:rgba(158, 167, 184, 0.2);\" onclick='click_callback(this, event, \"rand_play\")'></canvas>\n",
       "</div>\n",
       "\n",
       "<script> var rand_play_canvas_object = new Canvas(\"rand_play\");</script>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<script>\n",
       "rand_play_canvas_object.strokeWidth(5);\n",
       "rand_play_canvas_object.clear();\n",
       "rand_play_canvas_object.stroke(0, 0, 0);\n",
       "rand_play_canvas_object.line(15, 100, 285, 100);\n",
       "rand_play_canvas_object.line(15, 200, 285, 200);\n",
       "rand_play_canvas_object.line(100, 15, 100, 285);\n",
       "rand_play_canvas_object.line(200, 15, 200, 285);\n",
       "rand_play_canvas_object.fill_text(\"Player 1's move(human)\", 30, 30);\n",
       "</script>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "rand_play = Canvas_TicTacToe('rand_play', 'human', 'random')"
   ]
  },
  {
   "cell_type": "markdown",
   "source": [
    "Yay! We (usually) win. But we cannot win against an `alphabeta_player`, however hard we try."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "<script type=\"text/javascript\" src=\"./js/canvas.js\"></script>\n",
       "<div>\n",
       "<canvas id=\"ab_play\" width=\"300\" height=\"300\" style=\"background:rgba(158, 167, 184, 0.2);\" onclick='click_callback(this, event, \"ab_play\")'></canvas>\n",
       "</div>\n",
       "\n",
       "<script> var ab_play_canvas_object = new Canvas(\"ab_play\");</script>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<script>\n",
       "ab_play_canvas_object.strokeWidth(5);\n",
       "ab_play_canvas_object.clear();\n",
       "ab_play_canvas_object.stroke(0, 0, 0);\n",
       "ab_play_canvas_object.line(15, 100, 285, 100);\n",
       "ab_play_canvas_object.line(15, 200, 285, 200);\n",
       "ab_play_canvas_object.line(100, 15, 100, 285);\n",
       "ab_play_canvas_object.line(200, 15, 200, 285);\n",
       "ab_play_canvas_object.fill_text(\"Player 1's move(human)\", 30, 30);\n",
       "</script>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ab_play = Canvas_TicTacToe('ab_play', 'human', 'alphabeta')"
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",