안드로이드 개발 질문/답변
(글 수 45,052)
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(){
}
}
이게임소스를 지금은 숫자로만되어있는데, 이걸 한글이나 영어로변환해서 한글이나영어빙고게임으로 바꾸고싶은데
어떻게할까요
부탁드립니다.