窗体类;
--------------------------------------
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//消除闪烁,使用双缓冲
//线程重画更加均匀,更能控制重化的速度。按键重画不能解决子弹自动飞行的问题;
public class TankClient extends Frame {
private static final int GAME_WIDTH = 800;
private static final int GAME_HIGHT = 600;
private int ScreenHight = 700;
Tank myTank = new Tank(50, 50);
private Image offScreenImage = null;
// 重写
public void update(Graphics g) {
if (offScreenImage == null) {
offScreenImage = this.createImage(GAME_WIDTH, GAME_HIGHT);
}
// 拿到图片上的画笔
Graphics gOffScreen = offScreenImage.getGraphics();
Color c = gOffScreen.getColor();
gOffScreen.setColor(Color.green);
gOffScreen.fillRect(0, 0, GAME_WIDTH, GAME_HIGHT);
gOffScreen.setColor(c);
paint(gOffScreen);// 画在背后图片上
g.drawImage(offScreenImage, 0, 0, null);// 画在屏幕上
}
public void paint(Graphics g) {
myTank.draw(g);
}
public void lauchFrame() {
setTitle("TankWar");
setBounds(230, 100, 800, 600);
// 匿名内部类,短,不涉及将来的扩展
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setResizable(false);
setBackground(Color.GREEN);
setVisible(true);
addKeyListener(new KeyMoniter());
new Thread(new PaintThread()).start();
}
public static void main(String[] args) {
TankClient tc = new TankClient();
tc.lauchFrame();
}
// 内部类,只为这个TankWar服务,方便的访问包装类的方法,不方便公开,
private class PaintThread implements Runnable {
public void run() {
while (true) {
repaint();// 内部调用父类的paint方法;
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
// 键盘事件,内部类
private class KeyMoniter extends KeyAdapter {
public void keyReleased(KeyEvent e){
myTank.keyReleased(e);
}
public void keyPressed(KeyEvent e) {
myTank.keyPressed(e);
}
}
// 增加100辆坦克到游戏
private void addtank(int n) {
for (int i = 0; i < n; i++) {
}
}
}
-----------------------------------------------------------------------
坦克类
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
public class Tank {
public static final int xspeed = 1;
public static final int yspeed = 1;
int x, y;
private boolean bL = false, bU = false, bR = false, bD = false;
public enum Direction {
L, LU, U, RU, R, RD, LD, D, STOP
};// 枚举类型
private Direction dir = Direction.STOP;
public Tank(int x, int y) {
this.x = x;
this.y = y;
}
public void draw(Graphics g) {
Color c = g.getColor();
g.setColor(Color.red);
g.fillOval(x, y, 30, 30);
g.setColor(c);
move();
}
// 移动坦克
void move() {
switch (dir) {
case L:
x -= xspeed;
break;
case LU:
x -= xspeed;
y -= yspeed;
break;
case U:
y -= yspeed;
break;
case RU:
x += xspeed;
y -= yspeed;
break;
case R:
x += xspeed;
break;
case RD:
x += xspeed;
y += yspeed;
break;
case LD:
x -= xspeed;
y += yspeed;
break;
case D:
y += yspeed;
break;
case STOP:
break;
}
}
public void keyPressed(KeyEvent e) {
// 获得键的虚拟码
int key = e.getKeyCode();
// if(key==KeyEvent.VK_RIGHT){
// x+=5;
// }if(key==KeyEvent.VK_LEFT){
// x=x-5;
// }if(key==KeyEvent.VK_UP){
// y=y-5;
// }if(key==KeyEvent.VK_DOWN){
// y=y+5;
// }
switch (key) {
case KeyEvent.VK_LEFT:
bL = true;
break;
case KeyEvent.VK_UP:
bU = true;
break;
case KeyEvent.VK_RIGHT:
bR = true;
break;
case KeyEvent.VK_DOWN:
bD = true;
break;
}
locateDirection();
}
void locateDirection() {
if(bL&&!bU&&!bR&&!bD) dir=Direction.L;
else if(bL&&bU&&!bR&&!bD) dir=Direction.LU;
else if(!bL&&bU&&!bR&&!bD) dir=Direction.U;
else if(!bL&&bU&&bR&&!bD) dir=Direction.RU;
else if(!bL&&!bU&&bR&&!bD) dir=Direction.R;
else if(!bL&&!bU&&!bR&&bD) dir=Direction.D;
else if(!bL&&!bU&&bR&&bD) dir=Direction.RD;
else if(bL&&!bU&&!bR&&bD) dir=Direction.LD;
else if(!bL&&!bU&&!bR&&!bD) dir=Direction.STOP;
}
public void keyReleased(KeyEvent e) {
// 获得键的虚拟码
int key = e.getKeyCode();
// if(key==KeyEvent.VK_RIGHT){
// x+=5;
// }if(key==KeyEvent.VK_LEFT){
// x=x-5;
// }if(key==KeyEvent.VK_UP){
// y=y-5;
// }if(key==KeyEvent.VK_DOWN){
// y=y+5;
// }
switch (key) {
case KeyEvent.VK_LEFT:
bL = false;
break;
case KeyEvent.VK_UP:
bU = false;
break;
case KeyEvent.VK_RIGHT:
bR = false;
break;
case KeyEvent.VK_DOWN:
bD = false;
break;
}
locateDirection();
}
}
------------------------------------------------------------
我会慢慢完善坦克大战这个小项目,一起互相学习!!
分享到:
相关推荐
本篇文章将详细剖析“Tankgame-java--master”项目,这是一个基于Java语言在Eclipse平台上开发的坦克大战游戏的源代码,旨在帮助读者了解如何运用Java技术构建此类游戏。 首先,让我们了解一下Java语言。Java是一种...
《Java版坦克大战》是一款基于Java编程语言开发的复古风格游戏,它继承了经典坦克大战的玩法,并且增加了自定义地图编辑功能,为玩家提供了更丰富的游戏体验。在这个项目中,开发者利用Java的强大功能和面向对象编程...
总的来说,“坦克大战”游戏的开发涵盖了Java编程的多个方面,包括图形界面设计、事件处理、游戏逻辑、资源管理、多线程以及文件操作等,是学习和提升Java技能的良好实践项目。通过这个项目,开发者不仅可以掌握Java...
在Java版的坦克大战中,游戏逻辑主要由以下几个关键部分构成: 1. 游戏主循环:这是游戏的核心,负责处理所有的游戏更新和渲染。在Java中,通常使用`while`或`do-while`循环来实现,不断地检测用户输入、更新游戏...
### JAVA坦克大战游戏开发毕业论文知识点汇总 #### 一、绪论 - **背景与意义**:随着21世纪的到来,互联网技术的飞速发展推动了信息技术的进步,使其成为网络经济的重要组成部分。在这个信息技术蓬勃发展的时代,...
通过这个Java坦克大战项目,我们可以学习到Java图形编程的基础,包括如何使用枚举、处理图像资源、读取配置文件以及打包可执行应用。这些都是Java开发中非常实用的技能,对于想深入理解Java编程或者游戏开发的初学者...
【Java坦克大战项目详解】 ...总的来说,Java坦克大战项目是一个很好的学习实践平台,涵盖了Java编程、图形界面设计、游戏逻辑实现等多个方面,对于初学者来说,既能巩固基础知识,又能锻炼实际编程能力。
本项目“基于Java的坦克大战2”旨在通过Java编程语言开发一款经典的坦克大战游戏,重点在于游戏的外部服务实现。游戏的核心设计思想是利用Java强大的功能,构建出一个既有趣又具有挑战性的游戏环境。 #### 重要组件...
在这个项目中,我们将深入探讨Java坦克大战的源代码,了解其背后的编程思想、设计模式以及Java技术的应用。 首先,我们要明白Java作为一种面向对象的编程语言,其强大的类库和跨平台特性使得它成为开发游戏的热门...
2. 参考开源项目:查找并研究Java坦克大战的开源实现,从中学习和借鉴。 3. 实践开发:动手编写自己的Java坦克大战,不断调试和优化,提升编程技能。 总结,Java坦克大战是学习和实践Java编程的绝佳案例,它涵盖了...
根据提供的文件信息,我们可以分析出该Java项目是一个简单的坦克大战游戏。该项目主要涉及了三个类:`Blood`、`Explode` 和 `Missile`。接下来将分别介绍这些类的功能及其实现细节。 ### 一、`Blood` 类 #### 1. ...
基于java坦克大战课程设计报告 摘 要 随着计算机的普及以及对电子游戏的认识,电子游戏已被越来越多的人选作放松、娱 乐的休闲方式;电子游戏既不需要专门购买游戏器材,也不需要宽阔的游戏场地,只需 要一台能独立...
【坦克大战课程设计】是一个基于Java语言的编程项目,用于教授学生如何利用编程技术实现一款经典的游戏。在这个项目中,学生们需要使用MyEclipse作为开发环境来构建游戏。以下是项目的关键知识点: 1. **游戏功能**...
在本文中,我们将深入探讨如何使用Java语言进行Android游戏开发,特别关注"坦克大战"这一经典游戏的实现。"坦克大战"是一款深受玩家喜爱的双人对战游戏,通过Java来开发Android版本,可以帮助开发者更好地理解和掌握...
《JAVA程序开发课程设计》项目设计的“TankWar”是一个基于Java编程的坦克大战游戏,旨在教授学生如何设计和实现一款交互式游戏。本项目涵盖了游戏的基本功能和特色功能,并涉及了面向对象的设计原则和图形用户界面...
【Java课设坦克大战】是面向初学者的一个项目,它主要使用Java编程语言来实现一款经典的游戏——坦克大战。这个游戏的开发旨在帮助学习者更好地理解Java编程基础、面向对象编程概念以及游戏开发的基本流程。 首先,...
《Java局域网坦克大战源码解析》 Java作为一款广泛应用的编程语言,不仅在企业级应用中占据重要地位,同样也是初学者入门的理想选择。本篇将详细解析"java局域网坦克大战"的源码,帮助读者深入理解Java编程以及游戏...
Java 坦克大战代码分析 ...Java 坦克大战代码分析提供了一个完整的 Java 项目案例,涵盖了面向对象、Swing 和线程等多方面的知识点。通过对游戏的分析和实现,学生可以学习到 Java 基础知识和面向对象编程思想。
【Java课程设计——坦克大战游戏】是一个以技术为导向的学习项目,旨在帮助学生深入理解Java编程语言的核心概念。在这个项目中,学生们将运用类的定义、对象的创建以及线程的管理来开发一款坦克大战游戏。 1. **...