Java坦克大战游戏开发

  本文介绍:

  本文分为多个部分,间断性更新。主要涉及到 面向对象思想,Java GUI绘图,多线程,IO,数据库相关知识。

  注:本文内容是整合了韩顺平老师的java项目(代码部分和韩顺平老师有不同)然后加上自己的一些思考写得,本文讲的有些累述,但有提示,如若基础扎实可以直接跳过,一部分面向仅仅学习了JavaSE的语法与面向对象的,一部分是面向已经掌握了GUI,多线程,IO,数据库相关知识的。

  本人认为该项目可以很好地加深对面向对象思想的理解,加强对Java各个基础知识的巩固。

  基本要求:

    观看并且实践本文,基本要求为:至少学习了一门面向对象语言,对面向对象的一些基础(关键字和一些基本概念)扯得清楚,并且,如若你在观看并打出代码时,必须每一句话,都知道为什么要这样做,为什么不那样做,这么做的含义是什么,有什么好处...等等。而不是说这样做可以达到目的,至于为什么根本就不去理解,那么我认为这样做完一个项目会很辛苦,但或许没什么收获!

  项目正文:

    面向对象思想,我是并不打算讲这部分内容的,所以我的第一部分的正文和代码应该是讲述GUI绘图技术的!

  GUI绘图技术(已经明白的可以直接跳过进入下一部分或者温习一下):

    要制作一个坦克游戏的第一步,应该就是制作一个窗口!而Java中制作窗口的方式很多,在这里我们选取JFrame。

    第一步:如何制作一个窗口(最简易的制作窗口)

 1 /**
 2  * 目的:学习如何创建一个窗口
 3  * @author HP
 4  *
 5  */
 6 public class Test01 extends JFrame{
 7     //主函数
 8     public static void main (String[] args) {
 9         new Test01();
10     }
11
12     //构造方法初始化
13     public Test01 () {
14         this.setSize(400,300);
15         this.setVisible(true);
16     }
17 }

    代码讲解:

      在这里,我们采用了继承JFrame类的方法来创建窗口,Test01继承了JFrame类,那么,也就是一个窗口类的子类。我们给它定义一个概念那就是,它应该也是一个窗口类哦。虽然名字和窗口类好像没什么关系。但事实上它继承了JFrame的所有方法和属性。

    问题1 : 为何不直接在这个类中主函数中创建一个窗口对象进而创建一个窗口,而要采用继承之后再创建的“笨方法”呢?

      因为我们并不能修改JFrame类中的代码,故而,我们也就不能再窗口类中增添我们各种各样的特性来满足我们对于窗口类的要求了,所以我们使用一个 我的窗口 MyFrame 的类(在这里也就是Test01)来满足我们自己的需求啦!

    问题2.:为何不使用一个创建窗口的函数装下现在在构造函数里代码,使得代码更具有意义呢?

      因为这是我们自己的窗口(MyFrame),也就是说我使用这一次就不需要使用了(定制窗口),并且,我们在创建自己的窗口的时候,是需要一创建对象就直接出现窗口的。因为我们自己的需求已经很明确了,并且这个类并不为其他人服务。

============================================================================================================================================================================

未完待续!

============================================================================================================================================================================

    

原文地址:https://www.cnblogs.com/vizdl/p/9097845.html

时间: 2024-08-29 05:24:26

Java坦克大战游戏开发的相关文章

Java坦克大战游戏源代码

转载自: http://blog.csdn.net/java_cxrs/article/details/3860870 经过几天的练习和研究终于自己能写出坦克大战游戏了,写完这个程序后感觉收获了很多东西,对JAVA的知识又有了一定的增长,接下来还准备继续写几个小项目来练习J2SE 由于代码太长就不发在博客里了,我上传到了资源下载里,有需要的朋友大家可以去下载 下载地址:http://download.csdn.net/source/988654

HTML5移动开发之路(8)——坦克大战游戏2

本文为 兄弟连IT教育 机构官方 HTML5培训 教程,主要介绍:HTML5移动开发之路(8)--坦克大战游戏2 在上一篇文章中我们已经画出了自己的坦克,并且可以控制自己的坦克移动,我们继续接着上一篇来实现我们的坦克大战游戏吧. 一.将JS文件分离出来 使用OO的思想,我们已经对坦克进行了封装,对画坦克也进行了封装,下面我们将这两个对象提取到外部的js文件中,文件内容如下: [javascript] view plain copy print? //定义一个Hero类(后面还要改进) //x表示

【Java_项目篇<1>】--JAVA实现坦克大战游戏--赋予敌人行动和攻击(五)

前期相关文章 [Java_项目篇<1>]–JAVA实现坦克大战游戏–画出坦克(一) [Java_项目篇<1>]–JAVA实现坦克大战游戏–坦克移动+添加敌方坦克(二) [Java_项目篇<1>]–JAVA实现坦克大战游戏–坦克发射子弹(三) [Java_项目篇<1>]–JAVA实现坦克大战游戏–子弹连发+爆炸效果(四) 一.任务需求 赋予敌人行动和攻击. 二.思路 - 敌人行动 1.需要把EnemyTank做成线程类实现Runnable接口. run方法中,

HTML5移动开发之路(7)——坦克大战游戏1

本文为 兄弟连IT教育 机构官方 HTML5培训 教程,主要介绍:HTML5移动开发之路(7)--坦克大战游戏1 上一篇中我们介绍了关于Canvas的基础知识,用Canvas绘制各种图形和图片,在上一篇的基础上我们来做一个基于HTML5的坦克大战游戏,下面我们开始吧 一.用Canvas画出我们的坦克 我们设计的坦克结构如下图所示,如果有的朋友有更好的设计,希望分享和交流一下. 如上图所示,我们的坦克基本上是由三个矩形和一个圆形一个线段组成,每个部件的尺寸进行了标记,单位为px,下面我们用上一篇中

HTML5移动开发之路(9)——坦克大战游戏3

本文为 兄弟连IT教育 机构官方 HTML5培训 教程,主要介绍:HTML5移动开发之路(9)--坦克大战游戏3 上一篇我们创建了敌人的坦克和自己的坦克,接下来就应该让坦克发子弹了,我们下面来看一下如何让我们的坦克发出子弹. 前面我们用面向对象的思想对Tank进行了封装,又利用对象冒充实现了我们的坦克和敌人的坦克,仿照这种方式我们是不是也应该封装一个Bullet,答案是肯定的.好吧,那么我们再想想这个Bullet"类"都应该封装什么东西呢?位置应该有吧.子弹飞行的方向应该有吧.飞行的速

3D坦克大战游戏iOS源码

3D坦克大战游戏源码,该游戏是基于xcode 4.3,ios sdk 5.1开发.在xcode4.3.3上完美无报错.兼容ios4.3-ios6.0 ,一款ios平台上难得的3D坦克大战游戏源码,有20张不同的作战地图.通过左下角方向键和重力感应来控制坦克运行,点击右下角控制赶快开炮. 源码下载: http://code.662p.com/view/6309.html <ignore_js_op> <ignore_js_op> <ignore_js_op> <ig

坦克大战游戏1.0版

这是坦克大战游戏1.0版,以后会陆陆续续的完成... 准备素材(itank.jpg): 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>坦克游戏1.0版</title> </head> <body onkeydown="doSomething(event)"

基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(下)

在飞机大战游戏开发中遇到的问题和解决方法: 1.在添加菜单时,我要添加一个有背景的菜单,需要在菜单pMenu中添加一个图片精灵,结果编译过了但是运行出错,如下图: 查了很多资料,调试了很长时间,整个人都要崩溃了. 最后发现引擎中CCMenu::itemForTouch函数中有遍历子节点的行为,但是循环中没有判断子节点类型是否为CCMenuItem.如图:码,这样一来,加入到pMenu中的图片精灵被当作菜单项取了出来使用,导致报错.老版本的果然又不完善的地方,整个人都不好了...果断修改引擎里的源

基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(中)

接<基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(上)> 三.代码分析 1.界面初始化 1 bool PlaneWarGame::init() 2 { 3 bool bRet = false; 4 do 5 { 6 CC_BREAK_IF(! CCLayer::init()); 7 8 _size = CCDirector::sharedDirector()->getWinSize(); 9 10 // 设置触摸可用 11 this->setIsTouchEnabled