【问题标题】:Winning Condition for Tic tac Toe Game井字游戏的获胜条件
【发布时间】:2013-12-09 12:03:53
【问题描述】:

我有一个井字游戏的代码,我需要一些帮助,因为我不知道该怎么做。 (使用处理 2.0)

1) 我需要编写一个获胜条件测试。对于玩家 1 和玩家 2 填充的完整行。

应该是这样的

int rowFilledByPlayer(int row){ //代码

}

2) 那么我需要类似于 1) 中的函数来测试列和对角线的函数

然后我必须组合所有功能

我该怎么做?我希望有人可以帮助我。

提前致谢。

这是我的代码

// Global variables

int board [][] = new int [3][3]; // Game board 3x3 array
int cellWidth, cellHeight;       // Cell size computed from window size
int player = 1;
int rowFilledByPlayer;

void setup() {
  size (400, 400);
  rectMode(CORNER);
  ellipseMode(CORNER);
  // Divide window in 3 by 3 cells
  cellWidth = width / 3; 
  cellHeight = height / 3;

  clearBoard();
}

void draw() {
  background(255);
  drawBoard();
  if (boardFilled())
    drawGameOver();
}

void drawGameOver() {
  fill(0, 102, 153);
  textSize(width / 7);
  textAlign(CENTER, CENTER);
  text("Game Over!", width / 2, height / 2);
}

void mouseClicked() {
  if (boardFilled())
    clearBoard();
  else
    playerMove();
}

void clearBoard() {
  for (int row=0; row<3; row++)
    for (int col=0; col<3; col++)
      board[row][col] = 0;
}

void drawBoard() {
  for (int row=0; row<3; row++)
    for (int col=0; col<3; col++)
      drawCell(row, col);
}

void drawCell(int row, int col) {

  noFill();
  stroke(0);
  rect (col * cellWidth, row * cellHeight, cellWidth, cellHeight);

  switch (board[row][col]) {
    case 1:
      ellipse(col * cellWidth, row * cellHeight, cellWidth, cellHeight);
    break;
    case 2:
      line(col * cellWidth, row * cellHeight, (col+1) * cellWidth, (row+1) * cellHeight);
      line((col+1) * cellWidth, row * cellHeight, col * cellWidth, (row+1) * cellHeight);
    break;

  }
}


void playerMove() {
  int row = mouseY / cellHeight;
  int col = mouseX / cellWidth;

  if (board[row][col] == 0) {
    board[row][col] = player;
    player = oppositePlayer();
  }
}

int oppositePlayer() {
  return player = 3 - player;
}

boolean boardFilled() {
  for (int row = 0; row < 3; row++) {
    if (!rowFilled(row))
      return false;
  }
  return true;
}

boolean rowFilled(int row) {
  for (int col = 0; col < 3; col++) {
    if (board[row][col] == 0) return false;
  }
  return true;  
}

void CheckRows();

【问题讨论】:

  • 到目前为止您的努力是什么?你看过rowFilled 方法吗?将其复制到rowFilledByPlayer 然后进行修改似乎是不错的候选。向我们展示您的个人努力!

标签: java processing


【解决方案1】:

首先,您必须查找三行和三列是否已填满。 之后,您必须检查两条对角线。 此外,我建议通过 boardFilled 方法传递 player 变量以获得更简洁的代码!

此方法将替换您的方法 boardFilledrowFilledCheckRows

boolean boardFilled(int player) {
  for (int i = 0; i < 3; i++) {
    if (board[i][0] == player && board[i][1] == player && board[i][2] == player) {
      return true;
    }

    if (board[0][i] == player && board[1][i] == player && board[2][i] == player) {
      return true;
    }
  }

  if (board[0][0] == player && board[1][1] == player && board[2][2] == player) {
      return true;
  }

  if (board[0][2] == player && board[1][1] == player && board[2][0] == player) {
      return true;
  }

  return false;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多