版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
【移動應用開發(fā)技術】androidstudio如何實現(xiàn)游戲搖桿
/upload/information/20200623/125/118759.png/upload/information/20200623/125/118760.png/upload/information/20200623/125/118761.pngpublic
class
Hua
extends
RelativeLayout
implements
Runnable{
//繼承RelativeLayout
實現(xiàn)Runnable接口
private
Paint
p;//畫筆
public
Hua(Context
context)
{
super(context);
p=new
Paint();
setBackgroundColor(Color.BLACK);//背景顏色設為黑色
}
@Override
protected
void
onDraw(Canvas
g)
{//重寫onDraw方法
super.onDraw(g);
}
@Override
public
void
run()
{
}
}接下來我們做移動搖桿/upload/information/20200623/125/118762.png/upload/information/20200623/125/118763.png/upload/information/20200623/125/118764.png先新建一個類my.javapublic
class
my
{
//這個類當一個全局變量使用
public
static
int
w,h;//屏幕的寬高
public
static
float
bili;
public
static
MainActivity
main;
public
static
RectF
re=new
RectF();
public
static
int
ontouchAlpha=100;//觸控區(qū)透明度0-255
0為透明,為了測試我們先設為100
}修改MainActivity的代碼public
class
MainActivity
extends
AppCompatActivity
{
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
my.main=this;
getSupportActionBar().hide();//隱藏標題欄
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);//全屏
隱藏狀態(tài)欄
//判斷當前是否橫屏
如果不是就設為橫屏,設為橫屏之后會自動調(diào)用onCreate方法
if
(getResources().getConfiguration().orientation
==
Configuration.ORIENTATION_LANDSCAPE)
{
//獲取屏幕的寬高
DisplayMetrics
dis
=
getResources().getDisplayMetrics();
my.w
=
dis.widthPixels;
my.h
=
dis.heightPixels;
//獲取屏幕分辨率和1920*1080的比例
以便適應不同大小的屏幕
my.bili
=
(float)
(Math.sqrt(my.w
*
my.h)
/
Math.sqrt(1920
*
1080));
setContentView(new
Hua(this));
}
else
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//
橫屏
}
}
}新建類Move.javapackage
com.yaogan.liziguo.yaogan;
import
android.graphics.Bitmap;
import
android.graphics.BitmapFactory;
import
android.graphics.Canvas;
import
android.graphics.Paint;
/**
*
Created
by
Liziguo
on
2018/6/15.
*/
public
class
Move
{
private
float
x1,y1;//按下時的坐標
大圓
private
float
x2,y2;//移動后的坐標
小圓
private
final
float
r1,r2;//r1大圓的半徑
r2小圓的半徑
public
float
angle;//x1y1指向x2y2的角度
弧度制
public
boolean
down=false;//判斷是否被按下
public
boolean
in=false;//判斷小圓是否在大圓里面,簡單的說就是防止小圓被脫太遠
public
boolean
move=false;//判斷手指按下后是否移動(MY實際開發(fā)中用到,該教程用不到此變量)
public
Bitmap
img;//大圓小圓的圖片
public
Move(){
r1
=
480
*
0.5f
*
my.bili;//乘上一個比例
適應不同大小的屏幕
r2
=
300
*
0.5f
*
my.bili;
img=
BitmapFactory.decodeResource(my.main.getResources(),R.mipmap.yaogan);//初始化搖桿圖片
}
public
void
down(float
xx,float
yy){
//搖桿按下后的操作
if(xx<r1)
x1=r1;
else
x1
=
xx;
if(my.h-yy<r1)
y1=my.h-r1;
else
y1
=
yy;
//上面的代碼是防止按下的位置太靠近屏幕邊緣
//跟x1=xx;y1=yy;區(qū)別不大,待會可以改成x1=xx;y1=yy;看看效果有什么不同
down=true;
}
public
void
move(float
xx,float
yy){
//按下?lián)u桿后移動的操作
angle=getAngle(xx,yy);
in=in(xx,
yy);
move=isMove(xx,yy);
if
(!in)
{
//下面會做解釋
xx=
(float)
(x1+
Math.sin(angle)*r1*0.7f);
yy=
(float)
(y1+
Math.cos(angle)*r1*0.7f);
}
x2=xx;
y2=yy;
}
public
void
up(){
//松開后的操作
down=false;
}
public
float
getAngle(float
xx,float
yy){
//獲取x1y1指向x2y2的角度
double
angle,k;
if
(y1==yy)//斜率不存在時
if
(x1
>
xx)//判斷x1指向x2的方向
angle=-Math.PI/2;
else
angle=Math.PI/2;
else{
k=(x1-xx)/(y1-yy);
//兩點的坐標求斜率,至于為什么是(x1-x2)/(y1-y2)不是(y1-y2)/(x1-x2)待會我們再做解釋
if
(y1
>
yy)
{//判斷x1y1指向x2y2的方向
//
用反tan求角度
這個高中好像沒學過
既然Math類已經(jīng)幫我們封裝好了就直接拿來用吧
angle=Math.atan(k)
+
Math.PI;
}
else
{
angle=Math.atan(k);
}
//這段可寫可不寫
讓計算出來的角度屬于-PI/2到PI/2
if(angle>Math.PI)
angle-=Math.PI*2;
else
if(angle<-Math.PI)
angle+=Math.PI*2;
}
return
(float)
angle;
}
public
boolean
in(float
xx,
float
yy)
{
//防止小圓被脫太遠
拖動范圍不超出r1的70%
double
r
=
Math.sqrt((x1
-
xx)
*
(x1
-
xx)
+
(y1
-
yy)
*
(y1
-
yy));//兩點間距離公式
if
(r
<
r1*0.7f)
return
true;
else
return
false;
}
public
boolean
isMove(float
xx,
float
yy)
{
//判斷按下?lián)u桿后
是否移動,如果x1y1
x2y2的距離大于r1*0.15視為移動
//
MY實際開發(fā)中用到,該教程用不到此變量
double
r
=
Math.sqrt((x1
-
xx)
*
(x1
-
xx)
+
(y1
-
yy)
*
(y1
-
yy));//兩點間距離公式
if
(r
>
r1*0.15f)
return
true;
else
return
false;
}
public
void
onDraw(Canvas
g,
Paint
p){
//畫搖桿
if(down)
{
//當搖桿被按下時
才顯示
//怎么用Canvas畫圖這里就不說了
my.re.left
=
x1
-
r1;
my.re.top
=
y1
-
r1;
my.re.right
=
x1
+
r1;
my.re.bottom
=
y1
+
r1;
g.drawBitmap(img,
null,
my.re,
p);
//畫大圓
my.re.left
=
x2
-
r2;
my.re.top
=
y2
-
r2;
my.re.right
=
x2
+
r2;
my.re.bottom
=
y2
+
r2;
g.drawBitmap(img,
null,
my.re,
p);
//畫小圓
}
}
}新建類OnTouchMove.javapackage
com.yaogan.liziguo.yaogan;
import
android.content.Context;
import
android.graphics.Color;
import
android.view.MotionEvent;
import
android.view.View;
/**
*
Created
by
Liziguo
on
2018/6/16.
*/
public
class
OnTouchMove
extends
View
{
//這個view負責監(jiān)聽移動搖桿的手勢
private
Move
m;
public
OnTouchMove(Context
context,Move
move)
{
super(context);
this.m=move;
setBackgroundColor(Color.WHITE);//背景色設為白色
getBackground().setAlpha(my.ontouchAlpha);//設置觸控區(qū)透明度
setOnTouchListener(new
OnTouchListener()
{
//設置觸控監(jiān)聽
@Override
public
boolean
onTouch(View
v,
MotionEvent
ev)
{
//加上getX()
getY()因為這個view不是分布在左上角的
final
float
xx
=
ev.getX()
+
getX(),
yy
=
ev.getY()
+
getY();
if
(ev.getAction()
==
MotionEvent.ACTION_DOWN)
{
m.down(xx,
yy);//按下時的操作
//
m.move(xx,
yy);
}
m.move(xx,
yy);//移動時的操作
if
(ev.getAction()
==
MotionEvent.ACTION_UP)
{
m.up();//松開時的操作
}
return
true;//不要返回false
}
});
}
}修改Hua.java的代碼package
com.yaogan.liziguo.yaogan;
import
android.content.Context;
import
android.graphics.Canvas;
import
android.graphics.Color;
import
android.graphics.Paint;
import
android.widget.RelativeLayout;
/**
*
Created
by
Liziguo
on
2018/6/15.
*/
public
class
Hua
extends
RelativeLayout
implements
Runnable{
//繼承RelativeLayout
實現(xiàn)Runnable接口
private
Paint
p;//畫筆
private
Move
m=new
Move();//移動搖桿
public
Hua(Context
context)
{
super(context);
p=new
Paint();
setBackgroundColor(Color.BLACK);//背景顏色設為黑色
//實例化一個OnTouchMove
OnTouchMove
onTouchMove=new
OnTouchMove(context,m);
//把onTouchMove添加進來
寬度為屏幕的1/3
高度為屏幕的1/2
addView(onTouchMove,my.w/3,my.h/2);
//設置onTouchMove的位置
onTouchMove.setX(0);
onTouchMove.setY(my.h/2);
new
Thread(this).start();//啟動重繪線程
}
@Override
protected
void
onDraw(Canvas
g)
{//重寫onDraw方法
super.onDraw(g);
m.onDraw(g,p);//畫移動搖桿
}
@Override
public
void
run()
{
//每隔20毫秒刷新一次畫布
while(true){
try
{Thread.sleep(20);}
catch
(InterruptedException
e)
{e.printStackTrace();}
postInvalidate();//重繪
在子線程重繪不能調(diào)用Invalidate()方法
}
}
}/upload/information/20200623/125/118765.png/upload/information/20200623/125/118766.png/upload/information/20200623/125/118767.png/upload/information/20200623/125/118768.png/upload/information/20200623/125/118770.pngpublic
void
move(float
xx,float
yy){
//按下?lián)u桿后移動的操作
angle=getAngle(xx,yy);
in=in(xx,
yy);
move=isMove(xx,yy);
if
(!in)
{
//下面會做解釋
xx=
(float)
(x1+
Math.sin(angle)*r1*0.7f);
yy=
(float)
(y1+
Math.cos(angle)*r1*0.7f);
}
x2=xx;
y2=yy;
}/upload/information/20200623/125/118771.png/upload/information/20200623/125/118772.png/upload/information/20200623/125/118773.png修改MainActivity。java和my.javapublic
class
MainActivity
extends
AppCompatActivity
{
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
my.main=this;
getSupportActionBar().hide();//隱藏標題欄
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);//全屏
隱藏狀態(tài)欄
//判斷當前是否橫屏
如果不是就設為橫屏,設為橫屏之后會自動調(diào)用onCreate方法
if
(getResources().getConfiguration().orientation
==
Configuration.ORIENTATION_LANDSCAPE)
{
//獲取屏幕的寬高
DisplayMetrics
dis
=
getResources().getDisplayMetrics();
my.w
=
dis.widthPixels;
my.h
=
dis.heightPixels;
//獲取屏幕分辨率和1920*1080的比例
以便適應不同大小的屏幕
my.bili
=
(float)
(Math.sqrt(my.w
*
my.h)
/
Math.sqrt(1920
*
1080));
//加載圖片
my.border=
BitmapFactory.decodeResource(my.main.getResources(),R.mipmap.border);
my.cancel=
BitmapFactory.decodeResource(my.main.getResources(),R.mipmap.cancel);
my.down=
BitmapFactory.decodeResource(my.main.getResources(),R.mipmap.down);
my.yaogan=
BitmapFactory.decodeResource(my.main.getResources(),R.mipmap.yaogan);
my.cd=
BitmapFactory.decodeResource(my.main.getResources(),R.mipmap.cd);
setContentView(new
Hua(this));
}
else
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//
橫屏
}
}
}public
class
my
{
//這個類當一個全局變量使用
public
static
int
w,h;//屏幕的寬高
public
static
float
bili;
public
static
MainActivity
main;
public
static
RectF
re=new
RectF();
public
static
int
ontouchAlpha=100;//觸控區(qū)透明度0-255
0為透明,為了測試我們先設為100
public
static
Bitmap
border,cancel,down,yaogan,cd;
public
static
Skill
skill;//當前正在使用的技能
現(xiàn)在會報錯
因為我們還沒新建技能Skill類
}
public
Move(){
r1
=
480
*
0.5f
*
my.bili;//乘上一個比例
適應不同大小的屏幕
r2
=
300
*
0.5f
*
my.bili;
//
img=
BitmapFactory.decodeResource(my.main.getResources(),R.mipmap.yaogan);//初始化搖桿圖片////////////////////////
img=my.yaogan;////////////////////////////////////////////////////
}新建技能類Skill.javapackage
com.yaogan.liziguo.yaogan;
import
android.graphics.Bitmap;
import
android.graphics.Canvas;
import
android.graphics.Paint;
/**
*
Created
by
Liziguo
on
2018/6/16.
*/
public
abstract
class
Skill
{
public
int
jineng;
private
final
float
x,y;//技能圖標中心位置,不是按下時的位置
private
float
x2,
y2;//技能按下移動后手指的坐標
private
float
xxx,yyy;//判斷拖動點是否超出兩倍r的范圍
private
final
float
calcelx,
cancely;
public
float
angle;//技能按下后
x
y指向xx
yy的角度
public
Bitmap
img,
imgborder,
imgdown,
imgyaogan,imgcd,imgcancel;
private
final
float
r2;
private
final
float
r3=50*my.bili;
public
boolean
down=false;
public
boolean
down_main=false;//down_main
只觸發(fā)一次;
public
boolean
cancel=false;
public
int
cdmax;
public
long
last,cd=0;//last最后一次釋放技能的時間
/*
0
普通攻擊
1
技能1
2
技能2
3
技能3
*/
public
Skill(int
jineng,
int
cd,
Bitmap
image){
this.jineng=jineng;
switch
(jineng){
case
0:
x=
my.w*0.87f;
y=
my.h*0.8f;
break;
case
1:
x=
my.w*0.7f;
y=
my.h*0.88f;
break;
case
2:
x=
my.w*0.75f;
y=
my.h*0.62f;
break;
case
3:
x=
my.w*0.9f;
y=
my.h*0.5f;
break;
default:x=y=0;
}
cdmax=cd;
if(jineng
==
0)
r2=125*my.bili;
else
r2=80*my.bili;
calcelx
=my.w-r2*2;
cancely
=my.h/4;
img=image;
imgborder=my.border;
imgdown=my.down;
imgyaogan=my.yaogan;
imgcd=my.cd;
imgcancel=my.cancel;
}
//
public
abstract
void
down();
//
public
abstract
void
move();
//
public
abstract
void
up();
public
void
down(){
//DOWN
由ontouch觸發(fā)
if(cd>0)return;
down=true;
my.skill=this;
}
public
abstract
void
down_main();
//DOWN
教程用不到該抽象方法
public
void
move(float
x,float
y){//按下技能后
由ontouch觸發(fā)
x2
=x;
y2
=y;
angle=getAngle(x2,
y2);
cancel=incancel(x,y);
if
(jineng
!=0
&&
!in2(x,y))
{
xxx=
(float)
(this.x+
Math.sin(angle)*r2*2);
yyy=
(float)
(this.y+
Math.cos(angle)*r2*2);
}else{
xxx=x;
yyy=y;
}
}
public
abstract
void
move_main();//按下技能后
由MyActor觸發(fā)
教程用不到該抽象方法
public
abstract
void
up();
//松開后
由MyActor觸發(fā)
釋放技能
public
boolean
in(float
xx,float
yy){
//判斷是否被點中
double
r=
Math.sqrt((x
-
xx)*(x-xx)+(y-yy)*(y-yy));
if(r<r2)
return
true;
else
return
false;
}
public
boolean
in2(float
xx,
float
yy)
{
//判斷拖動點是否超出兩倍r的范圍
double
r
=
Math.sqrt((x
-
xx)
*
(x
-
xx)
+
(y
-
yy)
*
(y
-
yy));
if
(r
<
r2
*
2)
return
true;
else
return
false;
}
public
boolean
incancel(float
xx,float
yy){
//判斷是否取消
double
r=
Math.sqrt((calcelx
-
xx)*(calcelx
-xx)+(cancely
-yy)*(cancely
-yy));
if(r<r2)
return
true;
else
return
false;
}
public
float
getAngle(float
xx,float
yy){
//x
y指向xx
yy的角度
float
angle,k;
if
(y==yy)
if
(x
>
xx)
angle=
(float)
(-Math.PI/2);
else
angle=
(float)
(Math.PI/2);
else{
k=(x-xx)/(y-yy);
if
(y
>
yy)
{
angle=
(float)
(Math.atan(k)
+
Math.PI);
}
else
{
angle=
(float)
Math.atan(k);
}
if(angle>Math.PI)
angle-=Math.PI*2;
else
if(angle<-Math.PI)
angle+=Math.PI*2;
}
return
angle;
}
private
float
drawpx=10*my.bili;
public
void
next(){
//計算技能冷卻時間
cd=cdmax-System.currentTimeMillis()+last;
}
//按下的時候技能圖標下移
顯示藍色框框
public
void
onDraw(Canvas
g,
Paint
p){
my.re.left=x-r2;
my.re.top=y-r2;
my.re.right=x+r2;
my.re.bottom=y+r2;
if(down){
//
new
RectF(x-r2,y-r2,x+r2,y+r2);
//
new
RectF(x-r2,y-r2+10*my.bili,x+r2,y+r2+10*my.bili);
//
my.re.left=x-r2;
//
my.re.top=y-r2;
//
my.re.right=x+r2;
//
my.re.bottom=y+r2;
if(jineng!=0){
final
float
bl=2;
my.re.left=x-r2*bl;
my.re.top=y-r2*bl;
my.re.right=x+r2*bl;
my.re.bottom=y+r2*bl;
//藍色框框未下移
g.drawBitmap(imgdown,null,my.re,p);
}
my.re.left=x-r2;
my.re.top=y-r2;
my.re.right=x+r2;
my.re.bottom=y+r2;
///////////////////////////////////////////////////////////
//技能圖片和技能邊框下移
my.re.top+=drawpx;
my.re.bottom+=drawpx;
g.drawBitmap(img,null,my.re,p);
my.re.left-=drawpx;
my.re.top-=drawpx;
my.re.right+=drawpx;
my.re.bottom+=drawpx;
g.drawBitmap(imgborder,null,my.re,p);
if(jineng!=0){
my.re.left=xxx-r3;
my.re.top=yyy-r3;
my.re.right=xxx+r3;
my.re.bottom=yyy+r3;
g.drawBitmap(imgyaogan,null,my.re,p);
//cancle
my.re.left=
calcelx
-r2;
my.re.top=
cancely
-r2;
my.re.right=
calcelx
+r2;
my.re.bottom=
cancely
+r2;
g.drawBitmap(imgcancel,null,my.re,p);
}
}else{
g.drawBitmap(img,null,my.re,p);
if(jineng!=0
&&
cd>0)
{
p.setTextSize(40*my.bili);
p.setColor(Color.WHITE);
g.drawBitmap(imgcd,null,my.re,p);
float
f=cd/100f;
f=(int)f;
f=f/10;
g.drawText(String.valueOf(f),x-p.getTextSize()*4/5,y+p.getTextSize()/3,p);
}
my.re.left-=drawpx;
my.re.top-=drawpx;
my.re.right+=drawpx;
my.re.bottom+=drawpx;
g.drawBitmap(imgborder,null,my.re,p);
}
}
}新建一個類OnTouchSkill.java他也是一個監(jiān)聽viewpackage
com.yaogan.liziguo.yaogan;
import
android.content.Context;
import
android.graphics.Color;
import
android.view.MotionEvent;
import
android.view.View;
/**
*
Created
by
Liziguo
on
2018/6/16.
*/
public
class
OnTouchSkill
extends
View
{
/*
A
普通攻擊
Q
技能1
W
技能2
E
技能3
R
沒有R
*/
public
Skill
A,Q,W,E;
public
OnTouchSkill(Context
context,Skill
a,Skill
q,Skill
w,Skill
e)
{
super(context);
A=a;Q=q;W=w;E=e;
setBackgroundColor(Color.WHITE);
getBackground().setAlpha(my.ontouchAlpha);//0-255
setOnTouchListener(new
OnTouchListener()
{
@Override
public
boolean
onTouch(View
v,
MotionEvent
ev)
{
final
float
xx
=
ev.getX()
+
getX(),
yy
=
ev.getY()
+
getY();
if
(ev.getAction()
==
MotionEvent.ACTION_DOWN)
{
if
(
A.in(xx,
yy))
{
A.down();
}
else
if
(
Q.in(xx,
yy))
{
Q.down();
}
else
if
(
W.in(xx,
yy))
{
W.down();
}
else
if
(
E.in(xx,
yy))
{
E.down();
}
}
if
(my.skill
!=
null)
my.skill.move(xx,
yy);
if(ev.getAction()==MotionEvent.ACTION_UP){
A.down
=
false;
Q.down
=
false;
W.down
=
false;
E.down
=
false;
}
return
true;
}
});
}
}把監(jiān)聽控件添加到Hua,修改Hua.javapackage
com.yaogan.liziguo.yaogan;
import
android.content.Context;
import
android.graphics.BitmapFactory;
import
android.graphics.Canvas;
import
android.graphics.Color;
import
android.graphics.Paint;
import
android.widget.RelativeLayout;
/**
*
Created
by
Liziguo
on
2018/6/15.
*/
public
class
Hua
extends
RelativeLayout
implements
Runnable{
//繼承RelativeLayout
實現(xiàn)Runnable接口
private
Paint
p;//畫筆
private
Move
m=new
Move();//移動搖桿
/*
A
普通攻擊
Q
技能1
W
技能2
E
技能3
R
沒有R
*/
public
Skill
A=new
Skill(0,100,
BitmapFactory.decodeResource(getResources(),R.mipmap.putonggongji))
{
@Override
public
void
down_main()
{
}
@Override
public
void
move_main()
{
}
@Override
public
void
up()
{
}
};
public
Skill
Q=new
Skill(1,1000,
BitmapFactory.decodeResource(getResources(),R.mipmap.skill1))
{
@Override
public
void
down_main()
{
}
@Override
public
void
move_main()
{
}
@Override
public
void
up()
{
down_main=false;
if(!cancel){
//技能冷卻時間
last=
System.currentTimeMillis();
}
}
};
public
Skill
W=new
Skill(2,1000,
BitmapFactory.decodeResource(getResources(),R.mipmap.skill2))
{
@Override
public
void
down_main()
{
}
@Override
public
void
move_main()
{
}
@Override
public
void
up()
{
down_main=false;
if(!cancel){
last=
System.currentTimeMillis();
}
}
};
public
Skill
E=new
Skill(3,1000,
BitmapFactory.decodeResource(getResources(),R.m
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 南京交安考試試題及答案
- 系統(tǒng)工程師考試題及答案
- 呼和浩特安全員b證考試題及答案
- 農(nóng)村信用社筆試試題及答案
- 黨紀知識競賽題庫及答案
- 質(zhì)檢員專業(yè)管理實務復習模擬試題及答案
- 重慶中職計算機題庫及答案
- 鐵路職業(yè)技能鑒定試題預測試卷附答案詳解
- 醫(yī)技三基三嚴模考試題+答案
- 保育員高級理論知識試卷及答案2
- 中華人民共和國職業(yè)分類大典是(專業(yè)職業(yè)分類明細)
- 2025年中考英語復習必背1600課標詞匯(30天記背)
- 資產(chǎn)管理部2025年工作總結與2025年工作計劃
- 科技成果轉(zhuǎn)化技術平臺
- 下腔靜脈濾器置入術的護理查房
- 基建人員考核管理辦法
- 2025體育與健康課程標準深度解讀與教學實踐
- 礦山救援器材管理制度
- 2025西南民族大學輔導員考試試題及答案
- T/CSPSTC 17-2018企業(yè)安全生產(chǎn)雙重預防機制建設規(guī)范
- 2025年《三級物業(yè)管理師》考試復習題(含答案)
評論
0/150
提交評論