游戏机制练习簿:等宽按钮分配中的余数像素——7按钮在八种宽度中的像素分配(案例11)
一排按钮平分可用宽度时,除法不一定得到整数像素。若每个按钮独立四舍五入,最后总宽度可能超出容器或留下缝隙。明确分配余数,可以使边距与总尺寸精确对齐。
以下是一组输入完整的独立案例。先读清规则,再按时间或操作顺序记录中间状态;遇到与预期不同的结果时,检查首次出现差异的位置。案例使用明确限定的教学模型,不假定所有作品都采用相同的处理方式。
规则和原始数据
先扣除左右边距和固定间距,再把剩余整数像素平均分给按钮。每个按钮先得商,剩余像素从左到右各加一;位置区间右端排除,所有按钮至少有一个像素。
同一排7个按钮;每项[容器宽,左边距,右边距,间距] [[96, 8, 10, 2], [263, 7, 7, 12], [186, 3, 4, 8], [152, 7, 9, 2], [211, 7, 11, 6], [187, 11, 11, 2], [103, 4, 3, 2], [200, 10, 7, 9]]
逐步记录
容器宽96,左右边距8/10、间距2:可分配66,商9余3;按钮宽[10, 10, 10, 9, 9, 9, 9],区间[[8, 18], [20, 30], [32, 42], [44, 53], [55, 64], [66, 75], [77, 86]],末端为86。
容器宽263,左右边距7/7、间距12:可分配177,商25余2;按钮宽[26, 26, 25, 25, 25, 25, 25],区间[[7, 33], [45, 71], [83, 108], [120, 145], [157, 182], [194, 219], [231, 256]],末端为256。
容器宽186,左右边距3/4、间距8:可分配131,商18余5;按钮宽[19, 19, 19, 19, 19, 18, 18],区间[[3, 22], [30, 49], [57, 76], [84, 103], [111, 130], [138, 156], [164, 182]],末端为182。
容器宽152,左右边距7/9、间距2:可分配124,商17余5;按钮宽[18, 18, 18, 18, 18, 17, 17],区间[[7, 25], [27, 45], [47, 65], [67, 85], [87, 105], [107, 124], [126, 143]],末端为143。
容器宽211,左右边距7/11、间距6:可分配157,商22余3;按钮宽[23, 23, 23, 22, 22, 22, 22],区间[[7, 30], [36, 59], [65, 88], [94, 116], [122, 144], [150, 172], [178, 200]],末端为200。
容器宽187,左右边距11/11、间距2:可分配153,商21余6;按钮宽[22, 22, 22, 22, 22, 22, 21],区间[[11, 33], [35, 57], [59, 81], [83, 105], [107, 129], [131, 153], [155, 176]],末端为176。
容器宽103,左右边距4/3、间距2:可分配84,商12余0;按钮宽[12, 12, 12, 12, 12, 12, 12],区间[[4, 16], [18, 30], [32, 44], [46, 58], [60, 72], [74, 86], [88, 100]],末端为100。
容器宽200,左右边距10/7、间距9:可分配129,商18余3;按钮宽[19, 19, 19, 18, 18, 18, 18],区间[[10, 29], [38, 57], [66, 85], [94, 112], [121, 139], [148, 166], [175, 193]],末端为193。
每种布局的最后右端都恰好等于容器宽减右边距,余数已完整分配。
交叉核对与应用
逐个统计按钮宽度与固定间距,检查最后一项右端恰好落在容器宽度减右边距处。任意两个按钮宽度最多差一,额外像素只分配给前面的若干项。
从左到右发放余数是一种确定约定,也可以设计居中或交替分配,但不能在同一组测试里混用。确定性规则有助于减少窗口大小来回变化时不必要的边缘抖动。
建议保留原始输入、每一步状态和最终输出,再只改变一个条件做对照。重点检查空输入、相等边界、重复请求以及先后顺序;把规则约定、计算过程和显示表现分别核对,比只比较最后一个数字更容易找到原因。
