package com.mobil;

import java.util.Random;

import android.graphics.Color;
import android.graphics.drawable.Drawable;

import com.mobil.util.GraphicUtil;

public class Player {
private boolean m_bPlayer = true;   /* true: 유저, false: computer */
private boolean m_bSucc   = false;
private GraphicUtil m_gUtil;     
private Item m_Items[][];
private final static int MISSION_COUNT = 3;
private int m_xPos = 0;
private int m_yPos = 0;
private int m_Size = 0;
    private int m_ArrNum[]    = new int[25];      /* 버튼에 사용될 숫자배열 */
private int m_nMissionCnt = 0;
private String m_strPlayerName = "";
private Drawable m_Icon = null;
public String getPlayerName() {
return m_strPlayerName;
}

public void setPlayerName(String strPlayerName) {
this.m_strPlayerName = strPlayerName;
}
public void setIcon(Drawable icon){
m_Icon = icon;
}

public Player(boolean bKind, GraphicUtil gUtil, int x, int y, int size){
m_bPlayer = bKind;
m_gUtil   = gUtil;
m_xPos    = x;
m_yPos    = y;
m_Size    = size;
init();
}
/* Player 초기화 */
public void init(){
m_bSucc       = false;
m_nMissionCnt = 0;
shakeNumber();
m_Items = new Item[5][5];
int index = 0;
for(int x=0; x<5; x++){
for(int y=0;y<5;y++)
{
m_Items[x][y] = new Item();
m_Items[x][y].setCheck(false);
m_Items[x][y].setNumber(m_ArrNum[index++]);
}
}
}
/* Player 화면에 출력 */
public void display(){
String strPlayerName = "";
if(m_Icon != null){
m_Icon.setBounds(m_xPos, m_yPos - 35, m_xPos + 32, m_yPos - 35 + 32);
m_gUtil.drawIcon(m_Icon);
}
if(m_strPlayerName.length() == 0)
strPlayerName = m_bPlayer?"User":"Phone";
else
strPlayerName = m_strPlayerName;
m_gUtil.setColor(Color.BLACK);
m_gUtil.setFontSize(20);
m_gUtil.drawStringLeft(strPlayerName, m_xPos + 35, m_yPos -10);
//격자출력
for(int i=0; i<=5; i++){
m_gUtil.drawLine(m_xPos +(m_Size*i),m_yPos,m_xPos +(m_Size*i), m_yPos +(m_Size*5));
m_gUtil.drawLine(m_xPos,m_yPos+(m_Size*i), m_xPos +(m_Size*5), m_yPos+(m_Size*i));
}
//숫자출력, 컴퓨터이면 체크된 숫자만 출력
for(int x=0; x<5; x++)
for(int y=0;y<5;y++)
{
if(m_bPlayer || m_Items[x][y].isChecked()){
m_gUtil.setColor(Color.GRAY);
m_gUtil.drawStringCenter("" + m_Items[x][y].getNumber()
          ,m_xPos + (m_Size*x) + (int)(m_Size*0.5)
          ,m_yPos + (m_Size*y) + (int)(m_Size*0.7) );
//체크된 숫자이면  0표 하기
m_gUtil.setColor(Color.BLUE);
if( m_Items[x][y].isChecked()){
m_gUtil.drawOval( m_xPos + (x*m_Size) + 3
       , m_yPos + (y*m_Size) + 3
       , m_xPos + ((x+1)*m_Size) - 3
       , m_yPos + ((y+1)*m_Size) - 3
      );
}
}
}
checkGameMisssion();
}
/* 게임 미션 성공여부 리턴  */
public boolean isSucc(){
return this.m_bSucc;
}
/* 게임미션 성공여부 검사  */
public void checkGameMisssion(){
int xCnt      = 0;
int yCnt      = 0;
this.m_nMissionCnt = 0;
m_gUtil.setColor(Color.RED);
for(int x=0; x<5; x++){
xCnt = 0;
yCnt = 0;
for(int y=0;y<5;y++)
{
if(m_Items[x][y].isChecked())
xCnt++;
if(m_Items[y][x].isChecked())
yCnt++;
}
if(xCnt == 5){
m_gUtil.drawLine(m_xPos + (m_Size*x) + (m_Size/2)
       ,m_yPos
       ,m_xPos + (m_Size*x) + (m_Size/2)
       ,m_yPos + (m_Size*5)
       );
m_nMissionCnt++;
}
if(yCnt == 5){
m_gUtil.drawLine(m_xPos 
               ,m_yPos + (m_Size*x) + (m_Size/2)
               ,m_xPos + (m_Size*5)
               ,m_yPos + (m_Size*x) + (m_Size/2)
       );
m_nMissionCnt++;
}
}
if(m_Items[0][0].isChecked() && 
  m_Items[1][1].isChecked() && 
  m_Items[2][2].isChecked() && 
  m_Items[3][3].isChecked() && 
  m_Items[4][4].isChecked() 
 ){
m_nMissionCnt++;
m_gUtil.drawLine(m_xPos, m_yPos, m_xPos + (m_Size*5), m_yPos + (m_Size*5));
}
if(m_Items[0][4].isChecked() && 
  m_Items[1][3].isChecked() && 
  m_Items[2][2].isChecked() && 
  m_Items[3][1].isChecked() && 
  m_Items[4][0].isChecked() 
 ){
m_nMissionCnt++;
m_gUtil.drawLine(m_xPos + (m_Size*5),m_yPos ,m_xPos, m_yPos + (m_Size*5));
}

if( m_nMissionCnt >= MISSION_COUNT) {
this.m_bSucc  = true;
}
m_gUtil.setColor(Color.BLACK);
}
/* 게임미션 카운트 성공갯수 리턴 */
public int getMissionCnt(){
return this.m_nMissionCnt;
}
/* 좌표로 숫자 선택 하기 */
public int setCheckByPos(int x, int y){
int nNumber = 0;
if(m_bPlayer){
if(m_xPos <= x && m_yPos <= y && m_xPos + (m_Size*5) >= x && m_yPos + (m_Size*5) >= y){
//좌표로 논리좌표 알아내기
int idx = 0;
int idy = 0;
idx = (int)((x-m_xPos)/m_Size);
idy = (int)((y-m_yPos)/m_Size);
if(m_Items[idx][idy].isChecked()) 
return 0;
   m_Items[idx][idy].setCheck(true);
   nNumber = m_Items[idx][idy].getNumber();
}else
{
return 0;
}
}else{
return 0;
}
return nNumber;
}
/* 숫자로 방선택하기 */
public boolean setCheckByNumber(int nNum){
for(int x=0; x<5; x++)
for(int y=0; y<5; y++)
{
if(m_Items[x][y].getNumber() == nNum)
{
m_Items[x][y].setCheck(true);
return true;
}
}
return false;
}
/* 방에 표시될 숫자 섞기 */
private void shakeNumber(){
for(int i=0; i< 25; i++){
m_ArrNum[i] = i+1;
}
int x   = 0;
int y   = 0;
int tmp = 0;
Random _ran = new Random();
for(int i=0; i< 100; i++){
   x = _ran.nextInt(24);
   y = _ran.nextInt(24);
   
   if(x == y) continue;
   
   tmp = m_ArrNum[x];
   m_ArrNum[x] = m_ArrNum[y];
   m_ArrNum[y] = tmp;
}
}
/* Phone Play AI Logic */
public int doAIPlay(){
int nSelNum = 0;
//step1. Center & Side Point 공략
nSelNum = AIStep1();
if(nSelNum > 0) return nSelNum;
//step2. 3포인트 공략
nSelNum = AIStep2();
if(nSelNum > 0) return nSelNum;
//step3. check 되지 않은 방에 대한 각각의 점수를 구한 후 최고점수에 해당하는 방선택  
int nMaxPoint = 0;
for(int x=0; x<5; x++)
{
for(int y=0; y<5; y++){
if(m_Items[x][y].isChecked()) continue;
int tmpPoint = CalPoint(x, y);
if(tmpPoint > nMaxPoint){
nMaxPoint = tmpPoint;
nSelNum   = m_Items[x][y].getNumber();
}
}
}
if(nSelNum > 0)
this.setCheckByNumber(nSelNum);
return nSelNum;
   }
   /* Phone Player시 체크되지 않은 숫자의  선택도 구하기 */
   private int CalPoint(int x, int y){
  int nCalPoint = 0;
  
  // x축 합산
  while( x > 0 ){
  x--;
  if(m_Items[x][y].isChecked()) nCalPoint++;
  }
  
  while( x < 4 ){
  x++;
  if(m_Items[x][y].isChecked()) nCalPoint++;
  }
  
  // y축 합산
  while( y > 0 ){
  y--;
  if(m_Items[x][y].isChecked()) nCalPoint++;
  }
  
  while( y < 4 ){
  y++;
  if(m_Items[x][y].isChecked()) nCalPoint++;
  }
  
  return nCalPoint;
   }
   private int AIStep1(){
  int nSelNum = 0;
  if(!m_Items[2][2].isChecked())
{
m_Items[2][2].setCheck(true);
nSelNum = m_Items[2][2].getNumber();
return nSelNum;
}
if(!m_Items[0][0].isChecked()){
m_Items[0][0].setCheck(true);
nSelNum = m_Items[0][0].getNumber();
return nSelNum;
}

if(!m_Items[0][4].isChecked()){
m_Items[0][4].setCheck(true);
nSelNum = m_Items[0][4].getNumber();
return nSelNum;
}
if(!m_Items[4][0].isChecked()){
m_Items[4][0].setCheck(true);
nSelNum = m_Items[4][0].getNumber();
return nSelNum;
}
/*
if(!m_Items[4][4].isChecked()){
m_Items[4][4].setCheck(true);
nSelNum = m_Items[4][4].getNumber();
return nSelNum;
}
*/
 return nSelNum;
   }
   
   private int AIStep2(){
  int nSelNum = 0;
  
  if(!m_Items[1][1].isChecked()){
m_Items[1][1].setCheck(true);
nSelNum = m_Items[1][1].getNumber();
return nSelNum;
}
if(!m_Items[1][3].isChecked()){
m_Items[1][3].setCheck(true);
nSelNum = m_Items[1][3].getNumber();
return nSelNum;
}
  
if(!m_Items[3][1].isChecked()){
m_Items[3][1].setCheck(true);
nSelNum = m_Items[3][1].getNumber();
return nSelNum;
}
  
  /*  
if(!m_Items[3][3].isChecked()){
m_Items[3][3].setCheck(true);
nSelNum = m_Items[3][3].getNumber();
return nSelNum;
}
  */
  return nSelNum = 0;
   }
}

class Item{
private int number;
private boolean bCheck = false;
public int getNumber() {
return number;
}

public void setNumber(int number) {
this.number = number;
}

public boolean isChecked() {
return bCheck;
}

public void setCheck(boolean bCheck) {
this.bCheck = bCheck;
}

public Item(){
}
}

이게임소스를 지금은 숫자로만되어있는데, 이걸 한글이나 영어로변환해서 한글이나영어빙고게임으로 바꾸고싶은데
어떻게할까요 
부탁드립니다.