python 游戏(船只寻宝)
1. 游戏思路和流程图
实现功能:船只在可以在大海上移动打捞宝藏,船只可以扫描1格范围内的宝藏(后续难度,可以调整扫描范围,可以调整前进的格数)
游戏流程图
2. 使用模块和游戏提示
import random
ships_coordinates={} #船只坐标
def game_info():
'''游戏提示'''
print('欢迎来到船只寻宝游戏')
print('W(上) A(左) S(下) D(右) 来移动')
print('船(B)的探测范围是一格,移动次数为九次')
3. 双选验证
def Double_choice(a,b,hint):
'''双选择验证函数
:param a 第一个选项值
:param b 第二个选项值
:param hint 选项信息
:return 返回输入值'''
choice=''
while choice.lower() !=a and choice.lower() !=b:
print(hint)
choice=input()
return choice
4. 用户输入验证
def letter_move_judge(letter,map_x,map_y):
'''移动字母限制
:param letter 用户输入字母
:param map_x 地图x坐标
:param map_y 地图y坐标
:param 返回用户输入字符'''
ships_x=ships_coordinates['x']
ships_y =ships_coordinates['y']
while True:
if len(letter)!=1:
print('请输入一个字母')
elif letter.lower() not in 'w a s d':
print('请输入W or A or S or D')
else:
if letter.lower()=='w' and ships_y-1 <0:
print('超过界限了')
elif letter.lower()=='a' and ships_x-1 <0:
print('超过界限了')
elif letter.lower()=='s' and ships_y+1 >map_y-1:
print(ships_coordinates['y']-1)
print('超过界限了')
elif letter.lower()=='d' and ships_x+1 >map_x-1:
print('超过界限了')
else:
break
letter=input()
return letter.lower()
5. 海水列表
def get_seawater(x,y):
'''生成海水列表
:param x 每列的行数
:param y 行数
:return 返回海水列表'''
seawater_map=[['~' for i in range(x)] for j in range(y)]
return seawater_map
6. 宝藏坐标列表
def treasure_location(x,y):
'''随机宝藏坐标
:param x 每列的行数
:param y 行数
:return 返回宝藏列表'''
treasure_list=[]
count=5
while count:
treasure_x=random.randint(0,x-1)
treasure_y = random.randint(0, y-1)
if (treasure_x,treasure_y) not in treasure_list:
treasure_list.append((treasure_x,treasure_y))
count-=1
return treasure_list
7. 海水界面显示
def seawater_info(seawater_map):
'''打印海水
:param seawater_map 海水列表'''
for i in seawater_map:
print(' '.join(i))
8. 初始化游戏开始船只位置
def restarting_init(seawater_map):
'''初始化船只的位置'''
x=ships_coordinates['x']
y=ships_coordinates['y']
seawater_map[y][x]='B'
return seawater_map
9. 扫描船只范围内宝藏
def treasure_tab(treasure_list,seawater_map):
'''宝藏标记
:param treasure_list 宝藏位置列表
:param seawater_map 海水地图
:return 返回海水地图'''
ships_x=ships_coordinates['x']
ships_y=ships_coordinates['y']
treasure='$'
scope=1 #扫描格数需要改良
for i in range(1,scope+1):
if (ships_x-i, ships_y) in treasure_list:
seawater_map[ships_y][ships_x - i]=treasure if (ships_x-i,ships_y+i) in treasure_list:
seawater_map[ships_y + i][ships_x - i] = treasure if (ships_x-i, ships_y - i) in treasure_list:
seawater_map[ships_y-i][ships_x - i] = treasure if (ships_x + i, ships_y) in treasure_list:
seawater_map[ships_y][ships_x + i] = treasure if (ships_x+i,ships_y+i) in treasure_list:
seawater_map[ships_y+i][ships_x + i] = treasure if (ships_x+i,ships_y-i) in treasure_list:
seawater_map[ships_y-i][ships_x + i] = treasure if (ships_x, ships_y +i) in treasure_list:
seawater_map[ships_y+i][ships_x] = treasure
if (ships_x, ships_y - i) in treasure_list:
seawater_map[ships_y-i][ships_x] = treasure
return seawater_map
10. 判断船只地点是否有宝藏
def treasure_judge(treasure_list):
'''判断坐标是否有宝藏
:param treasure_list 宝藏地图
:return True 代表此地有宝藏'''
if (ships_coordinates['x'], ships_coordinates['y']) in treasure_list:
return True
return False
11. 移动船只
def restarting(ships_remove,seawater_map):
'''改变船的坐标
:param ships_remove 移动的位置
:param seawater_map 海水地图'''
ships_x=ships_coordinates['x']
ships_y=ships_coordinates['y']
number=1
seawater_map[ships_y][ships_x]='~'
if ships_remove=='w':
ships_y-=1
elif ships_remove=='a':
ships_x-=1
elif ships_remove=='s':
ships_y += 1
elif ships_remove=='d':
ships_x += 1
seawater_map[ships_y][ships_x] = 'B'
ships_coordinates['x']=ships_x
ships_coordinates['y']=ships_y
return seawater_map
12. 游戏核心
def game_start():
'''游戏核心'''
map_x=9
map_y=5
ships_coordinates['x']=map_x // 2
ships_coordinates['y'] = map_y // 2
treasure_count=0
count=9
seawater_map=get_seawater(map_x,map_y)
treasure_list=treasure_location(map_x,map_y)
seawater_map=restarting_init(seawater_map)
while count:
if treasure_judge(treasure_list):
treasure_count+=1
treasure_list.remove((ships_coordinates['x'],ships_coordinates['y']))
print('成功打捞宝藏..(%d个)'%treasure_count)
if treasure_count==5:
break
seawater_map=treasure_tab(treasure_list,seawater_map)
seawater_info(seawater_map)
print('请输入移动的位置(机会%d)'%count)
ships_remove=letter_move_judge(input(),map_x,map_y)
seawater_map=restarting(ships_remove,seawater_map)
count -= 1
seawater_info(seawater_map)
if count:
print('你寻找到了所有宝藏,提前结束了寻宝,今天收获%d个宝藏'%treasure_count)
else:
print('天黑了船只返回了船坞,今天收获%d个宝藏'%treasure_count)
#结束条件宝藏打捞完毕或次数用光
13. 游戏外壳
def game_shell():
'''外壳程序'''
game_info() # 游戏开始提示
game_start()
while True:
message='你想在玩一次吗(Y or N)'
again_flag=Double_choice('y','n',message)
if again_flag=='n':
break
game_start()
14. 运行游戏
game_shell()
python学习途径
本游戏参考书本 <<Python游戏编程快速上手>>
python 游戏(船只寻宝)的更多相关文章
- Python游戏编程入门
<Python游戏编程入门>这些文章负责整理在这本书中的知识点.注意事项和课后习题的尝试实现.并且对每一个章节给出的最终实例进行分析和注释. 初识pygame:pie游戏pygame游戏库 ...
- python 游戏 —— 汉诺塔(Hanoita)
python 游戏 —— 汉诺塔(Hanoita) 一.汉诺塔问题 1. 问题来源 问题源于印度的一个古老传说,大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆 ...
- Python 游戏之旅(Pygame)
Pygame是跨平台Python模块,专为电子游戏设计,包含图像.声音.建立在SDL基础上,允许实时电子游戏研发而无需被低级语言(如机器语言和汇编语言)束缚.基于这样一个设想,所有需要的游戏功能和理念 ...
- python 游戏(数字推理游戏Bagels)
1.游戏思路和流程图 实现功能:玩家猜测三位不一样的数字,猜错了有提示,提示分别为(位置错误数字正确),(位置和数字正确),(数字和位置都不正确) 游戏流程图 2. 使用模块和游戏提示 import ...
- python 游戏(井字棋)
1. 游戏思路和流程图 实现功能,现实生活中的井字棋玩法 游戏流程图 2. 使用模块和游戏提示 import random def game_info(): print('欢迎来到井字棋游戏') pr ...
- python 游戏(猜单词Hangman)
1.游戏思路和流程图 实现功能:随机一个单词让玩家猜测(后续难度实现修改为成语填空,成语必须要有提示,可修改猜的次数,增加连续猜成语,难度系数随着次数的增加而增加) 游戏流程图 2. 单词库和模块 i ...
- python 游戏(龙的国度)
1. 理清楚游戏思路 实现功能:2个洞穴选择,一个洞穴是好龙,一个洞穴是坏龙,坏龙可以概率屠龙或者概率逃跑选项(后续难度需要增加宝藏获取装备,随机遇见商人,随着游戏进度逐步减少屠龙概率) 2. 计数和 ...
- python 游戏(猜数字)
1. 构造猜数字核心函数 import random def guess_core(guess_min,guess_max,guess_counrt): '''猜数字核心判断函数 :param gue ...
- Python游戏引擎开发(七):绘制矢量图
今天来完毕绘制矢量图形. 没有读过前几章的同学,请先阅读前几章: Python游戏引擎开发(一):序 Python游戏引擎开发(二):创建窗体以及重绘界面 Python游戏引擎开发(三):显示图片 P ...
随机推荐
- DevExpress08、SchedulerControl、DateNavigator、SpreadsheetControl
SchedulerControl 该控件以可视化的效果显示预约或者设定的行程: 该控件预约后的数据存储在SchedulerStorage对象里, 当以拖动形式添加SchedulerControl控件到 ...
- 团队作业——Alpha冲刺 4/12
团队作业--Alpha冲刺 冲刺任务安排 杨光海天 今日任务:着手进行编辑界面的布局,插入控件,并进行参数调整. 明日任务:继续完善编辑界面控件,学习控件交互功能. 郭剑南 今日任务:上网查阅学习了关 ...
- input file 美化
<input type='file'>的默认外观实在难看,绝大多数情况都需要对其美化.找了很多资料,目前发现以下方式是最简单的美化方式. 1.将file input用label包裹起来,然 ...
- Oracle Spatial中SDO_Geometry说明
Oracle Spatial中SDO_Geometry说明 在ArcGIS中通过SDE存储空间数据到Oracle中有多种存储方式,分别有:二进制Long Raw .ESRI的ST_Geometry以及 ...
- docker swarm英文文档学习-2-关键概念
参考https://docs.docker.com/engine/swarm/key-concepts/ Swarm mode key concepts集群模式关键概念 本主题介绍Docker Eng ...
- JS省市区联动效果
省市区联动下拉效果在WEB中应用非常广泛,尤其在电商网站最为常见.一般使用Ajax实现无刷新下拉联动.利用jQuery,通过读取JSON数据,实现无刷新动态下拉省市二(三)级联动效果. 首先我们可以看 ...
- C++之语言概述
C++语言是广泛使用的程序设计语言之一,因其特有的优势在计算机应用领域占有重要一席. C语言的发展 20世纪70年代初,贝尔实验室的Dennis Richie 等人在B语言基础上开发出C语言,最初是作 ...
- 八,ESP8266 文件保存数据(基于Lua脚本语言)
https://www.cnblogs.com/yangfengwu/p/7533845.html 应该是LUA介绍8266的最后一篇,,,,,,下回是直接用SDK,,然后再列个12345...... ...
- USB主机控制器ECHI
USB主机控制器ECHI 2017年10月24日 15:44:11 阅读数:239 1. 主机控制器(Host Controller) • UHCI: Universal Host Controlle ...
- [HEOI2012]采花 BZOJ2743
分析: 听说主席树和莫队可以做,前者不想写,后者我不会... 我们考虑将询问离线,按照左端点排序,之后先处理好从1开始选的答案,之后枚举从1到n,之后依次删除nxt[i],添加nxt[nxt[i]], ...