家庭作业:避免神奇数字 对于我的C++作业分配,我必须编写一个TIC Tac ToIP Win32控制台应用程序。

家庭作业:避免神奇数字 对于我的C++作业分配,我必须编写一个TIC Tac ToIP Win32控制台应用程序。,c++,constants,naming,C++,Constants,Naming,我使用坐标系在屏幕上创建了一个网格,我使用\u getch()和设置控制台或位置(…)在用户按下箭头键时移动光标,并在用户按下其中一个键时绘制X或O 我问题的关键部分 栅格坐标的格式为(x,y),1,1表示左上角,5,5表示右下角。每次按箭头键都会移动光标+/-2。例如,如果光标位于1,1,用户按下向上箭头,光标将移动到1,5,如果再次按下向上箭头,光标将移动到1,3,以此类推 使用以下算术表达式处理移动: switch ( keyPress ) { case UP : posi

我使用坐标系在屏幕上创建了一个网格,我使用
\u getch()
设置控制台或位置(…)
在用户按下箭头键时移动光标,并在用户按下其中一个键时绘制X或O

我问题的关键部分

栅格坐标的格式为(x,y),1,1表示左上角,5,5表示右下角。每次按箭头键都会移动光标+/-2。例如,如果光标位于1,1,用户按下向上箭头,光标将移动到1,5,如果再次按下向上箭头,光标将移动到1,3,以此类推

使用以下算术表达式处理移动:

switch ( keyPress ) {
 case UP    :
    position.Y = (12 + position.Y - 2) % 6;
    SetConsoleCursorPosition(screen, position);
    break;
 case DOWN  :
    position.Y = (12 + position.Y + 2) % 6;
    SetConsoleCursorPosition(screen, position);
    break;
 case LEFT  :
    position.X = (12 + position.X - 2) % 6;
    SetConsoleCursorPosition(screen, position);
    break;
 case RIGHT :
    position.X = (12 + position.X + 2) % 6;
    SetConsoleCursorPosition(screen, position);
    break;
 }
问题

我不允许在赋值中使用幻数,因此,在12、2和6中,需要用有意义的变量名替换。这些值的合适名称是什么

更新

根据评论,以下是游戏板在屏幕上的显示方式: x和y轴上的数字是绘制x或O的光标位置

 0123456
0╔═╤═╤═╗
1║X│ │ ║
2╟─┼─┼─╢
3║ │O│ ║
4╟─┼─┼─╢
5║ │ │X║
6╚═╧═╧═╝
“偏移量”是一个相当常见的术语[,]用于“调整”物体位置的数字。至于你的模数(
6
),我不太确定。可能是“
boardExtent
”(因为它描述了电路板坐标系的“范围”)?同义词可能是“limit”、“bounds”、“boundary”或“size”

我不是一个C/++程序员,所以考虑这个伪代码,但是类似的东西对我来说是有意义的:

baseXOffset = 12
baseYOffset = baseXOffset

upOffset    = baseYOffset - 2
downOffset  = baseYOffset + 2
leftOffset  = baseXOffset - 2
rightOffset = baseXOffset + 2

boardExtent = 6

switch ( keyPress ) {
  case UP    :
    position.Y = ( upOffset + position.Y ) % boardExtent;
    SetConsoleCursorPosition(screen, position);
    break;
  case DOWN  :
    position.Y = ( downOffset + position.Y ) % boardExtent;
    SetConsoleCursorPosition(screen, position);
    break;
  case LEFT  :
    position.X = ( leftOffset + position.X ) % boardExtent;
    SetConsoleCursorPosition(screen, position);
    break;
  case RIGHT :
    position.X = ( rightOffset + position.X ) % boardExtent;
    SetConsoleCursorPosition(screen, position);
    break;
}

您可以使用任何您想要的,最好是坚持一个共同的命名约定。例如,让你的#定义所有大写字母以避免混淆

也许:

#define MODULO_POSITION 6
#define OFFSET_1 12
#define OFFSET_2 2
#define OFFSET_3 6

这一切都与您的初始设置有关,它们可能看起来像:

const int CELLWIDTH   = 1;  // how big one cell is (space in it)
const int BORDERWIDTH = 1;  // width of the border
const int GAMESIZE    = 5;  // size of game field like 5x5

const int CELLSIZE    = CELLWIDTH + BORDERWIDTH;
const int MAXOFFSET   = GAMESIZE*CELLSIZE + BORDERWIDTH;


switch ( keyPress ) {
 case UP    :
    position.Y = (MAXOFFSET+1 + position.Y - CELLSIZE + GAMESIZE + 1) % (GAMESIZE+1);
    SetConsoleCursorPosition(screen, position);
    break;
 case DOWN  :
    position.Y = (MAXOFFSET+1 + position.Y + CELLSIZE + GAMESIZE+1) % (GAMESIZE+1);
    SetConsoleCursorPosition(screen, position);
    break;
 case LEFT  :
    position.X = (MAXOFFSET+1 + position.X - CELLSIZE - (GAMESIZE+1)) % (GAMESIZE+1);
    SetConsoleCursorPosition(screen, position);
    break;
 case RIGHT :
    position.X = (MAXOFFSET+1 + position.X + CELLSIZE - (GAMESIZE+1)) % (GAMESIZE+1);
    SetConsoleCursorPosition(screen, position);
    break;
 }

请确保使用偶数值;)如果单元格更宽,如果你想跳到单元格的中间,情况会变得复杂。

为什么坐标系会变为6?tic tac toe不是3x3吗?X,O数据在3x3网格中,但是,屏幕上的板是7x7,这就是为什么光标位于1,3或5