【Java_项目篇<1>】--JAVA实现坦克大战游戏--画出坦克(一)

为什么选择这个项目?

1.好玩,有趣

2.涉及到java基础的各个方面的技术:

面向对象思想、多线程、IO、绘图技术、监听事件、数据库、界面编程

3.巩固旧的知识


一:准备工作


黑色框为JFrame 红色框为JPanel ,由于JFrame不提供画图方法,所以我们只能在JPanel里画图,最后把JPanel放到JFrame中。



paintComponent(g)在以下情况被调用:

1.窗口最小化,再最大化

2.窗口的大小发生变化

3.repaint函数被调用

public void paintComponent(Graphics g){
										// 调用父类(套路)函数 完成初始化任务   这句话不能少
		super.paintComponent(g);
		 
		g.drawOval(10, 10,30, 30);




坦克类:

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. //坦克父类  可以设置坦克出现位置(x,y)  
  2. class Tank {  
  3.     int x = 0;  
  4.     int y = 0;  
  5.     public Tank (int x,int y){  
  6.         this.x = x;  
  7.         this.y = y;  
  8.     }  
  9.     public int getX() {  
  10.         return x;  
  11.     }  
  12.     public void setX(int x) {  
  13.         this.x = x;  
  14.     }  
  15.     public int getY() {  
  16.         return y;  
  17.     }  
  18.     public void setY(int y) {  
  19.         this.y = y;  
  20.     }  
  21. }  
  22. //我的英雄坦克  
  23. class Hero extends Tank{  
  24.     public Hero(int x,int y){  
  25.         super(x, y);  
  26.     }  
  27. }  

面板:

/*
* drawTank (坦克坐标x,y,画笔g,方向,坦克类型)
* 方法介绍:
可以设置-->坦克的颜色(类型:敌方坦克,我方坦克),方向,出现的坐标

* 如果type是default 则默认颜色为画出黑色坦克

* 封装性:将坦克封装到方法中。

*/

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. //画图  
  2. @SuppressWarnings("serial")  
  3. class MyPanel extends JPanel{  
  4.       
  5.     Hero hero = null;  
  6.       
  7.       
  8.     public MyPanel(){  
  9.         hero = new Hero(10,10);//设置坦克出现的位置(10,10)  
  10.     }  
  11.       
  12.       
  13.     public void paintComponent(Graphics g){  
  14.         super.paintComponent(g);  
  15.           
  16.         g.fillRect(00400300);//背景填充  
  17.           
  18.           
  19.         drawTank(hero.getX(),hero.getY(),g,0,0);//一定要传入画笔g  
  20.         g.setColor(Color.yellow);  
  21.           
  22.     }  
  23.       
  24.     /* 
  25.      * drawTank (坦克坐标x,y,画笔g,方向,坦克类型) 
  26.      * 方法介绍: 
  27.      *      可以设置-->坦克的颜色(类型:敌方坦克,我方坦克),方向,出现的坐标 
  28.      *  
  29.      * 如果type是default 则默认颜色为画出黑色坦克 
  30.      *  
  31.      * 封装性:将坦克封装到方法中。 
  32.      *  
  33.      */  
  34.       
  35.     public void drawTank(int x,int y,Graphics g,int direct,int type){  
  36.         switch (type) {  
  37.         case 0:  
  38.             g.setColor(Color.cyan);  
  39.             break;  
  40.         case 1:  
  41.             g.setColor(Color.yellow);  
  42.         default:  
  43.             break;  
  44.         }  
  45.         switch (direct) {  
  46.         case 0:  
  47.             //向上  
  48.             g.fill3DRect(x   , y    , 5 , 30false);  
  49.             g.fill3DRect(x+15, y    , 5 , 30false);  
  50.             g.fill3DRect(x+5 , y+5  , 1020false);  
  51.             g.fillOval(x+4, y+1010 , 10);  
  52.             g.drawLine(x+9, y+15, x+9, y );  
  53.             break;  
  54.   
  55.         default:  
  56.             break;  
  57.         }  
  58.     }  
  59. }  


主函数:

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. /** 
  2.  * 功能:坦克游戏的1.0 
  3.  * 1.画出坦克 
  4.  */  
  5.   
  6. package com.test1;  
  7.   
  8. import java.awt.Color;  
  9. import java.awt.Graphics;  
  10.   
  11. import javax.swing.JFrame;  
  12. import javax.swing.JPanel;  
  13.   
  14. @SuppressWarnings("serial")  
  15. public class MyTankGame1 extends JFrame{  
  16.       
  17.     MyPanel p1 = new MyPanel();  
  18.       
  19.       
  20.     public MyTankGame1(){  
  21.         add(p1);  
  22.         setSize(400300);  
  23.         setVisible(true);  
  24.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  25.     }  
  26.       
  27.       
  28.     public static void main(String[] args) {  
  29.          new MyTankGame1();  
  30.     }  
  31. }  


猜你喜欢

转载自blog.csdn.net/qq_24653023/article/details/52225376
今日推荐