《2022年python大作业 .pdf》由会员分享,可在线阅读,更多相关《2022年python大作业 .pdf(3页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、大作业本次大作业将完成一个称为“战舰”的小游戏。这次作业将综合应用本学期学过的所有知识,。如果你采用合理设计的数据结构,并遵循良好的开发步骤,完成这个程序并不困难。 但需要注意的是, 由于程序包含多个部分内容,建议你合理地划分开发阶段, 每完成一个阶段就进行测试。 不要试图全部完成再进行调试,那将事倍功半。下图是这个游戏的运行界面。作业要求在这个游戏中, 游戏者将与计算机进行对抗。 计算机将在一个二维的表栏中布置一些战船。表栏中的每个方格称为一个单元(cell)。每艘战舰根据自身长度占据横向或者纵向的一些单元。游戏者通过在 cell 上点击鼠标(表示向该位置发送一发导弹) 来猜测这些战舰都布置
2、在什么位置。如果游戏者点击中了某艘战舰占据的一个 cell,则程序显示击中战舰, 并在 cell 中标出,否则标识没有击中。如果某艘战舰占据的所有cell 都被击中, 则标识该战舰被击沉。 为了使得程序更有趣,游戏者的导弹数目是有限的。游戏的胜负规则是: 游戏者击中所有战舰获胜, 若用完所有导弹后还没有击中所有战舰则计算机获胜。为了增加游戏的难度,每次游戏战船的种类和数目都是不定的,程序将用不同颜色表示不同类型的战舰,并且每次游戏者发射导弹后都将显示出相应的提示和统计信息,你可以运行作业材料中的 battleship.exe程序进行试玩, 获得游戏运行更多的细节, 这些功能必须都在作业中完成。
3、名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 3 页 - - - - - - - - - 作业说明和提示:战舰的产生战舰的种类和颜色。类型有五种ROWBOAT, SUBMARINE, SPEEDBOAT, BATTLESHIP, LONGBOAT;每种类型战舰的长度为: ROWBOAT 最短为个cell,然后依次递增一个cell,最长为 LONGBOAT 为个 cell。战舰的颜色也有五种,定义为 Cyan, Red, Blue, Green, Magenta。需要注意
4、的是,战舰的类型和颜色没有对应关系, 每次游戏计算机要为每种类型的战舰选择一种颜色。每次游戏战舰的类型是随机选择的,最少(MIN_SHIPCLASS)为。每次游戏的战舰数目也是随机的,最大(MAX_SHIPS)为,最小( MIN_SHIPS)为,计算机要为每艘战舰选择一个战舰类型。数据结构的设计在游戏中你需要保存很多信息,如战舰类型的信息,每艘战舰的信息,每个cell 的信息等等。你不仅需要设计不同的结构能够保存这些信息,而且这些结构需要方便你进行查找和检索, 比如你可能需要从一个cell 查找一艘船,或者从一艘船查找其所属类型的信息。 所以在各个数据结构的设计当中可能需要考虑有少量的重叠项(
5、冗余)。一些可能的方法包括:在战舰信息的存储结构中设计保存其位置的起始 cell 信息,便于判断和标识该战舰是否被击沉等战舰的部署当战舰的产生结束后就需要对其进行部署。每艘战舰或者横放,或者竖放,但是不能重叠, 也不能超出边界。 有很多方法可以放置战舰, 这里我们给出一个简单有效的“暴力”试验算法,描述如下:Before you begin, every cell on board must be initialized to NULL to indicate thatlocation is empty and available For each ship to place Loop whi
6、le not found a good location for this shipSelect random direction (either horizontal or vertical)Select random start row between 0 and upper bound (bound is NUM_ROWS-1 if horiz, NUM_ROWS-ShipLength if vert) Select random start column between 0 and upper bound(bound is NUM_COLS-1 if vert, NUM_COLS-Sh
7、ipLength if horiz) If all cells from start to end are empty (i.e. NULL)found good location! assign ship, update board & ship data该算法虽然不是最优的,但是对于解决本问题是快速有效的。开发调试技巧采用增量开发的方式来完成复杂程序的功能是一种最有效的方法。建议你分不同阶段来逐步完成该程序,每个部分完成后可以编写一些测试代码来进行验证,例如一些可能的阶段有:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名
8、师精心整理 - - - - - - - 第 2 页,共 3 页 - - - - - - - - - 设计数据结构,完成各项信息的表示;产生战舰信息,存放到数据结构中;部署战舰处理游戏者的一次攻击更新图形界面信息在调试中,除了编写一些测试代码验证已完成的函数是否正确,如何测试和验证游戏功能的正确性也具有一定技巧性。例如,可以在完成战舰部署后, 通过编写一个辅助函数, 用文本方式输出战舰的位置,如下图所示。 这样不仅可以验证是否部署成功,而且可以在后续阶段验证不同用户输入处理的正确性。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 3 页 - - - - - - - - -