将此代码专业化
Professionalise this code
我已经编程大约3年了,对自己的技能充满信心。但最近,我开始与嵌入式系统合作,研究其他人的代码,并开始质疑我的代码有多好
我在SO上看到了所有这些复杂的答案,我想我会用向量和if语句来做这件事,并想知道我是否只是一个自学成才的初学者,并不真正知道自己的水平。
所以我想知道更有经验的程序员是否可以向我展示如何把事情做得更好。
这是我为rpg游戏编写的代码,用来选择攻击目标。以它为例,你可以向我展示更好/更先进/更专业的方法吗?
int FindTarget(Player &player);
{
int aimPoint[5] = 0;
for(int i = 0; i <= 5; i++)
{
if(player.team[i].exist == true)
{
// set random starting point between 1 - 3
aimPoint[i] = random /3;
// add a point if you hve an elemental advantage minus if not
if(player.team[i].type == weak)
{
aimPoint += 1;
}
else if(player.team[i].type == strong)
{
aimPoint -= 1;
}
//add for front row minus for back
if(i == 1 || i== 3)
{
aimPoint += 1;
}
else
{
aimPoint -= 1;
}
}
}
return 0;
}
编辑:如果你没有时间或精力给我看例子,我会很感激一本初学者/中级学生都能理解的好书。
- 评论#1:
这行从0开始,正好走一次?为什么它是一个循环?
for(int i = 0; i <= 0; i++)
- 评论#2:
不要将布尔值与true
进行比较。
if(player.team[i].exist == true)
只需将其重新写入:
if(player.team[i].exist)
- 评论#3:
专业人士很少使用硬编码的值
为什么这个值是5?
int aimPoint[5] = 0;
相反,要明确:
int aimPoint[TARGET_SIZE] = 0;
同样,更改
aimPoint[i] = random /3;
至:
aimPoint[i] = random /INITIAL_TARGET_VALUE;
这毫无意义;这不是一个循环,这是一个单程。
for(int i = 0; i <= 0; i++)
嗯,既然没有人提到它,让我指出这一点:
int FindTarget(Player &player);
{
int aimPoint[5] = 0;
...
return 0
}
大致
void FindTarget(const Player &player)
{
std::vector<int> aimPoint(5, 0);
...
}
此外,由于不知道代码应该做什么(以及"aimPoint"与团队的关系;猜测没有帮助,因为没有使用它,aimPoints被丢弃了?),除了修复以上的明显损坏,我没有其他东西了
----从评论中编辑
对random
的处理似乎被误导了。有人说你可能是指random %3 + 1
;
我也注意到了这一点,但我认为没有什么可以作为假设的基础。也许random已经是[3, 12)
范围内的int了。
此外,random % 3
不会产生均匀分布,因此您需要执行其他操作
对于许多应用程序来说,如果使用得当,rand()的表现会令人钦佩,但在当前糟糕的情况下,rand)很少被正确使用。
问题是分配
以下是我将如何编写它。
void FindTarget(Player &player);
{
int aimPoint[5];
for(int i = 0; i <= 5; ++i)
{
if(!player.team[i].exist)
continue;
// set random starting point between 1 - 3
aimPoint[i] = random / 3;
// add a point if you hve an elemental advantage minus if not
switch(player.team[i].type) {
case weak:
++aimPoint[i];
break;
case strong:
--aimPoint[i];
break;
}
//add for front row minus for back
if(i == 1 || i== 3)
++aimPoint[i];
else
--aimPoint[i];
}
}
那段代码:
// set random starting point between 1 - 3
aimPoint[i] = random /3;
不要给你1到3之间的随机数,试试这个:
aimPoint[i] = random % 3 + 1
- 如何使用默认参数等选择模板专业化
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 模板化建造师专业化
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 此代码是否违反一个定义规则
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 为什么这个模板代码不选择部分专业化
- 将此代码专业化