基于Android五子棋.docx
《基于Android五子棋.docx》由会员分享,可在线阅读,更多相关《基于Android五子棋.docx(36页珍藏版)》请在冰豆网上搜索。
基于Android五子棋
安卓五子棋游戏开发
今天我们来看一下Android下游戏的开发。
首先来看看整体的结构:
各个类的详细代码如下,附有详细注释:
MainActivity:
packagecom.example.gobang;
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
//importcom.example.gobang.bt.BtGoBangActivity;
importcom.example.gobang.mm.MMGobangActivity;
importcom.example.gobang.R;
publicclassMainActivityextendsActivityimplementsOnClickListener{
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.gobang);
Buttonb_mm=(Button)findViewById(R.id.b_mm);
Buttonb_bt=(Button)findViewById(R.id.b_bt);
b_mm.setOnClickListener(this);
b_bt.setOnClickListener(this);
}
@Override
publicvoidonClick(Viewv){
switch(v.getId()){
caseR.id.b_bt:
//startActivity(newIntent(MainActivity.this,BtGoBangActivity.class));
System.out.println("蓝牙版还未上线");
break;
caseR.id.b_mm:
startActivity(newIntent(MainActivity.this,MMGobangActivity.class));
break;
}
}
ChessFormUtil:
packagecom.example.gobang.mm;
publicclassChessFormUtil{
//定义各种棋形的分数
/**待分析的棋型列表的长度*/
publicstaticfinalintANALYZE_LEN=8;
publicstaticfinalintHALF_LEN=ANALYZE_LEN>>1;
/**
*五连:
你只需下一步就可以胜利了
*/
publicstaticfinalintWU_LIAN=85;
/**
*活四:
两边都可成五的点
*/
publicstaticfinalintHUO_SI=40;
/**
*活三:
在走一步可以成活四的点
*/
publicstaticfinalintHUO_SAN=15;
/**
*冲四:
只有一端可成五的点
*/
publicstaticfinalintCHONG_SI=6;
/**
*活二:
在走一步可成活三的点
*/
publicstaticfinalintHUO_ER=4;
/**
*眠三:
在走一步可成冲四的点
*/
publicstaticfinalintMIAN_SAN=2;
/**
*眠二:
在走一步可成眠三的点
*/
publicstaticfinalintMIAN_ER=1;
//-------------------------------------------------------------
/**
*分析存在五连
*
*@paramtmpChess
*/
publicbooleananalyzeWulian(int[]tmpChess,intisWho){
intcount=0;
for(inti=0;i if(tmpChess[HALF_LEN-(i+1)]==isWho){
count++;
}else{
break;
}
}
for(inti=0;i if(tmpChess[HALF_LEN+i]==isWho){
count++;
}else{
break;
}
}
if(count==4){
returntrue;
}
returnfalse;
}
/**
*
*分析活四return是否存在活四
*
*@paramtmpChess
*/
publicbooleananalyzeHuosi(int[]tmpChess,intisWho){
intcount=0;
inti=0;
booleanisSpace=false;
for(i=0;i if(tmpChess[HALF_LEN-(i+1)]==isWho){
count++;
}else{
break;
}
}
if(tmpChess[HALF_LEN-(i+1)]==0){
isSpace=true;
}
for(i=0;i if(tmpChess[HALF_LEN+i]==isWho){
count++;
}else{
break;
}
}
if(tmpChess[HALF_LEN+i]==0){
isSpace=true;
}else{
isSpace=false;
}
if(count==3&&isSpace){
returntrue;
}
returnfalse;
}
/**
*
*分析活三return是否存在活三
*
*@paramtmpChess
*/
publicbooleananalyzeHuosan(int[]tmpChess,intisWho){
intcount=0;
inti=0;
booleanisSpace=false;
for(i=0;i if(tmpChess[HALF_LEN-(i+1)]==isWho){
count++;
}else{
break;
}
}
if(tmpChess[HALF_LEN-(i+1)]==0){
isSpace=true;
}
for(i=0;i if(tmpChess[HALF_LEN+i]==isWho){
count++;
}else{
break;
}
}
if(tmpChess[HALF_LEN+i]==0){
isSpace=true;
}else{
isSpace=false;
}
if(count==2&&isSpace){
returntrue;
}
returnfalse;
}
/**
*
*分析冲四return是否存在冲四
*
*@paramtmpChess
*/
publicbooleananalyzeChongsi(int[]tmpChess,intisWho){
intcount=0;
inti=0;
booleanisSpace=false;
for(i=0;i if(tmpChess[HALF_LEN-(i+1)]==isWho){
count++;
}else{
break;
}
}
if(tmpChess[HALF_LEN-(i+1)]==0){
isSpace=true;
}
for(i=0;i if(tmpChess[HALF_LEN+i]==isWho){
count++;
}else{
break;
}
}
if(tmpChess[HALF_LEN+i]==0){
isSpace=true;
}
if(count==3&&isSpace){
returntrue;
}
returnfalse;
}
/**
*
*分析活二return是否存在活二
*
*@paramtmpChess
*/
publicbooleananalyzeHuoEr(int[]tmpChess,intisWho){
intcount=0;
inti=0;
booleanisSpace=false;
for(i=0;i if(tmpChess[HALF_LEN-(i+1)]==isWho){
count++;
}else{
break;
}
}
if(tmpChess[HALF_LEN-(i+1)]==0){
isSpace=true;
}
for(i=0;i if(tmpChess[HALF_LEN+i]==isWho){
count++;
}else{
break;
}
}
if(tmpChess[HALF_LEN+i]==0){
isSpace=true;
}else{
isSpace=false;
}
if(count==1&&isSpace){
returntrue;
}
returnfalse;
}
/**
*
*分析眠三return是否存在眠三
*
*@paramtmpChess
*/
publicbooleananalyzeMianSan(int[]tmpChess,intisWho){
intcount=0;
inti=0;
booleanisSpace=false;
for(i=0;i if(tmpChess[HALF_LEN-(i+1)]==isWho){
count++;
}else{
break;
}
}
if(tmpChess[HALF_LEN-(i+1)]==0){
isSpace=true;
}
for(i=0;i if(tmpChess[HALF_LEN+i]==isWho){
count++;
}else{
break;
}
}
if(tmpChess[HALF_LEN+i]==0){
isSpace=true;
}
if(count==2&&isSpace){
returntrue;
}
returnfalse;
}
/**
*
*分析眠二return是否存在眠二
*
*@paramtmpChess
*/
publicbooleananalyzeMianEr(int[]tmpChess,intisWho){
intcount=0;
inti=0;
booleanisSpace=false;
for(i=0;i if(tmpChess[HALF_LEN-(i+1)]==isWho){
count++;
}else{
break;
}
}
if(tmpChess[HALF_LEN-(i+1)]==0){
isSpace=true;
}
for(i=0;i if(tmpChess[HALF_LEN+i]==isWho){
count++;
}else{
break;
}
}
if(tmpChess[HALF_LEN+i]==0){
isSpace=true;
}
if(count==1&&isSpace){
returntrue;
}
returnfalse;
}
}
GobangView:
packagecom.example.gobang.mm;
importandroid.content.Context;
importandroid.content.res.Resources;
importandroid.graphics.Bitmap;
importandroid.graphics.BitmapFactory;
importandroid.graphics.Canvas;
importandroid.graphics.Color;
importandroid.graphics.Paint;
importandroid.graphics.Paint.Style;
importandroid.graphics.drawable.Drawable;
importandroid.util.AttributeSet;
importandroid.util.Log;
importandroid.view.KeyEvent;
importandroid.view.MotionEvent;
importandroid.view.View;
importandroid.widget.TextView;
importcom.example.gobang.R;
classChessPoint{
intx;
inty;
intscore;
}
//publicclassGobangViewextendsViewimplementsRunnable{
publicclassGobangViewextendsView{
privatefinalstaticintGRID_SIZE=13;
privatefinalstaticintCHESS_GRID=GRID_SIZE-1;
privatefinalstaticintCHECK_DIR=4;//当前位置的四个方向,横、竖、左斜、右斜
privateintmChessDia=22;//棋的直径
privateintmWidth;//棋盘格的宽度
privateintmStartX;//棋盘定位的左上角X
privateintmStartY;//棋盘定位的左上角Y
privateBitmap[]mChessBW;//黑棋和白棋
privateint[][]mChessTable=newint[CHESS_GRID][CHESS_GRID];//网格
privateint[][][]computerTable=newint[CHESS_GRID][CHESS_GRID][CHECK_DIR];//电脑