战舰!
早在2003年(当时我17岁),我就参加了战舰AI编码比赛.即使我输掉了那场比赛,我也玩得很开心并从中学到了很多东西.
现在,我想在这场比赛中复活,寻找最好的战舰AI.
获奖者将获得+450声望!比赛将于2009年11月17日开始.不接受17日零时以外的参赛作品或编辑.(中央标准时间)提前提交您的参赛作品,这样您就不会错过机会!
为了保持这个目标,请遵循竞争精神.
游戏规则:
比赛规则:
评分:
祝好运!玩得开心!
编辑1:
感谢Freed,他在Ship.IsValid函数中发现了一个错误.它已被修复.请下载该框架的更新版本.
编辑2:
由于人们对将统计信息持久存储到磁盘等方面非常感兴趣,因此我添加了一些应该提供所需功能的非定时设置和拆除事件.这是一个半破坏性的变化.也就是说:界面已经过修改以添加功能,但不需要它们.请下载该框架的更新版本.
编辑3:
错误修复1:GameWon并且GameLost只在超时的情况下被调用.
错误修复2:如果引擎在每场比赛中超时,则比赛永远不会结束.
请下载该框架的更新版本.
编辑4:
比赛结果:

我正在对我的一个较大的MVC应用程序进行重大的重构/速度调整.它已经部署到生产几个月了,我开始等待连接池中的连接超时.我已将问题跟踪到未正确处理的连接.
鉴于此,我已经对我的基本控制器进行了此更改:
public class MyBaseController : Controller
{
private ConfigurationManager configManager; // Manages the data context.
public MyBaseController()
{
configManager = new ConfigurationManager();
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (this.configManager != null)
{
this.configManager.Dispose();
this.configManager = null;
}
}
base.Dispose(disposing);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我有两个问题:
configManager管理DataContext将IQueryable<>参数公开给视图,我需要确保Dispose()在视图完成渲染之前不会在控制器上调用.Dispose()呈现视图之前或之后调用Controller?或者,MVC框架是否将其留给了GarbageCollector?我的一位队友询问是否可以从一个SVN导出到另一个SVN,同时保留历史记录.
对我来说,这似乎是一个共同的要求.
那么:是否有可能在维护历史记录的同时在SVN存储库之间进行迁移?
重要的是要注意我们在Source上没有svnadmin访问权限,但我们确实在Destination上有访问权限.
如果这只是从源中检出每个修订版,并将其检入目的地,那么我们就可以了,只要有一个自动化过程.
编辑:我忘了提到目标仓库在Windows上.
我试图在我的SQL Server数据库中合并这样的东西:
[TicketID], [Person] T0001 Alice T0001 Bob T0002 Catherine T0002 Doug T0003 Elaine
进入:
[TicketID], [People] T0001 Alice, Bob T0002 Catherine, Doug T0003 Elaine
我需要在SQL Server和Oracle中执行此操作.
我发现GROUP_CONCATMySQL 的功能完全符合我的需要,但MySQL不是一个选项.
编辑:测试台:
DECLARE @Tickets TABLE (
[TicketID] char(5) NOT NULL,
[Person] nvarchar(15) NOT NULL
)
INSERT INTO @Tickets VALUES
('T0001', 'Alice'),
('T0001', 'Bob'),
('T0002', 'Catherine'),
('T0002', 'Doug'),
('T0003', 'Elaine')
SELECT * FROM @Tickets
Run Code Online (Sandbox Code Playgroud) 我通常遵循全局变量/函数是邪恶的规则,并且每一段代码都应该存在于它所属的类中.
这是一个非常容易遵循的规则,我相信到目前为止我还没有遇到过这条规则的问题.
然而,今天,我需要的功能添加到我的组装,而不是一个特定的类.也就是说,我的几乎所有类都可以用于这个特定的功能.
我应该把这个功能放在哪里(+1重载)?
如果我把它放在"公用事业"课程中,我会觉得很脏.如果我将它添加到一个半相关的类,并让其他类直接调用它,我会感觉更糟.
这段特殊的代码基本上是IList<PointF>一个规范化的列表.我觉得现在添加它作为扩展方法IList<PointF>可能是最好的选择...
有没有办法向ReSharper表明由于按合同设计需要检查,不会出现空引用?例如,以下代码将Possible 'null' assignment to entity marked with 'NotNull' attribute在第7行和第8行的ReSharper中引发warning():
private Dictionary<string, string> _Lookup = new Dictionary<string, string>();
public void Foo(string s)
{
Contract.Requires(!String.IsNullOrEmpty(s));
if (_Lookup.ContainsKey(s))
_Lookup.Remove(s);
}
Run Code Online (Sandbox Code Playgroud)
真正奇怪的是,如果删除该Contract.Requires(...)行,ReSharper消息就会消失.
更新
我通过ExternalAnnotations找到了解决方案,Mike也在下面提到过.以下是如何在Microsoft.Contracts中为函数执行此操作的示例:
Microsoft.Contracts在ExternalAnnotationsReSharper目录下调用的目录.Microsoft.Contracts.xml并填充如下:<assembly name="Microsoft.Contracts">
<member name="M:System.Diagnostics.Contracts.Contract.Requires(System.Boolean)">
<attribute ctor="M:JetBrains.Annotations.AssertionMethodAttribute.#ctor"/>
<parameter name="condition">
<attribute ctor="M:JetBrains.Annotations.AssertionConditionAttribute.#ctor(JetBrains.Annotations.AssertionConditionType)">
<argument>0</argument>
</attribute>
</parameter>
</member>
</assembly>
Run Code Online (Sandbox Code Playgroud)
c# resharper design-by-contract code-contracts microsoft-contracts
新的控制台项目模板创建一个Main方法,如下所示:
class Program
{
static void Main(string[] args)
{
}
}Run Code Online (Sandbox Code Playgroud)
为什么Main方法和Program类都不需要公开?
有没有办法做到这一点:
this.logFile = File.Open("what_r_u_doing.log", FileMode.OpenOrCreate, FileAccess.ReadWrite);
using(var sr = new StreamReader(this.logFile))
{
// Read the data in
}
// ... later on in the class ...
this.logFile = File.Open("what_r_u_doing.log", FileMode.OpenOrCreate, FileAccess.ReadWrite);
using(var sw = new StreamWriter(this.logFile))
{
// Write additional data out...
}
Run Code Online (Sandbox Code Playgroud)
无需打开文件两次?
我似乎无法使StreamReader不处理我的流.我也不想让它超出范围.然后垃圾收集器最终将调用Dispose,杀死流.
微软最近在DevLabs上发布了他们的Code Contracts框架并获得了商业许可.我们有兴趣在我们的项目中使用它们(主要是C#,一些C++/CLI)来逐步替换所有自定义验证代码,但我很想知道其他人在我们承诺之前使用它的经验,特别:
您是否认为该框架对于大型复杂的商业项目而言已经足够成熟?
使用它时遇到了什么问题?
你从中得到了什么好处?
它目前是否比它的价值更痛苦?
我意识到这是一个有点主观的问题,因为它需要意见,但鉴于这个框架是.NET 4.0的一个非常重要的部分,并且(可能)改变了我们编写验证代码的方式,我希望这个问题将会留下开放以收集有关该主题的经验,以帮助我做出具体的,可回答的问题的决定:
我们下个月应该开始使用吗?
请注意,我们不提供代码API,只提供Web服务,因此对于抛出异常类型方面的大多数代码打破兼容性并不是一个问题.然而,正如我希望更多人而不仅仅是我将受益于这篇文章及其答案,这个领域的任何细节都非常受欢迎.
我很喜欢 MVC 2.整个过程非常适合网络.
然而,有一项功能,我无法哄骗这个Html.DisplayFor()功能:
<@ Page Inherits="ViewPage<IEnumerable<Foo>>">
<% foreach(var item in Model) { %>
<%: Html.DisplayFor(item.BarBaz) %>
<% } %>
Run Code Online (Sandbox Code Playgroud)
我需要能够使用DisplayTemplate来获取此值.有没有办法做到这一点?
c# ×6
.net ×2
.net-4.0 ×1
asp.net-mvc ×1
file-io ×1
idisposable ×1
linq-to-sql ×1
methods ×1
oop ×1
resharper ×1
sql ×1
sql-server ×1
svn ×1
syntax ×1
t-sql ×1
validation ×1