坦克游戏——实现坦克的移动和子弹的发射

Posted on 2006-09-02 11:07 久城 阅读(1851) 评论(5)  编辑  收藏 所属分类: JavaTest

感慨:

偶的坦克终于可以移动,可以发射子弹了~~

不过从昨天软件开发与实践的老师的角度去说~我这样做是不对的~开发一个程序之前需要做好构架,而我则是想到哪做哪..做错了再改!哈哈!..还有待学习..

代码:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

class YouXi extends JFrame
{
 Container c;
 Draw_table d_table;  //中间的画板
 Mypanel panel_east;  //右边的面板
 private static Icon[] faces;
 YouXi()
 {
  super("傻瓜坦克                                                                        版权所有:久城");
  c = getContentPane();
  c.setLayout(new BorderLayout());
  panel_east = new Mypanel();
  panel_east.setLayout(new GridLayout(6,1,20,20));
  
  faces= new Icon[]{new ImageIcon("d:\11.jpg","")};
  JButton button1 = new JButton("重新开始");
  JButton button2 = new JButton(new String ("傻瓜坦克"),new ImageIcon(getClass().getResource("11.jpg")));
  JTextField text1 = new JTextField("realsmy");
  JTextField text2 = new JTextField("0");
  JLabel lb1 = new JLabel("玩  家");
  JLabel lb2 = new JLabel("杀人数");
  text1.setEditable(false);
  text2.setEditable(false);
  panel_east.add(button2);
  panel_east.add(lb1);
  panel_east.add(text1);
  panel_east.add(lb2);
  panel_east.add(text2);
  panel_east.add(button1);
  //添加键盘监听,不知道加到哪好,随表找个按钮加上去了哈哈!
  button2.addKeyListener(new KeyAdapter()
   {
        public void keyPressed(KeyEvent e)
    {
      if(e.getKeyCode()==KeyEvent.VK_ENTER)
      {  
       if(d_table.fangxiang == 1)
       {
       d_table.zx = d_table.x+50;
       d_table.zy = d_table.y+10;
       d_table.key_fangxiang = 1;
       }
       if(d_table.fangxiang == 2)
       {
       d_table.zx = d_table.x+10;
       d_table.zy = d_table.y+50;
       d_table.key_fangxiang = 2;
       }
       if(d_table.fangxiang == 3)
       {
       d_table.zx = d_table.x-10;
       d_table.zy = d_table.y+10;
       d_table.key_fangxiang = 3;
       }
       if(d_table.fangxiang == 4)
       {
       d_table.zx = d_table.x+10;
       d_table.zy = d_table.y-10;
       d_table.key_fangxiang = 4;
       }
       d_table.key = true;
      }
      if(e.getKeyCode()==KeyEvent.VK_UP){
      d_table.y-=10;
      d_table.fangxiang = 4;
      }
      if(e.getKeyCode()==KeyEvent.VK_DOWN){
      d_table.y += 10;
      d_table.fangxiang = 2;
      }
      if(e.getKeyCode()==KeyEvent.VK_LEFT){
      d_table.x -= 10;
      d_table.fangxiang = 3;
      }
      if(e.getKeyCode()==KeyEvent.VK_RIGHT){
      d_table.x +=10;
      d_table.fangxiang = 1;
      }

     }
   }
    );
  d_table = new Draw_table();
  d_table.setBackground(Color.red);
  c.add(panel_east,BorderLayout.EAST);
  c.add(d_table,BorderLayout.CENTER);
  setSize(600,600);
  setLocation(200,100);
  setVisible(true);
 }

 public static void main(String args[])
 {
  YouXi yx = new YouXi();
  yx.setDefaultCloseOperation(EXIT_ON_CLOSE);
 }
}

//定义画板类
class Draw_table extends Canvas// implements runnable
{
 static boolean key = false;
 static int x=20,y=20;        //坦克坐标
 static int zx,zy;            //子弹起点坐标
 static int fangxiang = 1;        //定义车头方向
 static int key_fangxiang = 1;  //定义子弹方向
 int k = 1;
 public void paint(Graphics g)
 {
  if(fangxiang == 1)
  {
   g.setColor(Color.black);
   g.fillRect(x,y,50,30);   //车身
   g.fillRect(x+50,y+10,10,10);//车头=子弹
   g.setColor(Color.blue);
   g.fillOval(x+15,y+5,20,20);
  }
  if(fangxiang == 2)
  {
   g.setColor(Color.black);
   g.fillRect(x,y,30,50);   //车身
   g.fillRect(x+10,y+50,10,10);//车头=子弹
   g.setColor(Color.blue);
   g.fillOval(x+5,y+15,20,20);
  }
  if(fangxiang == 3)
  {
   g.setColor(Color.black);
   g.fillRect(x,y,50,30);   //车身
   g.fillRect(x-10,y+10,10,10);//车头=子弹
   g.setColor(Color.blue);
   g.fillOval(x+15,y+5,20,20);
  }
  if(fangxiang == 4)
  {
   g.setColor(Color.black);
   g.fillRect(x,y,30,50);   //车身
   g.fillRect(x+10,y-10,10,10);//车头=子弹
   g.setColor(Color.blue);
   g.fillOval(x+5,y+15,20,20);
  }
  if(k==1)
  {
   try{Thread.sleep(200);}catch(Exception e){}
  }
   if(key == true)
   {
    //new Thread(new draw_table()).start();
    //key = false;
    //new Zidan_thread().start();
    k = 0;
    zidan();
   }
   repaint();
 }
 public void zidan()
 {
  Graphics g = getGraphics();
  g.setColor(Color.yellow);
  g.fillRect(zx, zy, 10, 10);
  if(key_fangxiang == 1)
  {
   zx+=10;
  }
  if(key_fangxiang == 2)
  {
   zy+=10;
  }
  if(key_fangxiang == 3)
  {
   zx-=10;
  }
  if(key_fangxiang == 4)
  {
   zy-=10;
  }
  try{Thread.sleep(200);}catch(Exception e){}
 }
 //public void run()
 //{
 // zidan();
 //}
}
//面板类定义
class Mypanel extends JPanel
{
 public Insets insets()
 {
  return new Insets(60,10,200,10);
 }
}



欢迎来访!^.^!
本BLOG仅用于个人学习交流!
目的在于记录个人成长.
所有文字均属于个人理解.
如有错误,望多多指教!不胜感激!

Feedback

# re: 坦克游戏——实现坦克的移动和子弹的发射  回复  更多评论   

2006-09-08 10:22 by songwenyuan
大哥
MIDlet类呢
你有继承吗

# re: 坦克游戏——实现坦克的移动和子弹的发射  回复  更多评论   

2006-09-09 11:28 by 久城
MIDlet类?..这是我的一个javatest,还没有更深的理解,MIDlet类是做什么的?在API中怎么查不到?...

# re: 坦克游戏——实现坦克的移动和子弹的发射  回复  更多评论   

2006-10-12 00:48 by 黑蝙蝠
楼上的楼上的大哥 midlet是j2me中的类 做单机没用到midlet类

# re: 坦克游戏——实现坦克的移动和子弹的发射  回复  更多评论   

2008-06-08 14:05 by aaaa
J2ME就是JAVA手机游戏开发编程,MIDLET类是J2ME的主类(入口类),你写的代码太乱,没条理,需要看很久才能明白是什么作用。做程序员写代码是给别人看的,你的变量还有格式就必须清晰明了,如果你写个代码你的头头看半天才看懂,估计你得挨顿批了~~~你中间有必要每写个方向就绘制一次吗?你不会用数组吗?本来10几行代码搞定,你写了几十行,浪费了资源。我敢肯定你还没学过编程环境吧,连入口和使用哪种手机都自己写,太神奇了!!~~

# re: 坦克游戏——实现坦克的移动和子弹的发射  回复  更多评论   

2008-09-09 20:34 by dsfs
MIDlet类?..这是我的一个javatest,还没有更深的理解,MIDlet类是做什么的?在API中怎么查不到?...

I 服了 you

只有注册用户登录后才能发表评论。


网站导航:
 

Copyright © 久城