package com.shanmingc.yi.activity;
import android.content.*;
import android.graphics.Bitmap;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import androidx.cardview.widget.CardView;
import com.shanmingc.yi.R;
import com.shanmingc.yi.network.RequestProxy;
import com.shanmingc.yi.view.BoardView;
import okhttp3.FormBody;
import okhttp3.Request;
import java.util.Collections;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import static com.shanmingc.yi.activity.LoginActivity.USER_ID;
import static com.shanmingc.yi.activity.LoginActivity.USER_NAME;
import static com.shanmingc.yi.activity.RegisterActivity.HOST;
import static com.shanmingc.yi.activity.RoomActivity.*;
import static com.shanmingc.yi.view.BoardView.*;
public class BoardActivity extends AppCompatActivity {
private SharedPreferences roomPreference;
private SharedPreferences userPreference;
private ExecutorService exec;
public static final String CHESS_BROADCAST = "com.shanmingc.yi.chessbroadcast";
public static final String PLAYER_BROADCAST = "com.shanmingc.yi.playerbroadcast";
public static final String FINISH_BROADCAST = "com.shanmingc.yi.finishbroadcast";
public static final String UI_BROADCAST = "com.shanmingc.yi.uibroadcast";
public static final String GAME_PREFERENCE = "game_preference";
private static final String TAG = "BoardActivity";
//private long opponentId;
//private String opponentName;
private String room_id;
private TextView selfReadyText;
private TextView selfText;
private TextView opponentText;
private ImageView selfChess;
private ImageView opponentChess;
private TextView opponentReady;
private CardView selfReady;
private BoardView mBoardView;
private SharedPreferences gamePreference;
private BroadcastReceiver mBoardReceiver;
private boolean mYourTurn;
private boolean mFinish = false;
private boolean ready = false;
private boolean owner;
private boolean mGameStart = false;
private boolean mBlack;
private boolean threadEnd = false;
private int currStep = 0;
enum Player {
NONE, MATCHED, READY
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_board_actvity);
selfReady = findViewById(R.id.self_ready);
selfReadyText = findViewById(R.id.self_ready_text);
selfReady.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ready = !ready;
exec.execute(new Runnable() {
@Override
public void run() {
requestReady(ready);
}
});
if(ready)
selfReadyText.setText(R.string.cancel_ready);
else selfReadyText.setText(R.string.ready);
}
});
init();
//exec.execute(new ChessTask());
}
class BoardReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(PLAYER_BROADCAST)) {
Player state = (Player) intent.getSerializableExtra("state");
String name = intent.getStringExtra("username");
switch (state) {
case NONE:
opponentText.setText("");
opponentReady.setText(R.string.not_ready);
break;
case READY:
opponentReady.setText(R.string.ready);
if (ready) {
mGameStart = true;
//requestGameStart();
//gameStart();
exec.execute(new ChessTask());
}
break;
case MATCHED:
opponentText.setText(name);
opponentReady.setText(R.string.not_ready);
break;
}
} else if(action.equals(CHESS_BROADCAST)) {
if(!mGameStart)
return;
int x = intent.getIntExtra(CHESS_X, -1);
int y = intent.getIntExtra(CHESS_Y, -1);
int step = intent.getIntExtra(STEP, 0);
boolean local = intent.getBooleanExtra("local", false);
boolean win = intent.getBooleanExtra("win", false);
currStep = step;
if(local) {
if(mYourTurn) {
mYourTurn = false;
requestChessOn(x, y, step, win);
//mBoardView.chess(x, y);
}
}
else {
if(!mYourTurn) {
mYourTurn = true;
mBoardView.chess(x, y);
}
}
Log.d(TAG, x + " " + y + " " + step);
} else if(action.equals(FINISH_BROADCAST)) {
Log.d("chess", "finish broadcast");
boolean blackWin = intent.getBooleanExtra("blackWin", false);
Toast.makeText(BoardActivity.this, (blackWin)? R.string.black_win : R.string.white_win, Toast.LENGTH_SHORT).show();
AlertDialog alertDialog = new AlertDialog
.Builder(BoardActivity.this)
.setMessage((blackWin)? R.string.black_win : R.string.white_win)
.setPositiveButton(R.string.accept, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.setCancelable(false)
.create();
alertDialog.show();
//mGameStart = false;
//exec.execute(new PlayerTask());
} else if(action.equals(UI_BROADCAST)) {
if(mGameStart)
gameStart();
}
}
}
class PlayerTask implements Runnable {
@Override
public void run() {
Log.d(TAG, "enter player task");
while(!mGameStart) {
if(threadEnd)
break;
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
String room_id = roomPreference.getString(ROOM_ID, "");
Map<String, Object> room = requestRoomInfo(room_id);
if(room == null) {
BoardActivity.this.finish();
}
long id = userPreference.getLong(USER_ID, 0);
Log.d(TAG, "owner_id : " + room.get("room_owner"));
long owner_id = ((Double) room.get("room_owner")).longValue();
long player_id = ((Double) room.get("player")).longValue();
owner = (owner_id == id);
boolean owner_ready = (Boolean) room.get("ownerReady");
boolean player_ready = (Boolean) room.get("playerReady");
if (owner) {
Map<String, Object> player = requestPlayerInfo(player_id);
if(player == null) {
Log.d(TAG, "request player " + player_id + " failed");
没有合适的资源?快使用搜索试试~ 我知道了~
五子棋对战平台“弈”的Android前端Yi-frontend.zip
共96个文件
xml:38个
png:23个
java:18个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 182 浏览量
2024-05-12
17:17:27
上传
评论
收藏 670KB 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
资源推荐
资源详情
资源评论
收起资源包目录
五子棋对战平台“弈”的Android前端Yi-frontend.zip (96个子文件)
Yi-frontend-master
gradle.properties 1KB
gradle
wrapper
gradle-wrapper.jar 53KB
gradle-wrapper.properties 232B
app
src
androidTest
java
com
shanmingc
yi
ExampleInstrumentedTest.kt 650B
test
java
com
shanmingc
yi
ExampleUnitTest.kt 341B
main
java
com
shanmingc
yi
Fragment
Gamemenu_FragmentPagerAdapter.java 1KB
BattleListFragment.java 1KB
RecordFragment_ListViewAdapter.java 2KB
PersonalFragment.java 2KB
RecordFragment.java 4KB
activity
LoginActivity.java 6KB
RoomActivity.java 9KB
GameMenuActivity.java 2KB
ResetPasswordActivity.java 2KB
BoardActivity.java 19KB
RegisterActivity.java 6KB
ForgetActivity.java 5KB
WatchActivity.java 2KB
view
BoardView.java 8KB
ProgressDialog.java 1021B
model
UserMessage.java 727B
network
RequestProxy.java 4KB
widget
ItemGroup.java 4KB
res
mipmap-xxhdpi
ic_launcher_round.png 10KB
ic_launcher.png 6KB
mipmap-hdpi
ic_launcher_round.png 5KB
ic_launcher.png 3KB
drawable-v24
ic_launcher_foreground.xml 2KB
mipmap-anydpi-v26
ic_launcher.xml 271B
ic_launcher_round.xml 271B
mipmap-mdpi
ic_launcher_round.png 3KB
ic_launcher.png 2KB
mipmap-xxxhdpi
ic_launcher_round.png 15KB
ic_launcher.png 9KB
mipmap-xhdpi
ic_launcher_round.png 7KB
ic_launcher.png 4KB
xml
network_security_config.xml 151B
values
dimens.xml 211B
colors.xml 9KB
ids.xml 110B
strings.xml 1KB
attrs.xml 2KB
styles.xml 383B
layout
activity_watch.xml 2KB
activity_forget.xml 3KB
activity_board_actvity.xml 5KB
personal_fragment.xml 2KB
recordlistview.xml 2KB
item_group_layout.xml 2KB
activity_test.xml 463B
activity_room.xml 4KB
activity_login.xml 5KB
battle_fragment.xml 2KB
record_fragment.xml 900B
code_input.xml 696B
activity_gamemenu.xml 2KB
activity_register.xml 5KB
progress_dialog.xml 805B
drawable
white_shadow.png 34KB
ic_launcher_background.xml 5KB
ic_board.xml 4KB
friend.png 2KB
wood.jpg 34KB
timg__2_.jpg 9KB
black_shadow.png 32KB
board_bg2.png 14KB
help.png 973B
timg.jpg 7KB
board_bg3.png 21KB
board_bg6.png 194KB
white.png 26KB
board_bg4.png 38KB
board_bg.png 21KB
ahaha.png 10KB
black.png 24KB
board_bg5.jpg 39KB
denglu.png 8KB
AndroidManifest.xml 1KB
proguard-rules.pro 751B
build.gradle 2KB
.gitignore 7B
gradlew.bat 2KB
build.gradle 666B
.idea
jarRepositories.xml 1KB
dictionaries
15258.xml 175B
codeStyles
codeStyleConfig.xml 142B
Project.xml 381B
uiDesigner.xml 9KB
vcs.xml 180B
misc.xml 371B
inspectionProfiles
Project_Default.xml 368B
compiler.xml 169B
gradle.xml 687B
settings.gradle 37B
gradlew 5KB
.gitignore 208B
共 96 条
- 1
资源评论
枫蜜柚子茶
- 粉丝: 6995
- 资源: 5108
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于SSM+MySql的超市管理系统源码+数据库+说明文档.zip
- Java课程设计-基于Javaweb的超市管理系统源码+数据库+说明文档.zip
- 基于Javaweb的超市管理系统源码+数据库+说明文档.zip
- Unity Standard shader 修改(增加本地坐标裁剪)
- 基于vue-nodejs的教务管理系统源码+数据库+毕业设计.zip
- vuInhub靶场实战系列-prime:2
- 昆仑通态触摸屏MCGS样板程序案例,位图,培训教程.zip
- Java工资管理系统项目源码(可做毕设项目参考)
- 昆仑通态触摸屏案例、位图、培训教程(大全).zip
- 360数字安全:2024年3月勒索软件流行态势分析报告
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功