我正在尝试在 2 个计算机“玩家”之间构建一个高效的石头剪刀布模拟器。我在这里看到的一个建议是使用矩阵来存储可能的结果。我真的很喜欢这个想法,因为这意味着我不必有 9 个不同的 if() 语句来说明所有可能的值。每当比赛结束时,我都有函数来迭代每个玩家的获胜、失败和平局的数量。因此,我认为如果我可以构建一个函数指针的二维数组,那么 [0][0] 表示双方都抛出“Rock”并导致 Draw,抛出函数 addDraw( ) 每个玩家。我找到了一个在这里工作的一维函数指针数组的例子。
当我尝试编译时,我的代码抛出了几个错误。让我知道是否需要其他任何东西。
调用结果的函数:
void Player::result(vector<Player*> &vals, int x, int y)
{
Player *p1 = vals[0];
Player *p2 = vals[1];
void(*results1[3][3]) =
{
{ p1->addDraws, p1->addWins, p1->addLosses },
{ p1->addLosses, p1->addDraws, p1->addWins },
{ p1->addWins, p1->addLosses, p1->addDraws }
};
}
Run Code Online (Sandbox Code Playgroud)
添加赢、输和平局的函数:
void Player::addWins()
{
wins++;
}
void Player::addLosses()
{
losses++;
}
void Player::addDraws()
{
draws++;
}
Run Code Online (Sandbox Code Playgroud)
所有函数都在 Player.h 中初始化并在 Player.cpp 中声明(我认为这是正确的术语)。我收到的最常见的错误是“错误 C2440:‘初始化’:无法从‘void (__thiscall Player::*)(void)’转换为‘void *’
这是我正在使用的代码。
function doc_to_html(id)
{
var url = "https://docs.google.com/feeds/download/documents/export/Export?id="+id+"&exportFormat=html";
var param =
{
method : "get",
headers : {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
muteHttpExceptions:true,
};
var html = UrlFetchApp.fetch(url,param).getContentText();
Logger.log(html);
}
Run Code Online (Sandbox Code Playgroud)
它曾多次进行测试,但现在返回“未经授权的错误 401”。更准确地说,它正在返回:
<html>
<head>
<TITLE>Unauthorized</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unauthorized</H1>
<H2>Error 401</H2>
</BODY>
</HTML>
Run Code Online (Sandbox Code Playgroud)
我查看了所有能找到的有关 UrlFetchApp 的文档,没有看到任何配额或限制。我检查了脚本范围,并且https://www.googleapis.com/auth/script.external_request已获得授权。