Python学习笔记(5),Battleship 游戏
2015-11-08 19:16
525 查看
1.建立“海洋”:一个5*5的网格,每个格子里面的元素均为‘O’,可以使用list来产生5个O,
但是这样显示的结果是一行,并非我们想要的 5*5:
可以使用for循环来换行:
结果是已经分行了:
但是这也是很不美观,如果能把引号和方括号去掉就更好了,python可以使用 .join的方法:
print "---".join(letters)[/code]
可以分别打出
2. 藏战舰,找战舰:
3.最终,以及测试:
4.可以根据需要把游戏变得复杂一点,
比如增加一艘船,但是两艘船的位置又不能重合;
有如将其变成两个人的游戏;
又如将船的尺寸变大,此时要考虑船身其中一点在在海洋里,另一点又在海洋外;
board=[] for item in range(5): board.append(['O']*5) print board
但是这样显示的结果是一行,并非我们想要的 5*5:
[['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O'], ['O', 'O', 'O', 'O', 'O']]
可以使用for循环来换行:
board=[] for item in range(5): board.append(['O']*5) def print_board(board): for row in board: print row print_board(board)
结果是已经分行了:
['O', 'O', 'O', 'O', 'O'] ['O', 'O', 'O', 'O', 'O'] ['O', 'O', 'O', 'O', 'O'] ['O', 'O', 'O', 'O', 'O'] ['O', 'O', 'O', 'O', 'O']
但是这也是很不美观,如果能把引号和方括号去掉就更好了,python可以使用 .join的方法:
letters = ['a', 'b', 'c', 'd']print " ".join(letters)
print "---".join(letters)[/code]
可以分别打出
a b c d,以及
a---b---c---d
board=[] for item in range(5): board.append(['O']*5) def print_board(board): for row in board: print " ".join(row) print_board(board)结果明显好了很多:
O O O O O O O O O O O O O O O O O O O O O O O O O
2. 藏战舰,找战舰:
from random import randint board = [] for x in range(0, 5): board.append(["O"] * 5) def print_board(board): for row in board: print " ".join(row) print_board(board) def random_row(board): return randint(0, len(board) - 1) def random_col(board): return randint(0, len(board[0]) - 1) ship_row = random_row(board) ship_col = random_col(board) guess_row = int(raw_input("Guess Row:")) #input和rawinput有区别,两者都是内置函数 guess_col = int(raw_input("Guess Col:")) print ship_row print ship_col # Write your code below! if guess_row==ship_row and guess_col==ship_col: #如果猜的和随机给予的位置相同,则游戏成功 print "Congratulations! You sank my battleship" else: if guess_row not in range(5) or \ guess_col not in range(5): #如果猜的数字不在范围内,则报错 print "Oops, that's not even in the ocean." elif board[guess_row][guess_col]=='X': #如果猜过了,则报错 print "You guessed that one already." else: print "You missed my battleship!" board[guess_row][guess_col]="X" #把一个list的某一个元素改成另一个元素,则利用list[i][j]来 print_board(board)
3.最终,以及测试:
from random import randint board = [] for x in range(5): board.append(["O"] * 5) def print_board(board): for row in board: print " ".join(row) print "Let's play Battleship!" print_board(board) def random_row(board): return randint(0, len(board) - 1) def random_col(board): return randint(0, len(board[0]) - 1) ship_row = random_row(board) ship_col = random_col(board) print ship_row print ship_col # Everything from here on should go in your for loop! # Be sure to indent four spaces! for Turn in range(4): print "Turn: "Turn+1 #由于range(4)是从0~3,因此第n轮需要显示的是n+1 guess_row = int(raw_input("Guess Row:")) guess_col = int(raw_input("Guess Col:")) if guess_row == ship_row and guess_col == ship_col: print "Congratulations! You sunk my battleship!" break #如果赢了就退出 else: if (guess_row < 0 or guess_row > 4) or (guess_col < 0 or guess_col > 4): print "Oops, that's not even in the ocean." elif(board[guess_row][guess_col] == "X"): print "You guessed that one already." else: print "You missed my battleship!" board[guess_row][guess_col] = "X" # Print (turn + 1) here! print_board(board) if Turn==3: print "Game Over" #game over放在所有错误的这个else里面,因为如果第四次还进入错误,则游戏输了
4.可以根据需要把游戏变得复杂一点,
比如增加一艘船,但是两艘船的位置又不能重合;
有如将其变成两个人的游戏;
又如将船的尺寸变大,此时要考虑船身其中一点在在海洋里,另一点又在海洋外;
相关文章推荐
- Python_强制数据类型转换
- Python: Soft_max 分类器
- python之模块colorsys颜色转换模块 暂不了解
- python爬虫工具及最佳实践
- vim 创建Python脚本时候自动补全解释器和编码方法
- Python初始基本数据类型
- python之模块cmath
- python之模块chunk,了解即可
- 基于python2【重要】怎么自行搭建简单的web服务器
- 业余时间没事做,可以试试这些......
- Python学习笔记
- python学习记——爬糗事百科
- NumPy-快速处理数据--ufunc运算--广播--ufunc方法
- 《用Python玩转数据》第1周学习笔记(Part 1)
- Python中定义字符串和修改字符串的原理
- 【重要】python之模块CGI 通用网关接口
- Python pickle 的 dump() & load()
- python之模块calendar(汇集了日历相关的操作)
- python列表相乘函数map函数
- python之模块base64