教程1-简易飞机大战-第一节

教程1-简易飞机大战-第一节

介绍

此教程为Java。为实验一些新想法而作,记录于此,方便与众神交流学习。
使用swing+swt作可视化。
本节实现界面的显示,和标题的出现,与鼠标进入选项的动画。
图片使用的网络素材,不利用而进行其他收费处理,侵改。

效果

在这里插入图片描述

主函数

package spaceWar;
class SWmain {
	public static void main(String[] args) {
		new SWmaster();
	}
}

为整个程序的运行入口。

窗口函数

package spaceWar;

import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JFrame;

public class SWmaster extends JFrame{
	private SWFloorOne floor1;
	private int checkpoint=0;//关卡
	private int bgx=0,bgy=0;//背景坐标
	private int titlex=20,titley=200;//标题坐标
	public SWmaster() {
		setTitle("简易太空大战 v1.0");
		setBounds(0, 0, 512,927);
		setLocationRelativeTo(null);//窗口居中
		setResizable(false);//禁用缩放
		setLayout(null);//自定义布局
		
		floor1=new SWFloorOne(0, new int[] {0, 0},new int[] {512,927},titlex,titley);
		floor1.setBounds(0, 0, 512, 927);
		this.add(floor1);
		//窗口动作监听
		addWindowListener(new WindowListener() {
			@Override
			public void windowOpened(WindowEvent e) {}
			@Override
			public void windowIconified(WindowEvent e) {}
			@Override
			public void windowDeiconified(WindowEvent e) {}
			@Override
			public void windowDeactivated(WindowEvent e) {}
			@Override
			public void windowClosing(WindowEvent e) {System.exit(0);}//终止该进程
			@Override
			public void windowClosed(WindowEvent e) {}
			@Override
			public void windowActivated(WindowEvent e) {}
		});
		//线程刷新
		Timer ti=new Timer();
		ti.schedule(new updateUI(),new Date(),15);
		ti.schedule(new updateData(),new Date(),20);
		
		setVisible(true);//显示窗口
	}
	//界面刷新
	private class updateUI extends TimerTask{
		@Override
		public void run() {
			floor1.repaint();//刷新
		}
	}
	//数据更新
	private class updateData extends TimerTask{
		@Override
		public void run() {
			if(titley>50) {
				titley--;
				floor1.settitlecoor(titlex, titley);
			}
		}
	}
}

绘制函数-jpanel

package spaceWar;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.Vector;

import javax.swing.JPanel;

public class SWFloorOne extends JPanel{
	//背景层
	private Vector<Image> bg=new Vector<Image>();//背景
	private int checkpoint=0;//关卡
	private int drawx=0,drawy=0;//绘制坐标
	private int drawsizex=0,drawsizey=0;
	//控件层
	private Image title=Toolkit.getDefaultToolkit().createImage("./SWmaterial/title.png");//标题
	private int titlex=0,titley=0;//标题坐标
	//按钮状态
	private Image playeronepng=Toolkit.getDefaultToolkit().createImage("./SWmaterial/oneplayer.png");
	private Image playertwopng=Toolkit.getDefaultToolkit().createImage("./SWmaterial/twoplayer.png");
	private Image gameinfobu=Toolkit.getDefaultToolkit().createImage("./SWmaterial/info.png");
	private Image playeronepng2=Toolkit.getDefaultToolkit().createImage("./SWmaterial/oneplayer2.png");
	private Image playertwopng2=Toolkit.getDefaultToolkit().createImage("./SWmaterial/twoplayer2.png");
	private Image gameinfobu2=Toolkit.getDefaultToolkit().createImage("./SWmaterial/info2.png");
	private boolean isenterplayeronepng=false;
	private boolean isenterplayertwopng=false;
	private boolean isentergameinfobu=false;
	private boolean gameisstart=false;
	public SWFloorOne(int checkpoint,int drawcoor[],int drawsize[],int titlex,int titley) {
		bg.add(Toolkit.getDefaultToolkit().createImage("./SWmaterial/bg.jpg"));
		bg.add(Toolkit.getDefaultToolkit().createImage("./SWmaterial/bg1.jpg"));
		bg.add(Toolkit.getDefaultToolkit().createImage("./SWmaterial/bg2.jpg"));
		bg.add(Toolkit.getDefaultToolkit().createImage("./SWmaterial/bg3.jpg"));
		bg.add(Toolkit.getDefaultToolkit().createImage("./SWmaterial/bg4.jpg"));
		bg.add(Toolkit.getDefaultToolkit().createImage("./SWmaterial/bg5.jpg"));
		this.checkpoint=checkpoint;
		this.drawx=drawcoor[0];
		this.drawy=drawcoor[1];
		this.drawsizex=drawsize[0];
		this.drawsizey=drawsize[1];
		this.titlex=titlex;
		this.titley=titley;
		//监听鼠标动作
		addMouseMotionListener(new MouseMotionListener() {
			@Override
			public void mouseMoved(MouseEvent e) {//移动鼠标触发
				int x=e.getX(),y=e.getY();
				if(!gameisstart) {
					if(x>185 && x<327 && y>600 &&y<650)isenterplayeronepng=true;
					else isenterplayeronepng=false;
					if(x>185 && x<327 && y>670 &&y<720)isenterplayertwopng=true;
					else isenterplayertwopng=false;
					if(x>185 && x<327 && y>740 &&y<790)isentergameinfobu=true;
					else isentergameinfobu=false;
				}
			}
			@Override
			public void mouseDragged(MouseEvent e) {}
		});
	}
	@Override
	public void paint(Graphics g) {
		if(!gameisstart) {
			g.drawImage(bg.get(checkpoint),drawx,drawy,drawsizex,drawsizey,this);
			g.drawImage(title, titlex,titley,472,146,this);
			if(titley<60) {
				if(isenterplayeronepng)g.drawImage(playeronepng2,181,600,this);
				else g.drawImage(playeronepng,181,600,this);
				if(isenterplayertwopng)g.drawImage(playertwopng2,181,670,this);
				else g.drawImage(playertwopng,181,670,this);
				if(isentergameinfobu)g.drawImage(gameinfobu2,181,740,this);
				else g.drawImage(gameinfobu,181,740,this);
			}
		}
		//声明
		g.setColor(Color.white);
		g.drawString("声明:本作为教学提供,不作任何收费,图片素材源自网络,侵删", 80,840);
	}
	public void setcoor(int drawx,int drawy) {
		this.drawx=drawx;
		this.drawy=drawy;
	}
	public void settitlecoor(int titlex,int titley) {
		this.titlex=titlex;
		this.titley=titley;
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值