Python 小练习_battleship
2016-06-21 15:18
393 查看
真心不容易啊................第一个自己完成的游戏,相比笨办法学python里面的直接照着例子写游戏来理解,这个游戏的接近20的steps,太补充基础知识了
虽然是小游戏,但是过程中还是大量查询了stackoverflow上和百度上面别人的代码,随后补基础
我们主要来看注释吧
from random import randint #从random模块中引入randint功能
board = [] #创建一个空list,作为地图基础
for x in range(5): #通过for循环,创建一个5×5的范围地图,这一步非常重要,for循环来控制循环数量,激活append的功能!
board.append(["O"] * 5)
def print_board(board): #这里的row,其实就是5×5里面里面的每个item,就是['O','O','O','O','O']
for row in board: #在整个地图list内,有5个这样的item
print " ".join(row) #在每个item内,每2个元素间添加空格
print "Let's play Battleship!" #运行程序后开始的第一句话
print_board(board) #显示地图
def random_row(board): #这一步是定义随机产生战舰的位置行坐标
return randint(0, len(board) - 1) #位置的坐标是从0到4. 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): #这句是计算一个猜了几次,最多只能猜4次
guess_row = int(raw_input("Guess Row:")) #以下2句是要求玩家输入位置坐标,这个功能不仅是提供了输入功能,同时,非常重要的是,他控制了for turn这个历遍
guess_col = int(raw_input("Guess Col:")) #不是一次性历遍4次,而是一次历遍完了以后,再输入,再进行次数累加,避免了一口气历遍完range(4)的情况!
if guess_row == ship_row and guess_col == ship_col: #判断猜测坐标和实际船坐标是否一致
print "Congratulations! You sunk my battleship!"
break #一个简单的break,但是功能是在玩家猜对后直接跳出循环,而不用在猜对的情况下还继续玩满4次
else:
if guess_row not in range(5) or guess_col not in range(5): #避免猜测范围超出地图限制 ,这里的 not in写法,记一下,基础知识需要补齐
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" #这句非常重要,将你猜测的坐标值,赋给"X",只能写.....="X",而不能写"X"=..... 因为这是将X 赋值给坐标
print "Turn", turn + 1 #Print (turn + 1) here! #打印当前测试的次数
print_board(board) #再次显示地图(包含X的地图)
if turn == 3: #如果turn等于3(也就是猜测次数是4的时候),游戏结束
print "Game Over"
最后的最后,程序里面判断猜测坐标是否在地图内,还把负数给涵盖了,比我自己写的更加严谨。
if (guess_row < 0 or guess_row > 4) or (guess_col < 0 or guess_col > 4):
虽然是小游戏,但是过程中还是大量查询了stackoverflow上和百度上面别人的代码,随后补基础
我们主要来看注释吧
from random import randint #从random模块中引入randint功能
board = [] #创建一个空list,作为地图基础
for x in range(5): #通过for循环,创建一个5×5的范围地图,这一步非常重要,for循环来控制循环数量,激活append的功能!
board.append(["O"] * 5)
def print_board(board): #这里的row,其实就是5×5里面里面的每个item,就是['O','O','O','O','O']
for row in board: #在整个地图list内,有5个这样的item
print " ".join(row) #在每个item内,每2个元素间添加空格
print "Let's play Battleship!" #运行程序后开始的第一句话
print_board(board) #显示地图
def random_row(board): #这一步是定义随机产生战舰的位置行坐标
return randint(0, len(board) - 1) #位置的坐标是从0到4. 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): #这句是计算一个猜了几次,最多只能猜4次
guess_row = int(raw_input("Guess Row:")) #以下2句是要求玩家输入位置坐标,这个功能不仅是提供了输入功能,同时,非常重要的是,他控制了for turn这个历遍
guess_col = int(raw_input("Guess Col:")) #不是一次性历遍4次,而是一次历遍完了以后,再输入,再进行次数累加,避免了一口气历遍完range(4)的情况!
if guess_row == ship_row and guess_col == ship_col: #判断猜测坐标和实际船坐标是否一致
print "Congratulations! You sunk my battleship!"
break #一个简单的break,但是功能是在玩家猜对后直接跳出循环,而不用在猜对的情况下还继续玩满4次
else:
if guess_row not in range(5) or guess_col not in range(5): #避免猜测范围超出地图限制 ,这里的 not in写法,记一下,基础知识需要补齐
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" #这句非常重要,将你猜测的坐标值,赋给"X",只能写.....="X",而不能写"X"=..... 因为这是将X 赋值给坐标
print "Turn", turn + 1 #Print (turn + 1) here! #打印当前测试的次数
print_board(board) #再次显示地图(包含X的地图)
if turn == 3: #如果turn等于3(也就是猜测次数是4的时候),游戏结束
print "Game Over"
最后的最后,程序里面判断猜测坐标是否在地图内,还把负数给涵盖了,比我自己写的更加严谨。
if (guess_row < 0 or guess_row > 4) or (guess_col < 0 or guess_col > 4):
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法