2013-12-09 76 views
0

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

1)我需要写一个胜利的条件测试。给玩家1和玩家填写完整的一行2.

它应该是这样的

INT rowFilledByPlayer(INT行){//代码

}

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(); 
+2

什么是你努力这么远?你看过'rowfilled'方法吗?这似乎是相当不错的候选人复制到'rowFilledByPlayer'然后修改。向我们展示您的个人努力! –

回答

0

首先,你必须寻找三排和三列,如果它们被填充。 之后,你必须检查两个对角线。 此外,我建议通过boardFilled传递播放器变量以获得更干净的代码!

此方法将取代你的方法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; 
}