我一直想用 Java 编写一个简单的世界,但我可以运行“世界”,然后在以后添加新对象(在世界开始运行时不存在)(模拟/观察 future 对象之间的不同行为)。
问题是我不想在世界开始后停止或重新启动它,我希望它运行一个星期而不必重新编译它,但有能力放入对象并重做/重写/随着时间的推移删除/创建/改变它们。
世界可以像一个 10 x 10 的 x/y“位置”数组一样简单(想想棋盘),但我想需要某种 ticktimer 进程来监视对象并给每个对象(如果有的话)一个机会去“行动”(如果他们愿意的话)。
示例:我在星期一编写了 World.java 并让它运行。然后在星期二,我编写了一个名为 Rock.java 的新类(它不会移动)。然后我将它(以某种方式)放到这个已经运行的世界中(它只是将它随机放在 10x10 数组中的某个位置并且永远不会移动)。
然后在星期三我创建了一个名为 Cat.java 的新类并将其放入世界中,再次随机放置,但是这个新对象可以在世界范围内移动(在某个时间单位内),然后在星期四,我编写了一个名为 Dog.java 的类,它也可以四处移动,但可以“作用于”位于相邻位置的另一个对象,反之亦然。
事情是这样的。我不知道我需要什么样的结构/设计来编写实际的世界级代码才能知道如何检测/加载/跟踪 future 的对象。
那么,关于如何做这样的事情有什么想法吗?
最佳答案
我不知道是否有解决此类问题的模式/策略,但这就是我处理它的方式:
我希望您计划创建的所有这些不同的类都必须是某个公共(public)类(可能是 WorldObject 类)的对象,然后将它们的差异化功能放在单独的配置文件中。
创作
当您的程序运行时,它会定期检查该配置文件夹中是否有新项目。如果它发现一个新的配置文件存在(比如 Cat.config),那么它会创建一个新的 WorldObject 对象并赋予它从 Cat.config 文件中读取的特性,并将该新对象放入世界中。
突变
如果您的程序检测到其中一个项目的配置文件已更改,则会在世界中找到该对象,编辑其功能,然后重新显示它。
删除
当程序查看文件夹并发现配置文件不再存在时,它会从世界中删除该对象并检查它如何影响所有其他对象。
关于java - 需要设计/模式/结构帮助编写 java 'world',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4871845/
我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou
当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende