뀨읭
접속 : 5240   Lv. 60

Category

Profile

Counter

  • 오늘 : 3950 명
  • 전체 : 2172412 명
  • Mypi Ver. 0.3.1 β
[그냥] 모바일개발자과정-국비지원] C로 지뢰찾기 만들어보기 외 잡설 (10) 2017/05/10 PM 01:36

#include
#include
#include

#define sizeX 7
#define sizeY 7
enum MINE { mine = 9 };
int main() {
 int answer[sizeX][sizeY] = { 0 };//답 배열을 0으로 초기화
 char player[sizeX][sizeY];
 int i, k, ii, kk, mineQuan, posX, posY, mineCnt = 0;
 int guessX, guessY;
 srand(time(NULL));
 for (i = 0; i < sizeX; i++) { //플레이어에게 보여줄 배열 초기화
  for (k = 0; k < sizeY; k++) {
   player[i][k] = '\\';
  }
 }
 printf("지뢰를 몇개 설치할까요? : ");
 scanf("%d", &mineQuan);
 getchar();
 for (i = 0; i < mineQuan; i++) { //답배열에 입력받은 갯수만큼 지뢰설치
  posX = rand() % sizeX;
  posY = rand() % sizeY;
  if (answer[posX][posY] == mine) {//이미 지뢰가 숨겨져있을 때 새위치를 배정받음
   i--;
   continue;
  }
  answer[posX][posY] = mine;
 }
 for (i = 0; i < sizeX; i++) { //주위에 몇개의 지뢰가 있는지 알려주는 숫자힌트생성 // 1  1  1  0  0
  for (k = 0; k < sizeY; k++) {             // 1  *  2  1  1
   if (answer[i][k] == mine) {             // 1  2  3  *  1
    for (ii = i - 1; ii < i + 2; ii++) {         // 1  *  2  1  1
     for (kk = k - 1; kk < k + 2; kk++) {        // 1  1  1  0  0
      if ((ii >= 0 && ii < sizeX) && (kk >= 0 && kk < sizeY)) {  // 0  0  0  0  0
       if (answer[ii][kk] != mine) {
        answer[ii][kk] += 1;
       }
      }
     }
    }
   }
  }
 }

 while (1) { //게임 시작
  printf("X 축 좌표 입력 : "); //좌표값 입력, 인덱스는 0부터 시작함
  scanf("%d", &guessX);
  getchar();
  printf("Y 축 좌표 입력 : ");
  scanf("%d", &guessY);
  getchar();
  if (guessX < 0 || guessX >= sizeX || guessY < 0 || guessY >= sizeY) {//입력 좌표가 범위내인지 확인
   printf("좌표 크기를 다시 확인하세요\n");
   continue;
  }
  printf("\n");

  if (answer[guessX][guessY] == 9) { //지뢰를 골랐을때 답을 보여줌
   printf("실패! 지뢰를 골랐습니다.\n");
   for (i = 0; i < sizeX; i++) {
    for (k = 0; k < sizeY; k++) {
     if ((i == guessX) && (k == guessY)) {
      if (answer[i][k] == 9) {
       printf("%4s", " <*>");
      }
      else {
       printf("%4d", answer[i][k]);
      }
     }
     else {
      if (answer[i][k] == 9) {
       printf("%4s", " *");
      }
      else{
      printf("%4d", answer[i][k]);
      }
     }
    }
    printf("\n");
   }
   return 0;
  }
  else {//지뢰가 아닌경우 고른 좌표 주위를 보여줌
   for (i = guessX - 1; i < guessX + 2; i++) { //3x3크기 보여줌
    for (k = guessY - 1; k < guessY + 2; k++) {
     if ((i >= 0 && i < sizeX) && (k >= 0 && k < sizeY)) {
      if (answer[i][k] == 9) {
       player[i][k] = '*';
       continue;
      }
      player[i][k] = answer[i][k]; //3x3크기 보여줌
     }
    }
   }
   
   for (i = 0; i < sizeX; i++) {
    for (k = 0; k < sizeY; k++) {
     if (player[i][k] >= 0 && player[i][k] <= 9) {
      printf(" %d  ", player[i][k]);
     }
     else {
      printf(" %c  ", player[i][k]);
     }
    }
    printf("\n");
   }
   
  }
  printf("\n");
  for (i = 0; i < sizeX; i++) {
   for (k = 0; k < sizeY; k++) {
    if (player[i][k] == '*') {
     mineCnt++;
    }
   }
  }
  if (mineQuan == mineCnt) {
   printf("지뢰를 모두 찾았습니다.\n\n");
   return 0;
  }
}//end of while
return 0;
}
 
7x7맵에 지뢰갯수를 입력받아서 랜덤한 위치에 지뢰를 생성하고
좌표값을 입력받아서 그 좌표가 지뢰가 아니면 주위 3x3지역을 밝혀줌
맵을 밝혀서 지뢰갯수만큼 *를 찾으면 종료!
지뢰를 골라도 종료!
 
개선여지
-맵크기도 입력받을 수 있도록(근데 맵크기가 어느 정도 커지면 자꾸 배열의 첫번째 원소에 메모리 주소값이 들어감.... -,.-? 비쥬얼스튜디오님?)
-지뢰갯수가 맵크기보다 클때 처리가 없음 -_-ㅋ
-윈도우 지뢰찾기처럼 빈칸을 골랐을때 쫙 퍼지면서 맵을 밝히다가 숫자(힌트)를 만나면 멈추는 어썸한 기능이 필요함
-지뢰주위가 111로 도배가 되있어도 지뢰를 찾은것으로 인식하지 못함 ㅡㅡㅋ
 
-------------------------------------------------------------------------------------------------------
잡설
모바일개발자과정인데 학원에서 알려주는것만 해서는 취업이 힘들듯
6월까지 C를 한다는데..... 4월19일 개강했는데 한달정도 하면 될꺼같은데 흠 ㅇㅅㅇa
구직사이트를 돌아다녀도 모바일개발자만 구하는 일자리는 적고 있더라고 안드로이드만 해서는 일자리 구하기가 어려움
웹개발쪽으로 공부해서 남는시간에 모바일 개발을 하면서 사리사욕을 채우는걸로(?)
 
공부해야할것을 찾아보니
java
DB(oracle)
HTML5
JSP
java-/s!crip/, 전자정부 프레임워크 spring
PHP
웹서버사용법(톰냥이)
자료구조, 알고리즘, 운영체제, 네트워크
 
이정도하면 취업이 되지 않을까 ㅇ_ㅇ
 
포트폴리오는 그래도 모바일개발자과정이라서 유니티로 하나 만들것

 

신고

 

마봉춘    친구신청

C#을 공부하세요

리턴제로    친구신청

게임쪽으로 가시는거면 자바보다는 c++쪽이 좋지 않을까욤?
웹은 모르는분야라서 모르겟군요
자바에 대해서 아는건 없지만 자바는 죽어간다고 김포프님이 그러드라고요
만약 겜개발로 가시는거면 C++ 배우고 Directx 이게 짱이라구 생각해욤

아 게임쪽이 아니라 안드로이드 개발로 가시는 듯?

뀨읭    친구신청

안드앱개발 과정인데 요거만 해서는 일 못구할듯해서 추가적으로 더 공부하려고요

뀨읭    친구신청

근데 사실 게임 만들고 싶음 ㅎㅎㅎㅎ

숲바라기    친구신청

노드 자바 쪽 괜찮아요

청와대 길라임    친구신청

어떤 게임회사에서 오라클 쓴다고 db가 오라클인지....ㅋㅋㅋㅋㅋㅋ

뀨읭    친구신청

게임회사 간다고 한적없어요

절대다시는그렇게    친구신청

c를 통해서 절차지향적 프로그래밍의 개념을 잡으면 c++로 넘어가서 객체지향을 이해하는데 도움이 됩니다.
포인터를 통해서 레퍼런스 개념을 이해할 수 있고, 동적할당 해제 등을 통해서 메모리 단편화에 대한 감을 잡으실 수 있을겁니다.
함수포인터를 통해서 델리게이터에 대한 내부 동작을 엿볼수고 있고요.

그리고 C를 통해서 문자열 처리를 해보고, 포인터로 링크드 리스트나 헤시 테이블을 만들어 보시면, c#에서 지원하는 딕셔너리 같은 것들이
어던 식으로 돌아가는지 어렴풋히 알수 있으며, 이런 사소한 것들이 쌓여서 고급 개발자인지 하급 개발자 인지가 결정됩니다.

c를 통해서 따라오는 절차지향적 사고방식은 덤이고요.

쓰레기...    친구신청

게임회사 안가면... 웹 쪽 하실거 같은데
일단 php는 버리세요. 전부하는건 하나도 도움이 되지 않습니다.
일단 하나를 하고 확장해 나가는 느낌으로 가는게 좋아요.
자료구조, 알고리즘, 운영체제, 네트워크 => 이런건 알면 진짜 좋지만 몰라도 상관 없어요.
이런거 보다 리눅스 사용 경험을 더 중시하는 회사가 많아요.

리턴제로    친구신청

자료구조, 알고리즘, 운영체제, 네트워크 => 이런건 알면 진짜 좋지만 몰라도 상관 없어요.
우왕 저도 이런 생각 자주 드는데
이것저것 다 배워놔봣자 바로 적용해보지 않으면 다 까먹게되서
그냥 필요할때 필요한만큼만 배우는게 짱인것 같아요
X