|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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)与这些框架混在了一起。 |
|