java - 棋盘游戏逻辑的持久套接字 (Android)

标签 java android sockets chess

刚学Android和Java编程(里面很菜鸟),想请教一些关于android编程和Socket Server的问题。

我接到了一项任务,要创建一个简单的国际象棋应用程序(不包括 AI), pawn 的位置将从 TCP 套接字中检索:

服务器:xinuc.org

端口:7387

我被告知使用Socket Persistent因为服务器会每秒更新pawn的位置 pawn的位置将以这种格式发送

[Pawn's Code] [Horizo​​ntal Position] [Vertical Position] [space],

典当行代码:

K: White King

Q: White Queen

B: White Bishop

N: White Knight

R: White Rook

k: Black King

q: Black Queen

b: Black Bishop

n: Black Knight

r: Black Rook

例如:Ka1 Qg3 Be6 等等。

然后我的应用程序必须调整检索到的位置并相应地移动棋子。

我已经阅读了一些关于 Android 套接字编程的教程,但仍然有点困惑,我使用 AsyncTask 而不是 Thread,因为我读到 AsyncTask 在这种情况下是更好的选择。

在阅读和了解它之后,这里是我如何使用 Socket 检索数据(在 doInBackground 中):

try {
    clientSocket = new Socket(SERVERADD, SERVERPORT);
    InputStreamReader inputStream = new InputStreamReader(clientSocket.getInputStream());
    BufferedReader reader = new BufferedReader(inputStream);
    String latestPosition = reader.readLine();
    storedPosition=latestPosition;
} catch (UnknownHostException e) {
    Log.d("Error Unknown Host", String.valueOf(e));
} catch (IOException e) {
    Log.d("Error IOException", String.valueOf(e));
}

我不认为我在上面放置的从 Socket 检索数据的代码是最佳实践,CMIIW。

下面就是支持我的问题的(相当长且无聊的)背景,我在这里有两个主要问题:

  1. 我有点不知道我在这里做什么,我上面提供的代码可以从客户端读取数据吗?

  2. 在我检索数据后,我应该相应地移动 pawn 的位置。而且我仍然不知道应该如何完成(关于我如何创建棋盘并移动棋子位置)。你能用更容易理解的方式告诉我应该怎么做吗?

我读过这些: Android Chess Game Example Android Source Code - Chess ,

但我觉得它们对我来说太复杂了,

提前致谢

最佳答案

你的问题太宽泛了。您可能想要指定您需要帮助的部分。无论如何,我会尝试给出一些一般性的想法。希望对您有所帮助。

型号

  • 首先为棋子、玩家创建数据模型, 和棋盘。

网络

  • 然后确保您通过 TCP 正确接收数据 网络。这是您应该掌握 AsyncTask 的地方。在你之后 了解AsyncTask的工作流程,可以使用this example开始开发您自己的 AsyncTask。

界面

最后你应该实现图形。基于应用 您的项目,AFAIK 有三种替代方法 拿。

  • 您可以为您的棋子使用 ImageButton,并使用 安卓动画。谷歌 GridView 也是。我在 Android 上发现了两个基于网格的国际象棋实现:thisthat .

  • 如果您是网络开发人员,或者您很熟悉 Android Canvas API,这是一种更好的方式,为您提供更多的自由和准确性。

  • 另一种更耗时但更专业的 UI 方法 游戏,可能正在使用适用于 Android 的 OpenGL ES。你可以阅读official documents ,看看online tutorials , 或掌握 good book关于这个话题。如果您要使用 3D,一定要使用 OpenGL。


综上所述,有一些流行的游戏引擎可以帮助您 快速高效地成为专业的游戏开发者。 Cocos2D 是我的最爱之一,适合棋类游戏,全面 taught托德·珀金斯 (Todd Perkins) 谈琳达 (Lynda)。

关于java - 棋盘游戏逻辑的持久套接字 (Android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30408879/

相关文章:

android - Flutter 应用程序 - 无法在真实设备上进行测试! X-Code 版本有问题

java - Java 中使用 SSL 的 HTTP 代理

android - 多个设备中的自签名 SSL 证书 - 这足够安全吗?

java - 客户端/服务器 java 应用程序中的 JVM_Bind 错误

C++ 如何退出 while 循环 recvfrom()

Java:在没有 Arrays.toString 的情况下打印数组

java - 什么时候可以使用枚举的名称()

java - 将 XML 解析为 Java 对象

JavaFX:在 SimpleIntegerProperty 中存储 null

具有网络图像缓存的Android Listview