我如何制作这款可调整大小的Chess GUI?
我们公司的任务是制作国际象棋游戏 . 它需要在Windows,OS X和Linux / Unix机器上运行,我们选择Java来实现这一点,同时保持一个通用的代码库(便于维护和降低成本) .
我的任务是创建GUI . 用户设计团队已经清除了以下规范 . 与客户 .
国际象棋游戏(国际象棋冠军)将大胆调整和简单,它包括:顶部的工具栏,UI组件:新按钮保存按钮恢复按钮辞职按钮用于向玩家提供消息的标签 . 在游戏的左侧,我们需要一个将被保留以供将来使用的区域,它可能包括以下内容:捕获的棋子列表在推广棋子时选择棋子的选择器游戏统计提示等等详细信息仍在与客户和逻辑团队达成和解 . 那么暂时,只需用包含?的标签来标记它?作为文字 . GUI的其余部分将由棋盘本身组成 . 它将拥有:国际象棋棋盘的主要区域 . 如果用户指向棋子,它应该显示带边框的焦点 . 它也应该是键盘可访问的 . 客户将提供多个棋子(各种尺寸,样式和颜色)的精灵表,以允许用户改变游戏的外观 . 棋盘将有标签指示列(从左到右:A,B,C,D,E,F,G和H)和行(从上到下:8,7,6,5,4,3,2) &1) . 国际象棋棋盘和列/行标签将以1px黑色边框为边界,周围有8px填充 . 随着玩家增加游戏的大小,棋盘应该保持正方形,否则填充可用空间 . 国际象棋棋盘背后的背景色应该是赭色,但在下面的模型中,我们将棋盘背后的区域设为绿色,以突出调整大小的行为 .
在游戏开始前,最小尺寸的国际象棋冠军
激活新游戏按钮后,
2 回答
注意事项
棋盘左侧及上方的棋盘由9x9
GridLayout
提供 . 网格布局的第一个单元格是没有文本的标签 .为简化游戏逻辑,我们维护一个单独的8x8按钮阵列 .
为了允许键盘功能,我们使用棋盘位置的按钮 . 这也提供了内置焦点指示 . 删除按钮的边距以允许它们缩小到图标的大小 . 我们可以在按钮上添加
ActionListener
,它将响应键盘和鼠标事件 .为了维持一块方板,我们采用了一点技巧 . 国际象棋棋盘被添加到
GridBagLayout
作为唯一没有指定GridBagContraints
的组件 . 这样它始终居中 . 为了获得所需的调整大小行为,国际象棋棋盘会查询 parent component, 的实际大小并返回一个可以达到的最大大小,同时仍然是正方形且不超过父级宽度或高度的较小大小 .棋子图像是从Example images for code and mark-up Q&As获得的,而Example images for code and mark-up Q&As又是由'Fill' Unicode characters in labels开发的 .
使用图像更简单,而填充Unicode字符更通用,也是'lighter' . I.E.支持4种不同颜色的3种不同尺寸的3种不同的棋子样式需要36个单独的精灵表!
我注意到在调整大小时你可以在棋盘和右边/底边线边界之间留一个小间隙 . GridLayout会发生这种情况,因为空格并不总是被9整除 .
您可能正在寻找使用标准JDK的解决方案,但如果您想摆脱这个小差距,那么您可以使用Relative Layout来管理棋盘和标签 . 差距仍将存在,但我已将其移至标签,因此您无法轻易看出差异 .
它确实需要更多工作,因为您需要单独管理行,而不是在网格中 . 此外,我更改了使用48x48图像的代码,以便在我的小型显示器上更轻松地调整测试大小 .