package net.dalomo.reversi; import android.content.Context; import android.view.View; import android.widget.TextView; import android.widget.Toast; public class Board { final int BLACK = 1; final int WHITE = -1; int PlayerTurn = 1; private Context con; private View parentView; public Board(Context context){ this.con = context; } private TextView getTextViewFromTag (int a, int b){ String s = String.valueOf(a) + String.valueOf(b); TextView res = parentView.findViewWithTag(s); return res; } private Integer SplitStrRCtoIntRow (String s){ int r; r = Integer.parseInt(s.substring(0,1)); return r; } private Integer SplitStrRCtoIntColumn (String s){ int c; c = Integer.parseInt(s.substring(1)); return c; } private String TagToString(TextView v){ String s; s = v.getTag().toString(); return s; } private boolean existStone(TextView v){ return !(v.getText().toString().equals("")); } private int getStoneColor(TextView v){ int sc = 0; switch (v.getText().toString()){ case("●"): sc = BLACK; break; case("○"): sc = WHITE; } return sc; } private void setStoneToCell(TextView v){ switch(PlayerTurn){ case(BLACK): v.setText("●"); break; case(WHITE): v.setText("○"); break; } } private void CheckFlipUP(TextView v,int r,int c){ TextView tv; int StoneColor; int StoneCount = 0; for(int ui = (r - 1) ; -1 < ui ; ui-- ){ tv = getTextViewFromTag(ui,c); if(tv == null) return; if(!existStone(tv)){ break; } StoneColor = getStoneColor(tv); if(PlayerTurn == StoneColor && StoneCount < 1){ break; } if(PlayerTurn != StoneColor){ StoneCount++; continue; } if(PlayerTurn == StoneColor){ setStoneToCell(v); for(int j = (ui + 1) ; (ui + StoneCount + 1) > j ; j++){ tv = getTextViewFromTag(j,c); setStoneToCell(tv); } break; } } } private void CheckFlipDOWN(TextView v,int r,int c){ TextView tv; int StoneColor; int StoneCount = 0; for(int di = (r + 1) ; 8 > di ; di++ ){ tv = getTextViewFromTag(di,c); if(tv == null) return; if(!existStone(tv)){ break; } StoneColor = getStoneColor(tv); if(PlayerTurn == StoneColor && StoneCount < 1){ break; } if(PlayerTurn != StoneColor){ StoneCount++; continue; } if(PlayerTurn == StoneColor){ setStoneToCell(v); for(int j = (di - 1) ; (di - StoneCount - 1) < j ; j--){ tv = getTextViewFromTag(j,c); setStoneToCell(tv); } break; } } } private void CheckFlipRIGHT(TextView v,int r,int c){ TextView tv; int StoneColor; int StoneCount = 0; for(int ri = (c + 1) ; 8 > ri ; ri++ ){ tv = getTextViewFromTag(r,ri); if(tv == null) return; if(!existStone(tv)){ break; } StoneColor = getStoneColor(tv); if(PlayerTurn == StoneColor && StoneCount < 1){ break; } if(PlayerTurn != StoneColor){ StoneCount++; continue; } if(PlayerTurn == StoneColor){ setStoneToCell(v); for(int j = (ri - 1) ; (ri - StoneCount - 1) < j ; j--){ tv = getTextViewFromTag(r,j); setStoneToCell(tv); } break; } } } private void CheckFlipLEFT(TextView v,int r,int c){ TextView tv; int StoneColor; int StoneCount = 0; for(int li = (c - 1) ; -1 < li ; li-- ){ tv = getTextViewFromTag(r,li); if(tv == null) return; if(!existStone(tv)){ break; } StoneColor = getStoneColor(tv); if(PlayerTurn == StoneColor && StoneCount < 1){ break; } if(PlayerTurn != StoneColor){ StoneCount++; continue; } if(PlayerTurn == StoneColor){ setStoneToCell(v); for(int j = (li + 1) ; (li + StoneCount + 1) > j ; j++){ tv = getTextViewFromTag(r,j); setStoneToCell(tv); } break; } } } private void CheckFlipUPRIGHT(TextView v,int r,int c){ TextView tv; int StoneColor; int StoneCount = 0; for(int urr = (r - 1),urc = (c + 1) ; -1 < urr || urc < 8 ; urr--, urc++){ tv = getTextViewFromTag(urr, urc); if(tv == null) return; if (!existStone(tv)) { break ; } StoneColor = getStoneColor(tv); if (PlayerTurn == StoneColor && StoneCount < 1) { break ; } if (PlayerTurn != StoneColor) { StoneCount++; continue ; } if (PlayerTurn == StoneColor) { setStoneToCell(v); for (int inurr = (urr + 1),inurc = (urc - 1 ) ; (urr + StoneCount + 1) > inurr || (urc - StoneCount - 1) < inurc; inurr++, inurc--) { tv = getTextViewFromTag(inurr, inurc); setStoneToCell(tv); } break; } } } private void CheckFlipDOWNRIGHT(TextView v,int r,int c){ TextView tv; int StoneColor; int StoneCount = 0; for(int drr = (r + 1),drc = (c + 1) ; drr < 8 || drc < 8 ; drr++ , drc++){ tv = getTextViewFromTag(drr, drc); if(tv == null) return; if (!existStone(tv)) { break ; } StoneColor = getStoneColor(tv); if (PlayerTurn == StoneColor && StoneCount < 1) { break ; } if (PlayerTurn != StoneColor) { StoneCount++; continue ; } if (PlayerTurn == StoneColor) { setStoneToCell(v); for (int indrr = (drr - 1),indrc = (drc - 1 ) ; (drr - StoneCount - 1) < indrr || (drc - StoneCount - 1) < indrc; indrr--, indrc--) { tv = getTextViewFromTag(indrr, indrc); setStoneToCell(tv); } break; } } } private void CheckFlipDOWNLEFT(TextView v,int r,int c){ TextView tv; int StoneColor; int StoneCount = 0; for(int dlr = (r + 1),dlc = (c - 1) ; dlr < 8 || -1 < dlc ; dlr++ , dlc--){ tv = getTextViewFromTag(dlr, dlc); if(tv == null) return; if (!existStone(tv)) { break ; } StoneColor = getStoneColor(tv); if (PlayerTurn == StoneColor && StoneCount < 1) { break ; } if (PlayerTurn != StoneColor) { StoneCount++; continue ; } if (PlayerTurn == StoneColor) { setStoneToCell(v); for (int indlr = (dlr - 1),indlc = (dlc + 1 ) ; (dlr - StoneCount - 1) < indlr || (dlc + StoneCount + 1) > indlc; indlr--, indlc++) { tv = getTextViewFromTag(indlr, indlc); setStoneToCell(tv); } break; } } } private void CheckFlipUPLEFT(TextView v,int r,int c){ TextView tv; int StoneColor; int StoneCount = 0; for(int ulr = (r - 1), ulc = (c - 1) ; -1 <ulr || -1 < ulc ; ulr-- , ulc--){ tv = getTextViewFromTag(ulr, ulc); if(tv == null) return; if (!existStone(tv)) { break ; } StoneColor = getStoneColor(tv); if (PlayerTurn == StoneColor && StoneCount < 1) { break ; } if (PlayerTurn != StoneColor) { StoneCount++; continue ; } if (PlayerTurn == StoneColor) { setStoneToCell(v); for (int inulr = (ulr + 1),inulc = (ulc + 1 ) ; (ulr + StoneCount + 1) > inulr || (ulc + StoneCount + 1) > inulc; inulr++, inulc++) { tv = getTextViewFromTag(inulr, inulc); setStoneToCell(tv); } break; } } } public void putStone(TextView tv){ String stone = tv.getText().toString(); int Row = SplitStrRCtoIntRow(TagToString(tv)); int Column = SplitStrRCtoIntColumn(TagToString(tv)); parentView = (View) tv.getParent(); if(!stone.equals("")){ Toast.makeText(this.con,"そこに石は置けません", Toast.LENGTH_SHORT).show(); return; } CheckFlipUP(tv,Row,Column); CheckFlipDOWN(tv,Row,Column); CheckFlipRIGHT(tv,Row,Column); CheckFlipLEFT(tv,Row,Column); CheckFlipUPRIGHT(tv,Row,Column); CheckFlipDOWNRIGHT(tv,Row,Column); CheckFlipDOWNLEFT(tv,Row,Column); CheckFlipUPLEFT(tv,Row,Column); stone = tv.getText().toString(); if(!stone.equals("")) { PlayerTurn = PlayerTurn * (-1); } } }
コメント