小游戏源码及详细解说Word文档格式.docx
《小游戏源码及详细解说Word文档格式.docx》由会员分享,可在线阅读,更多相关《小游戏源码及详细解说Word文档格式.docx(15页珍藏版)》请在冰点文库上搜索。
>
/com.wuyudong.game2048.GameView>
<
4、游戏2048在Android平台的触控交互设计
添加触控交互相关代码
privatevoidinitGameView(){
setOnTouchListener(newOnTouchListener(){
//记录起始位置和偏移坐标
privatefloatstartX,startY,offsetX,offsetY;
@Override
publicbooleanonTouch(Viewv,MotionEventevent){
switch(event.getAction()){
caseMotionEvent.ACTION_DOWN:
//监听手指按下的初始位置坐标
startX=event.getX();
startY=event.getY();
break;
caseMotionEvent.ACTION_UP:
//监听手指离开时的位置坐标
offsetX=event.getX()-startX;
offsetY=event.getY()-startY;
if(Math.abs(offsetX)>
Math.abs(offsetY)){
if(offsetX<
-5){
System.out.println("
left"
);
}elseif(offsetX>
5){
right"
}
}else{
if(offsetY<
up"
}elseif(offsetY>
down"
default:
returntrue;
});
5、实现2048游戏的卡片类
编写卡片类Card.java
packagecom.wuyudong.game2048;
importandroid.content.Context;
importandroid.widget.FrameLayout;
importandroid.widget.TextView;
publicclassCardextendsFrameLayout{
publicCard(Contextcontext){
super(context);
lable=newTextView(getContext());
lable.setTextSize(32);
LayoutParamslp=newLayoutParams(-1,-1);
addView(lable,lp);
setNum(0);
privateintnum=0;
publicintgetNum(){
returnnum;
publicvoidsetNum(intnum){
this.num=num;
lable.setText(num+"
"
publicbooleanequals(Cardo){
returngetNum()==o.getNum();
privateTextViewlable;
}
6、添加2048游戏卡片
先添加相关代码看看效果
protectedvoidonSizeChanged(intw,inth,intoldw,intoldh){
super.onSizeChanged(w,h,oldw,oldh);
intcardWidth=(Math.min(w,h)-10)/4;
addCards(cardWidth,cardWidth);
privatevoidaddCards(intcardWith,intcardHeight){
Cardc;
for(inty=0;
y<
4;
y++){
for(intx=0;
x<
x++){
c=newCard(getContext());
c.setNum
(2);
addView(c,cardWith,cardHeight);
运行后的效果
出现问题,所有的2都出现在同一行中,解决办法:
在initGameView()中添加代码,指定为四列:
setColumnCount(4);
lable.setGravity(Gravity.CENTER);
接着添加相关的背景颜色以及卡片数字的背景颜色,还有卡片间距
setBackgroundColor(0xffbbada0);
//设置整体背景
lable.setBackgroundColor(0x33ffffff);
lp.setMargins(10,10,0,0);
运行后界面如下:
7、在2048游戏中添加随机数
startGame();
privatevoidstartGame(){
cardsMap[x][y].setNum(0);
addRandomNum();
privatevoidaddRandomNum(){
emptyPoints.clear();
//清空
if(cardsMap[x][y].getNum()<
=0){
emptyPoints.add(newPoint(x,y));
Pointp=emptyPoints.remove((int)(Math.random()*emptyPoints.size()));
cardsMap[p.x][p.y].setNum(Math.random()>
0.1?
2:
4);
8、实现2048游戏逻辑
privatevoidswipeLeft(){//往左滑动手指
for(intx1=x+1;
x1<
x1++){
if(cardsMap[x1][y].getNum()>
0){
cardsMap[x][y].setNum(cardsMap[x1][y].getNum());
cardsMap[x1][y].setNum(0);
x--;
}elseif(cardsMap[x][y].equals(cardsMap[x1][y])){
cardsMap[x][y].setNum(cardsMap[x][y].getNum()*2);
privatevoidswipeRight(){
for(intx=3;
x>
=0;
x--){
for(intx1=x-1;
x1>
x1--){
x++;
privatevoidswipeUp(){
for(inty1=y+1;
y1<
y1++){
if(cardsMap[x][y1].getNum()>
cardsMap[x][y].setNum(cardsMap[x][y1].getNum());
cardsMap[x][y1].setNum(0);
y--;
}elseif(cardsMap[x][y].equals(cardsMap[x][y1])){
privatevoidswipeDown(){
for(inty=3;
y>
y--){
for(inty1=y-1;
y1>
=0;
y1--){
y++;
privateCard[][]cardsMap=newCard[4][4];
privateList<
Point>
emptyPoints=newArrayList<
();
9、游戏2048计分
MainActivity.java中添加相关代码:
importandroid.os.Bundle;
importandroid.app.Activity;
importandroid.view.Menu;
publicclassMainActivityextendsActivity{
publicMainActivity(){
mainActivity=this;
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvScore=(TextView)findViewById(R.id.tvScore);
publicbooleanonCreateOptionsMenu(Menumenu){
//Inflatethemenu;
thisaddsitemstotheactionbarifitispresent.
getMenuInflater().inflate(R.menu.main,menu);
publicvoidclearScore(){
score=0;
showScore();
publicvoidshowScore(){
tvScore.setText(score+"
publicvoidaddScore(ints){
score+=s;
privateintscore=0;
privateTextViewtvScore;
privatestaticMainActivitymainActivity=null;
publicstaticMainActivitygetMainActivity(){
returnmainActivity;
10、检查2048游戏结束
privatevoidcheckComplete(){
booleancomplete=true;
ALL:
if(cardsMap[x][y].getNum()==0
||(x>
0&
&
cardsMap[x][y].equals(cardsMap[x-1][y]))
||(x<
3&
cardsMap[x][y].equals(cardsMap[x+1][y]))
||(y>
cardsMap[x][y].equals(cardsMap[x][y-1]))
||(y<
cardsMap[x][y].equals(cardsMap[x][y+1]))){
complete=false;
breakALL;
if(complete){
newAlertDialog.Builder(getContext())
.setTitle("
Oh"
)
.setMessage("
GameOver!
.setPositiveButton("
restart"
newDialogInterface.OnClickListener(){
publicvoidonClick(DialogInterfacedialog,
intwhich){
}).show();