java能开发桌面应用吗游戏吗

游戏教玩家学Java
有人说,最好的学习方法就是游戏。来自旧金山加州大学的研发团队日前开发了一款编程游戏——在游戏的同时教会玩家如何使用 Java 语言。
这款名为 CodeSpells 的游戏是由计算机学家 William Griswold 带领的大四学生团队开发的。游戏的主要受众为高中生。研发团队希望由此来开发学生们的创新力和想象力,让他们主动地去学习知识。
该作是一款第一人称游戏。玩家将扮演一名和矮人们生活在荒岛上的魔法师。因为矮人们失去了使用魔法的能力,所以作为魔法师的玩家将帮助矮人们完成魔法。(#我已经无法直视了。。。)这些咒语是以 Java 语言的形式呈现在玩家面前。玩家需要通过编写这些语句来完成魔法。在帮助矮人们的同时,玩家还能通过一些解密游戏来获得相应的成就,当然,同样是通过 Java 语言的编写。
游戏的测试交由40位毫无编程经验的10至12岁的小女孩完成。在之后一个小时的测试中,姑娘们似乎全都喜欢上了这款游戏,并试着按照自己的想法创造出许多新式的魔法。
Griswold 和他的团队打算在学校中继续测试他们的游戏,最终他们希望这款游戏能够免费向公众开放。一些游戏的介绍请参考下面的视频。
基于创作共用协议(BY-NC)发布。
给这篇稿打赏,让译者更有动力
支付宝打赏 [x]
您的大名:
打赏金额:
09:24:42 :
09:20:23 :
小妞你胸罩掉了
09:24:35 :
09:23:48 :
09:26:17 :在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
如何开发一个小游戏之类的应用程序,就算我用java写好了源代码,如何把他包装成像桌面上的应用程序那样一点就能运行的那样 ?这个问题困惑了我很久。。希望说的详细一点。谢谢!
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
可以参看尚学堂的坦克大战教学
不过用JAVA做游戏做桌面应用也太蛋疼了吧
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
也可以去找创始人帮忙
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:开发游戏Java还是C++。要看什么书。可以网上下载的书。
来源:csdn
【主要想开发游戏,游戏引擎,全部一个人完成的那种。我想从底层学起,但是听说底层比高层还难学。我玩了好多年的游戏。对游戏比较感兴趣,但是外国游戏当道,从WOW到DNF到LOL。都是外国游戏公司大赚中国玩家的钱。听说游戏主要是引擎比较难开发。我想自己开发一个游戏引擎。 现在的问题是,我要看什么书?我没有编程基础。书最好是免费的可以网上下载的英文书。还有制作游戏里面的素材要学什么软件。开发一个游戏要多久?听说这里很多高手!请高手解答一下。主要是看什么书!!!没有钱买书,只有在网上免费下载。】
zhang_erli:
牛逼,这个一个人很难做到
我只想自己做个经典的安卓小游戏
先找本书学学C++,然后找本书学习某个游戏引擎。先学会使用别人写好的东西做游戏,再考虑自己写游戏引擎吧。
一步步来,虽然我不是做游戏的,但是我看过别人做游戏。C++必然选择,加油加油!!!
程序员行列里也就游戏程序员比较有钱途的。凡是向钱看,什么理想啊,抱负啊。都是在温饱无忧的情况下才能实现的。
android游戏java开发的不安全,性能低下。
现在好多android游戏都是c++实现,套了一层java接口。
java_shihongwei:
谢谢指明方向
mlxwl2013:
“书最好是免费的可以网上下载的英文书”
——————
冲这句话你就别学了,连本书都不舍得买,还学什么游戏开发。
另外什么基础都没有就想自己开发一个游戏打败老外,洗洗睡吧。
tangxheng:
理想好丰满,现实很骨感。
1、游戏引擎,大画面的基本上都是Unreal Engine 3的引擎,这个引擎你就买不起。
2、不买引擎也行,自己手绘吧,问题是你会画画吗?
3、游戏的服务器,一个人最少就占用你300k/s的网速,然后那,下载游戏的网速要求更高一人最少也得1m/s才可以,总结就是一个好的专线,加一个套好的集成服务器
4、游戏官网,最少是html5的,你还需要web的开发经验+js+css+ajax能做出来一个不错的官网
5、游戏充值,需要购买支付宝,网银,微信的接口,需要熟练的接口开发+钱
6、游戏编写需要C++,你还需要高度熟练
7、广告(很贵按秒算的)+代言(可无)+传单(最便宜的)
8、bug修复,当上线的时候就会出现bug,你得修复,那你就没有时间更新游戏,然后恶性循环开始,因为制作的时候你可以慢慢做,没人催你,一旦上线,bug+外挂,你还必须要修复,那肯定没时间更新游戏了,慢慢就沉了
总结:需要三头六臂+好多好多钱+你的能力
其实我现在觉的,你的冤枉并不是实现不了,可以先做一个小的发发家,有了第一桶金后,再去想大型的类似DNF,LOL这个级别的
你先不要学编程了,还有买书,并且学完了,你没图怎么编程 啊,所以先学画画
比如说先弄一个射击气球的也可以啊,游戏画画站的比例更高,编程初级的勉强也能做一个出来
现在大的项目和游戏基本上都是团队协作完成,即使你做移动端游戏,想做的漂亮,还是得有美工UI设计等等人员。何况现在企业招聘也很看重你的沟通合作能力。
java_shihongwei:
你的意思是先学PS?
ailasanshai:
3d游戏得建模2d的要画背景和人物,这些都得专业美工来,所以想做游戏先得有钱雇人
不想打击你的积极性,骚年,好好学习吧。以后你会自己明白的
不是PS,ps只不过是P图而已,我说的是绘图,画画,你的明白,比如说
画一个盖伦的正面,侧面,30度60度,然后跑步姿势,攻击姿势,技能效果
然后你才可以编码让它动起来,明白了吧
java_shihongwei:
听你这么说,很难啊。要先学什么软件
java_shihongwei:
这样啊。一个人做英雄不现实看来。。和玩游戏不一样
java_shihongwei:
听你的。不过,希望过来人指条路。路太多了。
要不花钱雇佣UI美工,要不自己画,这个是前提,还想编码
你先画漫画吧,不要想软件了
哈哈 楼主想法很大胆很丰满 可以 可以,学c++ 就网上看书学成估计很难吧,有些有老师教都学成渣 很有挑战的,如果下定决心那就好好学吧 估计要个3~4年才略有小成啊
java_shihongwei:
3年才小成啊。看来很难啊。
免责声明:本站部分内容、图片、文字、视频等来自于互联网,仅供大家学习与交流。相关内容如涉嫌侵犯您的知识产权或其他合法权益,请向本站发送有效通知,我们会及时处理。反馈邮箱&&&&。
学生服务号
在线咨询,奖学金返现,名师点评,等你来互动一个多人在线的棋牌类网络游戏的项目临近尾声,我参与了该项目的整个设计流程,并且完成了90%的核心代码。关于这个项目,有很多地方值得聊一聊。本系列不打算把这个项目将得多么详细规范,那是设计文档应该描述的,我打算只说说一些值得注意的地方。
  这个项目的一个特别之处是,客户端是手机,用户通过移动网络与服务器通信。和PC相比,手机的处理能力极弱,而且网络流量费用昂贵。因为除了要考虑普通网络游戏的一些问题之外,这两点也需要在设计中充分考虑。
 首先是开发语言的选择,由于服务器是Linux的环境,MS的技术直接排除,至于MONO嘛,我实在不放心。可供选择的是C++和Java,Java胜
在网络能力强大,开发周期短,有众多框架和开源库的支持,要写出烂得不可接受的代码也不容易;C++则胜在速度快。综合各方面因素,C++更容易把这个项
目变成一堆代码噩梦,我们选择了Java。
  网络游戏,首先面临的问题当然是如何进行网络通信。首先考虑的是HTTP协议,因为所有的J2ME手机都支持这个,我们当然想尽可能的兼容用户。而且HTTP协议封装程度已经非常高了,不用去考虑线程、同步、状态管理、连接池,不过HTTP协议有两个不爽的地方:
 ◇ 协议无状态,这个问题已经困扰过很多人很多次了。我曾考虑过的解决办法是改造HTTP协议,在数据传输完成之后不关闭socket,但是这样做工作
量非常大,在项目周期中,基本上就是Mission impossible,不予考虑。那么客户也就只能通过轮询的方式向服务器请求数据。
 ◇ 网络流量过大。就这个项目来说,网络间传递的只是指令,但是每次传递都要加上一堆毫无用处的HTTP Head,再加上客户端需要做轮询,这个流量
对于手机来说简直恐怖,经简单测试,按照0.03元/K的GPRS网络费用计算,一局牌居然要消耗1元多的费用(每秒轮询),实在不可接受。也许我们可以
采用流量费包月的资费方式,不过这个话题与技术无关。
  以上问题导致我们选择了Socket,这意味着我们将没有一个web环境,很多东西都要靠自己去实现:线程管理、客户状态监控、对象池、控制台……….
 网络部分打算采用Java NIO来实现,这是一种新的网络监听方式,基于事件的异步通信,可以提高性能。每个客户端连接之后,会有一个独立的
SocketChannel与它通信,这个SocketChannel会在用户的整个生存周期中存在。用户如果断开连接,服务器会得到-1,并且会抛出
Connection reset异常,通过捕获这两个特征,可以在用户意外断开连接后清理相关的资源。由于NIO是异步通信的,所以没有复杂的线程管
二、通信协议
  这个项目并没有复杂的通信指令,命令数量很有限,但是还是有个关键问题需要关注:流量。为
了尽量减小流量,我们使用字节代替字符串来保存系统指令,这样可以使流量减少一半,比如使用一个字节来保存一张扑克牌,字节高位表示花色,字节低位表示数
字,如果0代表黑桃,那么黑桃三就应该是0x03,这个需要靠位操作来实现:
card=(byte
)(m)&&4)|((byte
)n; //m左移四位,然后与n左或操作
  游戏中需要传递用户的积分,这是一个大整数,使用四个字节来保存比较保险,将整数转换为四个字节的操作如下:
[] translateLong(long
[] b = new
i = 0; i & 4; i++)
b[i] = (byte
) (mark &&& (24 - i * 8));
  将四个字节转回来的操作如下:
translateByte(byte
i = 0; i & 4; i++)
res &&= 8;
temp = b[i] &
三、数据库连接池
 由于没有一个web环境,所以我们需要自己实现一个数据库连接池,apache有一个项目叫做commons DBCP,这是一个基于apache自己
的对象池(apache commons pool)实现的数据库连接池,我们可以直接拿来使用,apache的软件未必是最好的,但是极大可能比我们自
己写的要好。
Commons DBCP需要三个.jar:
commons-collections-3.1.jar、commons-dbcp-1.2.1.jar、commons-pool-1.2.jar
这三个文件都可以在apache ? Jakarta ? commons项目下下载,加入到工程中即可。
构造一个数据库连接池的代码如下:
java.sql.*;
com.gwnet.games.antiLord.util.*;
mons.dbcp.java.html" target="_blank"&ConnectionFactory
mons.dbcp.java.html" target="_blank"&BasicDataSource
mons.dbcp.java.html" target="_blank"&DataSourceConnectionFactory
BasicDataSource bds=new
BasicDataSource();
ConnectionFactory fac=null
//初始化连接池
bds.setDriverClassName(“org.postgresql.Driver
”); //数据库驱动程序
bds.setUrl(“jdbc:postgresql://localhost:5432/myDB”); //数据库url
bds.setUsername(“postgres”); //dba帐号
bds.setPassword(“XXXXXXXX”); //密码
bds.setInitialSize(100); //初始化连接数量
bds.setMaxIdle(10); //最大idle数
bds.setMaxWait(1000*60); //超时回收时间
DataSourceConnectionFactory(bds); //得到连接工厂
java/sql/Connection.java.html" target="_blank"&Connection
conn=fac.createConnection(); //从池中获得连接
conn.close(); //释放连接,回到池中
//销毁连接池
bds.close();
请自行处理操作中的各种异常。
四、扑克牌的生成
  游戏中需要为用户生成随机的扑克牌,首先我们需要初始化一副牌,放到一个Hashmap中,每张牌以一个字节表示,高为代表花色,的为代表数字,生成整副牌:
cards = new
i = 0; i &4; i++) {
m = 0; m & 13; m++) {
tmp=((byte
)(i)&&4)|((byte
)m); //使用位操作构造一张牌
cards.put(new
java/lang/Integer.java.html" target="_blank"&Integer
(i * 13 + m),new
java/lang/Byte.java.html" target="_blank"&Byte
cards.put(new
java/lang/Integer.java.html" target="_blank"&Integer
java/lang/Byte.java.html" target="_blank"&Byte
)0x4d)); //大王
cards.put(new
java/lang/Integer.java.html" target="_blank"&Integer
java/lang/Byte.java.html" target="_blank"&Byte
)0x4e)); //小王
 如何随机地得到其中的N张牌呢?我们的做法是生成一个0-55的随机数,用这个随机数作主键从Hashmap中获得对象,取得之后,把该对象从队列中删
除,以免重复取得。由于java中的随机数是根据时间生成的,所以有可能导致用户得到的牌不够散,每个用户都摸到一条龙岂不是笑话?所以在生成随机数的时
候我们加入了一个大素数来作运算:
cardId=new
java/lang/Long.java.html" target="_blank"&Long
((java/lang/Math.java.html" target="_blank"&Math
.round(java/lang/Math.java.html" target="_blank"&Math
.random() * 87) % 55)).intvalue();
通过修改这个大素数,可以控制某个用户的牌比较好。
 实际上本系统并没有复杂的线程管理,但是我想提供一个控制台让管理员可以管理游戏主线程,可以让它停止、中段、恢复、重启动,本来的设计是管理员通过与
线程A打交道,通过A去管理主线程B,但是熟悉java线程的朋友都知道,线程互相管理基本上就是不实际的,举个最简单的例子,A如何销毁B?也许你会说
调用B的destroy()方法就好了,网上很多讲解java线程的资料也确实是这么说的,但是他们都是鬼扯的,自己去看看java源代码
吧,Thread.destroy()方法的实际代码如下:
java/lang/NoSuchMethodError.java.html" target="_blank"&NoSuchMethodError
  事实真相是,Thread.destroy()方法自始至终就没有被实现过。所有写文章,教别人用这个方法销毁线程的人,都去撞墙吧,丢人丢大了。
  最好的办法是A负责生成一个B并且启动它,然后B自己管理生存周期,A和B通过使用可共享的方法来通信,这是sun推荐的做法。
六、异步消息
 用户玩牌的过程中,有很多东西需要记录下来,比如记录用户的积分、等级变化,记录玩牌日志供数据统计等,当用户数量很多的时候,在数据库中记录这些信息
会很耗费资源,用户玩了一局之后会可能会等待很长时间。解决这个问题的方法是利用J2EE的消息bean来提供异步通信的机制,需要记录数据的时候,系统
会封装一个值对象,发送给J2EE容器,这个操作是很快的,完成之后就返回,用户可以继续操作,不用关心消息何时被处理。
  J2EE的消息框架具备如下特征:
  ◇ 消息一定会被阅读,而且只阅读一次。JMS框架有自己的算法,把消息缓冲到硬盘,就算J2EE服务器死掉,消息也不会丢失。
  ◇ 系统采用点对点的Queue消息队列,可以保证同等优先级的消息先进先出。
 在Jboss 4.0中,部署消息Bean和Queue队列,都比weblogic 8.1来的容易,只需要在jboss.xml中声明消息目的地,如
果jboss发现该目的地不存在的话,会自动建立一个,实在很简单。关于消息bean的开发与部署,我有专门的文章描述(参见我的
blog:http://blog.csdn.net/bromon )。
七、启动与退出
  为了让系统具备让
人满意的性能,应该尽量多的重用对象,减少创建新对象。比如上面提到的消息发送,我们的操作是提供一个静态类,在系统启动的时候就初始化,保持与JMS服
务器的连接,系统发送消息的时候,不用再去查询JNDI和生成QueueConnectionFactory,这样可以提高系统响应速度。
 在数据库连接池的问题上,我们也采用同样的操作,启动的时候初始化N个连接。但是如果在关闭进程的时候不做任何操作,会导致JMS抛出socket异
常,虽然没什么大的影响,但总显得不专业,而且池中的连接不被释放的话,也可能导致问题。最好能够让系统像jboss等控制台程序一样,ctrl+c之后
能够执行操作,释放资源再退出。我们可以通过给进程/线程加上一个Hook来实现,windows程序员应该对这个非常熟悉。
Hook应该是一个线程方法,如下:
Hook extends
java/lang/Thread.java.html" target="_blank"&Thread
//释放数据库连接,销毁连接池
//关闭与JMS的连接
在主线程中加入:
java/lang/Runtime.java.html" target="_blank"&Runtime
.getRuntime().addShutdownHook(new
  那么进程/线程会在退出的时候执行Hook的run方法,清理资源。
浏览 19642
浏览: 319472 次
来自: 苏州
想问问,能监测服务是否挂掉吗?
你好,最近在搭一个游戏服务器,能加好友请教下吗?1538863 ...
没打完就发表了?为啥要这样设置?【游戏中需要传递用户的积分,这 ...
楼主您好。请教为啥要这样设计?
楼主,能够提供更具体的文档或者指导吗?我想搭建一个服务端,非常 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 java做一个游戏 的文章

 

随机推荐