1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

四色碁のルール説明

Posted at

プログラミングの題材として、四色碁を作ってみようかと思います。

四色碁とは

豆腐の角さんが考えた四人対戦の囲碁です。四人の中で一番地が多いことを目指います。囲碁のルールがわかっていれば、誰でも楽しむことができます。

石の取り方

まず一色のカラーでしか石をとることはできません。相手の赤をとるためには必ず一色のカラー、つまりこの場合であれば青で囲う必要があります。
sample01.png
なので緑がこう打っても、赤はとられません。石の逃げ道は3に増えました。
sample02.png
中の石がどんなカラーでも、周囲を一色で囲めばすべて取ることができます。
sample03.png

ソースコード

説明の図はProcessingで作成しました。今回はここまでです。

sketch.pde
Board board;

void setup()
{
  size(880, 880);
  board = new Board();
  board.initGame();
} 

void draw()
{
  background(255, 255, 203);
  board.display();
}
Board.pde
class Board {
  int cellSize = 80;
  ArrayList<ArrayList> cells = new ArrayList();

  Board() {
    for (int i=1; i <= 9; i++) {
      ArrayList<Cell> row = new ArrayList();
      for (int j=1; j <= 9; j++) {
        row.add(new Cell(j, i ));
      }
      cells.add(row);
    }
  }
  void initGame() {
    getCellAt(4, 3).putStone( Cell.GREEN);
    getCellAt(3, 4).putStone( Cell.BLUE);
    getCellAt(4, 4).putStone( Cell.PINK);
    getCellAt(5, 4).putStone( Cell.BLUE);
    getCellAt(4, 5).putStone( Cell.BLUE);    
  }
  Cell getCellAt(int col, int row) {
    if(col < 0 || col > 7 || row < 0 || row > 7){
      return null;
     }
     return (Cell)cells.get(row).get(col);
  }
  void display() {
    for (ArrayList row : cells) {
      for (Object c : row) {
        Cell cell = (Cell) c;
        cell.display();
      }
    }
  }
}
Cell.pde
class Cell {
  static final int SIZE = 80;
  static final int GREEN = 1;
  static final int YELLOW = 2;
  static final int PINK = 3;
  static final int BLUE = 4;
  static final int GHOST = 14;

  int x;
  int y;
  int stone = 0;
  int size = SIZE;

  Cell(int x, int y) {
    this.x = x;
    this.y = y;
  }

  int getCol() {
    return this.x;
  }

  int getRow() {
    return this.y;
  }

  boolean hasStone() {
    return (this.stone != 0);
  }

  int getScore() {
    return this.stone;
  }

  void display() {
    stroke(0);
    fill(210, 185, 80);
    rect(x * size, y * size, size, size);
    if (this.stone != 0) {
      if ( this.stone == GREEN)
      {        
        fill(#49b675);
      } else if ( this.stone == YELLOW)
      {        
        fill(#FFE374);
      } else if ( this.stone == PINK)
      {        
        fill(#EF9CB5);
      } else if ( this.stone == BLUE)
      {        
        fill(#0044FD);
      }else{
        fill(#FFFFFF,200);
      }
      stroke(0);
      ellipse(x * size, y * size, size * 0.9, size * 0.9);
    }
  }

  boolean putStone(int stoneColor)
  {
    this.stone = stoneColor;
    return true;
  }
}
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?