相信大家小时候一定玩过坦克大战游戏,躲避敌方坦克,炸毁敌方坦克,不断向前进攻直逼敌方基地…这次,我们来实现一个简单版的坦克大战,我想学Java的人都有想到以前的按键手机里那菜单点开“Java”,里面很多游戏可以玩,自己心中也有做个游戏的念头,所以选择一个项目边学习新知识边运用也是不错的选择,而坦克大战这个游戏比较有意思好玩点,而且它涉及到Java各个方面的技术:

1.Java面向对象编程

2.界面编程

3.绘图技术

4.多线程

5.文件i/o操作

6.数据库

大家都应该知道坦克大战的玩法,这里就不详细解说了,首先,我们得先有坦克,即是说画一辆坦克..我想学Java的人知道绘图技术,直接找一张坦克图片画上去不是很简单的事,但是,直接画图片的话像素信息多,资源浪费厉害,所以我们不采取这种方式。

我们可以把坦克分成几个部分来画!如图:

也就是三个矩形,一个圆形,一条直线就OK了

(对方不想说话,并向你扔了一段源代码)

package com.TankGame;

import javax.swing.*;

import java.awt.*;

public class TankGame1 extends JFrame

{ //JFrame是一个顶层容器类

MyPanel mp =null;

public static void main(String[] args)

{

TankGame1 tankgame1 = new TankGame1();

}

public TankGame1()

{

mp=new MyPanel();

this.setVisible(true);//显示

this.setSize(400, 300);//设置大小(按像素)

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//设置当关闭窗口时,保证jvm也退出

this.add(mp);//添加MyPanel组件

}

}

//我的面板

class MyPanel extends Panel

{

//定义一个我的坦克

Hero hero =null;

public MyPanel() //构造函数

{

hero =new Hero(100,100); //坦克的初始位置(100,100)

}

//重新paint

public void paint(Graphics g)

{//覆盖JPanel的paint方法

//Graphicd是绘图的重要类,可以理解为一只画笔

super.paint(g);//调用父类函数完成初始化

g.fillRect(0, 0, 400, 300); //填充使背景变为黑色

this.drawTank(hero.getX(), hero.getY(), g, 0, 1);//画坦克

}

//画出坦克的函数

public void drawTank(int x,int y,Graphics g,int direct,int type)

{

switch(type) //判断类型(敌方坦克还是自己的坦克),从而设置颜色

{

case 0: //敌方坦克

g.setColor(Color.cyan);

break;

case 1: //我的坦克

g.setColor(Color.yellow);

break;

}

//判断方向(暂时先设置一种方向)

switch(direct)

{

//向上

case 0:

//画出我的坦克

//1.画出左边的矩形

g.fill3DRect(x, y, 5, 30,false);

//2.画出右边矩形

g.fill3DRect(x+15, y, 5, 30,false);

//3.画出中间矩形

g.fill3DRect(x+5, y+5, 10, 20,false);

//4.画出圆形

g.fillOval(x+5, y+10, 10, 10);

//5.画直线

g.drawLine(x+10, y+15, x+10, y);

break;

}

}

}

//坦克类

class Tank

{

//表示坦克的横坐标

int x=0;

//表示坦克的纵坐标

int y=0;

public int getX() {

return x;

}

public void setX(int x) {

this.x = x;

}

public int getY() {

return y;

}

public void setY(int y) {

this.y = y;

}

public Tank(int x,int y)

{

this.x=x;

this.y=y;

}

}

//我的坦克

class Hero extends Tank

{

public Hero(int x,int y)

{

super(x,y);

}

}

我想这里你可能会对上面代码中的画坦克有点疑惑

//1.画出左边的矩形

g.fill3DRect(x, y, 5, 30,false);

//2.画出右边矩形

g.fill3DRect(x+15, y, 5, 30,false);

//3.画出中间矩形

g.fill3DRect(x+5, y+5, 10, 20,false);

//4.画出圆形

g.fillOval(x+5, y+10, 10, 10);

//5.画直线

g.drawLine(x+10, y+15, x+10, y);

那些数值怎么确定的,其实这些都是经过多次测试觉得这个比较好

这样画出来的坦克好看一点,你们也可以试试别的画法,画长画短,最终坐标的确定是以左上角的红点为参照点的。

那为什么用fill3DRect这个方法呢,还是因为好看,如果用fillRect(…)方法,画出来如图

轮廓不清晰,所以用3D效果的fill3DRect方法看起来坦克会更好一点。

最终在Eclipse运行结果如下:

这样我们就画好了第一辆坦克,第一步完成了!!!

java之详解坦克大战_Java之详解坦克大战游戏(一)相关推荐

  1. java 坦克大战_java课程设计之坦克大战

    本文实例为大家分享了java坦克大战的具体代码,供大家参考,具体内容如下 环境要求: 操作系统:Windows 10 JAVA虚拟机:JDK1.8以上 开发环境:Eclipse(4.5以上) 功能提示 ...

  2. java多线程生产者与消费者问题_Java多线程详解之四:生产者消费者问题

    一.问题描述 生产者消费者问题(Producer-Consumer problem),也称有限缓冲区问题(Bounded-buffer promblem),是一个多线程同步问题的经典案例.对于一个固定 ...

  3. java集合类详解和使用_Java 集合类详解

    今天来看看"集合类"的概念. 集合可以看作是一个容器,比如,所有Java有关的书都可以看作是一个集合.对于集合中的各个对象很容易将其存放到集合中,也很容易将其从集合中取出来,还可以 ...

  4. java按照io流向基类_Java IO详解

    1 Java IO流的概念,分类 1.1 Java IO流的概念 java的IO是实现输入和输出的基础,可以方便的实现数据的输入和输出操作.在java中把不同的输入/输出源(键盘,文件,网络连接等)抽 ...

  5. java 使用7z进行解压_java调用7zip解压压缩包的实例

    前言 最近的项目中需要用到解压缩包的功能,客户给出的压缩包的格式主要是rar和zip,因此就打算使用java调用7zip的命令行进行解压文件,本文主要记录一下实现的过程以及其中遇到的问题. 7zip命 ...

  6. java坦克大战课设报告_java课程设计之坦克大战

    本文实例为大家分享了java坦克大战的具体代码,供大家参考,具体内容如下 环境要求: 操作系统:Windows 10 JAVA虚拟机:JDK1.8以上 开发环境:Eclipse(4.5以上) 功能提示 ...

  7. java 坦克重叠_Java实现支持双黑两人激战的 坦克大战源码(经典游戏)

    写这个游戏已经有一段时间了,一直在实现各种新功能,从最开始的地图上只有坦克,发子弹还是一个大问题到现在可以两个人一起玩,还是花了不少心思的,现在坦克的速度更快,电脑坦克也不会撞墙.虽然游戏性没有经典坦 ...

  8. java中sleep()、wait()相同与不同详解

    java中sleep().wait()相同与不同详解 相同 java中Thread#sleep和Object#wait方法都是暂停当前线程,当前线程让出CPU占用.并不存在调用sleep后还占用CPU ...

  9. 蓝桥杯 Java B组 省赛决赛模拟赛 详解及小结汇总+题目下载【2013年(第4届)~2021年(第12届)】

    蓝桥杯 Java B组 省赛决赛模拟赛 详解及小结汇总+题目下载[2013年(第4届)~2021年(第12届)] 百度网盘-CSDN蓝桥杯资料(真题PDF+其它资料)   提取码:6666 2013年 ...

最新文章

  1. springboot整合mybatis分页插件
  2. 根据信号灯状态解决网络故障
  3. 2020牛客国庆集训派对day2 AKU NEGARAKU
  4. 第7篇:Flowable-Modeler集成之Flowable源码编译
  5. java中methods方法_java中Class.getMethod方法
  6. 收藏 | 12 种 NumpyPandas 高效技巧
  7. ARM:下一代架构也将继续供给华为
  8. Python中 文件处理
  9. grep 两个字符串_Linux运维工程师想要的12个grep指令
  10. Hadoop中Namenode单点故障
  11. linux如何查询文件及文件夹大小
  12. Myeclipse 6.0 regester NO
  13. C语言 #define ABS(X) (X >= 0) ? X : -X 遇到的逻辑错误
  14. 【JAVA程序设计】(C00047)基于springboot+vue的宠物服务管理系统
  15. linux mantis安装包,Linux下安装mantis
  16. windows 8 Surface 会成功吗?
  17. 通过teamviewer访问内网
  18. 制造业数据安全如何保证?天翎知识文档管理系统+群晖NAS企业级解决方案
  19. 05.抽象队列同步器AQS应用之Lock详解
  20. 【设计模式】我终于读懂了装饰者模式。。。

热门文章

  1. 滚动轮播图+滚动轮播图定时器的添加(还原lol首页的轮播图)
  2. 计算机excel混合引用,Excel公式填充:绝对引用混合引用要分清
  3. 什么是BSD开源协议
  4. [Python] 字符串操作及方法总结
  5. delphi游戏开发网址大全
  6. 彻底放弃了一直钟爱的紫光输入法
  7. 我的作品之《Unity虚拟现实开发实战》,翻译自《Unity Virtual Reality Projects》
  8. 淘宝API学习之道:淘宝TOP之API接口接入教程
  9. REBOL 3.0 即將支援 Unicode
  10. Mac如何安装:node的多版本管理工具(nvm 或 n)