基于android实现五子棋开发
基于Android的五子棋的开发,供大家参考,具体内容如下
需求分析
1棋盘和棋子绘制
2按照五子棋的规则制定游戏胜负规则
3鼠标响应在对战中需要通过鼠标点击下棋进行游戏的基本操作
4游戏模式双人对战两人交替落子双方孰先孰后随机决定
5棋子的形式和作用棋子分为黑白两种棋子双方各持一种棋子通过黑先白后的方式来进行对局
6通过棋子完成五连珠结束游戏
流程图
androidstdio中的基本架构
CheckWinner.java
packagecom.example.wuziqi;
importandroid.graphics.Point;
importjava.util.List;
/**
*CreatedbyLinuxon2016/4/8.
*/
publicclassCheckWinner{
privatePointpoint1,point2;
privateintcheckModel=Constants.HORIZONTAL;
publicbooleancheckFiveInLineWinner(Listpoints){
for(Pointpoint:points){
intx=point.x;
inty=point.y;
if(checkHorizontal(x,y,points)){
returntrue;
}elseif(checkVertical(x,y,points)){
returntrue;
}elseif(checkLeftDiagonal(x,y,points)){
returntrue;
}elseif(checkRighttDiagonal(x,y,points)){
returntrue;
}
}
returnfalse;
}
privatebooleancheck(intx,inty,Listpoints,intcheckOri){
intcount=1;
for(inti=1;ipoints){
checkModel=Constants.HORIZONTAL;
returncheck(x,y,points,checkModel);
}
//竖向判断
privatebooleancheckVertical(intx,inty,Listpoints){
checkModel=Constants.VERTICAL;
returncheck(x,y,points,checkModel);
}
//左斜判断
privatebooleancheckLeftDiagonal(intx,inty,Listpoints){
checkModel=Constants.LEFT_DIAGONAL;
returncheck(x,y,points,checkModel);
}
//右斜判断
privatebooleancheckRighttDiagonal(intx,inty,Listpoints){
checkModel=Constants.RIGHT_DIAGONAL;
returncheck(x,y,points,checkModel);
}
}
ChessBoardView.java
packagecom.example.wuziqi;
importandroid.content.Context;
importandroid.graphics.Bitmap;
importandroid.graphics.BitmapFactory;
importandroid.graphics.Canvas;
importandroid.graphics.Paint;
importandroid.graphics.Point;
importandroid.media.MediaPlayer;
importandroid.os.Bundle;
importandroid.os.Parcelable;
importandroid.util.AttributeSet;
importandroid.view.MotionEvent;
importandroid.view.View;
importandroid.widget.Toast;
importjava.util.ArrayList;
publicclassChessBoardViewextendsView{
//棋盘的宽度,也是长度
privateintmViewWidth;
//棋盘每格的长度
privatefloatmaxLineHeight;
privatePaintpaint=newPaint();
//定义黑白棋子的Bitmap
privateBitmapmwhitePiece,mblackPiece;
privatefloatratioPieceOfLineHeight=3*1.0f/4;
//判断当前落下的棋子是否是白色的
privatebooleanmIsWhite=true;
//记录黑白棋子位置的列表
privateArrayListmwhiteArray=newArrayList<>();
privateArrayListmblackArray=newArrayList<>();
//游戏是否结束
privatebooleanmIsGameOver;
//游戏结束,是否是白色方胜利
privatebooleanmIsWhiteWinner;
publicChessBoardView(Contextcontext,AttributeSetattrs){
super(context,attrs);
init();
}
privatevoidinit(){
paint.setColor(0x88000000);
paint.setAntiAlias(true);
paint.setDither(true);
paint.setStyle(Paint.Style.STROKE);
mwhitePiece=BitmapFactory.decodeResource(getResources(),R.mipmap.stone_w2);
mblackPiece=BitmapFactory.decodeResource(getResources(),R.mipmap.stone_b1);
}
@Override
protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){
intwidthSize=MeasureSpec.getSize(widthMeasureSpec);
intwidthModel=MeasureSpec.getMode(widthMeasureSpec);
intheightSize=MeasureSpec.getSize(heightMeasureSpec);
intheightModel=MeasureSpec.getMode(heightMeasureSpec);
intwidth=Math.min(widthSize,heightSize);
if(widthModel==MeasureSpec.UNSPECIFIED){
width=heightSize;
}elseif(heightModel==MeasureSpec.UNSPECIFIED){
width=widthSize;
}
setMeasuredDimension(width,width);
}
@Override
protectedvoidonDraw(Canvascanvas){
super.onDraw(canvas);
//绘制棋盘的网格
drawBoard(canvas);
//绘制棋盘的黑白棋子
drawPieces(canvas);
//检查游戏是否结束
checkGameOver();
}
//检查游戏是否结束
privatevoidcheckGameOver(){
CheckWinnercheckWinner=newCheckWinner();
booleanwhiteWin=checkWinner.checkFiveInLineWinner(mwhiteArray);
booleanblackWin=checkWinner.checkFiveInLineWinner(mblackArray);
if(whiteWin||blackWin){
mIsGameOver=true;
mIsWhiteWinner=whiteWin;
Stringtext=mIsWhiteWinner?"白棋胜利":"黑棋胜利";
Toast.makeText(getContext(),text,Toast.LENGTH_SHORT).show();
}
}
//根据黑白棋子的数组绘制棋子
privatevoiddrawPieces(Canvascanvas){
for(inti=0,n=mwhiteArray.size();i
Constants.java
packagecom.example.wuziqi;
/**
*CreatedbyLinuxon2016/4/8.
*/
publicclassConstants{
//五子连珠
publicfinalstaticintMAX_COUNT_IN_LINE=5;
//棋盘的行数
finalstaticintMAX_LINE=25;
//检查的方向
finalstaticintHORIZONTAL=0;
finalstaticintVERTICAL=1;
finalstaticintLEFT_DIAGONAL=2;
finalstaticintRIGHT_DIAGONAL=3;
}
MainActivity.java
packagecom.example.wuziqi;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.view.Menu;
importandroid.view.MenuItem;
importandroid.view.View;
importandroidx.appcompat.app.AppCompatActivity;
publicclassMainActivityextendsAppCompatActivity{
privateChessBoardViewchessBoardView;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
chessBoardView=(ChessBoardView)findViewById(R.id.boardView);
}
publicvoiddoClick(Viewv){
Intentintent=newIntent(MainActivity.this,MusicServer.class);
switch(v.getId()){
caseR.id.button1:
this.startService(intent);
break;
caseR.id.button2:
this.stopService(intent);
break;
}
}
@Override
publicbooleanonOptionsItemSelected(MenuItemitem){
intid=item.getItemId();
//再来一局
if(id==R.id.action_setting){
chessBoardView.start();
returntrue;
}
returnsuper.onOptionsItemSelected(item);
}
@Override
publicbooleanonCreateOptionsMenu(Menumenu){
getMenuInflater().inflate(R.menu.menu_main,menu);
returntrue;
}
MusicServers.java
packagecom.example.wuziqi;
importandroid.app.Service;
importandroid.content.Intent;
importandroid.media.MediaPlayer;
importandroid.os.IBinder;
importandroid.util.Log;
publicclassMusicServerextendsService{
privateMediaPlayermp;
publicIBinderonBind(Intentintent){
Log.e("Service","onBind被调用");
mp.start();
returnnull;
}
publicvoidonCreate(){
Log.e("Service","onCreate被调用");
mp=MediaPlayer.create(this,R.raw.yinyue);
super.onCreate();
}
publicvoidonDestroy(){
Log.e("Service","onDestroy被调用");
mp.stop();
super.onDestroy();
}
publicintonStartCommand(Intentintent,intflags,intstartId){
Log.e("Service","onStartCommand被调用");
mp.start();
returnsuper.onStartCommand(intent,flags,startId);
}
publicbooleanonUnbind(Intentintent){
Log.e("Service","onUnbind被调用");
mp.stop();
returnsuper.onUnbind(intent);
}
}
AndroidManifest.xml
activity_main.xml
menu_main.xml
运行结果
悔棋由于没时间所以没实现,如果有问题希望大家帮忙改正。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。