Skip to content

Commit c89058b

Browse files
committed
More detailed implementation of battleship example.
1 parent 0c06596 commit c89058b

File tree

1 file changed

+265
-0
lines changed

1 file changed

+265
-0
lines changed

notebook/battleship.ipynb

Lines changed: 265 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,265 @@
1+
{
2+
"metadata": {
3+
"name": "",
4+
"signature": "sha256:e39489d82b073fbdc6f7005b77f4822a973affa30340544bad8ad1423187d25e"
5+
},
6+
"nbformat": 3,
7+
"nbformat_minor": 0,
8+
"worksheets": [
9+
{
10+
"cells": [
11+
{
12+
"cell_type": "markdown",
13+
"metadata": {},
14+
"source": [
15+
"#Battleship\n",
16+
"###You can learn a lot when you are having fun - [Gerard Gorman](http://www.imperial.ac.uk/people/g.gorman)"
17+
]
18+
},
19+
{
20+
"cell_type": "code",
21+
"collapsed": false,
22+
"input": [
23+
"import random\n",
24+
"\n",
25+
"def create_board(size):\n",
26+
" ''''Initialise the board using a Python list.'''\n",
27+
" board = []\n",
28+
" for x in range(0, size):\n",
29+
" board.append([\"O\"] * size)\n",
30+
" return board\n",
31+
"\n",
32+
"def print_board(board):\n",
33+
" '''Print out the current board.'''\n",
34+
" for row in board:\n",
35+
" print \" \".join(row)\n",
36+
" return\n",
37+
"\n",
38+
"def generate_ship(max_ship_size, board_size):\n",
39+
" # We are going to define a ship as a list of board coordinates.\n",
40+
" ship = []\n",
41+
" \n",
42+
" # Randomly select define the size of the ship.\n",
43+
" ship_size = random.randint(1, max_ship_size)\n",
44+
" \n",
45+
" # Randomly define the orientation.\n",
46+
" orientation = random.randint(0, 1)\n",
47+
"\n",
48+
" # Randomly select the seed point for the ship.\n",
49+
" iseed = random.randint(0, board_size)\n",
50+
" jseed = random.randint(0, board_size)\n",
51+
"\n",
52+
" # Generate ship - here I'm not going to worry if it goes off the edge.\n",
53+
" if orientation==0:\n",
54+
" for i in range(ship_size):\n",
55+
" ship.append((iseed+i, jseed))\n",
56+
" else:\n",
57+
" for j in range(ship_size):\n",
58+
" ship.append((iseed, jseed+j))\n",
59+
"\n",
60+
" return ship\n",
61+
" \n",
62+
"# Set the size of the board and initialise the board.\n",
63+
"board_size = 10\n",
64+
"board = create_board(board_size)\n",
65+
"print_board(board)\n",
66+
"\n",
67+
"# Add the ship\n",
68+
"ship = generate_ship(6, board_size)\n",
69+
"\n",
70+
"print \"Let's play Battleship!\"\n",
71+
"\n",
72+
"for turn in range(4):\n",
73+
" try:\n",
74+
" row = int(raw_input(\"Guess row:\"))\n",
75+
" if row<0 or row>board_size-1:\n",
76+
" raise ValueError\n",
77+
" except:\n",
78+
" print \"Value must be an integer between 0 and %d. Try again.\"%(board_size)\n",
79+
" continue\n",
80+
"\n",
81+
" try:\n",
82+
" column = int(raw_input(\"Guess column:\"))\n",
83+
" if column<0 or column>board_size-1:\n",
84+
" raise ValueError\n",
85+
" except:\n",
86+
" print \"Value must be an integer between 0 and %d. Try again.\"%(board_size)\n",
87+
" continue\n",
88+
" \n",
89+
" if (row, column) in ship:\n",
90+
" print \"Congratulations! You sunk my battleship!\"\n",
91+
" break\n",
92+
" else:\n",
93+
" if turn == 3:\n",
94+
" board[row][column] = \"X\"\n",
95+
" print_board(board)\n",
96+
" print \"Game Over\"\n",
97+
" else:\n",
98+
" board[row][column] = \"X\"\n",
99+
" print_board(board)"
100+
],
101+
"language": "python",
102+
"metadata": {},
103+
"outputs": [
104+
{
105+
"output_type": "stream",
106+
"stream": "stdout",
107+
"text": [
108+
"O O O O O O O O O O\n",
109+
"O O O O O O O O O O\n",
110+
"O O O O O O O O O O\n",
111+
"O O O O O O O O O O\n",
112+
"O O O O O O O O O O\n",
113+
"O O O O O O O O O O\n",
114+
"O O O O O O O O O O\n",
115+
"O O O O O O O O O O\n",
116+
"O O O O O O O O O O\n",
117+
"O O O O O O O O O O\n",
118+
"Let's play Battleship!\n"
119+
]
120+
},
121+
{
122+
"name": "stdout",
123+
"output_type": "stream",
124+
"stream": "stdout",
125+
"text": [
126+
"Guess row:1\n"
127+
]
128+
},
129+
{
130+
"name": "stdout",
131+
"output_type": "stream",
132+
"stream": "stdout",
133+
"text": [
134+
"Guess column:1\n"
135+
]
136+
},
137+
{
138+
"output_type": "stream",
139+
"stream": "stdout",
140+
"text": [
141+
"O O O O O O O O O O\n",
142+
"O X O O O O O O O O\n",
143+
"O O O O O O O O O O\n",
144+
"O O O O O O O O O O\n",
145+
"O O O O O O O O O O\n",
146+
"O O O O O O O O O O\n",
147+
"O O O O O O O O O O\n",
148+
"O O O O O O O O O O\n",
149+
"O O O O O O O O O O\n",
150+
"O O O O O O O O O O\n"
151+
]
152+
},
153+
{
154+
"name": "stdout",
155+
"output_type": "stream",
156+
"stream": "stdout",
157+
"text": [
158+
"Guess row:2\n"
159+
]
160+
},
161+
{
162+
"name": "stdout",
163+
"output_type": "stream",
164+
"stream": "stdout",
165+
"text": [
166+
"Guess column:2\n"
167+
]
168+
},
169+
{
170+
"output_type": "stream",
171+
"stream": "stdout",
172+
"text": [
173+
"O O O O O O O O O O\n",
174+
"O X O O O O O O O O\n",
175+
"O O X O O O O O O O\n",
176+
"O O O O O O O O O O\n",
177+
"O O O O O O O O O O\n",
178+
"O O O O O O O O O O\n",
179+
"O O O O O O O O O O\n",
180+
"O O O O O O O O O O\n",
181+
"O O O O O O O O O O\n",
182+
"O O O O O O O O O O\n"
183+
]
184+
},
185+
{
186+
"name": "stdout",
187+
"output_type": "stream",
188+
"stream": "stdout",
189+
"text": [
190+
"Guess row:3\n"
191+
]
192+
},
193+
{
194+
"name": "stdout",
195+
"output_type": "stream",
196+
"stream": "stdout",
197+
"text": [
198+
"Guess column:3\n"
199+
]
200+
},
201+
{
202+
"output_type": "stream",
203+
"stream": "stdout",
204+
"text": [
205+
"O O O O O O O O O O\n",
206+
"O X O O O O O O O O\n",
207+
"O O X O O O O O O O\n",
208+
"O O O X O O O O O O\n",
209+
"O O O O O O O O O O\n",
210+
"O O O O O O O O O O\n",
211+
"O O O O O O O O O O\n",
212+
"O O O O O O O O O O\n",
213+
"O O O O O O O O O O\n",
214+
"O O O O O O O O O O\n"
215+
]
216+
},
217+
{
218+
"name": "stdout",
219+
"output_type": "stream",
220+
"stream": "stdout",
221+
"text": [
222+
"Guess row:4\n"
223+
]
224+
},
225+
{
226+
"name": "stdout",
227+
"output_type": "stream",
228+
"stream": "stdout",
229+
"text": [
230+
"Guess column:4\n"
231+
]
232+
},
233+
{
234+
"output_type": "stream",
235+
"stream": "stdout",
236+
"text": [
237+
"O O O O O O O O O O\n",
238+
"O X O O O O O O O O\n",
239+
"O O X O O O O O O O\n",
240+
"O O O X O O O O O O\n",
241+
"O O O O X O O O O O\n",
242+
"O O O O O O O O O O\n",
243+
"O O O O O O O O O O\n",
244+
"O O O O O O O O O O\n",
245+
"O O O O O O O O O O\n",
246+
"O O O O O O O O O O\n",
247+
"Game Over\n"
248+
]
249+
}
250+
],
251+
"prompt_number": 1
252+
},
253+
{
254+
"cell_type": "code",
255+
"collapsed": false,
256+
"input": [],
257+
"language": "python",
258+
"metadata": {},
259+
"outputs": []
260+
}
261+
],
262+
"metadata": {}
263+
}
264+
]
265+
}

0 commit comments

Comments
 (0)