开发一个Android的五子棋小游戏
时间: 2024-01-14 20:48:17 浏览: 26
好的,下面是一个简单的Android五子棋小游戏的开发流程:
1. 创建一个Android项目并添加必要的依赖库和资源文件。
2. 创建主界面布局,包括棋盘和游戏控制按钮等元素。
3. 实现棋盘的绘制,包括棋盘线条和棋子的绘制。
4. 实现游戏逻辑,包括判断胜负、切换玩家等功能。
5. 实现游戏控制按钮的响应事件,包括重新开始游戏和悔棋等功能。
6. 测试并调试游戏,确保游戏可以正常运行。
以下是一个简单的代码示例:
1. 创建主界面布局:
```
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.example.gobang.GameView
android:id="@+id/game_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<Button
android:id="@+id/btn_restart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="重新开始"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="20dp" />
<Button
android:id="@+id/btn_undo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="悔棋"
android:layout_alignParentBottom="true"
android:layout_toLeftOf="@id/btn_restart"
android:layout_marginBottom="20dp" />
</RelativeLayout>
```
2. 创建GameView类,实现棋盘的绘制和游戏逻辑:
```
public class GameView extends View {
private static final int BOARD_SIZE = 15;
private static final int PIECE_SIZE = 40;
private Paint mPaint;
private int[][] mBoard;
private boolean mIsBlackTurn;
public GameView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
mPaint = new Paint();
mBoard = new int[BOARD_SIZE][BOARD_SIZE];
mIsBlackTurn = true;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
drawBoard(canvas);
drawPieces(canvas);
}
private void drawBoard(Canvas canvas) {
mPaint.setColor(Color.BLACK);
mPaint.setStrokeWidth(2);
for (int i = 0; i < BOARD_SIZE; i++) {
canvas.drawLine(PIECE_SIZE / 2, PIECE_SIZE / 2 + i * PIECE_SIZE,
PIECE_SIZE / 2 + (BOARD_SIZE - 1) * PIECE_SIZE,
PIECE_SIZE / 2 + i * PIECE_SIZE, mPaint);
canvas.drawLine(PIECE_SIZE / 2 + i * PIECE_SIZE, PIECE_SIZE / 2,
PIECE_SIZE / 2 + i * PIECE_SIZE,
PIECE_SIZE / 2 + (BOARD_SIZE - 1) * PIECE_SIZE, mPaint);
}
}
private void drawPieces(Canvas canvas) {
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
if (mBoard[i][j] == 1) {
mPaint.setColor(Color.BLACK);
canvas.drawCircle(PIECE_SIZE / 2 + i * PIECE_SIZE,
PIECE_SIZE / 2 + j * PIECE_SIZE, PIECE_SIZE / 2, mPaint);
} else if (mBoard[i][j] == 2) {
mPaint.setColor(Color.WHITE);
canvas.drawCircle(PIECE_SIZE / 2 + i * PIECE_SIZE,
PIECE_SIZE / 2 + j * PIECE_SIZE, PIECE_SIZE / 2, mPaint);
}
}
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
int x = (int) event.getX();
int y = (int) event.getY();
int i = x / PIECE_SIZE;
int j = y / PIECE_SIZE;
if (i >= 0 && i < BOARD_SIZE && j >= 0 && j < BOARD_SIZE && mBoard[i][j] == 0) {
mBoard[i][j] = mIsBlackTurn ? 1 : 2;
mIsBlackTurn = !mIsBlackTurn;
invalidate();
}
}
return true;
}
public void restart() {
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
mBoard[i][j] = 0;
}
}
mIsBlackTurn = true;
invalidate();
}
public void undo() {
for (int i = BOARD_SIZE - 1; i >= 0; i--) {
for (int j = BOARD_SIZE - 1; j >= 0; j--) {
if (mBoard[i][j] != 0) {
mBoard[i][j] = 0;
mIsBlackTurn = !mIsBlackTurn;
invalidate();
return;
}
}
}
}
public boolean isGameOver() {
return checkWin() || isBoardFull();
}
private boolean checkWin() {
int[][] directions = {{0, 1}, {1, 0}, {1, 1}, {-1, 1}};
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
if (mBoard[i][j] != 0) {
for (int[] direction : directions) {
int count = 1;
int x = i;
int y = j;
while (count < 5) {
x += direction[0];
y += direction[1];
if (x < 0 || x >= BOARD_SIZE || y < 0 || y >= BOARD_SIZE
|| mBoard[x][y] != mBoard[i][j]) {
break;
}
count++;
}
if (count == 5) {
return true;
}
}
}
}
}
return false;
}
private boolean isBoardFull() {
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
if (mBoard[i][j] == 0) {
return false;
}
}
}
return true;
}
}
```
3. 在MainActivity中设置按钮的响应事件:
```
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private GameView mGameView;
private Button mBtnRestart;
private Button mBtnUndo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mGameView = findViewById(R.id.game_view);
mBtnRestart = findViewById(R.id.btn_restart);
mBtnUndo = findViewById(R.id.btn_undo);
mBtnRestart.setOnClickListener(this);
mBtnUndo.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_restart:
mGameView.restart();
break;
case R.id.btn_undo:
mGameView.undo();
break;
}
}
}
```
这样,一个简单的Android五子棋小游戏就开发完成了。