Android_(游戏)打飞机04:绘画敌机、添加子弹

 

 

 

(游戏)打飞机01:前言  传送门

(游戏)打飞机02:游戏背景滚动  传送门

(游戏)打飞机03:控制玩家飞机   传送门 

(游戏)打飞机04:绘画敌机、添加子弹    传送门

(游戏)打飞机05:处理子弹,击中敌机,添加计分板   传送门

(游戏)打飞机06:后续  传送门

 

 

 

绘画敌机、添加子弹效果

 

 

package com.example.administrator.myapplication;import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.WindowManager;import java.util.ArrayList;
import java.util.List;
import java.util.Random;/*** Created by Administrator on 2018/8/9.*/public class dafeijiGameView extends SurfaceView implementsSurfaceHolder.Callback,Runnable,android.view.View.OnTouchListener{private Bitmap my;//自己private Bitmap baozha;//爆炸private Bitmap bg;//背景private Bitmap diren;//敌人private Bitmap zidan;//子弹private Bitmap erjihuancun;//二级缓存private WindowManager windowManager;//获得界面长宽高private int display_w;  //界面的宽private int display_h;  //界面的高private ArrayList<GameImage> gameImage = new ArrayList();private ArrayList<Zidan> zidans = new ArrayList<Zidan>();public dafeijiGameView(Context context) {super(context);getHolder().addCallback(this);//事件注册this.setOnTouchListener(this);}private void init(){//加载照片my= BitmapFactory.decodeResource(getResources(),R.drawable.my);baozha= BitmapFactory.decodeResource(getResources(),R.drawable.baozha);bg= BitmapFactory.decodeResource(getResources(),R.drawable.bg);diren= BitmapFactory.decodeResource(getResources(),R.drawable.diren);zidan= BitmapFactory.decodeResource(getResources(),R.drawable.zidan);erjihuancun=Bitmap.createBitmap(display_w,display_h, Bitmap.Config.ARGB_8888);gameImage.add(new BeijingImage(bg));    //先加入背景照片gameImage.add(new FeijiImage(my));gameImage.add(new DijiImage(diren));}FeijiImage selectfeiji;@Overridepublic boolean onTouch(View v, MotionEvent event) {//手接近屏幕产生的事件if(event.getAction()==MotionEvent.ACTION_DOWN){for(GameImage game: gameImage){if(game instanceof FeijiImage){FeijiImage feiji = (FeijiImage)game;//判断条件为真时选中飞机if(feiji.getX()<event.getX()&&feiji.getY()<event.getY()&&feiji.getX()+feiji.getWidth()>event.getX() &&feiji.getY()+feiji.getHeigth()>event.getY()){selectfeiji=feiji;}else{selectfeiji=null;}break;}}}else if(event.getAction()==MotionEvent.ACTION_MOVE){//移动鼠标if( selectfeiji!=null){selectfeiji.setX((int)event.getX()-selectfeiji.getWidth()/2);selectfeiji.setY((int)event.getY()-selectfeiji.getHeigth()/2);}}else if(event.getAction()==MotionEvent.ACTION_UP){//松开鼠标selectfeiji=null;}return true;}private interface GameImage{public Bitmap getBitmap();public int getX();public int getY();}private class Zidan implements GameImage{Bitmap zidan;private FeijiImage feiji;private int x;private int y;public Zidan(FeijiImage feiji,Bitmap zidan){this.feiji=feiji;this.zidan=zidan;x=(feiji.getX()+feiji.getWidth()/2)-25;//居中位置y=feiji.getY()-zidan.getHeight();}public Bitmap getBitmap() {y-=19;if(y<=-10){zidans.remove(this);}return zidan;}@Overridepublic int getX() {return x;}@Overridepublic int getY() {return y;}}private class DijiImage implements GameImage{private Bitmap diren = null;private List<Bitmap> bitmaps = new ArrayList<Bitmap>();private int x;private int y;public DijiImage(Bitmap diren){this.diren=diren;bitmaps.add(Bitmap.createBitmap(diren,0,0,diren.getWidth()/4,diren.getHeight()));bitmaps.add(Bitmap.createBitmap(diren,(diren.getWidth()/4)*1,0,diren.getWidth()/4,diren.getHeight()));bitmaps.add(Bitmap.createBitmap(diren,(diren.getWidth()/4)*2,0,diren.getWidth()/4,diren.getHeight()));bitmaps.add(Bitmap.createBitmap(diren,(diren.getWidth()/4)*3,0,diren.getWidth()/4,diren.getHeight()));y=-diren.getHeight();Random ran = new Random();x=ran.nextInt(display_w-(diren.getWidth()/4));}private int index=0;private int num =0;@Overridepublic Bitmap getBitmap() {Bitmap bitmap = bitmaps.get(index);//控制切换四个飞机的频率if(num == 7){index++;if(index == bitmaps.size()){index=0;}num=0;}y+=3;num++;if(y>display_h){gameImage.remove(this);}return bitmap;}@Overridepublic int getX() {return x;}@Overridepublic int getY() {return y;}}private class FeijiImage implements GameImage{private Bitmap my;private int x;private int y;private int width;private int heigth;private int getWidth(){return width;}private int getHeigth(){return heigth;}private List<Bitmap> bitmaps = new ArrayList<Bitmap>();private  FeijiImage(Bitmap my){this.my=my;bitmaps.add(Bitmap.createBitmap(my,0,0,my.getWidth()/4,my.getHeight()));bitmaps.add(Bitmap.createBitmap(my,(my.getWidth()/4),0,my.getWidth()/4,my.getHeight()));bitmaps.add(Bitmap.createBitmap(my,(my.getWidth()/4)*2,0,my.getWidth()/4,my.getHeight()));bitmaps.add(Bitmap.createBitmap(my,(my.getWidth()/4)*3,0,my.getWidth()/4,my.getHeight()));//得到战机的高和宽width=my.getWidth()/4;heigth=my.getHeight();x=(display_w - my.getWidth()/4)/2;y=display_h-my.getHeight()-30;}private int index=0;private int num =0;@Overridepublic Bitmap getBitmap() {Bitmap bitmap = bitmaps.get(index);//控制切换四个飞机的频率if(num == 7){index++;if(index == bitmaps.size()){index=0;}num=0;}num++;return bitmap;}@Overridepublic int getX() {return x;}@Overridepublic int getY() {return y;}public void setY(int y){this.y=y;}public void setX(int x){this.x=x;}}//负责背景照片的处理private class BeijingImage implements GameImage{private Bitmap bg;private BeijingImage(Bitmap bg){this.bg=bg;newBitmap = Bitmap.createBitmap(display_w,display_h, Bitmap.Config.ARGB_8888);}private Bitmap newBitmap = null;private int height = 0;public Bitmap getBitmap(){Paint p = new Paint();Canvas canvas = new Canvas(newBitmap);canvas.drawBitmap(bg,new Rect(0,0,bg.getWidth(),bg.getHeight()),new Rect(0,height,display_w,display_h+height),p);canvas.drawBitmap(bg,new Rect(0,0,bg.getWidth(),bg.getHeight()),new Rect(0,-display_h+height,display_w,height),p);height++;if(height==display_h){height=0;}return newBitmap;}public int getX(){return 0;}public int getY(){return 0;}}private boolean state = false;private SurfaceHolder holder;//绘画中心public void run() {Paint p1 = new Paint();int diren_num=0;//
        int zidan_num=0;try{while(state){if(selectfeiji!=null){if(zidan_num==10){zidans.add(new Zidan(selectfeiji,zidan));zidan_num=0;}zidan_num++;}Canvas newCanvas = new Canvas(erjihuancun);for(GameImage image:(List<GameImage>)gameImage.clone()){newCanvas.drawBitmap(image.getBitmap(),image.getX(),image.getY(),p1);}for(GameImage image:(List<GameImage>)zidans.clone()){newCanvas.drawBitmap(image.getBitmap(),image.getX(),image.getY(),p1);}if(diren_num==150){diren_num=0;gameImage.add(new DijiImage(diren));}diren_num++;Canvas canvas = holder.lockCanvas();canvas.drawBitmap(erjihuancun,0,0,p1);holder.unlockCanvasAndPost(canvas);Thread.sleep(10);}}catch(Exception e){}}@Overridepublic void surfaceCreated(SurfaceHolder holder) {}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {state = false;}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {//得到屏幕的宽和高display_w=width;display_h=height;init();this.holder=holder;state = true;new Thread(this).start();}}
dafeijiGameView.java

 

package com.example.administrator.myapplication;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;public class MainActivity extends AppCompatActivity{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//去掉标题// requestWindowFeature(Window.FEATURE_NO_TITLE);dafeijiGameView view =  new dafeijiGameView(this);setContentView(view);}}
MainActivity.java

 

实现过程

 

  绘制敌机

 

   private class DijiImage implements GameImage{private Bitmap diren = null;private List<Bitmap> bitmaps = new ArrayList<Bitmap>();private int x;private int y;public DijiImage(Bitmap diren){this.diren=diren;bitmaps.add(Bitmap.createBitmap(diren,0,0,diren.getWidth()/4,diren.getHeight()));bitmaps.add(Bitmap.createBitmap(diren,(diren.getWidth()/4)*1,0,diren.getWidth()/4,diren.getHeight()));bitmaps.add(Bitmap.createBitmap(diren,(diren.getWidth()/4)*2,0,diren.getWidth()/4,diren.getHeight()));bitmaps.add(Bitmap.createBitmap(diren,(diren.getWidth()/4)*3,0,diren.getWidth()/4,diren.getHeight()));y=-diren.getHeight();Random ran = new Random();x=ran.nextInt(display_w-(diren.getWidth()/4));}private int index=0;private int num =0;@Overridepublic Bitmap getBitmap() {Bitmap bitmap = bitmaps.get(index);//控制切换四个飞机的频率if(num == 7){index++;if(index == bitmaps.size()){index=0;}num=0;}y+=3;num++;if(y>display_h){gameImage.remove(this);}return bitmap;}@Overridepublic int getX() {return x;}@Overridepublic int getY() {return y;}}
DijiImage.java

 

  初始化游戏时候加载敌机类

    private void init(){//加载照片my= BitmapFactory.decodeResource(getResources(),R.drawable.my);baozha= BitmapFactory.decodeResource(getResources(),R.drawable.baozha);bg= BitmapFactory.decodeResource(getResources(),R.drawable.bg);diren= BitmapFactory.decodeResource(getResources(),R.drawable.diren);zidan= BitmapFactory.decodeResource(getResources(),R.drawable.zidan);erjihuancun=Bitmap.createBitmap(display_w,display_h, Bitmap.Config.ARGB_8888);gameImage.add(new BeijingImage(bg));    //先加入背景照片gameImage.add(new FeijiImage(my));gameImage.add(new DijiImage(diren));}

 

  绘制敌机飞行动画

private List<Bitmap> bitmaps = new ArrayList<Bitmap>();

 

  将四张敌机加入链表

       bitmaps.add(Bitmap.createBitmap(diren,0,0,diren.getWidth()/4,diren.getHeight()));bitmaps.add(Bitmap.createBitmap(diren,(diren.getWidth()/4)*1,0,diren.getWidth()/4,diren.getHeight()));bitmaps.add(Bitmap.createBitmap(diren,(diren.getWidth()/4)*2,0,diren.getWidth()/4,diren.getHeight()));bitmaps.add(Bitmap.createBitmap(diren,(diren.getWidth()/4)*3,0,diren.getWidth()/4,diren.getHeight()));

 

 public static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)
  从原始位图剪切图像,这是一种高级的方式。可以用Matrix(矩阵)来实现旋转等高级方式截图
  

参数说明:  传送门
    Bitmap source:要从中截图的原始位图
    int x:起始x坐标
    int y:起始y坐标
    int width:要截的图的宽度
    int height:要截的图的宽度
    Bitmap.Config  config:一个枚举类型的配置,可以定义截到的新位图的质量

  返回值:返回一个剪切好的Bitmap 
  绘制飞机飞行动画(不断切换四张图片,看起来像飞机飞)
 private int index=0;private int num =0;@Overridepublic Bitmap getBitmap() {Bitmap bitmap = bitmaps.get(index);//控制切换四个飞机的频率if(num == 7){index++;if(index == bitmaps.size()){index=0;}num=0;}//y+=3控制敌机下降速度y+=3;        

 

  随机位置生成敌机

            y=-diren.getHeight();Random ran = new Random();x=ran.nextInt(display_w-(diren.getWidth()/4));

 

  在游戏绘画中心中添加敌机出现

//绘画中心public void run() {Paint p1 = new Paint();int diren_num=0;//
        try{while(true){Canvas newCanvas = new Canvas(erjihuancun);for(GameImage image:(List<GameImage>)gameImage.clone()){newCanvas.drawBitmap(image.getBitmap(),image.getX(),image.getY(),p1);}if(diren_num==150){diren_num=0;gameImage.add(new DijiImage(diren));}diren_num++;Canvas canvas = holder.lockCanvas();canvas.drawBitmap(erjihuancun,0,0,p1);holder.unlockCanvasAndPost(canvas);Thread.sleep(10);}}catch(Exception e){}}

 

  敌机出现频率

                if(diren_num==150){diren_num=0;gameImage.add(new DijiImage(diren));}diren_num++;

 

 

 

package com.example.administrator.myapplication;import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.WindowManager;import java.util.ArrayList;
import java.util.List;
import java.util.Random;/*** Created by Administrator on 2018/8/9.*/public class dafeijiGameView extends SurfaceView implementsSurfaceHolder.Callback,Runnable,android.view.View.OnTouchListener{private Bitmap my;//自己private Bitmap baozha;//爆炸private Bitmap bg;//背景private Bitmap diren;//敌人private Bitmap zidan;//子弹private Bitmap erjihuancun;//二级缓存private WindowManager windowManager;//获得界面长宽高private int display_w;  //界面的宽private int display_h;  //界面的高private ArrayList<GameImage> gameImage = new ArrayList();public dafeijiGameView(Context context) {super(context);getHolder().addCallback(this);//事件注册this.setOnTouchListener(this);}private void init(){//加载照片my= BitmapFactory.decodeResource(getResources(),R.drawable.my);baozha= BitmapFactory.decodeResource(getResources(),R.drawable.baozha);bg= BitmapFactory.decodeResource(getResources(),R.drawable.bg);diren= BitmapFactory.decodeResource(getResources(),R.drawable.diren);zidan= BitmapFactory.decodeResource(getResources(),R.drawable.zidan);erjihuancun=Bitmap.createBitmap(display_w,display_h, Bitmap.Config.ARGB_8888);gameImage.add(new BeijingImage(bg));    //先加入背景照片gameImage.add(new FeijiImage(my));gameImage.add(new DijiImage(diren));}FeijiImage selectfeiji;@Overridepublic boolean onTouch(View v, MotionEvent event) {//手接近屏幕产生的事件if(event.getAction()==MotionEvent.ACTION_DOWN){for(GameImage game: gameImage){if(game instanceof FeijiImage){FeijiImage feiji = (FeijiImage)game;//判断条件为真时选中飞机if(feiji.getX()<event.getX()&&feiji.getY()<event.getY()&&feiji.getX()+feiji.getWidth()>event.getX() &&feiji.getY()+feiji.getHeigth()>event.getY()){selectfeiji=feiji;}else{selectfeiji=null;}break;}}}else if(event.getAction()==MotionEvent.ACTION_MOVE){//移动鼠标if( selectfeiji!=null){selectfeiji.setX((int)event.getX()-selectfeiji.getWidth()/2);selectfeiji.setY((int)event.getY()-selectfeiji.getHeigth()/2);}}else if(event.getAction()==MotionEvent.ACTION_UP){//松开鼠标selectfeiji=null;}return true;}private interface GameImage{public Bitmap getBitmap();public int getX();public int getY();}private class DijiImage implements GameImage{private Bitmap diren = null;private List<Bitmap> bitmaps = new ArrayList<Bitmap>();private int x;private int y;public DijiImage(Bitmap diren){this.diren=diren;bitmaps.add(Bitmap.createBitmap(diren,0,0,diren.getWidth()/4,diren.getHeight()));bitmaps.add(Bitmap.createBitmap(diren,(diren.getWidth()/4)*1,0,diren.getWidth()/4,diren.getHeight()));bitmaps.add(Bitmap.createBitmap(diren,(diren.getWidth()/4)*2,0,diren.getWidth()/4,diren.getHeight()));bitmaps.add(Bitmap.createBitmap(diren,(diren.getWidth()/4)*3,0,diren.getWidth()/4,diren.getHeight()));y=-diren.getHeight();Random ran = new Random();x=ran.nextInt(display_w-(diren.getWidth()/4));}private int index=0;private int num =0;@Overridepublic Bitmap getBitmap() {Bitmap bitmap = bitmaps.get(index);//控制切换四个飞机的频率if(num == 7){index++;if(index == bitmaps.size()){index=0;}num=0;}y+=3;num++;if(y>display_h){gameImage.remove(this);}return bitmap;}@Overridepublic int getX() {return x;}@Overridepublic int getY() {return y;}}private class FeijiImage implements GameImage{private Bitmap my;private int x;private int y;private int width;private int heigth;private int getWidth(){return width;}private int getHeigth(){return heigth;}private List<Bitmap> bitmaps = new ArrayList<Bitmap>();private  FeijiImage(Bitmap my){this.my=my;bitmaps.add(Bitmap.createBitmap(my,0,0,my.getWidth()/4,my.getHeight()));bitmaps.add(Bitmap.createBitmap(my,(my.getWidth()/4),0,my.getWidth()/4,my.getHeight()));bitmaps.add(Bitmap.createBitmap(my,(my.getWidth()/4)*2,0,my.getWidth()/4,my.getHeight()));bitmaps.add(Bitmap.createBitmap(my,(my.getWidth()/4)*3,0,my.getWidth()/4,my.getHeight()));//得到战机的高和宽width=my.getWidth()/4;heigth=my.getHeight();x=(display_w - my.getWidth()/4)/2;y=display_h-my.getHeight()-30;}private int index=0;private int num =0;@Overridepublic Bitmap getBitmap() {Bitmap bitmap = bitmaps.get(index);//控制切换四个飞机的频率if(num == 7){index++;if(index == bitmaps.size()){index=0;}num=0;}num++;return bitmap;}@Overridepublic int getX() {return x;}@Overridepublic int getY() {return y;}public void setY(int y){this.y=y;}public void setX(int x){this.x=x;}}//负责背景照片的处理private class BeijingImage implements GameImage{private Bitmap bg;private BeijingImage(Bitmap bg){this.bg=bg;newBitmap = Bitmap.createBitmap(display_w,display_h, Bitmap.Config.ARGB_8888);}private Bitmap newBitmap = null;private int height = 0;public Bitmap getBitmap(){Paint p = new Paint();Canvas canvas = new Canvas(newBitmap);canvas.drawBitmap(bg,new Rect(0,0,bg.getWidth(),bg.getHeight()),new Rect(0,height,display_w,display_h+height),p);canvas.drawBitmap(bg,new Rect(0,0,bg.getWidth(),bg.getHeight()),new Rect(0,-display_h+height,display_w,height),p);height++;if(height==display_h){height=0;}return newBitmap;}public int getX(){return 0;}public int getY(){return 0;}}private boolean state = false;private SurfaceHolder holder;//绘画中心public void run() {Paint p1 = new Paint();int diren_num=0;//
        try{while(true){Canvas newCanvas = new Canvas(erjihuancun);for(GameImage image:(List<GameImage>)gameImage.clone()){newCanvas.drawBitmap(image.getBitmap(),image.getX(),image.getY(),p1);}if(diren_num==150){diren_num=0;gameImage.add(new DijiImage(diren));}diren_num++;Canvas canvas = holder.lockCanvas();canvas.drawBitmap(erjihuancun,0,0,p1);holder.unlockCanvasAndPost(canvas);Thread.sleep(10);}}catch(Exception e){}}@Overridepublic void surfaceCreated(SurfaceHolder holder) {}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {state = false;}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {//得到屏幕的宽和高display_w=width;display_h=height;init();this.holder=holder;state = true;new Thread(this).start();}}
dafeijiGameView

 

 

游戏中添加子弹

 

 private class Zidan implements GameImage{Bitmap zidan;private FeijiImage feiji;private int x;private int y;public Zidan(FeijiImage feiji,Bitmap zidan){this.feiji=feiji;this.zidan=zidan;x=(feiji.getX()+feiji.getWidth()/2)-25;//居中位置y=feiji.getY()-zidan.getHeight();}public Bitmap getBitmap() {y-=19;if(y<=-10){zidans.remove(this);}return zidan;}@Overridepublic int getX() {return x;}@Overridepublic int getY() {return y;}}
zidan.class

 

  判断子弹出现飞机位置

        public Zidan(FeijiImage feiji,Bitmap zidan){this.feiji=feiji;this.zidan=zidan;x=(feiji.getX()+feiji.getWidth()/2)-25;//居中位置y=feiji.getY()-zidan.getHeight();}

  (-25是自己微调)

 

  子弹超出边界的时候释放子弹内存,减少手机开销

        public Bitmap getBitmap() {y-=19;if(y<=-10){zidans.remove(this);}return zidan;}

 

  不断的出现新的子弹

                if(selectfeiji!=null){if(zidan_num==10){zidans.add(new Zidan(selectfeiji,zidan));zidan_num=0;}zidan_num++;}

 

  便利所有的子弹

                for(GameImage image:(List<GameImage>)zidans.clone()){newCanvas.drawBitmap(image.getBitmap(),image.getX(),image.getY(),p1);}

 

转载于:https://www.cnblogs.com/1138720556Gary/p/9457052.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367829.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

递归问题

第一章递归问题 1.1 河内塔 n个圆盘移动从一个柱子借助一个柱子&#xff0c;移动到另一个柱子上的次数为 &#xff1a; 递推式&#xff1a;T(n)2*T(n-1)1 , n>0,T(0)0 归纳法得出&#xff1a;T(n)pow(2,n)-1 n>0 寻求封闭形式的表达式三个阶段&#xff1a; &#xff08;…

前端工程师的价值体现在哪里?

豆瓣前端: 认为前端工程师正慢慢演变为产品工程师。wap app, 响应性UI等以html5技术为基础的开发将成为前端工程师的主要工作内容&#xff0c;解决产品跨平台跨设备的实现问题。Javascript, HTML, CSS这些前端工程师熟悉的&#xff0c;多年使用的语言&#xff0c;作为开放标准…

Python3.6全栈开发实例[005]

5.接收两个数字参数&#xff0c;返回比较大的那个数字。 def compare(a,b):return a if a > b else b # 三元表达式 print(compare(20,100)) 转载于:https://www.cnblogs.com/apollo1616/p/9460493.html

验证码帮助类【CaptchaHelper 】

GDI&#xff1a;Graphics Device Interface Plus也就是图形设备接口,提供了各种丰富的图形图像处理功能;在C#.NET中&#xff0c;使用GDI处理二维&#xff08;2D&#xff09;的图形和图像&#xff0c;使用DirectX处理三维&#xff08;3D&#xff09;的图形图像, 图形图像处理用到…

关于HTML5本地持久化存储的Web SQL、Local Storage、Cookies技术

在浏览器客户端记录一些信息&#xff0c;有三种常用的Web数据持久化存储的方式&#xff0c;分别是Web SQL、Local Storage、Cookies。Web SQL作为html5本地数据库&#xff0c;可通过一套API来操纵客户端的数据库&#xff08;关系数据库&#xff09;&#xff0c;下面是支持浏览器…

死锁

7.1 系统模型 定义&#xff1a;多个进程竞争一定数量的资源&#xff0c;某个进程申请资源&#xff0c;若此时该资源不可用&#xff0c;则进程进入等待状态。若所申请的资源被其他等待进程占用&#xff0c;则该等待进程可能再也不法改变其状态。 进程使用资源的顺序&#xff1a;…

Linux启动/停止/重启Mysql数据库

1、查看mysql版本   1&#xff09;status;   2&#xff09;select version(); 2、Mysql启动 1&#xff09;使用 service 启动&#xff1a;   service mysqld start (5.0版本是mysqld)   service mysql start (5.5.7版本是mysql) 2&#xff09;使用 mysqld 脚本启动&…

mysql lepus_MySQL 监控软件lepus天兔

概述类别版本操作系统Centos 7.4数据库版本MySQL 5.6.49天兔版本lepus 3.7依赖软件1.MySQL 5.0及以上(必须,用来存储监控系统采集的数据)2.Apache 2.2及以上 (必须,WEB服务器运行服务器)3.PHP 5.3以上 (必须,提供WEB界面支持)4.Python2 (必须,推荐2.6及以上版本,执行数据采集和…

HTML5中Web Worker技术的使用实例

web worker是html5中新特性中非常吸引人的技术亮点之一&#xff0c;我们可以把它理解为javascript中的多线程技术&#xff0c;我们知道javascript语言的执行环境是单线程的&#xff0c;浏览器执行某段程序的时候会阻塞直到运行结束后再恢复到正常状态&#xff0c;而HTML5的Web …

选择技术栈构建通用平台

Java社区中有很多关于Spring vs Java EE的话题。 一群人会争辩说您应该使用一个而不是其他。等等。当我看到这一点时&#xff0c;我不禁要想为什么我们不能同时使用它们呢&#xff1f; 实际上&#xff0c;我认为有效地使用它们会为构建基础架构创建一个伟大的技术堆栈&#xff…

模式的秘密--工厂模式

工厂模式概念&#xff1a; 实例化对象&#xff0c;用工厂方法代替new操作工厂模式包括工厂方法模式和抽象工厂模式抽象工厂模式是工厂方法模式的扩展工厂模式的意图&#xff1a; 定义一个接口创建对象&#xff0c;但是让子类决定哪些类需要被实例化。工厂方法把实例化的工作推迟…

mysql定时清空表数据_Mysql实现定时清空一张表的旧数据并保留几条数据

要达到如下目的&#xff1a;Mysql数据库会每隔一段时间(可以是2小时&#xff0c;也可以是一天&#xff0c;这个可以自定义)&#xff0c;定时对一张库中的表做一个判断&#xff0c;如果这张表的数据超过了20条(这个数据也是自定义的&#xff0c;也可以是200条)&#xff0c;就保留…

Python中生成器generator和迭代器Iterator的使用方法

一、生成器 1. 生成器的定义 把所需要值得计算方法储存起来,不会先直接生成数值,而是等到什么时候使用什么时候生成,每次生成一个,减少计算机占用内存空间2. 生成器的创建方式 第一种只要把一个列表生成式的 [ ] 改成 ( )ret (n 1 for n in range(0,10)) # 返回值是生成了一个…

Java 8中使用Lambda表达式的策略模式

策略模式是“ 设计模式&#xff1a;可重用对象的元素”书中的模式之一 。 本书所述的策略模式的意图是&#xff1a; 定义一系列算法&#xff0c;封装每个算法&#xff0c;并使它们可互换。 策略使算法独立于使用该算法的客户端而变化。 在本文中&#xff0c;我想给出一个或两个…

Html5移动开发之Localstorage(本地存储)

HTML5本地存储Localstorage自从Html5中出现了本地存储的&#xff08;LocalStorage)的概念后&#xff0c;很多人都会想这个东西和我们传统web开发中的Cookie有什么特别之处&#xff0c;当然笔者也是其中之一&#xff0c;也难怪&#xff0c;以前用惯了cookie对于新出现的事物总是…

php mysql 正则_MySQL 正则表达式

MySQL 正则表达式在前面的章节我们已经了解到MySQL可以通过 LIKE ...% 来进行模糊匹配。MySQL 同样也支持其他正则表达式的匹配&#xff0c; MySQL中使用 REGEXP 操作符来进行正则表达式匹配。如果您了解PHP或Perl&#xff0c;那么操作起来就非常简单&#xff0c;因为MySQL的正…

Linux自动人机交互expect

exp_test.sh文件 #!/bin/bash/expect ## exp_test.sh set timeout -1; spawn ssh localhost; expect {"(yes/no)" {send "yes\r";exp_continue;}"password:" {send "hadoop\r";exp_continue;}eof {exit 0;} } 执行&#xff1a;expect …

使用Spring Integration聚合异步结果

嗨&#xff0c;我遇到了一个问题&#xff0c;该问题使用Spring Integration具有非常好的解决方案。 很多时候&#xff0c;我们需要一种将消息分发到未知数量的目的地的方案。 为此&#xff0c;我们使用主题方法。 但是有时&#xff0c;我们还希望从收到消息的所有目的地接收答案…

Html5开发之链接标签nav的用法

HTML(<nav>)元素用来表示一个含有多个超链接的区域&#xff0c;这个区域的连接可以连接到其他页面&#xff0c;也可以连接到本页面内部其他部分。用法说明:并不是所有的链接都必须使用<nav>元素,它只用来将一些热门的链接放入导航栏,例如<footer>元素就常用来…

java response 获得code_Java教程分享使用HttpClient抓取页面内容

Java教程分享使用HttpClient抓取页面内容&#xff0c;使用HttpClient工具来发送Http请求1.简介HttpClient 是 Apache Jakarta Common 下的子项目&#xff0c;用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包&#xff0c;并且它支持 HTTP 协议最新的版本和…