在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → android 五子棋app源码(单机版)

android 五子棋app源码(单机版)

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:24.09M
  • 下载次数:103
  • 浏览次数:2706
  • 发布时间:2018-03-30
  • 实例类别:Android平台开发
  • 发 布 人:coderzx
  • 文件格式:.zip
  • 所需积分:2
 相关标签: 五子棋

实例介绍

【实例简介】五子棋小游戏,有 androidstudio项目 也有 eclipse项目,均可运行

【实例截图】

from clipboard

【核心代码】

package com.example.wuziqi;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;

public class WuziqiPanel extends View {
private int mPanelWidth;
private float mLineHight;
private int MAX_LINE = 10;

private Paint mPaint = new Paint();
private Bitmap mWhitePiece;
private Bitmap mBlackPiece;
private float ratioPieceOfLineHight = 3 * 1.0f / 4;

private boolean mIsWith = true;
private List<Point> mWitharry = new ArrayList<Point>();
private List<Point> mBlackarry = new ArrayList<Point>();

private boolean mIsGemOver;
private boolean mIsWhiteWinner;

public WuziqiPanel(Context context, AttributeSet attrs) {
super(context, attrs);
// setBackgroundColor(0x44ff0000);
init();
}

private void init() {
mPaint.setColor(0x44ff0000);
mPaint.setAntiAlias(true);
mPaint.setDither(true);
mPaint.setStyle(Paint.Style.STROKE);

mWhitePiece = BitmapFactory.decodeResource(getResources(), R.drawable.stone_w2);
mBlackPiece = BitmapFactory.decodeResource(getResources(), R.drawable.stone_b1);

}

@Override
public boolean onTouchEvent(MotionEvent event) {
if (mIsGemOver) {
return false;
}
int action = event.getAction();
if (action == MotionEvent.ACTION_UP) {
int x = (int) event.getX();
int y = (int) event.getY();
Point p = getVaLidPoint(x, y);
if (mWitharry.contains(p) || mBlackarry.contains(p)) {
return false;
}
if (mIsWith) {
mWitharry.add(p);
} else {
mBlackarry.add(p);
}
invalidate();
mIsWith = !mIsWith;
}
return true;
}

private Point getVaLidPoint(int x, int y) {
return new Point((int) (x / mLineHight), (int) (y / mLineHight));
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
int widthMode = MeasureSpec.getMode(widthMeasureSpec);

int heighSize = MeasureSpec.getSize(heightMeasureSpec);
int heighMode = MeasureSpec.getMode(heightMeasureSpec);

int width = Math.min(widthSize, heighSize);

if (widthMode == MeasureSpec.UNSPECIFIED) {
width = heighSize;
} else if (heighMode == MeasureSpec.UNSPECIFIED) {
width = widthSize;
}
setMeasuredDimension(width, width);
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
mPanelWidth = w;
mLineHight = mPanelWidth * 1.0f / MAX_LINE;
int PiceWhite = (int) (mLineHight * ratioPieceOfLineHight);
mWhitePiece = Bitmap.createScaledBitmap(mWhitePiece, PiceWhite, PiceWhite, false);
mBlackPiece = Bitmap.createScaledBitmap(mBlackPiece, PiceWhite, PiceWhite, false);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
drawBoard(canvas);
draePicec(canvas);
checkGameOver();
}

private void checkGameOver() {
boolean whithWin = chechFiveInLine(mWitharry);
boolean blickWin = chechFiveInLine(mBlackarry);
if (whithWin || blickWin) {
mIsGemOver = true;
mIsWhiteWinner = whithWin;
String text = mIsWhiteWinner ? "白棋胜利" : "黑棋胜利";
Toast.makeText(getContext(), text, 1).show();
;
}
}

private boolean chechFiveInLine(List<Point> mWitharry2) {
for (Point p : mWitharry2) {
int x = p.x;
int y = p.y;

boolean win = checkHorizontal(x, y, mWitharry2);
if (win) return true;
win = checkVertIcal(x, y, mWitharry2);
if (win) return true;
win = checkLeftDiagonal(x, y, mWitharry2);
if (win) return true;
win = checkRightDiagonl(x, y, mWitharry2);
if (win) return true;
}
return false;
}

private boolean checkHorizontal(int x, int y, List<Point> mWitharry2) {
int count = 1;
for (int i = 1; i < 5; i ) {
if (mWitharry2.contains(new Point(x-i,y))) {
count ;
}else {
break;
}
}
if (count==5) return true;
for (int i = 1; i < 5; i ) {
if (mWitharry2.contains(new Point(x i,y))) {
count ;
}else {
break;
}
if (count==5) return true;
}
return false;
}
private boolean checkRightDiagonl(int x, int y, List<Point> mWitharry2) {
int count = 1;
for (int i = 1; i < 5; i ) {
if (mWitharry2.contains(new Point(x-i,y-i))) {
count ;
}else {
break;
}
}
if (count==5) return true;
for (int i = 1; i < 5; i ) {
if (mWitharry2.contains(new Point(x i,y i))) {
count ;
}else {
break;
}
if (count==5) return true;
}
return false;
}
private boolean checkLeftDiagonal(int x, int y, List<Point> mWitharry2) {
int count = 1;
for (int i = 1; i < 5; i ) {
if (mWitharry2.contains(new Point(x-i,y i))) {
count ;
}else {
break;
}
}
if (count==5) return true;
for (int i = 1; i < 5; i ) {
if (mWitharry2.contains(new Point(x i,y-i))) {
count ;
}else {
break;
}
if (count==5) return true;
}
return false;
}
private boolean checkVertIcal(int x, int y, List<Point> mWitharry2) {
int count = 1;
for (int i = 1; i < 5; i ) {
if (mWitharry2.contains(new Point(x,y-i))) {
count ;
}else {
break;
}
}
if (count==5) return true;
for (int i = 1; i < 5; i ) {
if (mWitharry2.contains(new Point(x,y i))) {
count ;
}else {
break;
}
if (count==5) return true;
}
return false;
}

private void draePicec(Canvas canvas) {
for (int i = 0, n = mWitharry.size(); i < n; i ) {
Point whitePoint = mWitharry.get(i);
canvas.drawBitmap(mWhitePiece, (whitePoint.x (1 - ratioPieceOfLineHight) / 2) * mLineHight,
(whitePoint.y (1 - ratioPieceOfLineHight) / 2) * mLineHight, null);
}
for (int i = 0, n = mBlackarry.size(); i < n; i ) {
Point blackPoint = mBlackarry.get(i);
canvas.drawBitmap(mBlackPiece, (blackPoint.x (1 - ratioPieceOfLineHight) / 2) * mLineHight,
(blackPoint.y (1 - ratioPieceOfLineHight) / 2) * mLineHight, null);
}
}

private void drawBoard(Canvas canvas) {
int w = mPanelWidth;
float lineHeight = mLineHight;
for (int i = 0; i < MAX_LINE; i ) {
int startX = (int) (lineHeight / 2);
int endX = (int) (w - lineHeight / 2);

int y = (int) ((0.5 i) * lineHeight);
canvas.drawLine(startX, y, endX, y, mPaint);
canvas.drawLine(y, startX, y, endX, mPaint);
}
}

}



标签: 五子棋

实例下载地址

android 五子棋app源码(单机版)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

第 1 楼 1740853865 发表于: 2020-12-29 16:35 53
我来说两句...

支持(0) 盖楼(回复)

第 2 楼 1740853865 发表于: 2020-12-29 16:36 08
我来说两句...

支持(0) 盖楼(回复)

第 3 楼 1740853865 发表于: 2020-12-29 16:36 25
怎么导入老是错

支持(0) 盖楼(回复)

第 4 楼 1740853865 发表于: 2020-12-30 09:47 18
作者能加我qq吗1740853865

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有4条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警