python 大作业

python 大作业


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条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信