# 前言
我之前做了个人机对战的五子棋, AI算法很垃圾, 然后各种逻辑很糟糕, 已经很久没有维护了, 今天看了篇文章, 是用了蓝牙和Wifi的五子棋对战, 我觉得很有意思, 毕竟自己没做过蓝牙连接这方面的项目, 然后我就把以前做的五子棋搬了出来.
---
# 蓝牙的基础知识
我在前面就有写过一篇比较详细的文章, 兄弟们可以到前面看一看, [Android 蓝牙五子棋[可人机对战] —— 蓝牙通信篇](http://blog.csdn.net/williamchew/article/details/68925920)
---
# 项目解析
- ## 文件结构
![这里写图片描述](http://img.blog.csdn.net/20170407150037619?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2lsbGlhbWNoZXc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
- ## 人机对战算法
这个算法呢, 就是一个朋友写的, 使用了**博弈树**来进行判断对战, 其实原理很简单: **通过计算各个点的权重**.
有兴趣的朋友可以下载项目来研究下,这个算法不是很好,计算得比较慢, 一共写了6棵树, 我这里只用了2,3,4, 所以比较快.哪天有空,我也来研究一下ai算法.
- ## 主要的模块
- ### 蓝牙游戏模块
BleGameActivity.java
```
public class BleGameActivity extends Activity implements PeopleGameView.onBluetoothListener {
@InjectView(R.id.tv_pgv_win)
TextView mIsWin;
@InjectView(R.id.view_pgv)
PeopleGameView mPeopleGameView;
@InjectView(R.id.btn_pgv_return)
Button mBtnPgvReturn;
@InjectView(R.id.btn_pgv_again)
Button mBtnPgvAgain;
@InjectView(R.id.btn_pgv_msg)
Button mBtnPgvMsg;
private ConnectedThread mConnectedThread;
private BluetoothSocket mSocket;
private ListPopupWindow mWindowCompat;
private List<String> mMessage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_ble_game);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
ButterKnife.inject(this);
init();
}
//初始化
private void init() {
String[] message = getResources().getStringArray(R.array.array_message);
mMessage = Arrays.asList(message);
mPeopleGameView.setTextView(mIsWin);
mPeopleGameView.setCallBack(this);
//获取信息
Intent intent = getIntent();
String adress = intent.getStringExtra("adress");
boolean isStart = intent.getBooleanExtra("isStart", false);
if (adress != null) {
mSocket = SocketManager.getmBleSocketHm(adress);
manageClientSocket(isStart);
mPeopleGameView.setAdress(adress);
mPeopleGameView.setIsStart(isStart);
}
popupWindow();
}
//开启连接线程
public void manageClientSocket(boolean isStart) {
mConnectedThread = new ConnectedThread(mSocket, mPeopleGameView, isStart);
mConnectedThread.start();
}
//发送信息
@Override
public void onCommand(String temp) {
mConnectedThread.write(temp.getBytes());
}
@OnClick({R.id.btn_pgv_return, R.id.btn_pgv_again, R.id.btn_pgv_msg})
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_pgv_msg:
mWindowCompat.show();
break;
case R.id.btn_pgv_return:
String command = "return";
mConnectedThread.write(command.getBytes());
mPeopleGameView.returnUp();
break;
case R.id.btn_pgv_again:
String restartCommand = "restart";
mConnectedThread.write(restartCommand.getBytes());
mPeopleGameView.restartGame();
break;
}
}
//弹出快捷回复窗口
private void popupWindow() {
mWindowCompat = new ListPopupWindow(this);
mWindowCompat.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mMessage));
mWindowCompat.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
mWindowCompat.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
mWindowCompat.setAnchorView(mBtnPgvMsg);
mWindowCompat.setModal(true);
mWindowCompat.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String msg = "msg;" + mMessage.get(position);
mConnectedThread.write(msg.getBytes());
mWindowCompat.dismiss();
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
mConnectedThread.cancel();
}
}
```
PeopleGameView.java
```
public class PeopleGameView extends View {
private Paint mPaint;
private int mPanelWidth; //画布宽度
private int mChessFlag = 0; //记录上一次下棋颜色,1为黑色,2为白色,0为刚开始
private static final int CHESS_BLACK = 1;
private static final int CHESS_WHITE = 2;
private static final int MAX_LINE = 15; //最大行数
private static final float SIZE = 3 * 1.0f / 4; //棋子的大小为棋盘格子的3/4
private float mSingleHeight; //格子高度
public boolean isWin = false; //是否已出结果
private boolean isMe = false; //谁先出手
private boolean isStart = false; //谁先开始
private int[][] mChess; //棋盘
private Stack<String> mChessArray; //悔棋的栈
private BleGameActivity mBleGameActivity;
private String mAdress;
private int mUpChessX; //上一个下的棋子x,y
private int mUpChessY;
private TextView mTvWin; //输赢的TextView
public PeopleGameView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
//初始化
private void init() {
isWin = false;
mUpChessX = mUpChessY = -1;
mChess = new int[MAX_LINE][MAX_LINE];
mChessArray = new Stack<>();
mPaint = new Paint();
mPaint.setColor(Color.BLACK);
mPaint.setAntiAlias(true);
mPaint.setDither(true);
mPaint.setStyle(Paint.Style.FILL);
isMe = isStart;
没有合适的资源?快使用搜索试试~ 我知道了~
蓝牙五子棋[可人机对战]Gobang.zip
共52个文件
java:19个
xml:15个
png:7个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 78 浏览量
2024-05-12
17:17:06
上传
评论
收藏 87KB ZIP 举报
温馨提示
五子棋游戏想必大家都非常熟悉,游戏规则十分简单。游戏开始后,玩家在游戏设置中选择人机对战,则系统执黑棋,玩家自己执白棋。双方轮流下一棋,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【技术】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
资源推荐
资源详情
资源评论
收起资源包目录
蓝牙五子棋[可人机对战]Gobang.zip (52个子文件)
Gobang-master
app
src
androidTest
java
com
android
willchen
gobang
ApplicationTest.java 346B
test
java
com
android
willchen
gobang
ExampleUnitTest.java 305B
main
java
com
android
willchen
gobang
adapter
BluetoothDevicesAdapter.java 2KB
receiver
BluetoothReceiver.java 2KB
socket
BleServerSocketThread.java 4KB
SocketManager.java 1KB
BleSocketThread.java 3KB
ConnectedThread.java 2KB
view
PeopleGameView.java 13KB
AiGameView.java 8KB
ai
IAi.java 622B
Ai.java 26KB
ui
BleConnectActivity.java 8KB
AiActivity.java 2KB
BleGameActivity.java 4KB
MainActivity.java 2KB
config
ConfigData.java 668B
bean
Bluetooth.java 554B
BestPos.java 377B
res
mipmap-xxhdpi
ic_launcher.png 8KB
mipmap-hdpi
ic_launcher.png 3KB
mipmap-mdpi
ic_launcher.png 2KB
mipmap-xxxhdpi
ic_launcher.png 10KB
mipmap-xhdpi
ic_launcher.png 5KB
values-w820dp
dimens.xml 358B
values
dimens.xml 211B
colors.xml 306B
arrays.xml 371B
strings.xml 71B
styles.xml 381B
layout
activity_ai.xml 2KB
activity_bleconnect.xml 710B
item_popup.xml 433B
item_bluetooth.xml 940B
activity_ble_game.xml 3KB
activity_main.xml 1KB
main_titlebar.xml 840B
drawable
iv_black.png 3KB
iv_white.png 3KB
restartgame_selector.xml 249B
AndroidManifest.xml 1KB
proguard-rules.pro 637B
build.gradle 852B
.gitignore 29B
gradlew.bat 2KB
ai.cpp 35KB
build.gradle 498B
settings.gradle 15B
ai.h 2KB
gradlew 5KB
.gitignore 103B
README.md 21KB
共 52 条
- 1
资源评论
枫蜜柚子茶
- 粉丝: 6345
- 资源: 4732
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功