假设您正在设计一款能够追踪高分的PC游戏.除了保持本地分数之外,还设置了全局高分服务器,该服务器通过因特网访问该游戏.玩家应该能够在完成游戏后或之后从当地的高分榜中将他们的高分提交到全球高分榜.这一定是一个普遍的问题; 现代游戏机上的街机游戏通常具有这样的全球高分列表.
我的问题归结为:你怎么能阻止某人提交虚假的高分?或者,换句话说,全球高分服务器如何确保提交的分数真的是通过游戏运行产生的?
我越是想到这个,我就越认为它可能是一个无法解决的问题.
您通常要做的是验证源自某个源的消息是否使源对该消息进行数字签名.在这种情况下你当然可以这样做,但真正的问题是玩家通过拥有软件也拥有软件的私钥.无论它有多么模糊,它都可以进行逆向工程,甚至只是从内存中取出.
另一种选择是将玩家游戏的重放发送到高分服务器,这将快速运行重放并验证提交的分数是否与重放的结果相匹配.这并没有解决问题,但如果你还必须制作一个"证明"它的非常复杂的重播,它肯定会使得伪造高分更难.
这是一个有解决方案的问题,还是真的无法解决?家庭游戏控制台开发人员是否使用技术来防止这种攻击,或者他们只是依靠控制台来防止未经授权的代码运行?
我有一个有几行的网格.在顶行,我有一个ItemsControl动态绑定到一个集合,并使用DataTemplateSelector和ItemsPanelTemplate(与一个水平排列的WrapPanel).这是我到目前为止的精简版:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="40" />
<RowDefinition Height="2" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<GridSplitter Background="#666" Grid.Row="1" Height="Auto" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
<ItemsControl x:Name="items" Background="#DDD" Grid.Row="0" ItemTemplateSelector="{StaticResource itemTemplateSelector}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Grid>
Run Code Online (Sandbox Code Playgroud)
我不想将第一行的高度设置为40,而是根据ItemsControl必须适合其所有内容的最小高度动态设置它.由于ItemsControl的高度受Grid Row高度的限制,我无法弄清楚我应该绑定哪个元素以及我应该将它绑定到哪个元素的属性.
将Grid Row的Height绑定到ItemsControl的"所需高度"是有意义的.所以,我找到了DesiredSize属性并将我的RowDefinition的高度绑定到ItemsControl的DesiredSize.Height.这在第一次加载时有效,但在我调整控件大小时不会更新(记住,我使用WrapPanel作为我的ItemsPanelTemplate,因此当我调整窗口大小时,ItemsControl的高度应该更改).
有没有人知道绑定框架是否支持这种情况,还是需要添加事件处理程序代码才能实现这一点?
谢谢.
我的孩子有一个家庭作业,用Java编写Blackjack.我帮助了他一点但是大部分时间他都是自己做的,而且实际上打得很好.他甚至发现了一个错误,我没有看到它是如何计算手值的.但是,有一个他没有处理过的障碍,我能想到的每个解决方案都非常复杂,超出了他能够轻松编写他仍然基本的Java技能的能力.
王牌.事实上,不只是一个Ace,其中有四个,你可以用一只手拿到所有四个.当有一个或多个A时,你如何优雅地计算一手牌的价值,每个A值可能是一个或十一个.我觉得应该有一个优雅的算法,但我没有看到它.当然,部分原因可能就是我累了,但也许你可以提供帮助.
我整天都在苦苦挣扎,我正在尝试为我的CUDA代码中的线程获取一个随机数生成器.我查看了所有论坛,是的,这个主题有点讨论,但我花了好几个小时试图解开各种代码无济于事.如果有人知道一个简单的方法,可能是一个可以被调用的设备内核返回0到1之间的随机浮点数,或者我可以转换的整数,我将非常感激.
同样,我希望在内核中使用随机数,就像rand()一样.
提前致谢
我想在Cocoa-Touch中实现一个Ping类.从我已经完成的谷歌搜索和我看过的旧c代码,似乎使用ICMP协议是最好的方法.
我想我的问题是,iPhone SDK中是否支持ICMP,如果没有,我可以使用CoreFoundation Network类中的任何内容吗?我已经看过CFHost和CFHostStartInfoResolution(主机,kCFHostReachability和错误),但更多的是检查主机是否存在而不是花时间做出响应等.
所以我是一名新程序员,我刚刚在我的Macbook上安装了XCode来获得GCC.我认为Xcode是在OSX上获得GCC的唯一方法.现在当我运行我的Hello World应用程序时,在C++中,g ++出现说它是版本4.0.1但是当我查找以g开头的命令时我也看到了g ++ - 4.2.是否有任何方法可以使4.2默认而不是4.0.1,还有一种方法可以将gcc更新到最新版本4.4.0吗?
编辑:好的,所以我安装了macports并安装了gcc4.4,它在终端上显示为gcc-mp-4.4,如何使用gcc_select进行默认设置,就像命令和内容一样.谢谢.
我学校的计算机科学专业报(称为readme,它是挪威语,第19页)有一个有趣的竞争,为下面的问题编写尽可能短的Java代码.
接受一个整数(作为字符串数组的第一个条目中的字符串,因为Java main方法只接受字符串数组)作为参数,并首先写出所有低于此数字的数字作为素数,然后写出所有数字不是素数.最短的代码获胜!
作为答案,我将发布赢得竞争的最短Java代码.我想知道Stack Overflow社区是否可以制作更短的代码如果您了解挪威语,您会看到如果您已经完成它就可以赢得一瓶香槟,但不幸的是,比赛的最后提交日期已经结束.
你怎么解决这个问题?
在pg.K&R的109,我们看到:
void writelines(char *lineptr[], int nlines)
{
while (nlines -- > 0) printf("%s\n", *lineptr++);
}
Run Code Online (Sandbox Code Playgroud)
我对*lineptr ++究竟做了什么感到困惑.根据我的理解,printf需要一个char指针,所以我们提供*lineptr.然后我们将lineptr增加到数组中的下一个char指针?这不是非法的吗?
在页99,K&R写道"数组名称不是变量;结构如a = pa [其中a是数组,pa是指向数组的指针]和++是非法的."
我最近在Seaside + Squeak开发了一个Web应用程序,并发现它是一种美妙的体验.Seaside真的比其他所有框架都要强大,我觉得我正在更高层次的抽象工作(在HTTP请求/响应周期和其他框架让你处理的HTML模板之上).
那就是说,我对Seaside组件有点困惑.我最近不得不在组件上显示对象列表(类似于stackoverflow首页).起初我将每个对象都设置为一个组件(WAComponent的子类),但这被证明是非常浪费的,我必须在父组件中动态设置#children才能使其工作.然后我尝试使它们成为渲染对象(不是WAComponent的子类的对象,并使用renderOn渲染:而不是renderContentOn:,就像组件一样).这工作正常,但现在他们无法再像组件那样访问会话对象中的全局状态(使用#session).然后我发现了"WACurrentSession value",它赋予任何对象访问当前Seaside会话对象的权限.我现在能够使它们成为渲染对象.另外,我发现我可以将很多其他更小的组件重写为渲染对象.
除了需要调用/回答或回溯状态外,还有哪些其他原因可以在渲染对象上使用组件?
我非常格式化浮点数,但如果没有相关的浮点数,则希望它显示为整数.
即
我可以通过一些正则表达式实现这一点,但想知道是否有sprintf这样做的唯一方法?
我喜欢懒洋洋地在红宝石中这样做:
("%0.2fx" % (factor / 100.0)).gsub(/\.?0+x$/,'x')
Run Code Online (Sandbox Code Playgroud)