新手小项目-java坦克大战

1.界面(图形化-前端部分)

  • 图形化用于交互,不管是用文字形式给用户选择,还是图形方式式的选择都是一种交互方式。在java中如果我们需要用到图形界面,就得想到GUI(Graphic user interface),那么我们需要用到什么,就直接去查看API(图形化显示能让我们做完项目后将结果看得舒服,而不是全部都是代码)
  • 要做GUI,就要想到java中的AWT(abstract windows toolkit),我们写图形化都需要用到这个类库。那为什么叫抽象窗口呢?因为java是跨平台的,java编写的界面源程序最后在计算机的实现可能由其他语言来最终完成。(AWT的初衷是与平台无关性,意思就是界面在任何操作系统上显示的长宽等格局都不会发生变化,保持审美。但是AWT在设计的时候用了关于操作系统的相关东西,没有做到完全的跨平台。AWT的运行没有用到java虚拟机。但是swing开发包用到了java虚拟机,它是完全跨平台的,所以现在都用swing,但是它的基础知识还是AWT)
  • 说到AWT我们就要理解component与container的的区别,见API。component是一切可显示的东西,container继承了component,所以container也是可显示的东西,但是container又有一个特性,可以包含一切可见的东西。所以container可以容纳conponent,也可以容纳它自己。(知道前端工程师知识的也应该能理解container与conponent制之间的区别)

2.编写窗口windows

  • 我们需要知道窗口显示了哪些东西。百度搜索这个小游戏,或者上小游戏网站玩几次就可以知道游戏规则了http://www.7k7k.com/swf/129505.htm
  • 我们可以看到游戏界面和游戏玩法
  • 先画一个窗口,在编写一个窗口时我们所需要的方法都可以在Frame类中copy下来,以防自己写错。我们需要的窗口:黑底,边框可以随着拖动而改变,设置窗口大小,窗口上方写着tankgame(总共四个要求)
  • 在windows类中我们可以找到这些方法:(1)setSize(int width, int height)(2)setVisible(boolean b)
  • 在Frame类中我们可以找到这些方法:(1)setTitle(String title)(2)setResizable(boolean resizable) (3) setBackground(Color bgColor)
  • 编写的程序遇到的问题(1)应该进入java文件所在的目录。(2)数据类型的问题(见我的java数据类型)
  •  1 import java.awt.*;
     2 public class TankGame extends Frame {
     3   public void showFrame(){
     4     setBackground(Color.black);
     5     setTitle("tankgame");
     6     setResizable(true);
     7     setVisible(true);
     8     setSize(514,450);
     9
    10
    11
    12   }
    13
    14
    15
    16   public static void main(String[] args){
    17
    18
    19     new TankGame().showFrame();
    20
    21
    22   }
    23   

  • 关掉这个界面需要在命令行输入ctrl+c(还没进行事件处理,就像你为别人创造了一个东西,但是你还没有为别人删除一个东西的能力,那个叉叉只是一个图像,没有任何意义,跟界面上的每个图像一样,都是图像)
  • 计算机屏幕的坐标是从左上方开始的,x轴朝上,y轴朝下
  • 但是这个窗口我们并不满意,因为这个界面跟我们看到的不一样(如下图)
  • 所以我们需要用到panel(这个容器需要跟Frame一起使用才能显示出来)见container的add方法
  • 我们可以通过panel一些方法(从container和component找到)。设置大小,背景颜色,可见的(1)setBackground(Color c)(2)setSize(int width, int height)(3)setVisible(boolean b)
  • 个人的代码只是一种测试,不是完全按照要求来
  •  1 import java.awt.*;
     2 public class TankGame extends Frame {
     3   public void showFrame(){
     4     setBackground(Color.black);
     5     setTitle("tankgame");
     6     setResizable(true);
     7     setVisible(true);
     8     setSize(514,450);
     9
    10
    11
    12   }
    13
    14
    15
    16   public static void main(String[] args){
    17
    18
    19     TankGame tankgame=new TankGame();
    20     tankgame.showFrame();
    21     TankGameTwo tankgametwo=new TankGameTwo();
    22     tankgametwo.showPanel();
    23     tankgame.add(tankgametwo);
    24
    25
    26   }
    27
    28
    29 }
    30  class TankGameTwo extends Panel{
    31    void showPanel(){
    32     setBackground(Color.orange);
    33     setSize(90,90);
    34     setVisible(true);
    35   }
    36
    37
    38
    39 }
  • 如果按照这个代码,我们会发现,我们根本看不见frame的颜色,我们看见的颜色是panel的颜色(如果你晃动边框,frame的颜色会显示出来)
  • 解决办法在两个类中的方法中调用一个方法(因为默认有布局管理器,我们设置大小对他们就没有用了,所以我们需要手动地设置,取消布局管理器)
  •  1 import java.awt.*;
     2 public class TankGame extends Frame {
     3   public void showFrame(){
     4     setBackground(Color.gray);
     5     setTitle("tankgame");
     6     setResizable(true);
     7     setVisible(true);
     8     setSize(514,450);
     9     setLayout(null);
    10
    11
    12
    13   }
    14
    15
    16
    17   public static void main(String[] args){
    18
    19
    20     TankGame tankgame=new TankGame();
    21     tankgame.showFrame();
    22     TankGameTwo tankgametwo=new TankGameTwo();
    23     tankgametwo.showPanel();
    24     tankgame.add(tankgametwo);
    25
    26
    27   }
    28
    29
    30 }
    31  class TankGameTwo extends Panel{
    32    void showPanel(){
    33     setBackground(Color.black);
    34     setSize(415,415);
    35     setVisible(true);
    36     setLayout(null);
    37   }
    38
    39
    40
    41 }
  • 那么怎么使panel相对于Frame往中间去一点呢,有个设置x,y的方法,同时设置大小
  • 界面做的有点丑,这个需要自己花很多次调整,我没有什么工具来慢慢调整的(或者对照网页上游戏的界面来设置,截屏就知道大小了,前端工程师经常这样做)
  • 那么问题来了怎么使panel跟着container改动呢?这种方法由布局管理器来实现
  • 这个接口下有很多种布局管理器
  • 这样就可以让panle随着Frame动而不改变整体布局(这种逻辑关系是frame用弩据管理器来布局panel)
  • 未完,,,,,,

3.窗口图片的处理(不是指窗口的背景)

  • 在界面上我们可以看出我们需要哪些图片,截图就行。

4.动画的处理(人工动画+自动动画)

5.动画的路径

时间: 2024-10-12 16:55:30

新手小项目-java坦克大战的相关文章

(java项目)坦克大战 2.0

这个版本,只能算是一个雏形,把最基本的东西给完成了,不过,后面可添加的也不多.有一点,还是想去实现,那就是敌方坦克自己寻找对手!也就是游戏AI. emmm, 什么时候可以了解一下这个AI.顺便学学python. 这个帖子只是为了贴上代码,对后续的代码作为优化和添加游戏AI做准备的. 1. 各类接口 package Event; /* *具有攻击力的接口 */ public interface Attackable { /* * 校验具有攻击力的实物, 和, 具有被攻击的实物,是否能撞在一起 *

Java坦克大战游戏源代码

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

Java坦克大战(一)

接下来的几篇博客,想记录一下通过学习坦克大战项目来循序渐进的学习Java基础.主要是为了巩固基础知识,当然学习编程重要的还是多敲,问题通常是在敲代码的过程中发现的,积累也是在敲代码中寻求的经验.这个坦克大战项目是利用Java图形界面来做的,比较简陋.但是,在不断的往里面加功能的时候,可以学到很多知识,最重要的还是体会Java的面向对象编程思想.下面介绍几个用的上的Demo,最后是坦克大战的1.0版本. Demo1:回顾事件处理机制 /* * 功能:事件处理机制(ActionListener的应用

Java坦克大战(三)

关于这个坦克大战的项目是在学习Java基础的时候,拿来练习的最近看到这些代码,感觉很亲切,就把他们都复制下来,编辑成博客.回首看去,Java基础的学习确实应该建立在找项目练习上,这样才能将学到的基础知识用到实际当中,不然你知道什么是面向对象编程,什么是线程,什么是死锁,概念都了解了一大堆,等到实际应用的时候,还是力不从心.初学者千万不要灰心,真心是敲着敲着就有感觉了.下面还是循序渐进的介绍这个项目的几个版本,注释我写的很详细,新功能添加后部分代码有改动,如果感兴趣,可以看前几篇博客. 坦克大战(

Java坦克大战(四)

这是我的坦克游戏大战的最后一版,里面添加很多新的功能.这个坦克大战的有很多不足之处,但是对于初学者来说依然是一个很好的练习项目,从中我们可以学习Java基础知识,将知识与项目结合,学习面向对象编程思想,最主要的是编程的逻辑练习,代码往往不像是写文章从上到下一气呵成完成,中间很可能为增加一个功能来添加一个类一个方法等,中间有很多细节需要我们考虑.文章最后会附加该坦克大战涉及的相关素材. 功能: 1.防止坦克重叠 2.可以分关(闪烁效果) 3.记录成绩(小型游戏都是写在文件中) 4.存盘退出,可以记

个人小项目——Java实现WC功能

这个小项目用了两种方法解决了该功能的实现. 1.两种方法的功能和具体实现 代码可以成功运行,但是有一些情况考虑不完整,一种方法用了FileOutputStream输出流,为了解决空格无法统计问题,对文本实现一次重写,用String类的replace方法将空格用其他字符替换,然后可以实现字母数,单词数和行数的统计.另一种方法没有重新写文本,直接在缓冲区中处理文本,除上面三个之外还统计了空格数,字符总数和标点符号数. 2.优缺点比较 方法一可以统计出空行,而方法二由于是使用bufferedReade

JAVA坦克大战项目练习日4

1.java中键盘事件的getKeyCode() getKeyCode()键盘上每一个按钮都有对应码(Code),可用来查知用户按了什么键, 如[Shift]键code为16.利用getKeyCode()方法就可以得知这个码,不过读者要注意,这个方法在keyTyped() 上是无法检测出来的,因为keyTyped()只管用户输入的字符,而不会管到键盘的对应码.因此你一定要将getKeyCode()方法写keyPressed()或keyReleased()方法中才会有效,因为这两个方法是处理比较低

JAVA坦克大战项目练习日3

1.如果调用repaint(),则相当于先自动调用update(),再自动调用paint()方法. 2. public abstract boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer)绘制指定图像中已缩放到适合指定矩形内部的图像. 图像绘制在此图形上下文坐标空间的指定矩形内部,并且如果需要,则进行缩放.透明像素不影响该处已存在的像素. 此方法在任何情况下都立刻返回,

Java坦克大战游戏开发

本文介绍: 本文分为多个部分,间断性更新.主要涉及到 面向对象思想,Java GUI绘图,多线程,IO,数据库相关知识. 注:本文内容是整合了韩顺平老师的java项目(代码部分和韩顺平老师有不同)然后加上自己的一些思考写得,本文讲的有些累述,但有提示,如若基础扎实可以直接跳过,一部分面向仅仅学习了JavaSE的语法与面向对象的,一部分是面向已经掌握了GUI,多线程,IO,数据库相关知识的. 本人认为该项目可以很好地加深对面向对象思想的理解,加强对Java各个基础知识的巩固. 基本要求: 观看并且