실험프로젝트 결과

게임이 완성되었다
상대판의 게임판에서 숫자를 변경하면
자신의 쪽에서 실시간으로 볼수있는 점이 좋았다
또한
채팅창으로 채팅을 할 수 있다

만들다가 보니 시간에 쫒겨 만들지 못한부분으로는
맨 위의 IP창에 IP를 입력할 수 없다
구현하지 못했다
게임판을 만들고 숫자가 변경이 가능하다
원래대로라면 숫자0이라고 쓰여진 부분만 변경이 되어야 되며
나머지 먼저 만들어진 숫자에 대해서는 변경이 불가능 해야되지만
변경이 가능하다는 것을 수정하지 못했다
메시지창의 경우 한쪽이 이겨을 경우 상대방은 졌다는 것을 표시해주어야 되지만 표시가 되지않는다
중도 게임 포기를 할 경우 모든 시스템이 꺼져버리는 단점도 있었고
채팅창에 서버는 이름이 잘 들어가도 클라쪽은 이름이 NULL로 뜨는 오류가 있었다
이런 아쉬움을 뒤로 하고 일단 프로젝트는 끝났다
시간날때마다 수정을 해봐야겠다
화면부분은 내가 하지 않았지만
알고리즘부분은 만들었기에
수정을 해봐야 할 것 같다

by 달콤사탕 | 2009/12/19 22:42 | 실험프로젝트2학기 | 트랙백 | 덧글(0)

실험프로젝트 10

교수님이 지적한 부분에 대해서
TextArea로 만들어 보았다
background로 색깔을 지정하지 않으니 전혀 보이지 않아
panel.setBackground(Color.BLACK); 을 주었더니
아래처럼 나오게 된다

일단은 전부 수정할 수 있게 되어 있다
나중에 수정해서 이쁘게 바꿔야 겠다
하지만 현재 모양으로는 별로 안 이쁜거 같아
버튼형태로 만들어 보았다


훨씬 깔끔한 느낌을 주는 것을 알 수 있다
현재 버튼형식에
textarea에 집에 넣어
숫자를 입력하는 형식이 아닌 버튼 형식으로 만들어 보는것은 어떨지 생각중이다
하지만 현재는 시간이 없기에
먼제 프로그램을 신속하게 완성시킨 후에 버튼형식 작업을 할 예정이다

by 달콤사탕 | 2009/11/29 16:03 | 실험프로젝트2학기 | 트랙백 | 덧글(1)

실험프로젝트 9

스도쿠를 만들면서
이번에 2차원 배열을 사용할려고 하였지만
부분 겹침부분을 결국 잡지 못했다
결국 현철이의 도움을 받아서
2차원에서 3차원 배열로 바꾸면서 해결하게 되었다
바뀐 부분을 보자면
처음 맵을 생성하기 위해 첫번째 맵 부분을 만드는 부분이다

class SudokuMain

 private Random ran = new Random(); //랜덤한 값을 사용하기 위한 랜덤함수 선언

 private int[][] met1()
 {
  int one[][] = new int[3][3]; //2차원배열 one[3][3]배열을 만든다
  int choose[] = new int[9]; // 1~9까지의 숫자를 choose함수에 저장한다
  int ch;
  int temp;
  int su;

  for(int i=0; i<9; i++)
   choose[i] = i+1;

  su = 9;
  for(int i=0; i<3; i++)
   for(int j=0; j<3; j++)
   {
    ch = ran.nextInt(su); //9개의 숫자중 랜덤하게 숫자를 뽑아 ch에 넣는다

    temp = choose[ch]; //temp에 choose함수에 랜덤하게 담긴 숫자를 넣는다
    choose[ch] = choose[su-1]; //choose[su-1]의 값을 choose[ch]에 넣는다
    choose[su-1] = temp; //temp의 값을 choose[su-1]에 넣는다

    one[i][j] =  choose[su-1]; //배열 one에 choose[su-1]값을 넣는다

    su--; //su를 -시킨다
   }

  return one; //for문이 끝나면 one값을 리턴시킨다
 }

이런 형식으로 되며 실행시킨다면
일단 한 부분의 값이 완성된다

다음부터는
/* 선택 판 3개 사용 */
for(int i=0; i<3; i++)
for(int j=0; j<9; j++)
choose[i][j] = j+1;

/* 세개의 판에 들어갈 수 없는 숫자 걸러냄 */
for(int i=0; i<3; i++)
for(int j=0; j<3; j++)
choose[i][asb[i][j]-1] = 0;

/* 가로줄 검색해서 불가능한 수 삭제 */
choose = delete(choose,abs,0);

/* 세로줄 검색해서 불가능한 수 삭제 */
choose = delete(choose,abs1,1);

/* 배열 조합 */
one = makeOne(choose);
if(one == null) return null;

가로줄과 세로줄에 대해 검색하여 겹치는 숫자는 지우고 다시 만들어야 하기때문에
private int[][][] delete(int choose[][][], int abs[][], int rec)
{
 int ch;

/* 가로줄 검색해서 불가능한 수 삭제 */
 if(rec == 0)
 {
  for(int i=0; i<3; i++)
  {
   for(int j=0; j<3; j++)
   {
    ch = abs[i][j];

    for(int k=0; k<3; k++)
    {
     choose[i][k][ch-1] = 0;
    }
   }
  }

  return choose;
 }
  
/* 세로줄 검색해서 불가능한 수 삭제 */
 if(rec == 1)
 {
  for(int i=0; i<3; i++)
  {
   for(int j=0; j<3; j++)
   {
    ch = abs[i][j];
    for(int k=0; k<3; k++)
    {
     choose[k][j][ch-1] = 0;
    }
   }
  }
  return choose;
 }

스도쿠를 만들기 위해서
public int[][][] makeSudoku()
{
 int su[][][] = new int [9][3][3];
 int temp[][][] = new int [3][3][3];

 su[0] = met1();
 su[1] = met2(su[0]);
 su[2] = met3(su[0],su[1]);

 temp[0] = rev(su[0]);
 temp[1] = met2(temp[0]);
 temp[2] = met3(temp[0], temp[1]);

 su[3] = rev(temp[1]);
 su[6] = rev(temp[2]);
  
 while(true)
 {
  if((su[7] = met4(su[6], su[1])) == null) continue;

  if((su[8] = met5(su[6], su[7], su[2])) == null) continue;

  if((su[5] = met6(su[3], su[2], su[8])) == null) continue;

  if((su[4] = met7(su[3], su[5], su[1], su[7])) == null) continue;

  break;
 }

 return su;
}

만든 스도쿠에 대해서 재대로 만들어 졌는지 체크하기 위해
boolean형으로 확인할 수 있게 밑에 처럼 만들었다
public boolean checkSudoku(int abs[][][])
{
 boolean check[] = new boolean[9];

 for(int k=0; k<3; k++)
 {
  for(int i=0; i<9; i++)
   check[i] = false;

  for(int i=0; i<3; i++)
  {
   for(int j=0; j<3; j++)
   {
    check[abs[k][i][j]-1] = true;
   }
  }

  for(int i=0; i<9; i++)
  {
   if(check[i] == false) return false;
  }
 }

 for(int k=0, w=0; k<3; k++)
 {
  w = k*3;
  for(int i=0; i<3; i++)
  {
   for(int j=0; j<9; j++)
    check[i] = false;
    for(int j=0; j<3; j++)
   {
    check[abs[w][i][j]-1] = true;
    check[abs[w+1][i][j]-1] = true;
    check[abs[w+2][i][j]-1] = true;
   }
    
   for(int j=0; j<9; j++)
   {
    if(check[j] == false) return false;
   }
  }
 }

 for(int k=0, w=0; k<3; k++)
 {
  for(int i=0; i<3; i++)
  {
   for(int j=0; j<9; j++)
    check[i] = false;
    for(int j=0; j<3; j++)
   {
    check[abs[w][j][i]-1] = true;
    check[abs[w+3][j][i]-1] = true;
    check[abs[w+6][j][i]-1] = true;
   }
    
   for(int j=0; j<9; j++)
   {
    if(check[j] == false) return false;
   }
  }
 }
 
 return true;
}

만들어진 스도쿠에 대해서 게임을 진행하게 랜덤하게 각 판마다 숫자를 가리기 위해
밑에 처럼 만들었다
public int[][][] testSudoku(int test[][][])

 for (int i=0 ; i<5 ; i++ )
 {
  for (int j=0 ; j<9 ; j++ )
  {
   int a = ran.nextInt(3);
   int b = ran.nextInt(3);
   test[j][a][b] = 0;
  }
 }
 return test;
}

3주정도 블로그가 밀리다 보니
이렇게 한번에 쓰게 되었다
스도쿠 판이 완성된거는 1주 전에 완성이 되었다
현재는 이렇게 작업된 것에 대해
swing을 사용하여 그래픽적으로 바꾸는 작업을 하는 중이다
수업시간에도 지적받았지만
어떻게 이동시킬것인가에 대해
현재는 시간이 부족하기에 JLIST가 아닌
TEXTAREA를 사용할려고 파일을 수정하는 중이다
현재는 훈이와 말한것은
게임판와 채팅프로그램 메뉴판을 넣기 위해 작업중에 있다

by 달콤사탕 | 2009/11/28 12:38 | 실험프로젝트2학기 | 트랙백 | 덧글(1)

실험프로젝트 8

프로젝트가 담긴 usb를 분실했다
그나마 다행인건 블로그에 올려놓은 소스코드가 있었기에
복구는 할 수 있었다
복구하면서 코드를 모두 메인에 넣어서 지저분한 느낌이 있어서
코드를 바꿔보았다

class SudokuMain
{
 
 int[][] map = new int[9][9]; //스도쿠 게임을 하기 위한 맵을 만들기 위해 배열선언
 Random rd = new Random(); //맵에 임의의 숫자를 만들기 위해 랜덤 선언
 int i; int j; //i,j는 for문을 이용하기 위해 선언
 boolean[] check = new boolean[9]; //랜덤으로 생성한 숫자가 한번씩 들어갔는지 체크하기 위한 배열선언

 SudokuMain()
 {
  // map을 초기화 하기 위해 for문을 이용 0으로 초기화 시킴
  for ( i=0 ; i<map.length ; i++ )
  {
   for ( j=0 ; j<map.length ; j++)
   {
    map[i][j] = 0;
   }   
  }  
}
  
 //전체적인 게임맵 if문을 써서 보기 좋게 만들어 놓았다
 void getSudokuMain()
 {
  for ( i=0 ; i<map.length ; i++ )
  {
   if (i==3)
   {
    System.out.println();
   }
   if (i==6)
   {
    System.out.println();
   }
   for ( j=0 ; j<map.length ; j++)
   {
    System.out.print(map[i][j]);
    if (j==2)
    {
     System.out.print("\t");
    }
    if (j==5)
    {
     System.out.print("\t");
    }
    if (j==8)
    {
     System.out.println();
    }    
   }   
  }
 } 
}

class Sudokugame
{
 public static void main(String ar[])
 {
  SudokuMain SM = new SudokuMain();
  SM.getSudokuMain();
 }
}

메인부분과 게임부분으로 나누어
일단 메인부분에 게임에 관한 정보를 만들고
게임부분에서 호출할 수 있게 해두었다
현재는 미리 숫자를 입력하고 섞는 형식을 할려고 했다가
교수님한테 들은 방식으로 한번 짜볼려고 고민중이다
현재 boolean형 형태의 배열을 만들어
어떻게 비교한것을 체크할지 고민중이다....

by 달콤사탕 | 2009/11/10 21:06 | 실험프로젝트2학기 | 트랙백 | 덧글(1)

실험프로젝트 7

생각만큼 쉽게 풀리지 않는다
가로측에서 검사를 해야되고
세로측에서 검사를 해야되고
각각의 3*3 행과 열에서 검사를 해야되는데
쉽게 되지 않는다
for문과 if문을 사용해봤지만
쉽게 풀리지 않았다
이상태로라면  프로젝트 계획에 차질이 생기기 때문에
현재는 다른 생각을 하게 되었다
먼저 가로측과 세로측을 전부 숫자를 만들고
검사를 하는 것이다
3*3 행과 열을 확인하는 방법으로 바꿀려고 한다
생각만큼 쉽게 결과가 도출되지 않는다

by 달콤사탕 | 2009/10/27 18:07 | 실험프로젝트2학기 | 트랙백 | 덧글(1)

◀ 이전 페이지 다음 페이지 ▶