精华内容
下载资源
问答
  • 在胶卷相机的年代,一卷胶卷用完了就迫不及待地拿去照片冲洗店将照片洗出来然后...春节假期已大半,家庭聚会、朋友聚餐、外出旅游,一定又拍了不少美美的照片,不妨将自己特别满意的照片冲洗出来,在家中打造一面...

    在胶卷相机的年代,一卷胶卷用完了就迫不及待地拿去照片冲洗店将照片洗出来然后整整齐齐地放进相册里。后来数码相机开始进入大众生活,再后来智能手机开始普及,照完就能立刻看到照片的效果,存在手机里也随时能够浏览,随着开始习惯了拿出手机记录生活点滴,大家就渐渐地不再热衷于冲洗照片留念了。春节假期已过大半,家庭聚会、朋友聚餐、外出旅游,一定又拍了不少美美的照片,不妨将自己特别满意的照片冲洗出来,在家中打造一面照片墙,记录下生活中的精彩瞬间。

    c5075e7f1ef9117751d5a2c40ae00edd.png

    图片来源/尖叫设计旗舰店截图

    组合照片墙

    家中沙发后面墙上的空间可以充分利用起来,一个大的相框占据一面墙显得单调又死板。多个大小不一的相框,随意地摆放组合,或拼成心形、圆形等简单的形状,会显得富有趣味。里面可以放上自己拍的美丽风景,也可以放上一张全家福。相框的质地可以根据自己家的风格来选择,新中式风格可以选择深色的木质相框,北欧风格则可以选择原木色或白色的相框,而现代风格则可以选择金色金属质地的相框。

    e7000d52c8e03ebf8a17a062c1188d8a.png

    图片来源/umbra旗舰店截图

    小瀑布相框

    原生态木质的置物架,加上瀑布造型悬空设计长短不一的金属链条,虽然可以收纳的照片不多,但链条下方连接的方形夹子设计,可方便照片每段时间更换一次,保持照片墙的新鲜感。置物架的设计增加了实用功能,放置在玄关的走廊处,进门时可以将钥匙、钱包等小物品放在上面。层次分明的创意构思,配上充满美感的照片,推开大门,照片墙这一小细节一定让人眼前一亮。

    80f86b75967a4725e4d0667fb725a80e.png

    图片来源/UrbanOutfitters海外旗舰店截图

    铁艺网格照片墙

    铁艺元素在家居生活中的应用越来越多,铁艺的桌子、椅子、摆件,硬朗的线条简约利落。铁艺网格和照片搭配起来打造一面照片墙又让家别有一番风味,不同颜色的铁艺又是不一样的感觉,黑色简约、金色时尚、粉色温馨,交错的线条穿插着错落有致的照片,充满设计感。除了在网格上面夹一些照片,还可以在网格上挂几个置物架,用来放置小盆栽,让空间显得更有生气。将铁艺网格置于书桌前的空墙上,装点上日常美照或小卡片,让平淡的白墙生动立体起来。

    9652de2dbb3372d2305f989dc727eb38.png

    图片来源/宜家家居官方网站截图

    LED灯照片墙

    将LED灯随意地挂在墙上,形成几道交错的弧线,再把精心挑选的照片没有规则地夹在弧线上的任意一处,就可轻松打造一面ins风的照片墙。插上电源,LED发出暖黄色的柔和灯光给居室镀上了一层浪漫的色彩,在星星点点梦幻的灯光中,欣赏这些照片又多了几分趣味。这种照片墙十分灵活,照片可以随时添加更换,来记录自己生活的最新动态。

    新京报记者 刘旭 编辑 彭雅莉 校对 李铭

    图片来源 品牌旗舰店截图、品牌官方网站截图

    展开全文
  • 可是很多人,都会将这种复杂格式报表与BI系统中拖拽出来的报表混为一谈,虽然有一些BI工具能做报表,但是其实多少还是有点差距的,不然数据和报表开发岗位为什么要存在呢? 可仅仅是为了数据处理。 在某个...

    这个,见过吗?

    IT部领导总结:让报表又快又好的技巧,也能做成养老工作

     

    很多人一看见就很熟悉了,没错,这就是报表,那个谁也逃不过的复杂报表,而且这只是它的一种形式罢了,还有这种:

    IT部领导总结:让报表又快又好的技巧,也能做成养老工作

     

    带数据的表格和图表就都是报表,像工资表,考勤表,资产负载表等等都是报表。

    可是很多人,都会将这种复杂格式报表与BI系统中拖拽出来的报表混为一谈,虽然有一些BI工具能做报表,但是其实多少还是有点差距的,不然数据和报表开发岗位为什么要存在呢?

    可不仅仅是为了数据处理。

    IT部领导总结:让报表又快又好的技巧,也能做成养老工作

     

    在某个下午,老板给你一摞纸和数据,“就照这个做吧”,随便选一张就能搞个两三天,运气坏了折腾一礼拜也不是多罕见的事,加班到天昏地暗也不一定能做好,到头来还是得找会代码的或者自己写代码。

    而且我想,很多做过报表的人都会有这样的感觉:业务人员总是到处提报表,重复的可能性很大,口径还乱七八糟,还会不停地催!这真的很让人心累。

    但其实,有很多方法解决报表问题。先说价值吧,很多人就想着做大数据、数据挖掘等,但是脱去外壳,报表的价值才是基础的和有效的。

    IT部领导总结:让报表又快又好的技巧,也能做成养老工作

     

    只要报表效率提升那么一点点,其创造的价值就会很大,比如财务报表,领导根据实时数据直接调整业务,整个效率就不一样了。

    那么,从个人的角度上来看,如何去提高报表效率呢?我觉得抛开那些虚的文化、架构、沟通,报表工具比什么都重要。

    那 Excel 是不是也算报表工具?广义上讲当然也算,但 IT 界说的报表工具是个狭义概念,主要指用于制作企业应用中的报表的工具。

    但查询的报表是随着时间变化的,比如本月的销售额每天都会变化,excel做不到实时变化,所以这边还是要看其他的。

    IT部领导总结:让报表又快又好的技巧,也能做成养老工作

     

    提高效率的话,应该使用大数据技术的报表工具,FineReport就是提高报表效率的利器,在刚刚开始的时候,那时候IBM和SAP还在市场上,可现在呢?大厂没了,却出来一堆小公司,别说IDC了,连我都看不上。

    所以看一个工具行不行,看它存在的时间和市场认可度就可以了,我就点到为止吧。

    其实你不仅可以用FR做数据填报、录入、查询,而且做可视化大屏什么的都是Ok的,把效率提上来了,不比埋头苦干强?

    现在就做个对比,FR怎么提高做报表的效率的?也会涉及传统报表方式的对比。

    1、简单

    你都要用报表工具了,如果不能对以前的工作模式产生变化,那你用它的意义在哪里?

    FR可以说是低代码工具了,虽然达不到取代IT人员的地位,但是也为很多封装好的功能写了无数的代码了,报表开发人员都是不程序员出身,Java、php等语言难度不小,所以FR只需要会简单的sql就可以进行企业级报表的开发了。

    类Excel的设计器和拖拽就能生成的图表,节约了很多代码、函数的时间。

    IT部领导总结:让报表又快又好的技巧,也能做成养老工作

     

    2、模板套用

    你要形成自己的模板库,而不是有需求就完成,那和工具人有什么区别?

    相比于不停地接需求,有很多模板可以直接用,修改的话也可以实时更新,这就很方便了,在现在的报表工具里,这可以是一个挺重要的功能了。

    FR在这一块做的还算不错,内置很多模板:

    IT部领导总结:让报表又快又好的技巧,也能做成养老工作

     

    你要的可视化大屏,也能有模板复用。

    IT部领导总结:让报表又快又好的技巧,也能做成养老工作

     

    3、效率

    (1)SQL语句可视化编辑

    IT部领导总结:让报表又快又好的技巧,也能做成养老工作

     

    (2)报表原型设计

    从excel到拖拽画出原型,我就不多说了吧。

    (3)需求变更

    只需简单的修改模板的设计样式或者数据源,就能实现实时的变更。

    传统代码开发模式下,需要修改代码,修改完后还要进行各种测试,耗时长,效率低,FineReport开发的模板,可以零编码的方式进行调整修改,快速响应业务部门的调整需求。

    4、复用功能

    报表中的各种模块,如果想要调整或者变成统一的样式,效率肯定会降低。

    如果在设计器中准备好一些组件作为模板,制作效率将提升。

    IT部领导总结:让报表又快又好的技巧,也能做成养老工作

     

    我来总结一下吧。

    其实除了做报表和开发报表的能提高效率,目前企业内部和业务人员也能有不少的改进空间。

    企业内部,应该重视报表,形成数据的氛围,不然IT人员干一个月就跑路,你这数据也不能长久。

    业务上,应该把所有的报表集中管理,或者用到BI工具,能自己分析,那最好不过了,但是目前来说应用情况还是差一点。

    展开全文
  • 总结: 事件处理机制一般用Adapter形式 常用Monitor继承Adapter   线程每秒都在不停地刷新Runnable接口熟练 ...懒汉式:把main函数写在class里面 ...public static final int定义一些常量,不能实例化,一变全变

    总结:

    事件处理机制一般用Adapter形式

    常用Monitor继承Adapter

     

    线程每秒都在不停地刷新Runnable接口熟练

     

    懒汉式:把main函数写在class里面

     

    枚举

    enum  color {red,blue,green,write};

    color c=red;

     

    public static final int定义一些常量,不能实例化,一变全变,不能改变

    代码重构
    将以后可能需要多处改变的量定义为常量

     

    new 一个tank

    tank的draw 从paint里面抽取,KeyPressed从KeyMonitor里面抽取

     

    把tankClient的引用当做参数传入tank,missile里面去,当一个大管家

     

    ArrayList来装载炮弹misssile,定义生命值,死亡就remove

    以及超级for循环的使用

     

    定义友好量,判断是自己人还是敌人   

     

    爆炸这种动画用一个数组来存储,改变脚标,改变值

     

    superFire很简单

    booldBar也很简单

     

    怎么生成压缩格式的jar忘了!!!

    怎么生成文档也忘了!!!

     

    TankClient.java 

    package ytdx.ruanjian;
    import java.awt.Color;
    import java.awt.Frame;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.util.ArrayList;
    import java.util.List;
    
    
    class TankClient extends Frame 
    {
    	public static  final int GAME_WIDTH=800;
    	public static final int GAME_HEIGHT=600;
    	
    	Tank tank=new Tank(50, 500,true,Tank.Direction.STOP,this);
    		
    	List<Tank> tanks=new ArrayList<Tank>();
    	List<Missile> missiles=new ArrayList<Missile>();//容器来存炮弹
    	List<Explode> explodes=new ArrayList<Explode>();
    	
    	private Wall wall=new Wall(375, 100, this);
    	private Blood blood=new Blood();
    		
    	Image offscreenImage =null;
    	
    	TankClient ()
    	{
    		for(int i=0;i<15;i++)
    		{
    			tanks.add(new Tank(50+40*(i+1), 50, false,Tank.Direction.D,this));
    		}
    		
    		setBounds(10,10,GAME_WIDTH,GAME_HEIGHT);
    		setVisible(true);
    		setTitle("TankWar");
    		setResizable(false);
    		setBackground(Color.GREEN);
    		this.addKeyListener(new KeyMonitor());
    		this.addWindowListener(new WindowAdapter() {
    			public void windowClosing(WindowEvent e) {
    				System.exit(0);
    			}
    		});
    		new Thread(new paintThread()).start();
    	}
    	
    	public void paint(Graphics g) {
    		
    		
    		tank.draw(g);
    //		tank.tankAndwall(wall);
    		tank.tankAndblood(blood);
    		tank.tankAndtanks(tanks);
    		for(Missile m:missiles)
    		{
    			m.hitTanks(tanks);
    			m.hitTank(tank);
    			m.hitWall(wall);
    			m.draw(g);			
    		}
    		for(Explode e:explodes)
    		{
    			e.draw(g);
    		}
    			
    		for(Tank tank:tanks)
    		{
    			tank.draw(g);
    			tank.tankAndwall(wall);
    			tank.tankAndtank(this.tank);
    			tank.tankAndtanks(tanks);
    		}
    		wall.draw(g);
    		blood.paint(g);
    		
    		g.drawString("tanks count"+" "+tanks.size(), 10, 50);
    		g.drawString("missile count"+" "+missiles.size(), 10, 70);
    		g.drawString("explodes count"+" "+explodes.size(), 10, 90);
    		g.drawString("tank life"+" "+tank.getLife(), 10, 110);
    						
    	} 
    
    	public void update(Graphics g) {
    		if(offscreenImage==null)
    		{
    			offscreenImage=this.createImage(GAME_WIDTH,GAME_HEIGHT);
    		}
    		Graphics gofferScreen=offscreenImage.getGraphics();
    		Color c=gofferScreen.getColor();
    		gofferScreen.setColor(Color.GREEN);
    		gofferScreen.fillRect(0, 0, GAME_WIDTH, GAME_HEIGHT);
    		paint(gofferScreen);
    		g.drawImage(offscreenImage, 0, 0, null);
    	}
    	public static void main(String[] args) 
    	{
    		TankClient client=new TankClient();
    	
    	}
    private class paintThread implements Runnable
    {
    	public void run() {
    		while(true)
    		{
    			repaint();
    			System.out.println("线程不停地重画");
    			try {
    				Thread.sleep(30);
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    		}
    		
    		
    	}
    	
    }
    
    private class KeyMonitor extends KeyAdapter
    {
    
    	public void keyReleased(KeyEvent e) {
    		tank.keyReleased(e);
    	}
    
    	public void keyPressed(KeyEvent e) {
    		tank.keyPressed(e);
    		int Key=e.getKeyCode();
    		switch(Key)
    		{
    		case KeyEvent.VK_F1:
    			if(tanks.size()==0)
    			{
    				for(int i=0;i<10;i++)
    				{
    					tanks.add(new Tank(50+60*(i+1), 50, false,Tank.Direction.D,TankClient.this));//类名。this
    				}
    			}
    		}
    		
    		}
    			
    	}
    	
    }
    
    
    
    

    Tank.java


     

    package ytdx.ruanjian;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Rectangle;
    import java.awt.event.KeyEvent;
    import java.util.List;
    import java.util.Random;
    
    
    public class Tank {	
    	
    	public static final int XSPEED=5;
    	public static final int YSPEED=5;
    	
    	public static final int WIDTH = 30;
    	public static final int HEIGHT = 30;
    	
    	public static Random random=new Random();///随机产生器Random
    	private int step=random.nextInt(12)+3;
    	
    	TankClient tc=null;
    	
    	private int x,y;
    	private int Oldx,Oldy;
    	private boolean bL=false,bU=false,bR =false,bD=false;
    	enum Direction {L,LU,U,RU,R,RD,D,LD,STOP};
    	
    	private Direction dir=Direction.STOP;
    	private Direction ptDir=Direction.D;
    	
    	private boolean good;
    	public boolean isGood() {
    		return good;
    	}
    	public void setGood(boolean good) {
    		this.good = good;
    	}
    	private boolean live=true;
    		
    	public boolean isLive() {
    		return live;
    	}
    	public void setLive(boolean live) {
    		this.live = live;
    	}
    	
    	private int life=100;
    	private BloodBar bar=new BloodBar();	
    	public int getLife() {
    	return life;
    	}
    	public void setLife(int life) {
    	this.life = life;
    	}
    	public Tank(int x, int y,boolean good,Direction dir) 
    	{
    		this.x = x;
    		this.y = y;
    		this.good=good;
    		this.dir=dir;
    	}
    	public Tank(int x, int y,boolean good,Direction dir,TankClient tc) 
    	{
    		this(x,y,good,dir);
    		this.tc=tc;
    		
    	}
    /*
     * 
     */
    	public void draw(Graphics g)
    	{
    		
    		if(!live)
    			{
    			tc.tanks.remove(this);
    			return;			
    			}
    		if(isGood())
    			bar.draw(g);
    		Color c=g.getColor();
    		if(good)
    		g.setColor(Color.RED);
    		else 
    		g.setColor(Color.BLUE);	
    		g.fillOval(x, y, WIDTH, HEIGHT);
    		g.setColor(c);
    		//画炮筒
    		g.setColor(Color.BLACK);
    		switch(ptDir)
    		{
    		
    		case L:
    			g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x, y+Tank.HEIGHT/2);
    			break;
    		case LU:
    			g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x, y);
    			break;
    		case U:
    			g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x+Tank.WIDTH/2, y);
    			break;
    		case RU:
    			g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x+Tank.WIDTH, y);
    			break;
    		case R:
    			g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2,x+Tank.WIDTH, y+Tank.HEIGHT/2);
    			break;
    		case RD:
    			g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2,x+Tank.WIDTH, y+Tank.HEIGHT);
    			break;
    		case D:
    			g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2,x+Tank.WIDTH/2, y+Tank.HEIGHT);
    			break;
    		case LD:
    			g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2,x, y+Tank.HEIGHT);
    			break;
    		
    		}
    		
    		move();
    	}
    	
    	public void move ()
    	{
    		Oldx=x;
    		Oldy=y;
    		switch(dir)
    		{
    		case L:
    			x -= XSPEED;
    			break;
    		case LU:
    			x -= XSPEED;
    			y -= YSPEED;
    			break;
    		case U:
    			y -= YSPEED;
    			break;
    		case RU:
    			x += XSPEED;
    			y -= YSPEED;
    			break;
    		case R:
    			x += XSPEED;
    			break;
    		case RD:
    			x += XSPEED;
    			y += YSPEED;
    			break;
    		case D:
    			y += YSPEED;
    			break;
    		case LD:
    			x -= XSPEED;
    			y += YSPEED;
    			break;
    		case STOP:
    			break;
    			
    		}
    		if(x < 0) x = 0;
    		if(y < 30) y = 30;
    		if(x + Tank.WIDTH > TankClient.GAME_WIDTH) x = TankClient.GAME_WIDTH - Tank.WIDTH;
    		if(y + Tank.HEIGHT > TankClient.GAME_HEIGHT) y = TankClient.GAME_HEIGHT - Tank.HEIGHT;
    		
    		//每次move后根据Tank新的方向确定炮筒的方向
    		if(this.dir!=Direction.STOP)
    			this.ptDir=this.dir;
    		
    		if(!good)
    		{
    			Direction dirs[]=Direction.values();/方向转化成数组
    			if(step==15)
    			{
    				step=random.nextInt(12)+3;
    				int d=random.nextInt(dirs.length);
    				dir=dirs[d];
    			}
    			if(random.nextInt(40)>38)
    			this.fire();
    			step++;
    		}
    		
    	}
    	public void stay()
    	{
    		x=Oldx;
    		y=Oldy;
    	}
    	
    	public void keyPressed(KeyEvent e) {
    		int key = e.getKeyCode();
    		switch(key) {
    		case KeyEvent.VK_F2:
    			if(!this.isLive())
    			{
    				this.live=true;
    				this.life=100;
    			}
    			break;
    		case KeyEvent.VK_CONTROL:
    			fire();
    			break;
    		case KeyEvent.VK_A:
    			superFire();
    			break;
    		case KeyEvent.VK_S:
    			powerfulFire();
    			break;
    		case KeyEvent.VK_LEFT :
    			bL = true;
    			break;
    		case KeyEvent.VK_UP :
    			bU = true;
    			break;
    		case KeyEvent.VK_RIGHT :
    			bR = true;
    			break;
    		case KeyEvent.VK_DOWN :
    			bD = true;
    			break;
    		}
    		locateDirection();
    	}
    	public void keyReleased(KeyEvent e) {
    		// TODO Auto-generated method stub
    		int key = e.getKeyCode();
    		switch(key) {
    		
    		case KeyEvent.VK_LEFT :
    			bL = false;
    			break;
    		case KeyEvent.VK_UP :
    			bU = false;
    			break;
    		case KeyEvent.VK_RIGHT :
    			bR = false;
    			break;
    		case KeyEvent.VK_DOWN :
    			bD = false;
    			break;
    		}
    		
    		locateDirection();
    		
    	}
    	
    	void locateDirection() {
    		if(bL && !bU && !bR && !bD) dir = Direction.L;
    		else if(bL && bU && !bR && !bD) dir = Direction.LU;
    		else if(!bL && bU && !bR && !bD) dir = Direction.U;
    		else if(!bL && bU && bR && !bD) dir = Direction.RU;
    		else if(!bL && !bU && bR && !bD) dir = Direction.R;
    		else if(!bL && !bU && bR && bD) dir = Direction.RD;
    		else if(!bL && !bU && !bR && bD) dir = Direction.D;
    		else if(bL && !bU && !bR && bD) dir = Direction.LD;
    		else if(!bL && !bU && !bR && !bD) dir = Direction.STOP;
    	}
    	public Missile fire() {
    		if(!live)return null;//死了就别发炮弹了》》》》》》》》》》》》
    		int x = this.x + Tank.WIDTH/2 - Missile.WIDTH/2;
    		int y = this.y + Tank.HEIGHT/2 - Missile.HEIGHT/2;
    		Missile m = new Missile(x, y, ptDir,good,tc);
    		tc.missiles.add(m);
    		return m;
    	}
    	public Missile fire(Direction dir) {
    		if(!live)return null;//死了就别发炮弹了》》》》》》》》》》》》
    		int x = this.x + Tank.WIDTH/2 - Missile.WIDTH/2;
    		int y = this.y + Tank.HEIGHT/2 - Missile.HEIGHT/2;
    		Missile m = new Missile(x, y, dir,good,tc);
    		tc.missiles.add(m);
    		return m;
    		
    	}
    	public Missile powerfulFire() {
    		if(!live)return null;//死了就别发炮弹了》》》》》》》》》》》》
    		int x = this.x + Tank.WIDTH/2 - Missile.WIDTH/2;
    		int y = this.y + Tank.HEIGHT/2 - Missile.HEIGHT/2;
    		for(int i=-1;i<=1;i++)
    		{
    			if(ptDir==Direction.L||ptDir==Direction.R)
    			{
    				Missile m = new Missile(x, y+20*i, ptDir,good,tc);
    				tc.missiles.add(m);
    			}
    			else
    				{
    				Missile m = new Missile(x+20*i, y, ptDir,good,tc);
    				tc.missiles.add(m);
    				}
    		}
    		return null;
    	}
    	public void superFire()
    	{
    		Direction dir[]=Direction.values();
    		for(int i=0;i<8;i++)
    		{
    			fire(dir[i]);
    		}
    	}
    	
    	public Rectangle getRect()
    	{
    		return new  Rectangle(x, y, WIDTH, HEIGHT);
    	}
    	
    	public boolean tankAndwall(Wall wall)
    	{		
    		if(this.live&&this.getRect().intersects(wall.getRect()))
    			{
    				stay();//this.dir=Direction.STOP;粘棉花糖现象//live=false;坦克消失
    				return true;
    			}
    		return false;
    	}
    	public boolean tankAndtank(Tank tank)
    	{	
    		if(this!=tank&&this.live&&this.getRect().intersects(tank.getRect()))
    			{
    				stay();
    				return true;
    			}
    		return false;
    	}
    	public boolean tankAndtanks(List<Tank> tanks)
    	{	
    		for(Tank tank:tanks)
    		{
    			if(this.tankAndtank(tank))
    				return true;
    		}
    		return false;
    	}
    	public boolean tankAndblood(Blood blood)
    	{	
    		if(this.live&&blood.isLive()&&this.getRect().intersects(blood.getRect()))
    			{
    				if(this.good&&this.life<80)
    					{
    					this.life+=20;
    					}
    				blood.setLive(false);
    					return true;
    			}
    		return false;
    	}
    	private class BloodBar
    	{
    		public void draw(Graphics g)
    		{
    			Color c=g.getColor();
    			g.setColor(Color.PINK);
    			g.drawRect(x, y-10, WIDTH, 10);
    			g.fillRect(x, y-10, WIDTH*life/100, 10);
    			g.setColor(c);
    		}
    	}
    }
    


    Missible.java

    package ytdx.ruanjian;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Rectangle;
    import java.util.List;
    
    
    
    public class Missile {
    	
    	public static final int XSPEED=10;
    	public static final int YSPEED=10;
    	public static final int WIDTH = 10;
    	public static final int HEIGHT = 10;
    	
    	private int x,y;
    	Tank.Direction dir;
    	
    	private TankClient tc;
    
    	private boolean live=true;
    	private boolean good;
    	
    	public boolean isLive() {
    		return live;
    	}
    	
    	public Missile(int x, int y,Tank.Direction dir) {
    		super();
    		this.x = x;
    		this.y = y;
    		this.dir = dir;
    	}
    	public Missile(int x, int y, Tank.Direction dir,boolean good, TankClient tc) {
    		super();
    		this.x = x;
    		this.y = y;
    		this.dir = dir;
    		this.good=good;
    		this.tc = tc;
    	}
    	
    	public void draw (Graphics g)
    	{
    		if(!live)
    		{
    			tc.missiles.remove(this);
    			return;
    		}
    		Color c =g.getColor();
    		g.setColor(Color.BLACK);
    		g.fillOval(x, y, WIDTH, HEIGHT );
    		g.setColor(c);
    		move();
    			
    	}
    	public void move ()
    	{	
    		switch(dir)
    		{
    		case L:
    			x -= XSPEED;
    			break;
    		case LU:
    			x -= XSPEED;
    			y -= YSPEED;
    			break;
    		case U:
    			y -= YSPEED;
    			break;
    		case RU:
    			x += XSPEED;
    			y -= YSPEED;
    			break;
    		case R:
    			x += XSPEED;
    			break;
    		case RD:
    			x += XSPEED;
    			y += YSPEED;
    			break;
    		case D:
    			y += YSPEED;
    			break;
    		case LD:
    			x -= XSPEED;
    			y += YSPEED;
    			break;
    		case STOP:
    			
    			break;
    			
    		}
    		if(x<0||y<0||x>TankClient.GAME_WIDTH||y>TankClient.GAME_HEIGHT)
    				live=false;
    			
    	}	
    	public Rectangle getRect()
    	{
    		return new  Rectangle(x, y, WIDTH, HEIGHT);
    		
    	}
    	public boolean hitTank(Tank t)
    	{
    		if(this.live&&this.getRect().intersects(t.getRect())&&t.isLive()&&t.isGood()!=this.good)
    			{
    				if(t.isGood())
    				{
    					t.setLife(t.getLife()-20);
    					if(t.getLife()<=0)
    						t.setLive(false);
    				}
    				else
    					t.setLive(false);
    				
    				live=false; 
    				Explode e=new Explode(x, y, tc);
    				tc.explodes.add(e);
    				return true;
    			}
    			
    		return false;
    	}	
    	public boolean hitTanks(List<Tank>tanks)
    	{
    		for(Tank tank:tanks)
    		{
    			if(hitTank(tank))
    			return true;
    		}
    		return false;
    	}
    	public boolean hitWall(Wall wall)
    	{
    		if(this.live&&this.getRect().intersects(wall.getRect())&&this.good==false)//穿墙啊啊啊啊啊啊啊
    			{
    				live=false; 
    				return true;
    			}			
    		return false;
    	}	
    }
    							
    


    Explode.java

     

    package ytdx.ruanjian;
    import java.awt.Color;
    import java.awt.Graphics;
    
    
    public class Explode {
    	
    	int x,y;
    	private boolean live =true;
    	private TankClient tc;
    
    	public Explode(int x, int y, TankClient tc) {
    		super();
    		this.x = x;
    		this.y = y;
    		this.tc = tc;
    	}
    	
    	int[] diameter ={4,7,12,18,26,32,49,60,230,14,6};
    	int step=0;
    		
    	public void draw (Graphics g)
    	{
    		
    		if(step==diameter.length)
    		{
    			live =false;
    			step=0;
    			return;
    		}
    		if(!live)
    		{
    			tc.explodes.remove(this);
    			return;
    		}
    		Color c=g.getColor();
    		g.setColor(Color.ORANGE);
    		g.fillOval(x, y, diameter[step],diameter[step] );
    		g.setColor(c);
    		step++;
    		
    	}
    
    }


    Wall.java

    package ytdx.ruanjian;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Rectangle;
    
    
    public class Wall {
    	private int WIDTH=50;
    	private int HEIGHT=400;
    	private int x,y;	
    	private TankClient tc=null;
    	
    	public Wall(int x, int y) {
    		super();
    		this.x = x;
    		this.y = y;
    	}
    	public Wall(int x, int y, TankClient tc) {
    		super();
    		this.x = x;
    		this.y = y;
    		this.tc = tc;
    	}
    	public void draw(Graphics g)
    	{
    		Color c=g.getColor();
    		g.setColor(Color.ORANGE);
    		g.fillRect(x, y, WIDTH, HEIGHT);
    		g.setColor(c);
    	}
    	public Rectangle getRect()
    	{
    		return new  Rectangle(x, y, WIDTH, HEIGHT);
    		
    	}
    
    }
    


    Blood.java

    package ytdx.ruanjian;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Rectangle;
    
    
    public class Blood {
    	private int x,y;
    	private int width=20;
    	private int height=20;
    	private int step=0;
    	private boolean live=true;
    	public boolean isLive() {
    		return live;
    	}
    	public void setLive(boolean live) {
    		this.live = live;
    	}
    
    	private int a[][]={
    			{100,100},
    			{100,125},{100,150},{100,175},
    			{100,200},
    			{125,200},{150,200},{175,200},
    			{200,200},
    			{200,175},{200,150},{200,125},
    			{200,100},
    			{175,100},{150,100},{125,100}
    			
    	};
    	
    	public Blood() {
    		super();
    		this.x = a[step][0];
    		this.y = a[step][1];
    	}
    	public void paint(Graphics g)
    	{
    		if(!live)return;
    		Color c=g.getColor();
    		g.setColor(Color.MAGENTA);
    		g.fillRect(x, y, width, height);
    		g.setColor(c);
    		move();
    	}
    	
    	private void move() {
    		step++;
    		if(step==a.length)
    		{
    			step=0;
    		}
    		this.x = a[step][0];
    		this.y = a[step][1];
    	}
    
    	public Rectangle getRect()
    	{
    		return new  Rectangle(x, y, width, height);
    	}
    }
    


     

    展开全文
  • 想当初自己刚接触淘客的时候什么都不会,只会用qq等聊天工具,但是自己又不是很擅长和别人聊天,我就到处去别人操作淘宝客的经验分享,不用说你也知道别人既然分享出来了多数这种方法估计已经是末期或者操作期限...

    想当初自己刚接触淘客的时候什么都不会,只会用qq等聊天工具,但是自己又不是很擅长和别人聊天,我就到处去看别人操作淘宝客的经验分享,不用说你也知道别人既然能分享出来了多数这种方法估计已经是末期或者操作期限快到头了。

    无意间我逛到一个分享关于淘客经验的个人博客,我从上面学到了很多淘客知识也从上面知道了还能用网站操作淘宝客,对于我这种不擅长聊天的人不是更合适吗?

    我就联系了博客的站长和他详细请教了怎么做淘宝客可以说获益良多,我还从他博客看到了他在做淘宝客培训的信息,当时的淘宝客培训费就要2000+,对于我这个打工仔来讲2000+可是我一个月的工资呢我犹豫了,毕竟自己的资金不是非常充裕也害怕网上的淘宝客培训不靠谱被骗,之后的半年时间我都在他的公开免费群待着观察,在这半年的时间学习我从他博客分享的方法技巧做淘宝客也赚到了一个月千把块钱。

    由于我从他分享的文章经验做淘宝客推广赚到了钱,所以想参加他的淘宝客培训学习更多的淘客推广方法,但是经过半年多的时间他的淘宝客培训费用也从原来的2000+涨到了3000+,我知道我从他这里是可以学习到我想要的知识的我这次毫不犹豫就给他付款参加了他的淘宝客培训课程。

    在之后的培训课程中我学会了qq群推广,网盟cps推广和网站seo淘宝客等许多方法,我的第一桶金是操作网盟cps赚的相当于我交学费的钱,因为网站seo淘宝客操作的过程都需要时间去积累网站的排名,所以前期都是不赚钱的。

    我的淘宝客seo网站在做了三个月之后开始盈利1000+,过了半年之后基本盈利在万元左右,而且现在网站我基本不太用管理,这种利用网站seo操作淘客的方法也是我非常喜欢的。


    上面是我淘宝客网站的每个月的收入,如果你想问我的网站是什么类型的网站就免开尊口了,但是你可以去我的夜猫淘宝客分享博客看一些淘客经验文章哦。

    展开全文
  • 被逼急了什么事都能做出来吗?恐怕数学不行!恐怕公式不行!恐怕......自从开通专栏以来,常收到一些求公式的私信,相信也是被逼无奈才发出求助的。回答过程中也发现一些有趣的现象,一般发过来的表格如果好看的,...
  • 以前看过一套 JavaScript 题目,借花献佛拿出来分享一下。附带了自己的理解和答案。有争议的地方,欢迎大家指出和讨论。题目一(function(){ return typeof arguments; })();复制代码答案:“object”arguments是...
  • 就像我们小说一样,我们完小说都得懂,里面的人物事件都搞得清清楚楚,可这代表我们写得出来。对于我们这些码农来说,有些代码是起来容易,起来也容易。记得刚参加工作的时候,一个牛人跟我说,一...
  • 我的第一个公司的总监可以说是我的好老师,我总想起他经常对我说的一句话就是:写代码不是看出来的想出来的,而是调出来的,然后我就熟练的掌握了androidstudio的debug方法,我深深的感觉到了这句话的用处,从此...
  • 系统专家是很宝贵的,他们的解决方案有时候从外在起来很easy,就是加了两行代码吗?但是知道加什么代码、在哪里加代码,是需要长时间的技术积淀和对系统深入的理解的。 我们在知识上的漏洞无法预知,只有随着...
  • 南京职称蒋老师,在线解答职称专利相关问题,欢迎大家关注我!...蒋老师最近在整理各地的职称文件,为2020年职称申报工作准备,找出来一份河南的高工答辩评分文件,上面的内容刚好可以给大家个参考,看看职称评...
  • 老话说的很对,以往那些觉得以后用上可以跳的东西在关键时候都会跳出来给你当头一棒!固然,即使社会如此之动荡,人心如此之浮躁。踏踏实实学点东西,弄明白点东西,这才是根本。 1. C语言数据类型 1 #...
  • 减肥不易,增肥更不易,常有朋友诉苦,我吃的真的很多,每顿也吃的超饱,可是就是长肉,别人都说我像根麻杆,呜呜。我们容易胖的朋友可能羡煞这群吃不胖的人,可是瘦子也有瘦子的痛和苦。比如床稍微有点硬躺床上就...
  • 最近要3D Touch,它刚出来,的人可能会不是很多,有没有看过,给我个demo或者一些建议,谢谢啦~~~~
  • 走过路过的朋友们,瞧一瞧,了啊,直播设备亏本大甩卖了啊,买也来摸一摸,这年头摸下地摊货,就是OUT了啊,下面我就来介绍下这个非地摊货的直播设备了。 如果大家还熟悉我们的直播设备,可以进到以下...
  • 培训班的学生基本都是一样,填鸭式培训出来,然后包装简历找工作,至少会有一半的人找到工作,然后转行去其他的工作。一般找到工作的,都是一些学习能力比较强,之前学编程的。而那些学历比较低,学习能力又...
  • 点击查看时钟特效极简主义,...抠完代码,能看懂了,就算是学会了,但是,说的难听点这样的学习方式其实是自断前程的学习方法,若是一门月薪万的技术有那么简单学习,那么怎么还会有那么多人找到工作呢?学习...
  • 文:蜉蝣每个孩子都会犯错:在你需要安静的时候大吵大闹;把你刚打扫的房间弄得一团乱;小心把水撒了,把碗摔了,把你的口红拧了.........1、孩子犯错后,责备是最无能的教育看过一则新闻,一个9岁的孩子,因为...
  • 开学之际,学生不能去学校,只能通过线上学习,那么各大教育直播平台成为了学校的选择,为了让学生能够从直播中获取知识,学校也不能全部挤在同一个直播平台上,一个直播平台也不能同时容纳那么多人。 因此,教育...
  • 程序员不能说自己不行啊

    万次阅读 多人点赞 2020-06-25 14:47:33
    给安排了工作,今天第一次没人带,自己上手搞代码,搞不出,明明挺简单的功能,自己还是不出,知道从哪里学习,想赶快熟悉工作,可是自己的能力不行,在地铁上常二哥原创的作品,平常积极在,超级希望自己...
  • 做出来需要另外放盐的。还有效杀菌去腥。彼此忘记曾有的恩怨。大蒜。家里有普通面粉就可以搞定了。只要掌握好配方。记得小时候。这个方法既快又省事。食用油。反而会更加喜欢每个地区所没尝试的食物。双子座的...
  • 我觉得最好的面试状态就是自己真正做...而不是了一大堆无人机算法,SLAM算法,但是没有自己做过,实现过,就像当初异常检测,了那么多方法论文,但是没有真正自己实现过,你讲起来就是虚的。 这就是最好的...
  • 一些人想自媒体,但是一到真正写文章的时候,就让自己懵比,总是一下笔就知道怎么入手,感觉没有什么东西可以写,或者是写出来的东西不够干货,发出去没人什么之类。从来没有尝试写一篇思路清晰、结构完整的...
  • 今天就教大家用蒸烤箱来多种口味的白菜价披萨,务必让每个人都吃上好吃又实惠的披萨~外面的披萨制作一个时间长,看过最快的视频一个披萨可以10来秒装点完,然后拿去烘烤。对于顾客来说,披萨更多的费用在包装...
  • 写代码和架构是两个不同的事情。 什么是架构师,架构师要什么事情,为什么Java的领域里,会更注重架构师?...后来懂了一点点代码,去写增删改查,更是体会不出来架构的概念,就是Sql语句吗?明
  • 这是一家高档面馆,有多高档呢,没有来的人可能感觉很贵,一碗面怎么着也得要20以上,他们的规模,他们的装修,这个价算是少的。 毕竟现在街边随便一个面馆,吃碗面都要15元左右,稍微像点样子的都十七八了。 ...
  • 分析过程整个过程一共分为三个步骤:数据来源(细节部分不做展开,代码已公开在GitHub上)基础分析(可以跳,一些基本的数据分析方法、流程)进阶分析(先来一张热力图,所有店铺的空间数据分析)数据来源利用爬虫...
  • 面试官随便针对一个知识点深入考察一下,就回答不出来,这样还怎么通过面试? 那么大厂到底面试到底需要哪些技术功底呢?这个就多了,不同公司的技术要求也一样,但是相同的点在于,大公司对于技术的要求都不会...
  • 我对他说,没创业的人能不能将知识付费当成创业项目,要没创业的人自己的实力如何?什么实力?就是没创业的人有没有制造付费知识的能力和营销知识付费的能力,如果某个没创业的人不但具备制造付费知识的...
  • 无论懂或完全懂python,这样的小游戏,你都可以直接开发出来,原因很简单:在详细教程里,会有从零基础开始,一步一步的教你完成这个python项目,而且在这个python推箱子游戏的过程中,你会接触并学到很多的...
  • 开始刷只有14分,后来改啊改,结合网上的答案,把自己的改成了22,有一个测试点始终过不去……哭辽……等着老宋什么时候有空帮我一下吧……QAQ 错误代码如下: #include <iostream> #include <...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,098
精华内容 839
关键字:

做过能不能看出来