有没有人知道是否有ac#Console应用程序,类似于Python或Ruby控制台?我知道整个"编译与解释"的差异,但凭借C#的反射能力,我认为可以做到.
更新 嗯,它只花了大约200行,但我写了一个简单的...它的工作原理很像osql.输入命令然后用go运行它们.
SharpConsole http://www.gfilter.net/junk/sharpconsole.jpg
如果有人想要它,请告诉我.
如果你已经阅读了我的另一个问题,你就会知道我本周末花了6502 CPU模拟器作为编程练习.
CPU模拟器大部分是完整的,并且从我的有限测试看起来相当准确,但它运行速度非常快,我想把它降低到机器的实际时钟速度.
我目前的测试循环是这样的:
// Just loop infinitely.
while (1 == 1)
{
CPU.ClockCyclesBeforeNext--;
if (CPU.ClockCyclesBeforeNext <= 0)
{
// Find out how many clock cycles this instruction will take
CPU.ClockCyclesBeforeNext = CPU.OpcodeMapper.Map[CPU.Memory[CPU.PC]].CpuCycles;
// Run the instruction
CPU.ExecuteInstruction(CPU.Memory[CPU.PC]);
// Debugging Info
CPU.DumpDebug();
Console.WriteLine(CPU.OpcodeMapper.Map[CPU.Memory[CPU.PC]].ArgumentLength);
// Move to next instruction
CPU.PC += 1 + CPU.OpcodeMapper.Map[CPU.Memory[CPU.PC]].ArgumentLength;
}
}
Run Code Online (Sandbox Code Playgroud)
如您所知,每个操作码需要一段特定的时间才能完成,所以在我倒计时CPU周期时,我不会运行下一条指令.这提供了操作码之间的适当时序,它只是整个事情快速运行.
目标CPU的速度是1.79mhz,但是我想要时钟问题的任何解决方案,即使我增加了复杂性,也要保持1.79mhz的速度,所以我不需要调整它.
有任何想法吗?
我正在为我的公司开发一个内部项目,项目的一部分是能够将XML文件中的各种"任务"解析为稍后要运行的任务集合.
因为每种类型的Task都有许多不同的相关字段,所以我认为最好用一个单独的类来表示每种类型的Task.
为此,我构建了一个抽象基类:
public abstract class Task
{
public enum TaskType
{
// Types of Tasks
}
public abstract TaskType Type
{
get;
}
public abstract LoadFromXml(XmlElement task);
public abstract XmlElement CreateXml(XmlDocument currentDoc);
}
Run Code Online (Sandbox Code Playgroud)
每个任务都继承自此基类,并包含从传入的XmlElement创建自身所需的代码,以及将自身序列化为XmlElement.
一个基本的例子:
public class MergeTask : Task
{
public override TaskType Type
{
get { return TaskType.Merge; }
}
// Lots of Properties / Methods for this Task
public MergeTask (XmlElement elem)
{
this.LoadFromXml(elem);
}
public override LoadFromXml(XmlElement task)
{
// Populates this Task from the …Run Code Online (Sandbox Code Playgroud) 这是周末,所以我通过写一个爱好项目来度过整周的编程.
我昨天编写了一个MOS 6502 CPU仿真器的框架,实现了寄存器,堆栈,内存和所有操作码.(链接到下面的来源)
我可以在我编写的调试器中手动运行一系列操作,但是我想加载一个NES rom并按指令指向程序计数器,我认为这是找到有缺陷的操作码的最快方法.
我写了一个快速的NES rom加载程序并将ROM库加载到CPU内存中.
问题是我不知道操作码是如何编码的.我知道操作码本身遵循每个操作码一个字节的模式,该模式唯一地标识操作码,
0 - BRK
1 - ORA (D,X)
2 - COP b
Run Code Online (Sandbox Code Playgroud)
等等
但是我不确定我应该在哪里找到操作码参数.是直接跟随的字节吗?在绝对记忆中,我想它可能不是一个字节而是一个短.
有人熟悉这个CPU的内存模型吗?
编辑:我意识到这可能是在黑暗中拍摄,但我希望有一些老学校的苹果和Commodore黑客潜伏在这里.
编辑:感谢大家的帮助.在我实施适当的更改以对齐每个操作后,CPU可以加载并运行Mario Brothers.除了循环等待Start之外它什么也没做,但它是一个好兆头:)
我上传了这个来源:
http://www.codeplex.com/Cpu6502/SourceControl/DirectoryView.aspx?SourcePath=&changeSetId=1810
如果有人想知道模拟器是如何工作的,那么它很容易理解.至少没有优化,但是再次,我在2.4ghz机器上模拟一个以2mhz运行的CPU :)
如果不运行此代码,请确定Foo将调用哪个方法:
class A
{
public void Foo( int n )
{
Console.WriteLine( "A::Foo" );
}
}
class B : A
{
/* note that A::Foo and B::Foo are not related at all */
public void Foo( double n )
{
Console.WriteLine( "B::Foo" );
}
}
static void Main( string[] args )
{
B b = new B();
/* which Foo is chosen? */
b.Foo( 5 );
}
Run Code Online (Sandbox Code Playgroud)
哪种方法?为什么?运行代码不会作弊.
我在网上发现了这个难题; 我喜欢它,我想我会把它用作面试问题......意见?
编辑:我不会判断候选人是否错了,我会用它作为一种方式来开展关于C#和CLR本身的更全面的讨论,这样我就可以很好地理解候选人的能力.
资料来源: http ://netpl.blogspot.com/2008/06/c-puzzle-no8-beginner.html
在ActionScript 3.0中,是否有自动方法来计算两个指定日期之间的天数,小时数,分钟数和秒数?
基本上,我需要的是.NET Timespan类的ActionScript等价物.
任何的想法?
这是一个漫长的假期周末,所以我再次得到了编码错误并开始玩游戏:
马里奥http://gfilter.net/junk/tileengine.jpg
我写了一个基本的瓦片引擎,但之前从未尝试过这个,我真的很难处理精灵碰撞检测并实现重力的真实物理.
对于任何其他游戏爱好作家,你能指出一些关于最佳方法的演练吗?
更新:
我以为我会分享进度报告:
http://www.youtube.com/watch?v=-RKNQ2UiiLY < - 游戏在行动中
它仍然是真正的马车,但碰撞检测主要是工作,我已经开始研究其他一些功能(如碰撞块(注意错误)和与敌人交互).
马里奥仍像他在月球上走路一样,我正在使用这些常数,有什么建议可以调整它们以获得更真实的效果吗?
const float AirDrag = 1.00f;
const float GroundFriction = .97f;
const float Gravity = 0.8f;
Run Code Online (Sandbox Code Playgroud) 我时不时地碰到我以前见过的语法,但从未使用过.这是其中一次.
有人可以按照C#构造函数方法解释":this"或":base"的用途吗?
例如:
public MyClass(SomeArg arg) : this(new SomethingElse(), arg)
{
}
Run Code Online (Sandbox Code Playgroud)
我的直觉是它用于将默认参数映射到另一个构造函数方法.
我正在尝试找到一个LINQ oneliner,它接受一个Dictionary <String,Int>并返回一个Dictionary <String,SomeEnum> ....它可能不可能,但会很好.
有什么建议?
编辑:ToDictionary()是显而易见的选择,但有没有人真的尝试过?在字典上,它与Enumerable上的工作方式不同...您无法将密钥和值传递给它.
编辑#2:Doh,我在这一行上面有一个拼写错误的编译器.一切都很好.
我试过这样做:
root.addEventListener("click",
function ()
{
navigateToURL(ClickURLRequest,"_self");
});
Run Code Online (Sandbox Code Playgroud)
它确实添加了事件监听器.我喜欢使用闭包,因为它们在这种情况下效果很好,
但是,删除事件监听器需要引用原始函数,因为我使用了匿名闭包,它不起作用,我试过:
root.removeEventListener("click",
function ()
{
navigateToURL(ClickURLRequest,"_self");
});
Run Code Online (Sandbox Code Playgroud)
以及:
root.removeEventListener("click", function () {} );
Run Code Online (Sandbox Code Playgroud)
我发现它的唯一方法就是抛弃匿名闭包并将事件监听器指向一个预先存在的函数:
function OnClick (e:Event)
{
navigateToURL(ClickURLRequest,"_self");
}
root.addEventListener("click", OnClick);
root.removeEventListener("click", OnClick);
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何使用匿名闭包事件处理程序,同时仍然保留删除它们的能力?
c# ×5
.net ×4
6502 ×2
emulation ×2
actionscript ×1
clockrates ×1
closures ×1
console ×1
constructor ×1
dictionary ×1
events ×1
factory ×1
interactive ×1
linq ×1
low-level ×1
physics ×1
puzzle ×1
tile-engine ×1
timespan ×1