仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1216|回复: 20
打印 上一主题 下一主题

[学习教程] JAVA编程:用Java写一个舆图编纂器

[复制链接]
透明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:41:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
java是一种面向对象的编程语言,优点是可移植性比较高,最初设计时就是本着一次编写到处执行设计的。可以开发各种应用程序和游戏,不过速度没有c++快,所以一般是不用java来编写应用程序和电脑游戏。用Java写一个舆图编纂器

记得媒体在采访C++之父的时分,他说作为程序员,要信任本人可以办理已了解的任何事变.
换句话说:您能够办理任何成绩,只需想得分明

实际成绩:开辟一个基于地砖的二维游戏的舆图编纂器,请求天生两个binary文件,各包括一个二维数组,*.map寄存地砖,花花卉草甚么的.*.item放道具,好比某个点大概会触发一个事务.很复杂,任意写.看到这里您已大抵分明程序的全体布局.
盘算机言语:java.

要了解事务必需剖析

开端来看,舆图编纂器:天生某种情势的多少数组,不管是哪一种情势的数组,你的目标:
天生数组.舆图是实践是一个(x,y)的二维坐标系,这很简单让人接洽到:亦不管

我筹办把设置两个程序界面(主界面/Map界面),Java的结构办理器欠好玩弄,不如分隔两个class,主界面用JBuilder主动创立的Application模块(带菜单).Map界面本人写,也是JFrame,类之间互相传送动静,map界面将在程序入手下手时被初始化,也能够在程序从主界面中初始化(有成绩)

构建程序
以下内容为程序代码:

basePanel.setLayout(newGridLayout(5,5));
for(bytei=0;i<9;i++){
baseMapButton=new
((Icon)pic.getImageIcon(i,0));
baseMapButton.setButtonTitle(i);
baseMapButton.addActionListener(buttonListener);
basePanel.add(baseMapButton);
}

itemPanel.setLayout(newGridLayout(5,5));
for(bytei=0;i<3;i++){
itemMapButton=newMapButton((Icon)pic.getImageIcon(i,1));
itemMapButton.setButtonTitle(i);
itemMapButton.addActionListener(buttonListener1);
itemPanel.add(itemMapButton);
}

tabbedPane.addTab("Bases",basePanel);
tabbedPane.addTab("Items",itemPanel);
contentPane.add(tabbedPane,BorderLayout.CENTER);




有两个中央要注释:
MapButton:本人写的一个类

以下内容为程序代码:

importjavax.swing.Icon;
importjavax.swing.JButton;

publicclassMapButtonextendsJButton{

publicMapButton(){
super();

}

publicMapButton(Stringarg0){
super(arg0);
}

publicMapButton(Actionarg0){
super(arg0);
}

publicMapButton(Iconarg0){
super(arg0);
}

publicMapButton(Stringarg0,Iconarg1){
super(arg0,arg1);
}

publicbytewidth,height;

//publicpic_w,pic_y;

publicvoidsetButtonTitle(bytew,byteh){
width=w;
height=h;
}

publicvoidsetButtonTitle(bytew){
width=w;
}

publicbytegetButtonWidth(){
returnwidth;
}

publicbytegetButtonHeight(){
returnheight;
}
}




pic:本人写的MapPic类的intance:

以下内容为程序代码:

packagecom.nenghe.mapeditor;

importjavax.swing.ImageIcon;

publicclassMapPic{
ImageIcon[]baseimages;

ImageIcon[]itemimages;

ImageIconimage1;

publicMapPic(){
init();
}

publicvoidinit(){
baseimages=newImageIcon[9];
baseimages[0]=newImageIcon(MapPic.class.getResource("m1.png");
baseimages[1]=newImageIcon(MapPic.class.getResource("m2.png");
baseimages[2]=newImageIcon(MapPic.class.getResource("m3.png");
baseimages[3]=newImageIcon(MapPic.class.getResource("m4.png");
baseimages[4]=newImageIcon(MapPic.class.getResource("m5.png");
baseimages[5]=newImageIcon(MapPic.class.getResource("m6.png");
baseimages[6]=newImageIcon(MapPic.class.getResource("m7.png");
baseimages[7]=newImageIcon(MapPic.class.getResource("m8.png");
baseimages[8]=newImageIcon(MapPic.class.getResource("m9.png");

itemimages=newImageIcon[3];
itemimages[0]=newImageIcon(MapPic.class.getResource("error.png");
itemimages[1]=newImageIcon(MapPic.class.getResource("i1.png");
itemimages[2]=newImageIcon(MapPic.class.getResource("i2.png");
}

publicImageIcongetImageIcon(intx,intflags){
if(flags==0){
returnbaseimages[x];
}elseif(flags==1){
returnitemimages[x];
}
returnnull;
}
}




写MapButton在于处置事务的时分能够正确的取得按钮的坐标,忘了说了,Map界面中我是用按钮取代舆图方格的.这是很简单想到的,最笨也是最省力的举措

pic独自写好改,甚么时分内容改动了,很简单改,硬要合写没有也任意.

上面就是事务了
有两个事务要处置,第一个是按钮事务,第二个菜单事务
按钮事务我套用如许的布局

以下内容为程序代码:

ActionListenerbuttonListener=newActionListener(){
publicvoidactionPerformed(ActionEvente){
//System.out.println(e.toString());
MapButtonpressedButton=(MapButton)e.getSource();

MapDraw.temp_x=pressedButton.getButtonWidth();
MapDraw.temp_y=0;
//System.out.println(MapDraw.temp_x+""+MapDraw.temp_y);
}
};
....

baseMapButton.addActionListener(buttonListener);




JBuilder中把按钮事务事务独自天生一个类,我不分明,看不懂.真的很深邃.
菜单事务模子JBuilder本人加的.overwrite

以下内容为程序代码:

publicvoid*_actionPerformed(ActionEvente){...}




用两其中间值从主界面向map界面传送按了甚么:

这里是map界面中的按钮的事务处置程序

以下内容为程序代码:

ActionListenerbuttonListener=newActionListener(){
publicvoidactionPerformed(ActionEvente){
MapButtonpressedButton=(MapButton)e.getSource();
pressedWidth=pressedButton.getButtonWidth();
pressedHeight=pressedButton.getButtonHeight();

if(temp_y==0){
if(item[pressedWidth][pressedHeight]!=0){
item[pressedWidth][pressedHeight]=0;
jfm.showMessage("这里的道具已被置空!
Theitemhasbeennull!";
}
map[pressedWidth][pressedHeight]=temp_x;
pressedButton.setIcon((Icon)pic.getImageIcon(temp_x,
temp_y));
}else{
if(map[pressedWidth][pressedHeight]==0){
jfm.showMessage("道具不克不及放在这!
Notputitematthispoint!";
}else{
if(temp_x==0){
bytevalue=map[pressedWidth][pressedHeight];
item[pressedWidth][pressedHeight]=0;
pressedButton.setIcon((Icon)pic.getImageIcon(
value,0));
}else{
pressedButton.setIcon((Icon)pic.getImageIcon(
temp_x,temp_y));
item[pressedWidth][pressedHeight]=temp_x;
}
}
}
}
};



叨教两其中间值是甚么呢?一览无余哦

最初是天生map

以下内容为程序代码:

publicvoidcreateMap()throwsIOException{
try{
DataOutputStreammapbinaryfile=newDataOutputStream(
newFileOutputStream(MapEditor.filename+"map");

DataOutputStreamitembinaryfile=newDataOutputStream(
newFileOutputStream(MapEditor.filename+"item");

mapbinaryfile.writeByte(width);
mapbinaryfile.writeByte(height);

for(bytei=0;i<height;i++)
for(bytej=0;j<width;j++){
//System.out.println(i+""+j);
bytemapvalue=map[j];
byteitemvalue=item[j];

if(mapvalue!=0){
System.out.println(i+""+j+""+mapvalue);
mapbinaryfile.writeByte(j);
mapbinaryfile.writeByte(i);
mapbinaryfile.writeByte(mapvalue);
}
if(itemvalue!=0){
itembinaryfile.writeByte(j);//x
itembinaryfile.writeByte(i);//y
itembinaryfile.writeByte(itemvalue);
}
}

mapbinaryfile.close();
itembinaryfile.close();
}catch(EOFExceptione){
System.err.println("Error";
}
}




停止!
就这么复杂!可是成绩良多良多.都不克不及叫程序,任意写的玩的哦
必要源代码的伴侣请留下email,要指出bug哦
亦大概msn交换:chinuxman@hotmail.com


因为能用到多少功能就用多少,不能用就不用!总的来说:要简单要性能好,可以不用框架。你说java复杂,就是因为你把java(j2ee)与这些框架混在了一起。
分手快乐 该用户已被删除
沙发
发表于 2015-1-21 12:47:29 | 只看该作者
是一种使用者不需花费很多时间学习的语言
admin 该用户已被删除
板凳
发表于 2015-1-25 15:24:44 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
只想知道 该用户已被删除
地板
发表于 2015-1-30 23:55:18 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
老尸 该用户已被删除
5#
发表于 2015-2-6 16:18:50 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
爱飞 该用户已被删除
6#
发表于 2015-2-8 20:33:22 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
透明 该用户已被删除
7#
 楼主| 发表于 2015-2-15 23:10:43 | 只看该作者
是一种为 Internet发展的计算机语言
若天明 该用户已被删除
8#
发表于 2015-2-25 20:46:09 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
莫相离 该用户已被删除
9#
发表于 2015-3-8 03:00:49 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
深爱那片海 该用户已被删除
10#
发表于 2015-3-15 17:43:27 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
再现理想 该用户已被删除
11#
发表于 2015-3-17 05:09:10 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
柔情似水 该用户已被删除
12#
发表于 2015-3-18 14:03:50 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
冷月葬花魂 该用户已被删除
13#
发表于 2015-3-20 06:58:10 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
若相依 该用户已被删除
14#
发表于 2015-3-20 12:43:09 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
15#
发表于 2015-3-20 15:02:13 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
飘飘悠悠 该用户已被删除
16#
发表于 2015-3-25 11:17:59 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
愤怒的大鸟 该用户已被删除
17#
发表于 2015-3-28 18:17:02 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
蒙在股里 该用户已被删除
18#
发表于 2015-4-1 04:07:10 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
小魔女 该用户已被删除
19#
发表于 2015-4-7 14:29:14 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
变相怪杰 该用户已被删除
20#
发表于 2015-4-10 11:51:17 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 07:29

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表