Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Contributed python program for simple battleship game #3219

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -2850,3 +2850,8 @@
- Bio: Third Year undergrad pursuing B.tech in Electronics and communication Engineering
- GitHub: [op-amateur](https://github.com/op-amateur)

#### Name: [Cherry](https://github.com/Cherry3939)

- Place: Singapore
- Bio: Student
- GitHub: [Cherry3939](https://github.com/Cherry3939)
276 changes: 276 additions & 0 deletions scripts/Python Program/battleship.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,276 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/github/Cherry3939/Battleship/blob/main/battleship.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"source": [
"# Battleship"
],
"metadata": {
"id": "FsNdSTxVbBUj"
}
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "YQmKg1EGloBX"
},
"outputs": [],
"source": [
"import random\n",
"\n",
"def game_setup(): # Set up the game board\n",
" print(\"You have 10 shots\")\n",
" game_board = [[\"0\", \"1\", \"2\", \"3\", \"4\", \"5\"],\n",
" [\"1\", \"O\", \"O\", \"O\", \"O\", \"O\"],\n",
" [\"2\", \"O\", \"O\", \"O\", \"O\", \"O\"],\n",
" [\"3\", \"O\", \"O\", \"O\", \"O\", \"O\"],\n",
" [\"4\", \"O\", \"O\", \"O\", \"O\", \"O\"],\n",
" [\"5\", \"O\", \"O\", \"O\", \"O\", \"O\"]]\n",
" for row in game_board: # print each row on a new line\n",
" print(*row)\n",
" return game_board\n",
"\n",
"\n",
"def generate_ship(game_board):\n",
" ships_placed = 0\n",
" while ships_placed < 3: # stop when 3 ships have been placed\n",
" random_col = random.randint(1, 5)\n",
" random_row = random.randint(1, 5) # randomly generate a coord for a ship to be placed\n",
" # ship will be shown with a Z\n",
" game_board[random_col][random_row] = \"Z\"\n",
" ships_placed += 1\n",
"\n",
" #for row in game_board: # <-- show answers\n",
" #print(*row)\n",
" return game_board\n",
"\n",
"\n",
"def game_start(game_board):\n",
" ammo = 10 # Player will get 10 tries to hit all the ships\n",
" hit_ships = 0\n",
" display_game_board = [[\"0\", \"1\", \"2\", \"3\", \"4\", \"5\"], # original game board without ship locations marked so it won't reveal the locations of the ships whenever the board is updated\n",
" [\"1\", \"O\", \"O\", \"O\", \"O\", \"O\"],\n",
" [\"2\", \"O\", \"O\", \"O\", \"O\", \"O\"],\n",
" [\"3\", \"O\", \"O\", \"O\", \"O\", \"O\"],\n",
" [\"4\", \"O\", \"O\", \"O\", \"O\", \"O\"],\n",
" [\"5\", \"O\", \"O\", \"O\", \"O\", \"O\"]]\n",
" while ammo > 0:\n",
" row = input(\"Pick a column from 1-5: \" ) # printed the wrong names on purpose bc it doesn't look right\n",
" col = input(\"Pick a row from 1-5: \")\n",
"\n",
" # Check validity of entered coord\n",
" if row.isdigit() and col.isdigit():\n",
" row = int(row)\n",
" col = int(col)\n",
" if row in range(1, 6) and col in range(1, 6):\n",
" coord = ((row, col))\n",
" print(coord)\n",
" chosen_coord = game_board[col][row] # locate coord player has chosen to hit\n",
" #print(chosen_coord)\n",
"\n",
" # Check if player hits target\n",
" if chosen_coord == \"Z\":\n",
" print(\"Hit!\")\n",
" hit_ships += 1\n",
" game_board[col][row] = \"H\" # Mark hit ships with H\n",
" display_game_board[col][row] = \"H\" # display board needs to be updated too\n",
" elif chosen_coord == \"O\" or chosen_coord == \"X\":\n",
" print(\"Missed!\")\n",
" game_board[col][row] = \"X\" # Mark missed spots with X\n",
" display_game_board[col][row] = \"X\"\n",
" elif chosen_coord == \"H\":\n",
" print(\"You've already sunk this ship!\")\n",
"\n",
" # Update displayed board so player can keep track\n",
" for line in display_game_board:\n",
" print(*line)\n",
" ammo -= 1\n",
"\n",
" else:\n",
" print(\"Please enter a valid value\")\n",
" else:\n",
" print(\"Please enter a valid value\")\n",
"\n",
"\n",
" if hit_ships == 3:\n",
" print(\"Congrats! You sunk all the ships!\")\n",
" print(f\"You took {10 - ammo} tries\")\n",
" break\n",
"\n",
" if ammo == 0:\n",
" print(\"You ran out of ammo :(\")\n",
" print(f\"You sank {hit_ships} ships\")\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"def main():\n",
" print(\"Find and destroy all the ships hidden on the board! Each ship is one block long and there are 3 ships in total\")\n",
" game_board = game_setup()\n",
" game_board = generate_ship(game_board)\n",
" game_start(game_board)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "U_tIVKtamiYH",
"outputId": "71cdee42-d2c3-450d-d780-aa611f04eb03"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Find and destroy all the ships hidden on the board! Each ship is one block long and there are 3 ships in total\n",
"You have 10 shots\n",
"0 1 2 3 4 5\n",
"1 O O O O O\n",
"2 O O O O O\n",
"3 O O O O O\n",
"4 O O O O O\n",
"5 O O O O O\n",
"Pick a column from 1-5: 4\n",
"Pick a row from 1-5: 3\n",
"(4, 3)\n",
"Missed!\n",
"0 1 2 3 4 5\n",
"1 O O O O O\n",
"2 O O O O O\n",
"3 O O O X O\n",
"4 O O O O O\n",
"5 O O O O O\n",
"Pick a column from 1-5: 2\n",
"Pick a row from 1-5: 3\n",
"(2, 3)\n",
"Missed!\n",
"0 1 2 3 4 5\n",
"1 O O O O O\n",
"2 O O O O O\n",
"3 O X O X O\n",
"4 O O O O O\n",
"5 O O O O O\n",
"Pick a column from 1-5: 1\n",
"Pick a row from 1-5: 5\n",
"(1, 5)\n",
"Missed!\n",
"0 1 2 3 4 5\n",
"1 O O O O O\n",
"2 O O O O O\n",
"3 O X O X O\n",
"4 O O O O O\n",
"5 X O O O O\n",
"Pick a column from 1-5: 5\n",
"Pick a row from 1-5: 5\n",
"(5, 5)\n",
"Hit!\n",
"0 1 2 3 4 5\n",
"1 O O O O O\n",
"2 O O O O O\n",
"3 O X O X O\n",
"4 O O O O O\n",
"5 X O O O H\n",
"Pick a column from 1-5: 4\n",
"Pick a row from 1-5: 2\n",
"(4, 2)\n",
"Missed!\n",
"0 1 2 3 4 5\n",
"1 O O O O O\n",
"2 O O O X O\n",
"3 O X O X O\n",
"4 O O O O O\n",
"5 X O O O H\n",
"Pick a column from 1-5: 5\n",
"Pick a row from 1-5: 1\n",
"(5, 1)\n",
"Missed!\n",
"0 1 2 3 4 5\n",
"1 O O O O X\n",
"2 O O O X O\n",
"3 O X O X O\n",
"4 O O O O O\n",
"5 X O O O H\n",
"Pick a column from 1-5: 1\n",
"Pick a row from 1-5: 3\n",
"(1, 3)\n",
"Missed!\n",
"0 1 2 3 4 5\n",
"1 O O O O X\n",
"2 O O O X O\n",
"3 X X O X O\n",
"4 O O O O O\n",
"5 X O O O H\n",
"Pick a column from 1-5: 2\n",
"Pick a row from 1-5: 2\n",
"(2, 2)\n",
"Hit!\n",
"0 1 2 3 4 5\n",
"1 O O O O X\n",
"2 O H O X O\n",
"3 X X O X O\n",
"4 O O O O O\n",
"5 X O O O H\n",
"Pick a column from 1-5: 3\n",
"Pick a row from 1-5: 4\n",
"(3, 4)\n",
"Missed!\n",
"0 1 2 3 4 5\n",
"1 O O O O X\n",
"2 O H O X O\n",
"3 X X O X O\n",
"4 O O X O O\n",
"5 X O O O H\n",
"Pick a column from 1-5: 3\n",
"Pick a row from 1-5: 1\n",
"(3, 1)\n",
"Missed!\n",
"0 1 2 3 4 5\n",
"1 O O X O X\n",
"2 O H O X O\n",
"3 X X O X O\n",
"4 O O X O O\n",
"5 X O O O H\n",
"You ran out of ammo :(\n",
"You sank 2 ships\n"
]
}
],
"source": [
"main()"
]
}
],
"metadata": {
"colab": {
"provenance": [],
"authorship_tag": "ABX9TyP40ccoIMgpqyZpsYa3nLRI",
"include_colab_link": true
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
},
"language_info": {
"name": "python"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Loading