java编写一个可以上、下、左、右移动的坦克
唉,本人学习进度缓慢,但依然会坚持不懈!有感兴趣的朋友可以在下面留言。
源代码献上:
/*
* 画出我的坦克,使他可以上下左右移动
*/
package com.test4;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class MytankGame2 extends JFrame{
MyPanel mp = null;
public static void main(String[] args){
MytankGame2 mtg = new MytankGame2();
}
//构造函数
public MytankGame2(){
mp = new MyPanel();
this.add(mp);
this.addKeyListener(mp);
this.setSize(270, 500);
this.setLocation(200, 200);
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
class MyPanel extends JPanel implements KeyListener{
Mytank mt = null;
public MyPanel(){
mt = new Mytank(10,10);
}
//重新paint函数
public void paint(Graphics g){
super.paint(g);
g.fillRect(0, 0, 300, 400);
this.drawTank(mt.getX(), mt.getY(), 0, this.mt.direct, g);
}
//画出tank函数
public void drawTank(int x,int y,int type,int direct,Graphics g){
switch(type){
case 0:
g.setColor(Color.orange);
break;
case 1:
g.setColor(Color.blue);
break;
}
switch(direct){
case 0://上
g.fillRect(x, y, 5, 30);
g.fillRect(x+5, y+5, 20, 20);
g.fillRect(x+25, y, 5, 30);
g.setColor(Color.red);
g.drawLine(x+15, y-5, x+15, y+5);
g.setColor(Color.green);
g.fillOval(x+7, y+7, 16, 16);
break;
case 1://下
g.fillRect(x, y, 5, 30);
g.fillRect(x+5, y+5, 20, 20);
g.fillRect(x+25, y, 5, 30);
g.setColor(Color.red);
g.drawLine(x+15, y+15, x+15, y+35);
g.setColor(Color.green);
g.fillOval(x+7, y+7, 16, 16);
break;
case 3://左
g.fillRect(x, y, 30, 5);
g.fillRect(x+5, y+5, 20, 20);
g.fillRect(x, y+25, 30, 5);
g.setColor(Color.red);
g.drawLine(x+15, y+15, x+35, y+15);
g.setColor(Color.green);
g.fillOval(x+7, y+7, 16, 16);
break;
case 2://右
g.fillRect(x, y, 30, 5);
g.fillRect(x+5, y+5, 20, 20);
g.fillRect(x, y+25, 30, 5);
g.setColor(Color.red);
g.drawLine(x-5, y+15, x+15, y+15);
g.setColor(Color.green);
g.fillOval(x+7, y+7, 16, 16);
break;
}
}
public void keyTyped(KeyEvent e) {
}
//对键按下做处理
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_W){
//设置我的坦克
this.mt.setDirect(0);
this.mt.moveup();
}else if(e.getKeyCode() == KeyEvent.VK_A){
this.mt.setDirect(2);
this.mt.moveleft();
}else if(e.getKeyCode() == KeyEvent.VK_D){
this.mt.setDirect(3);
this.mt.moveright();
}else if(e.getKeyCode() == KeyEvent.VK_S){
this.mt.setDirect(1);
this.mt.movedown();
}
this.repaint();
}
public void keyReleased(KeyEvent e) {
}
}
/*
* 画出我的坦克,使他可以上下左右移动
*/
package com.test4;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class MytankGame2 extends JFrame{
MyPanel mp = null;
public static void main(String[] args){
MytankGame2 mtg = new MytankGame2();
}
//构造函数
public MytankGame2(){
mp = new MyPanel();
this.add(mp);
this.addKeyListener(mp);
this.setSize(270, 500);
this.setLocation(200, 200);
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
class MyPanel extends JPanel implements KeyListener{
Mytank mt = null;
public MyPanel(){
mt = new Mytank(10,10);
}
//重新paint函数
public void paint(Graphics g){
super.paint(g);
g.fillRect(0, 0, 300, 400);
this.drawTank(mt.getX(), mt.getY(), 0, this.mt.direct, g);
}
//画出tank函数
public void drawTank(int x,int y,int type,int direct,Graphics g){
switch(type){
case 0:
g.setColor(Color.orange);
break;
case 1:
g.setColor(Color.blue);
break;
}
switch(direct){
case 0://上
g.fillRect(x, y, 5, 30);
g.fillRect(x+5, y+5, 20, 20);
g.fillRect(x+25, y, 5, 30);
g.setColor(Color.red);
g.drawLine(x+15, y-5, x+15, y+5);
g.setColor(Color.green);
g.fillOval(x+7, y+7, 16, 16);
break;
case 1://下
g.fillRect(x, y, 5, 30);
g.fillRect(x+5, y+5, 20, 20);
g.fillRect(x+25, y, 5, 30);
g.setColor(Color.red);
g.drawLine(x+15, y+15, x+15, y+35);
g.setColor(Color.green);
g.fillOval(x+7, y+7, 16, 16);
break;
case 3://左
g.fillRect(x, y, 30, 5);
g.fillRect(x+5, y+5, 20, 20);
g.fillRect(x, y+25, 30, 5);
g.setColor(Color.red);
g.drawLine(x+15, y+15, x+35, y+15);
g.setColor(Color.green);
g.fillOval(x+7, y+7, 16, 16);
break;
case 2://右
g.fillRect(x, y, 30, 5);
g.fillRect(x+5, y+5, 20, 20);
g.fillRect(x, y+25, 30, 5);
g.setColor(Color.red);
g.drawLine(x-5, y+15, x+15, y+15);
g.setColor(Color.green);
g.fillOval(x+7, y+7, 16, 16);
break;
}
}
public void keyTyped(KeyEvent e) {
}
//对键按下做处理
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_W){
//设置我的坦克
this.mt.setDirect(0);
this.mt.moveup();
}else if(e.getKeyCode() == KeyEvent.VK_A){
this.mt.setDirect(2);
this.mt.moveleft();
}else if(e.getKeyCode() == KeyEvent.VK_D){
this.mt.setDirect(3);
this.mt.moveright();
}else if(e.getKeyCode() == KeyEvent.VK_S){
this.mt.setDirect(1);
this.mt.movedown();
}
this.repaint();
}
public void keyReleased(KeyEvent e) {
}
}
java编写一个可以上、下、左、右移动的坦克的更多相关文章
- 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小
原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...
- Java遍历一个文件夹下的全部文件
Java工具中为我们提供了一个用于管理文件系统的类,这个类就是File类,File类与其它流类不同的是,流类关心的是文件的内容.而File类关心的是磁盘上文件的存储. 一,File类有多个构造器,经常 ...
- 面试题之java 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 要求不能出现截半的情况
题目:10. 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串. 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输 ...
- java,编写一个从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出foo,在每个5的倍数行上打印biz,在每个7的倍数上打印baz.
需求:编写一个从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出foo,在每个5的倍数行上打印biz,在每个7的倍数上打印baz. package study01; public cla ...
- java编写一个可以上下移动的小球:运行后,可以通过上下左右键进行移动
/* * 功能:加深对事件处理机制的理解 * 1.通过控制上下左右键,来控制一个小球的位置 */package com.test1;import java.awt.*;import javax.swi ...
- js实现Mac触摸板双指事件(上/下/左/右/放大/缩小)
前言 这几天在修复一个web问题时,需要捕获Mac触摸板双指事件(上.下.左.右.放大.缩小),但发现并没有现成的轮子,还是要自己造. 例如:jquery.mousewheel.js(添加跨浏览器的鼠 ...
- java合并一个文件夹下所有txt文件,输出到另一个txt
最近写了个单元测试,递归调用方法,把同一个文件夹里所有的txt合并输出到一个txt文件.参考了两个博客,分别是已有的方法,还有个就是检测txt文件所用编码的技术贴.如果不检测txt文件的编码,那么转换 ...
- 用java编写一个微博登陆页面
上次也写了一个微博登陆页面,不过功能还不够完善.今天重新完善了一些功能,分享出来给大家. 基本功能如下: (1)具有类似新浪微博的用户注册图形界面. (2)使用用户名或手机号注册,注册时需要提供新密码 ...
- Java编写一个随机产生小学生四则运算题30道
//注:这个程序还没有实现的地方为分数的计算方法未能实现,只是简单的两个数运算,没有实现多个数,四则运算中的数没有涉及0. package 课堂测试1; import java.io.File; im ...
随机推荐
- The Earth Mover's Distance
The EMD is based on the minimal cost that must be paid to transform one distribution into the other. ...
- (一)jvm
jvm,作为java平台通用性的实现基础,重要性不言而喻. 1.开发新项目,写运行脚本时要运用相关知识,确定jvm参数 2.维护老项目,需要对jvm进行性能调优 jvm内存划分: 1.程序计数器 2. ...
- ArcGIS Server GP服务发布与测试(基础版)
版本:ArcGIS Server 10.4 环境:win10 测试目标:创建一个GP服务,功能为根据要素属性信息(如FID)选择出输入内容的对应匹配要素. 注:这个测试非常基础,仅供新手发布GP ...
- json转换对象 对象属性首字母为大写会出错 可以用以下方法
package open_exe; import net.sf.json.JSONObject; import net.sf.json.JsonConfig; import net.sf.json.u ...
- WPF 关于窗口的一些显示效果
0. 一些常用尺寸大小: 1920x1080; 1600x900; 1280x720; 1024x576; 1. 设置窗口的边框样式 使用 Window.WindowStyle 属性可以设置窗口的边框 ...
- tomcat session cluster
Session的生命周期 以前在学习的时候没怎么注意,今天又回过头来仔细研究研究了一下Session的生命周期. Session存储在服务器端,一般为了防止在服务器的内存中(为了高速存取),Sessi ...
- C#编程之委托与事件四(二)【转】
C#编程之委托与事件(二) 我在上一篇文章(C#编程之委托与事件(一) )中通过示例结合的方法介绍了委托,在本文中,我同样以代码示例的方式来介绍C#里的事件机制. 二.事件 1.了解概 ...
- CSS之border
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- DOM9大节点
ELEMENT_NODE 1 元素节点 常用 ATTRIBUTE_NODE 2 属性节点 常用 TEXT_NODE 3 文本节点 常用 CDATA_SECTION_NODE 4 CDATA区段 E ...
- 大商创 sql追踪 卖家入驻
' ' ' ', '', '', '') ' Query ' Query ' Query ' Query ' Query ' Query ' Query ' Query ' Query ' Query ...