五子棋小游戏的分析和设计

1、系统分析

面向对象分析方法,站在用户的角度回答两个问题:

(1)系统中应该有什么对象?

a.棋盘

b.棋局:多个棋子构成的某一时刻的状态

c.游戏:系统总控对象,接收用户的操作指令,并按照用户的操作指令控制棋盘和棋局。

(2)每个对象都应该有什么属性和方法?

棋盘

属性

rows

行数

cols

列数

size

每一个格子的尺寸

margin

棋盘离窗口的边距

方法

init

初始化

convert

将物理坐标(像素)转换为逻辑坐标(行号,列号)

getWidth

获取棋盘的宽度(这个暂时可能考虑不到,在后续过程中才会考虑到这一点,设计也不一定就是一步到位)

getHeight

获取棋盘的高度

 

棋局

属性

chesses

当前棋局状态

方案1:描述每一个棋子的状态

棋子:{行号,列号,颜色},颜色用0、1表示

对应的棋局:[{1,3,1},{2,1,1},{2,2,0}]

方案2:描述每一个落点的状态

落点:0-无子;1-有黑子;-1-有白子

对应的棋局:

[

    [0,0,0,0,0,0]

    [0,0,0,1,0,0]

    [0,1,-1,0,0,0]

    [0,0,0,0,0,0]

    [0,0,0,0,0,0]

    [0,0,0,0,0,0]

]

turn

当前轮到谁落子(1-黑方;-1-白方)

方法

init

初始化

exist

判断某个位置是否有棋子

win

判断输赢,即是否连成了五个及以上的同颜色棋子

add

落子

 

游戏

属性

board

棋盘

chess

棋局

 

 

 

 

方法

init

初始化

drawBoard

绘制棋盘

drawChess

绘制棋子

handle

接收并处理用户的落子指令

2、系统设计

a. 棋盘(Board)

考虑到棋盘的属性在游戏过程中是不变的,所以可以将其属性和方法设计成静态的,那么初始化的方法就应该由静态代码块来完成。

转换:Point convert(int x, int y)

增加一个坐标类Point,描述行号和列号

 

b. 棋局(Chess)

定义常量(0-无子,1-黑子,-1-白子)

初始化: void init(),也可以使用构造函数

判断是否某个落点有棋子:boolean exist(Point p)

判断输赢:int isWin(Point p)

落子:void add(Point p)

 

c. 游戏

初始化  void init(),也可以使用构造函数

处理落子指令 void handle(int x, int y)

绘制棋盘void drawBoard()

绘制棋子void drawChess(Point p,int turn)

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值