2024年1月23日发(作者:)
python 大作业
Point Destroy设计文档
【数据】
circle:定义CIRCLE类,每个圆为CIRCLE的一个实例对象,存储第一个点坐标、方向、类型(长度)、颜色,以及包含剩余圆的个数。所有圆的对象放进一个列表circles里。棋盘:使用二维列表,grid[i][j]存储棋盘第i行第j列的息,grid[i][j]=’-’表示没有,grid[i][j]为数字x表示grid[i][j]上摆的是编号为x的圆。
【主算法】
用伪代码的形式给出主算法流程:
点击数shoot初始化为
击中数hit初始化为
#随机得到整张棋盘的息
剩余圆数circlenum随机为Min_Circles, MAX_Circles之间的随机数圆的类型数classnum初始化为
每种类型圆的数量列表classcount[]初始化为空
for i in range(circlenum):
随机圆i的息(第一个点坐标(保证不出界)、方向、类型、颜色)
while i和[0..i-1]中的圆有相交或(i是最后一条圆且classnum==1):
重新随机i的息
根据i的类型更新classnum和classcount
打印棋盘息(供调试)
#正式开始游戏
While True:
p=se()
if p点在棋盘内:
inc(click)
获得p点所在的格子(x,y)
if (x,y)点过了:
输出已点过息
else:
if (x,y)没圆:
标记(x,y)已点过,并输出wrong息
在(x,y)显示’X’
else:
标记(x,y)已点过,并输出打中息
inc(hit)
获得(x,y)的圆的编号S
在(x,y)显示S的颜色
if S剩余圆体长度==0:
dec(circlenum)
变换圆S占的所有格子的样式
输出S被点中息
获得S的类型type
if classcount[type]==0:
输出type型圆全被击沉的息
else:
输出type型圆还剩classcount[T]个没被点中
更新命中率及剩余点击数的显示
else:
输出非法点击息
if circlenum==0:
输出胜利息
break
if click==clicks(clicks为点击数):
输出失败息
break
while (): se()
【代码解释】
课本提供的图形库
程序所需的常量
定义NumText类,继承,为方便显示和变更带有数字的文本Class NumText(Text):
__init__(self, p, s1=’’, num=-1, s2=''):
构造函数,p为中点坐标,s1为数字的前缀,num为数字,s2为数字的后缀
setNum(self, num):
设置数字为num
setString(self, s1, num=-1, s2=''):
设置数字前缀为s1,数字为num,数字后缀为s2
setPrefix(self, s1):
设置数字前缀为s1
setSuffix(self, s2):
设置数字后缀为s2
定义了标记格子所用的三个图形类:
Class X():
未击中’X’的图形
__init__(self, row, col):
构造函数,(row,col)为需要显示’X’的格子
draw(self,win):
在窗口win中画出这个’X’
Class O():
击中的图形(实心圆)
__init__(self, row, col, color):
构造函数,(row,col)为需要显示’X’的格子,color为颜色
draw(self,win):
在窗口win中画出这图形’
Class S():
一个圆被点中的图形(一个十字)
__init__(self, row, col):
构造函数,(row,col)为需要显示图形的格子
draw(self,win):
在窗口win中画出这个图形
定义了Circle,用以存储每个圆的息
Class Circle():
__init__(self, id):
构造函数,圆的标号为id
setRandom(self):
随机这个圆的息,保证圆的位置不越界
getCellList(self):
返回一个list,存储了这个圆占的所有格子
Cross(self, b):
返回一个布尔值,表示这个圆和圆b是否相交
Hit(self):
处理这个圆被击中的情况,即剩余长度自减1
并返回一个布尔值,表示这个圆有没有被击沉
Live(self):
返回一个布尔值,表示这个圆是否还存在
主函数
addCircle(newcircle):
把newcircle增加到circles里
Init():
随机得到整张棋盘的息
DrawGrid():
画棋盘的方格
TextInit():
初始化显示游戏中的各种文本
deal(row,col):
处理鼠标点击(row,col)格子的情况,主要是显示各种提示息Loop():
主循环,即【主算法】中while True部分
通过调用下列语句完成整个程序的功能
Init()
DrawGrid()
TextInit()
Loop()
发布者:admin,转转请注明出处:http://www.yc00.com/web/1705978061a1432703.html
评论列表(0条)