/*
* 坦克游戏1.01版本
* 1在我的面板MyPanel中缺少了构造函数
* 2在java中的坐标y轴式向下为正方向递增的与普通的数学坐标差别就在这了
*/
package com.TankGame01;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class MyTankGame extends JFrame {
MyPanel mp=null;
public static void main(String[] args){
// TODO Auto-generated method stub
new MyTankGame();
}
//构造函数
public MyTankGame(){
mp=new MyPanel();
//往JFrame添加我的面板MyJPanel
this.add(mp);
//注册监听器
this.addKeyListener(mp);
//设置JFrame容器大小
this.setSize(600,500);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置面板可见
this.setVisible(true);
}
}
class MyPanel extends JPanel implements KeyListener{
Hero hero=null;
public MyPanel(){
hero=new Hero(100,100);
}
//实现paint方法和画笔工具Graphics
public void paint(Graphics g){
super.paint(g);
g.fillRect(0,0,400,400);
this.MakeTank(this.hero.getX(), this.hero.getY(), g, this.hero.direct, 0);
}
public void MakeTank(int x,int y,Graphics g,int direct,int type){
switch(type){
case 0:
g.setColor(Color.yellow);
break;
case 1:
g.setColor(Color.blue);
break;
}
switch(direct){
//0表示向上1表示向右2表示向下3表示向左
case 0:
//画出左边的矩形
g.fill3DRect(x, y, 10, 40, true);
//画出右边的矩形
g.fill3DRect(x+30, y, 10, 40, true);
//画出中间的矩形
g.fill3DRect(x+10, y+10, 20, 20, true);
//画出中间的圆形
g.setColor(Color.red);
g.fillOval(x+12, y+12, 16, 16);
//画出中间的直线
g.drawLine(x+20, y, x+20, y+20);
break;
case 1:
//画出上边的矩形
g.fill3DRect(x, y, 40, 10, true);
//画出下边的矩形
g.fill3DRect(x, y+30, 40, 10, true);
//画出中间的矩形
g.fill3DRect(x+10, y+10, 20, 20, true);
//画出中间的圆形
g.setColor(Color.red);
g.fillOval(x+12, y+12, 16, 16);
//画出中间的直线
g.drawLine(x+20,y+20,x+40,y+20);
break;
case 2:
//画出左边的矩形
g.fill3DRect(x, y, 10, 40, true);
//画出右边的矩形
g.fill3DRect(x+30, y, 10, 40, true);
//画出中间的矩形
g.fill3DRect(x+10, y+10, 20, 20, true);
//画出中间的圆形
g.setColor(Color.red);
g.fillOval(x+12, y+12, 16, 16);
//画出中间的直线
g.drawLine(x+20, y+20, x+20, y+40);
break;
case 3:
//画出上边的矩形
g.fill3DRect(x, y, 40, 10, true);
//画出下边的矩形
g.fill3DRect(x, y+30, 40, 10, true);
//画出中间的矩形
g.fill3DRect(x+10, y+10, 20, 20, true);
//画出中间的圆形
g.setColor(Color.red);
g.fillOval(x+12, y+12, 16, 16);
//画出中间的直线
g.drawLine(x,y+20,x+20,y+20);
break;
}
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
if(e.getKeyCode()==KeyEvent.VK_W){
this.hero.moveUp();
this.hero.setDirect(0);
}else if(e.getKeyCode()==KeyEvent.VK_D){
this.hero.moveRight();
this.hero.setDirect(1);
}else if(e.getKeyCode()==KeyEvent.VK_S){
this.hero.moveDown();
this.hero.setDirect(2);
}else if(e.getKeyCode()==KeyEvent.VK_A){
this.hero.moveLeft();
this.hero.setDirect(3);
}
this.repaint();
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
}
class Tank{
//得到坦克的坐标
//利用set与get方法
int x=0;
int y=0;
public Tank(int x,int y){
this.x=x;
this.y=y;
}
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;
}
//坦克炮筒的方向
int direct=0;
public int getDirect() {
return direct;
}
public void setDirect(int direct) {
this.direct = direct;
}
//坦克的上下左右移动
int speed=5;
}
class Hero extends Tank{
public Hero(int x,int y){
super(x,y);
}
public void moveUp(){
y-=speed;
}
public void moveRight(){
x+=speed;
}
public void moveDown(){
y+=speed;
}
public void moveLeft(){
x-=speed;
}
}
分享到:
相关推荐
在这个项目中,我们主要探讨的是C++编程语言在创建游戏——坦克大战中的应用,以及如何利用C++的反射机制来增加程序的灵活性。C++是一种静态类型、编译式的、通用的、大小写敏感的、不仅支持面向过程的编程,也支持...
《坦克大战源码解析——基于Java的网络版游戏开发》 坦克大战,一款经典的战略射击游戏,如今已有了网络版的实现,通过Java语言进行开发。这个项目不仅展现了Java编程的强大,还展示了网络编程和游戏设计的核心技术...
《初学者C#源码:探索WinForm游戏开发——坦克大战》 WinForm是一个基于.NET Framework的用户界面框架,主要用于创建Windows桌面应用程序。虽然它的功能可能不如WPF或UWP那样强大,但对于初学者来说,WinForm是一个...
《Java坦克大战游戏:TankWar1.4深度解析》 Java作为一款强大的编程语言,...通过研究这个项目,开发者不仅可以学习到如何使用Java进行游戏开发,还能提升对面向对象编程、图形处理、事件处理等核心编程技能的理解。
HTML5的事件处理机制使得坦克可以响应用户的键盘输入,改变其移动和射击行为。此外,JavaScript的定时器函数(如`setInterval`)用于实现游戏的帧动画,让坦克和其他元素动起来。在`tank.js`中,我们可能会看到定义...
此外,线程同步技术也可能被用来确保游戏的实时性和流畅性,例如使用synchronized关键字或者wait/notify机制来处理多坦克同时行动的并发问题。 HTML文件的加入,使得游戏可以通过浏览器直接运行,这可能是利用了...
在本文中,我们将深入探讨如何实现游戏中的移动限制,以帮助理解RPG(角色扮演游戏)游戏的基本机制。这个示例是基于提供的源代码,其中包括`GameMain.cpp`等关键文件,以及`dt_1.map`和`dt_2.map`等地图资源。通过...
原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件...
原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件...
原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件...
原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件...
原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件复制...
原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件复制...