gpt4 book ai didi

c++ - 瓷砖大小算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:12:08 27 4
gpt4 key购买 nike

我正在用 C++ 制作一个拼图游戏。现在,当游戏加载时,所有图 block 都会根据以下条件自行放置:

tilesize -> 它们是正方形,所以这是宽度和高度

tile_count_x

tile_count_y

我有以下变量:

桌面宽度

桌面高度

游戏窗口宽度

游戏窗口高度

tile_count_x

tile_count_y

基于这些值,我正在寻找一种算法,该算法将在给定桌面和 tile_count 约束的情况下设置适当的窗口大小。然后在其中,我希望我的图 block 有一个偏移量,该偏移量将在窗口周围边界 x%,这也基本上决定了图 block 的大小:

例子:如果我有 10 * 3 个方 block ,那么:

______________________________
Window Title _[]X
------------------------------
| |
| [][][][][][][][][][] |
| [][][][][][][][][][] |
| [][][][][][][][][][] |
| |
------------------------------

我只是不确定执行此操作所需的公式。

编辑(来自评论):

  • Tilesize 变化,tilecountx 和 y 是静态的
  • 我希望游戏窗口在桌面分辨率下尽可能大,但我也希望它的纵横比符合 tilecoutx 和 tilecounty

我找到了一个例子,在 Windows 中打开扫雷

最佳答案

我不是 C++ 程序员,但你应该从中得到一些东西:

// Amount of padding to leave around tiles (of window size)
int percentage = 10;

tile_ratio = tile_count_x / tile_count_y;
desktop_ratio = desktop_width / desktop_height;

// Determine the maximum window width and height
// according to tile and desktop aspect ratios
if(tile_ratio >= desktop_ratio) {
window_width = desktop_width;
window_height = window_width * (1 / tile_ratio);
} else {
window_height = desktop_height;
window_width = window_height * tile_ratio;
}

// Determine maximum width and height for tiles,
// taking account x% of padding on both sides, hence the * 2
tile_width = window_width * ((100 - (percentage * 2)) / 100);
tile_height = window_height * ((100 - (percentage * 2)) / 100);

// As the tiles must be square, determine the smaller side as the size
tile_size = tile_width < tile_height ? tile_width : tile_height;

// To maintain the x% padding, we must calculate the window size again as we just changed the tilesize
factor = (100 / (100 - (percentage * 2)));
window_width = tile_size * tile_count_x * factor;
window_height = tile_size * tile_count_y * factor;

现在您有了最大的窗口宽度和高度,因此:

  1. 窗口与图 block 的纵横比相同
  2. 窗口不比桌面大
  3. 窗口的方 block 四周有 x% 的内边距

请注意,我根本没有测试过这段代码,但它应该 可以工作。如果您发现任何错误,请尝试了解我尝试执行的操作并相应地进行修复。

关于c++ - 瓷砖大小算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1897030/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com