标签: projects-and-solutions

使用.Net开发Robocode类型的游戏,用于学校作业

我目前在学校的最后一年,攻读计算机研究高等国家文凭,基本上在最后一个学期,我们需要开发一个软件项目,基本上包含一个完整的系统.

现在,我正在考虑做的事情就像Robocode一样,但是我将使用.Net Framework来代替Java.


什么是Robocode?

对于那些你不知道的Robocode是什么,它基本上是一种编程游戏在人们开发利用的类接口和存在的下载类的方法自己的机器人,然后他们在对方的自主战斗竞技场......像这样:

alt text http://articles.techrepublic.com.com/i/tr/cms/contentPics/robocode.gif


所以基本上,正如我所说,我想使用.Net Framework重新创建这种场景.我在StackOverflow上发布这个问题,希望更有经验的开发人员能够指导我为这个项目正确的方向.

到目前为止我的想法基本上是创造:

  • 一个脱机应用程序,将作为战斗舞台和用户界面,与现有的机器人等创建新的战斗.
  • 玩家可以使用在线界面注册新机器人,查看过去的锦标赛分数等...
  • 显然,玩家需要使用类接口来创建他们的机器人.

动画和图形(用于实际战斗)

现在,当战斗发生时,当然会有某种动画和动作,我还没有决定还有什么用作媒介.

我目前想到的选项是:

  • 正如我在上面的第一个要点中所说,开发一个将作为战场的离线应用程序,所有动画将主要使用C#代码完成
  • 或者开发一个可以处理动画的Silverlight应用程序(因此,将场景从离线应用程序更改为现在的在线应用程序
  • 或者,也许是最不可行的,使用JavaScript创建战斗动画,使用类似Canvas的东西

你认为什么可能更适合这种特殊情况?


开发类和接口

对于玩家开发机器人,我将提供他们能够像Robocode一样使用的某些类接口.

此类事件和方法的示例可能包括:

public void run () {}
public void onScannedRobot(ScannedRobotEvent e) {}

walk(/* ammount in pixels or w/e to walk to */);
turnRight(/* value in degrees for an angular turn */);
//etc...
Run Code Online (Sandbox Code Playgroud)

以下是Robocode(Java)中代码的片段:

public class MyFirstRobot extends Robot {
    public void run() {
        while (true) {
             ahead(100);
             turnGunRight(360);
             back(100);
             turnGunRight(360); …
Run Code Online (Sandbox Code Playgroud)

.net project-planning projects-and-solutions robocode

12
推荐指数
2
解决办法
3572
查看次数

在版本控制中维护Visual Studio vcproj项目文件的建议

Microsoft Visual Studio使用XML来保存其.vcproj项目文件.因此,应该很容易区分XML项目文件.

不幸的是,如果您更改任何项目文件的属性,Visual Studio会坚持随机改组项目文件的XML节点!这使得项目文件更改的文本差异和合并基本上不可能.更改一个编译器设置可以使我的视觉差异工具认为我已经改变了文件中50%的行!我甚至尝试了一些XML diff工具,但它们只是显示了一个更加结构化的同样混乱的视图.

有没有人有任何建议.vcproj在源代码管理中维护文件?或者说服Visual Studio 重新排列.vcproj文件中的XML节点的方法?

(我还研究过使用像CMake这样的工具.vcproj从更加差异友好的文本文件生成文件,但CMake有自己的问题.)

version-control projects-and-solutions project visual-studio

12
推荐指数
1
解决办法
5366
查看次数

保持所有Visual Studio项目与库同步

脚本

我有一个包含项目A,B和C的库.

我有两个解决方案.解决方案1包括项目A的副本,解决方案2包括项目A和项目B的副本.


当我构建解决方案1时,这是应该发生的事情:

替代文字http://img689.imageshack.us/img689/9341/onbuildsolution1.jpg


当我构建解决方案2时,这是应该发生的事情:

alt text http://img32.imageshack.us/img32/7821/onbuildsolution2.jpg


我怎样才能做到这一点?

这是我可以使用版本控制系统或现成的文件同步软件自动化的东西吗?或者我需要推出自己的解决方案吗?

如果我构建自己的解决方案,我会对它如何工作有一些想法,但我很感激您的任何输入:

  • 可以是一个简单的控制台应用程序,带有用于指定"源解决方案"的命令行开关,例如:

    c:\Program Files\Library Syncronizer\LibSync.exe /solution:Solution 1
    
    Run Code Online (Sandbox Code Playgroud)
  • 用于注册包含库项目的活动解决方案的XML文件.可能的格式:

    <solutions>
      <solution>
        <name>Solution1</name>
        <path>c:\...\Projects\Solution 1</path>
      </solution>
      <solution>
        <name>Solution2</name>
        <path>c:\...\Projects\Solution 2</path>
      </solution>
      <!-- more solutions -->
    </solutions>
    
    Run Code Online (Sandbox Code Playgroud)
  • 计划将执行以下操作:

    • 读入源解决方案
    • 确定它具有哪些库项目
    • 将这些项目的文件夹复制到库中
    • 循环遍历XML文件中的每个解决方案(源代码除外)
    • 根据需要复制所有库项目的文件夹
    • 也许某些备份操作也可能发生,以防同步过程覆盖重要的事情.

这在概念上听起来相对简单,但这可能会产生严重意想不到的后果,我没有想到.希望有人会警告我,如果它:)


更新 - 我复制项目文件夹的动机是什么?

总之 - 版本控制.

如果我将库项目保存在一个单独的文件夹中,并且只在我的各种解决方案中链接到它们(而不是在我的解决方案文件夹中物理定位文件夹),我的版本控制存储库最终不包含我的库项目的源代码.所以,如果我更新到"三个版本之前",并且我需要对我的一个库方法进行微小的更改,那么代码就不存在了.

我的解决方法是在我的库的存储库中添加标签,例如"解决方案1 ​​ - 版本2.5.3",但这非常笨重.如果我正在处理解决方案1的"三个版本之前"和解决方案2的当前版本,事情变得非常尴尬.现在,解决方案2将指向旧版本的库项目,这使得它可能无法实现使用和测试,直到我完成旧版本的解决方案1.

如果我正在使用副本,所有解决方案都会在其存储库中包含库源代码,并且我可以在需要时随时轻松地返回它.

我应该注意到,我一直在使用Tortoise HG(Mercurial)进行版本控制.

无论如何,我愿意解决这个问题.它不必涉及复制项目文件夹 - 这是我唯一能想到的,以确保我的所有版本控制存储库都是完整的独立软件包.


更新2

首先,只是一个注释.我使用Mercurial(TortoiseHG)进行版本控制,而不是SVN.如果绝对必要,我可以改变,但我真的更喜欢Mercurial.

根据目前为止的回复,我决定废除"双向复制"的想法,然后回到引用我的图书馆项目.这是一个新图:

alt text http://img30.imageshack.us/img30/7445/referencedprojects.jpg

然而,我仍然有相同的目标:

  1. 每个解决方案的最新版本都使用最新的库代码
  2. 每个存储库一个解决方案/应用
  3. 每个存储库都包含所有源代码,包括库项目
  4. 一切都尽可能自动化,以尽量减少错误的风险

目标#1通过引用库项目而不是使用副本自动处理,目标#2只是我如何设置我的存储库的问题,但目标#3和#4仍然是难以捉摸的.

对于Mercurial,有一个子库存功能似乎可以处理我的情况,但正如文档所示,这仍然被认为是实验/风险.

目前,我认为一个好的解决方法可能是将库项目的 …

.net version-control mercurial projects-and-solutions visual-studio

12
推荐指数
1
解决办法
1201
查看次数

如何从Visual Studio中的网站项目中删除项目引用?

因此,如果我有网站项目Foo,它引用了类库项目Bar,如何删除该引用?

谢谢

大卫

projects-and-solutions visual-studio

12
推荐指数
2
解决办法
2万
查看次数

更改解决方案资源管理器中文件的顺序

在Visual Studio中,如何更改源文件的顺序?

默认情况下,它们似乎按字母顺序排列,但我想将它们放在更合乎逻辑的顺序中.

projects projects-and-solutions project visual-studio

12
推荐指数
1
解决办法
5069
查看次数

Visual Studio解决方案:这些解决方案有太多项目吗?

在我目前工作的公司中,我们支持4个与之相关的Windows应用程序.对于每个应用程序,我们都有一个解决方案,每个解决方案从50到100个项 一个或多个解决方案之间可能共有40或50个项目.

为了给你一个想法,更大的解决方案有近90个项目,其中20个是UI项目(主要应用程序,自定义控件项目,UI助手项目),另外20个是业务层项目,可能有30或40个数据访问层项目其余的是Windows服务项目和专业项目

我一直觉得每个解决方案中都有太多项目.当然,我们正在谈论大型应用程序,但我不明白为什么许多项目无法合并.在我以前的公司中,我们实际上有一个用于业务层的项目,一个用于DAL的项目,显然每个窗口或Web应用程序都有一个项目.

以下是由于大量项目而遇到的一些问题:

  • 编译时间很长.
  • 通常应该为Private的类需要是Public才能被同一层中的其他项目访问.
  • 我最近开始使用剖面仪Eqateq.试用版允许分析最多10个dll.我的情况显然使用此应用程序变得复杂.
  • 跟踪项目之间的引用是非常复杂的.我确信项目之间有很多未使用的引用.

相反,我没有发现这种情况的优势.

所以,我的问题是:

  • 您何时决定创建一个新项目,而不仅仅是在当前项目中创建一个文件夹?
  • 我有什么优势可以忽略吗?

更新:

请记住,我并不是建议为所有事情设计一个项目.至少应该有一个DAL项目,一个用于BL,一个用于每个UI应用程序.我意识到即使这对大多数应用来说也是不现实的.我想要了解的是,为组装定义"单一责任"级别的最佳实践是什么?我的意思是,这是一个非常主观的问题,如果采取极端措施,将导致每个班级有一个集会.

更新2:

所有三个答案都提供了有价值的信息,但我只能选择一个我正在选择Doc的评论,以评估如何确定DAL项目的数量.我还链接到我刚发现的其他问题,这些问题都有相关信息:这里这里.我也建议你阅读这篇文章.

.net projects-and-solutions visual-studio

12
推荐指数
1
解决办法
3949
查看次数

Visual C++中多个项目之间的链接器错误

我有一个包含多个项目的解决方案.我有一个"主"项目,作为菜单,从那里,用户可以访问任何其他项目.在这个主项目中,我得到了每个被调用函数的链接器错误.如何避免这些链接器错误?我已经在"Project Dependencies ..."对话框中设置了项目依赖项.

谢谢

编辑 - 我按照建议做了,并将输出文件夹添加到链接器的其他目录中.但是,现在我得到了一百万个错误如下:

3>msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "public: void __thiscall std::basic_ios >::setstate(int,bool)" (?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z) already defined in panels.lib(panel_main.obj)
3>msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "public: int __thiscall std::ios_base::width(int)" (?width@ios_base@std@@QAEHH@Z) already defined in panels.lib(panel_main.obj)
3>msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "public: int __thiscall std::basic_streambuf >::sputn(char const *,int)" (?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHPBDH@Z) already defined in panels.lib(panel_main.obj)
3>msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "public: static bool __cdecl std::char_traits::eq_int_type(int const &,int const &)" (?eq_int_type@?$char_traits@D@std@@SA_NABH0@Z) already defined in panels.lib(panel_main.obj)
3>msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "public: static int …
Run Code Online (Sandbox Code Playgroud)

projects-and-solutions visual-studio visual-c++

11
推荐指数
2
解决办法
5万
查看次数

模块化代码如何在Go中运行?

不是来自C /编译语言背景,我发现很难掌握使用Go的包机制来创建模块化代码.

在Python中,要导入模块并访问它的函数等等,这是一个简单的例子

import foo
Run Code Online (Sandbox Code Playgroud)

其中foo.py是要在同一目录中导入的模块的名称.否则,您可以__init__.py在子文件夹中添加一个空格并通过它访问模块

from subfolder import foo
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过模块名称简单地引用它们来访问函数,例如y = foo.bar(y).这使得将逻辑代码片段彼此分离变得容易.


但是,在Go中,您可以在源文件本身中指定包名称,例如

package foo
Run Code Online (Sandbox Code Playgroud)

在'foo'模块的顶部,然后您可以通过该模块导入

import (
        "foo"
              )
Run Code Online (Sandbox Code Playgroud)

然后通过它来引用它,即y := foo.Bar(x).但是我无法理解的是这在实践中是如何运作的.golang.org上的相关文档似乎很简洁,并且针对使用makefile和编译器的更多(任何)经验的人.

有人可以清楚地解释你是如何在Go中模块化你的代码,正确的项目结构,以及编译过程如何工作?

module packages projects-and-solutions compilation go

11
推荐指数
1
解决办法
9553
查看次数

该项目目前包含对多个版本的引用

我们最近升级到VS2012和.NET 4.5.自切换到2012以来,我在调试时经常遇到这些错误:

编译器错误消息:BC32206:该项目当前包含对多个NPGUtilities版本的引用,对版本2012.4.4751.24389的直接引用和对版本2012.4.4751.24391的间接引用(通过"AdminWeb.targetweights.sgModels").更改直接引用以使用NPGUtilities的版本2012.4.4751.24391(或更高版本).

BC32206:该项目目前包含对多个版本的EnterpriseData的引用,对版本2012.4.4751.25227的直接引用和对版本2012.4.4751.25243的间接引用(通过'SponsorWeb.selectplan.AdministratorXDataset1').更改直接引用以使用EnterpriseData的版本2012.4.4751.25243(或更高版本).

这两个都是项目参考.我试过删除并读取它们但仍然没有运气.有人可以就如何解决这个问题提出任何建议吗?

c# projects-and-solutions dependency-management visual-studio visual-studio-2012

11
推荐指数
2
解决办法
2万
查看次数

可以将条件编译符号添加到csproj.user文件吗?

我正在使用C#Xamarin iOS项目在VS 2013中工作。我想添加一个条件编译符号,而不影响其他任何人,也不必进入Configuration Manager并说复制Debug(主要是这样,如果有人修改了Debug,我不会错过更改)。

我读过几篇文章,尝试将类似的内容添加到csproj.user文件中...

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DefineConstants>$(DefineConstants);__MY_NEW_SYMBOL__</DefineConstants>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

...但这只是删除了该项目的所有其他符号。

有没有一种方法可以修改csproj.user文件以实现此目的?

c# projects-and-solutions conditional-compilation csproj-user

11
推荐指数
1
解决办法
567
查看次数