您的位置 首页 java

第1回:爪哇是条不归路,坦克大战第一步

首先,单纯的学习一门语言是灰常无聊的,

所以为了陶冶节操,

我们将通过一个 坦克大战 的项目来了解简单的 Java 开发。

既然是坦克大战,

第一步必须是先把“坦克”建好,

在接下来的文章里再介绍“大战”的内容。

初步规划,

坦克大战1.0为单人单机版本。

坦克大战2.0为双人单机版本。

坦克大战3.0为多人联网版本。

坦克大战4.0为3D效果的版本。

那么,下面就开始万里长征第一步:

如何建好一个坦克。

在建造坦克之前,

我们先要建好安置坦克的地方。

那么在项目中就体现为一块长方体的空旷场地。

当一个新的工程建成后,

我们把它命名为TankWar0.1,

里面应该有一个简单的java文件。

既然是坦克大战,那么我们就把它命名为TankClient

那么翻译成中文就是 坦克客户端。

听起来很高端有没有?

其实随便叫什么啦,名字只是一个代号。

在java里面,对文件的命名没有太多的规范,

但是有几点约定俗成的好习惯在这里介绍给大家。

1.尽量使用英语。

这个基本是很多老师都有讲过的,

当时我也非常不解为什么要用英语,

用中文多好啊,

还能顺便宣扬我们优秀的传统文化,

让全世界都学中国话。

但是后来我渐渐发现了问题所在。

举个栗子。(不准吃 – -)

坦克 坦克一只 = new 坦克();

坦克一只.setHeight(12);

坦克一只.setWidth(13);

坦克一只.发射();

感觉有一种嚼着大蒜和咖啡的感觉。

然后我又想,那用汉语拼音不就可以了吗。

那么再举一个栗子。

Tank tank = new Tank();

tank.name = “Zheng Er”;

对呀,这样不是很好吗?

好个毛线。

那么这个坦克的名字是叫郑二还是叫正二呢?

这就是个问题了。

所以综上所述,

还是建议大家都采用英语单词命名的模式。

1.骆驼式命名法

骆驼 式命名法的命名规则可视为一种惯例,

并无绝对与强制,

为的是增加识别和可读性。

——BaiduBaike

一般来说,类的名称采用首字母大写的命名规范。

举一袋栗子。

ZhengEr

ZhengZhiChun

ZhengBuChun

而具体事例和方法的名称采用驼峰规则。

神马是驼峰?

没骑过骆驼,

总归是见过骆驼跑的吧。

驼峰就是这个样子的。

———–+———————+——————–+———————–

———+–+——————+-+—————–+–+——————–

——-+——+————–+—–+————-+——+—————–

—–+———-+———-+———+———+———-+—————

—+————–+——+————-+—–+————–+————–

-+——————+–+—————–+-+——————+————

+———————+——————–+———————+————

虽然作为一只骆驼要长出这么标准的峰部是非常困难的。

但是这张图生动形象的告诉了我们什么是驼峰规则。

再举一袋栗子。

zhengEr

zhengZhiChun

zhengBuChun

这就是区别啦。

把这两者结合到实例里,

我们再次以郑二为例。

ZhengEr zhengEr = new ZhengEr();

zhengEr. characteristic = “He is a bt”;//假定characteristic 是郑二变量的属性之一

System.out.println(zhengEr.characteristic);

这样便非常的清晰啦。

那么下面进入到坦克大战的开发案例。(闲话扯得有点远 – – )

上回我们说到,这个项目叫做TankClient。

建好后,java文件内部应该是这个样子。

public class TankClient {

}

这光秃秃的一片,

叫我们的坦克如何落脚呢?

阿不,坦克没有脚。

这光秃秃的一片,

叫我们的坦克如何落轮呢?

我们需要一片巨大的坦克决斗场!

首先,先写好一个main方法,

public class TankClient {

public static void main(String[] args) {

}

}

这就相当于是奥运会的开幕式入口,

程序的所有运行过程,

都将从这个入口进入。

但是会不会被稀里糊涂的带出会场,

就不得而知了。

一般来说,

如果main方法里面的所有语句逻辑都执行完了,

java程序会自动退出。

但是如果想人为的退出程序,

可以使用以下代码。

System.exit(0);

那么这么零蛋是个什么意思呢?

如果

System.exit(+2);

那又会怎么样呢?

这个问题,其实我也不大清楚。

感兴趣的同学可以按住ctrl键在eclipse中点击该方法,

便会自动跳转到该方法的定义中,

仔细研究便可以知道具体status的含义。

在此我就介绍一下

System.exit(0);

System.exit(1);

return ;

dispose();

的区别。

System.exit(0)会把整个java虚拟机里的所有内容都停止。

简单来讲,连JVM都已经关闭了。所以也就是释放了所有的内存。

效果类似于,格式化。

而System.exit(1)或者说非0(比如说+2)表示非正常退出程序

而 return只是返回到上一层而已。

exit与之相比便是返回到了最高层。

而dispose()会把当前的窗口关闭,

是让当前component不再显示,

但是没有停止整个项目的进度。

效果类似于,删除。想拿出来的时候回收站里捡回来就行了。

一不小心又扯远了。

到现在连个场地还没建好。

那么下面开始建造场地啦~

坦克决斗场,走起!

要想要有一篇方形的决斗场,

自然而然的便要使用到java的Frame类。

当然,也可以使 JFrame 类。

至于两者有什么区别嘛。

简单来说,

Frame在awt里面,

JFrame在swing里面,

他们内容上的区别并不大,

Jframe好看罢了 – – 、

但是从深层次来说,

JFrame对Frame做了较大改进,

这就涉及到awt和swing纠缠不清的感情瓜葛了。

那么我们本着淳朴归真回归自然的态度,

采取Frame进行坦克大战开发。

public class TankClient extends Frame {

public static void main(String[] args) {

}

}

这样写,

java稳稳的会报错,

因为它不知道

Frame是个毛毛线。

所以还需要在头部引包。

import java.awt.*;

public class TankClient extends Frame {

public static void main(String[] args) {

}

}

这个引包的概念,就是引包的意思。

引进一个大包。

你可以把包里的东西取出来,然后再放进程序里,

比如:

import java.awt.frame;

也可以直接把一个包塞进去,

比如:

import java.awt.*;

理论上事推荐第一种方案,

条理清晰倒是其次,

主要是可以延长代码量,

鼠标滚了半天,

满眼整齐划一的import语句,

像是军训似的,

岂不是很炫!

但是考虑到汪海有点懒,

所以还是采用第二种方案。

万事俱备,下面可以开始码代码啦。

我们既然把TankClient作为了坦克大战的场地,

那么首先要新建一个TankClient来放置坦克。

import java.awt.*;

public class TankClient extends Frame {

public static void main(String[] args) {

TankClient tc = new TankClient();

this.setLocation(400, 300);//场地想要放在屏幕的什么位置,通过这个语句实现

this.setSize(800, 600);//编者译:setSize设置尺寸。

setVisible(true);//前面的只是规划蓝图,这句话才是揭幕的神圣时刻。

}

}

此时可以将项目存档,

命名为TankWar0.1即可。

一个好的编程习惯会让后期维护事半功倍。

简单的四行代码,

运行后便可以得到一篇长方形的空旷场地。

但是很快我们便会发现如此空旷的窗口无法实现关闭功能。

于是乎,我们需要在这里给程序添加一个监听:

this.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

通俗的翻译,

就是当你点击了关闭按钮的时候,程序知道你想让它做什么。

正如前面所说,main方法是个入口,

但是想像以下场景,

如果你有2件衣服,

1条裤子,

你会如何收拾?

显然是直接放在一起。

但是如果你是20件衣服10条裤子再加30来双袜子全家桶,

如果还是放在一起的话,

很难避免某天晕乎乎的抓着袜子就往身上穿的情形出现。

所以,封装便显得尤为重要。

衣服一个包,

裤子一个包,

袜子一个包,

某些强迫症还可以在上面贴上标签,

虽然看上去麻烦,

但是为以后的维护工作做了很好的铺垫。

所以我们的坦克大战也要这个样子。

import java.awt.*;

import java.awt.event.*;

public class TankClient extends Frame {

public void lauchFrame() {

this.setLocation(400, 300);

this.setSize(800, 600);

this.setTitle(“TankWar”);

this.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

this.setResizable(false);

setVisible(true);

}

public static void main(String[] args) {

TankClient tc = new TankClient();

tc.lauchFrame();

}

}

封装好了后,

条理清晰的main方法让人一目了然。

“哦,新建了个坦克基地,”

“哦,坦克基地搭好了框架。”

只要看main方法的几个方法名便可以知道具体的程序进展。

此刻便体现了上文讲到的命名规范是多么的重要。

而如果debug过程中出现了问题,

直接按住ctrl点击方法名便可以立即跳转,

实乃是方便之际,

居家旅行,杀人越货,必备良药。

将项目复制一份,

并且改名为TankWar0.2,

效果图如下:

那么,

这便是坦克大战的第一个步骤,

文章来源:智云一二三科技

文章标题:第1回:爪哇是条不归路,坦克大战第一步

文章地址:https://www.zhihuclub.com/188099.shtml

关于作者: 智云科技

热门文章

网站地图