'오목게임'에 해당되는 글 6건

  1. 2008/02/14   C언어로 오목만들기 5 마지막. (15)
  2. 2008/01/26   C언어로 오목만들기 4 (7)
  3. 2008/01/22   C언어로 오목만들기 3 (11)
오랜만에 오목포스팅 드디어 끝이다.
5번만에 끝나니 좀 아쉬워, 좀 더 우려먹으려고 했는데.

이번에 추가한 건   흑,백추가(이게 전부  ㅡ,.ㅡ)

1. 돌 5개 확인 함수 변경하기.
예전엔 돌 하나로도 잘 놀았지만 이젠 흑,백이 추가됐으니 인자 하나를 더 전달해 주어야 해요.
int check(x,y)함수를 변경해줍니다.

2.문자열 "흑","백"도 추가, 흑돌,백돌도 추가

3.case ENTER: 부분도 수정

4.마지막 오목소스
사용자 삽입 이미지

이걸로 끝.
부족한 점이나 질문 있으시면 아래 리플로 ㄱㄱ

이 글이 유익하다면 (굽신굽신) ->

Trackback Address >> http://zfanta.com/trackback/333 관련글 쓰기

  1. Subject: 환타 오목 게임 재구성. (1)

    Tracked from There Ain't Just Unlogical - #pragma pack (the UNique subroutine) 2009/06/07 21:15  delete

    지환태 님의 미니홈피에서 가져온 오목 게임입니다. 상당히 끌려서 말입니다-_-; 도와드리지 않고는 못 배기겠더군요.(?) 일단 아래는 원본. 접었습니다. 짜증을 감수하고 보시려면 클릭. /* http://zfanta.com/entry/C언어로-오목만들기-5-마지막 * 이 오픈 소스 코드의 저작권은 지환태 님에게 있습니다. */ #include <stdio.h> #include <windows.h> #define UP 72 #define DOWN 80..

  2. Subject: 환타 오목 게임 재구성. (2)

    Tracked from There Ain't Just Unlogical - #pragma pack (the UNique subroutine) 2009/06/07 21:15  delete

    지난번 글에서는 move() 함수는 'move'답게 만들고 다른 함수가 move()를 반복하여 한 판을 조정하여, main()에서는 판을 반복하게 했습니다. 물론 제가 five_in_a_row()에 단 주석과 약간 다릅니다. 제 주석에 따르면 플레이어가 재경기를 원할 때 재경기를 시켜 줘야 합니다. 게다가 원래 게임과도 약간 달라져 버렸지요. 그.러.나. 그 점은 미뤄 두고, 일단 다른 부분을 시작하도록 하죠. (-_-ㅗ;;) 이번에는 판을 그리는..

  3. Subject: 와 오목을 C언어로?!

    Tracked from 성큼의 자기개발 2010/06/08 23:34  delete

    오랜만에 오목포스팅 드디어 끝이다. 5번만에 끝나니 좀 아쉬워, 좀 더 우려먹으려고 했는데. 이번에 추가한 건 흑,백추가(이게 전부 ㅡ,.ㅡ) 1. 돌 5개 확인 함수 변경하기. 예전엔 돌 하나로도 잘 놀았지만 이젠 흑,백이 추가됐으니 인자 하나를 더 전달해 주어야 해요. int check(x,y)함수를 변경해줍니다. view plaincopy to clipboardprint? 01.int check(x,y,turn) 02.{ 03. int px,p..

  4. Subject: c언어로 오목을?!

    Tracked from 성큼의 자기개발 2010/06/08 23:41  delete

    ㅇㅇㅇ

  1. Favicon of http://bluenlive.net BlogIcon bluenlive 2008/02/14 16:09  address  modify / delete  reply

    오홋! 드디어 최종버전이 출시된 것입니까?
    수고하셨습니다. 대단대단...

    •  address  modify / delete 2008/02/14 16:19 Favicon of http://zfanta.com BlogIcon 환타

      한번 번외편으로 컴퓨터랑 1:1하는 모드도 만들어보려고 하는 데 엄청 어렵네요. 흐흐흐, 1년 안에는 인공지능까지 만들어야 하는데.....
      다 만들고 나니 벌써 개학 ㅇㅅㅇ

    •  address  modify / delete 2008/02/14 16:25 Favicon of http://bluenlive.net BlogIcon bluenlive

      자, 가중치를 적용해보는 겁니다. ㅋㅋㅋ
      이론이야 쉽지만, 중요한 것은 님의 코드처럼 "실제 만들어진 코드"죠. 수고하셨습니다.
      그럼, 전 컨닝... ^^;;;

  2. Favicon of http://jkherald.com BlogIcon 정기 2008/02/14 23:30  address  modify / delete  reply

    중복되는 코드가 많아요..
    함수로 빼내세요.

    그리고 저걸 클래스화 시켜서 OOP로 구현해보시면 좋은 공부가 될 겁니다.

    ※중복되는 코드가 많으면, 그만큼 코드의 용량이 커지고, 심한 경우 캐시의 용량보다 커지면 캐시 미스로 인한 성능 하락의 요인이 매우 심합니다.
    물론 저 오목 루틴 정도야 몇 바이트 안되기 때문에 상관없지만, 나중에 큰 프로그램 만들 때 매우 중요합니다.

    그리고 중요한 것.

    가독성이 매우 나쁩니다..


    x+=2;
    oldx=x-2;

    이거 그냥
    oldx = x;
    x += 2;

    이게 나을 겁니다. 쓸데없는 연산은 안하게 해야죠..

    •  address  modify / delete 2008/02/15 12:32 Favicon of http://zfanta.com BlogIcon 환타

      정기님 오랜만에 뵙네요.
      고맙습니다.
      전에 방명록에 글 써주신 게 백업실수로 다 지워져서 어떡하죠 ㅡ,.ㅜ
      이번엔 번외편을 많이 올려야겠어요.(역시......)
      2일전 "열혈강의 C++"구입해서 공부하고 있는데 재밌네요. 으흐흐

  3. Favicon of http://www.ideakeyword.com BlogIcon Mr.번뜩맨 2008/02/19 08:38  address  modify / delete  reply

    우와..컴퓨터 언어를 사용할 줄 아시는군요..왠지 호기심이 자주 당깁니다.. 자주 오겠습니다..ㅋㅋ^^

  4. 학생 2008/03/10 18:29  address  modify / delete  reply

    int board[38][19]; 여기서 왜 x값이 2배인지를 잘모르겠어요;;;
    그리고 승패의 확인하는 함수int check 여기에서도 x가 모두 2배씩인지 잘모르겠어요';
    ////
    그리고 char who[3][3] , char stone[3][3] 이거 두개가 모두 3x3배열인지두요;; 그냥 [3]배열로 쓰면 안돼는건가용? 궁금궁금~ ㅎㅎ;char a[39][39] 이것두 비슷하게 ;;; 왜그런지;;;쓰는건 a[0]a[1]a[2]이거뿐인데;; 왜 크게 쓰는지 모르겠어요;;

    •  address  modify / delete 2008/03/10 18:37 Favicon of http://zfanta.com BlogIcon  환타

      x값이 2배인 이유는 ┌,└,├,⊙ 등 문자들이 a,b,c,1,2,3같은 문자들보다 가로길이가 2배 더 깁니다.
      그래서 커서를 이동할 때 가로 2칸씩 옮겨가면서 위 문자들을 출력해야 깨짐없이 나온답니다. ㅎㅎ

      char who[3][3]
      문자열은 배열에 하나씩 저장됩니다.
      만약 cat을 저장하려면 char a[0]=c, char a[1]=a, char a[2]=t, char a[3]=\0 이렇게 됩니다.
      널문자까지 4개의 배열을 선언해야하죠. 한글은 영어와 달리 한 글자에 2바이트니까 널문자까지 배열을 3개 선언해야합니다. 그리고 "","흑",'백" 이렇게 3개가 있으니 [3][3]으로 선언해야하죠.
      써놓고보니 어렵네요ㅇㅅㅇ.
      문자열 공부를 좀만 하시면 금방 이해 되실거여요. 제소스는 워낙 지저분하니 ㅜㅜ

  5. 학생 2008/03/10 18:50  address  modify / delete  reply

    거의 1주일 가량... 책이랑 이거랑 계속 보니깐 소스는 거의 대충.. 이해는 가게 됐어요 ㅎㅎ//
    감사해용ㅎㅎ// 질문에도 대답 다 해주시고 ㅎㅎ////
    나중에 또 모르는거 있으면 질문할께요 ㅎㅎ/
    일딴// 문자열좀 책좀 봐야겠고.. ㅎㅎ.... 완료하면 이젠.. 바둑돌 곗수를 세는거를 집어넣어봐야징 ㅎㅎ///
    학교에서 4년전에 한번 배우고;; 한번도 안쓰다가... 할려니깐 정말 몰라서 미치느줄 알았어요 ㅋㅋ/
    저번주에 첨시작했을때 printf도 먼지 몰라서 쩔쩔매다가 ㅎㅎ/
    이거 소스 보면서 책보면서 이런식으로 공부하니깐 어느정도 보면은 이해할수는 있는것 같아요 ㅎㅎ.
    감사해용 ㅎㅎㅎ/

  6. ㅠ왕초보.. 2009/06/06 18:23  address  modify / delete  reply

    저기 죄송한데요.... 혹시 바둑알의 색을 바꾸는거 하실수 있는지.. 제가 오델로 게임을 만들어야 하거든요ㅠㅠㅠ

    •  address  modify / delete 2009/06/07 21:26 Favicon of http://un-i.tistory.com BlogIcon Un-i-que

      오델로는 이 게임과 구조가 근본적으로 다르니 좀 힘들 것 같습니다.
      다만, 오목에서는 case ENTER나 check()에서 막 놓은 돌의 가로/세로/좌상우하/우상좌하 방향을 검사하는데,
      오델로로 바꾼다면 이 전체가 같은지가 아니라 움직여 가며 끝과 사이를 비교해야 되겠군요.

      다시 말하자면, check() 내에 걸려든 돌의 색을 바꾸는 코드를 넣어야 한다고 생각합니다. 특별한 건 없죠.

  7. Favicon of http://un-i.tistory.com BlogIcon Un-i-que 2009/06/07 21:16  address  modify / delete  reply

    트랙백 쏘고 갑니다^^

    지금까지 포스트 두 개 만들었어요. 버그 발견되면 알려주세요 :D

  8. 왕초보ㅠ 2009/06/19 11:12  address  modify / delete  reply

    board[ ][ ]여기서요,, 빈칸에 숫자를 넣을때 게임판의 가로 세로를 넣는 건가요??? 여기서는 게임판을 바로 출력했잖아요,
    근데 게임판 출력하기전에 다른글씨가 출력되고 게임판이 출력될경우에도 그냥 게임판의 가로 세로만 입력하면 되는건가요?>?? 아님 글씨가 적힌 부분의 좌표도 세어서 포함시켜야 하는 건가요????


끝이보인다.
돌5개 확인하기

5개확인 함수

같은 돌이 있는 곳으로 최대한 왼쪽으로 이동후 오른쪽으로 가면서 돌을 세는 방법

이 함수는 move함수의 case ENTER:마지막에 추가해주시면 됩니다.
요렇게


승리메시지 풀력하고 끝나요 ㅇㅇ

이렇게 지금까지 만든 소스


끝이 보이는구나~~~

사용자 삽입 이미지


이 글이 유익하다면 (굽신굽신) ->

Trackback Address >> http://zfanta.com/trackback/312 관련글 쓰기

  1. Favicon of http://bluenlive.net BlogIcon bluenlive 2008/01/26 22:53  address  modify / delete  reply

    대단... 노력에 감탄했습니다.

    •  address  modify / delete 2008/01/27 03:09 Favicon of http://zfanta.com BlogIcon 환타

      move함수에 if문이 많아서그렇지 move함수만빼면 몇줄 안돼요 ㅠㅠ

      더 간단하게 하고싶은데

      선을 넘었으니..

  2. Favicon of http://blog.studioego.info BlogIcon StudioEgo 2008/02/08 20:56  address  modify / delete  reply

    수고 많으셨네요. 저런 프로그램을 만드는 것부터 시작해서 OS까지 만들어보시기 바랍니다 :)

    •  address  modify / delete 2008/02/09 12:14 Favicon of http://zfanta.com BlogIcon 환타

      저는 아직 멀었죠 ㅎㅎ.
      OS가 명령어 처리하는 것도 어떻게 하는건지 모르겠던데.....

  3. ㅠㅠ왕초보 2009/05/31 11:46  address  modify / delete  reply

    죄송한데요,,, 제가 엄청,, 초보거든요,,,,, return1은 뭐고 return0은 뭐가요??

    •  address  modify / delete 2009/06/01 23:59 Favicon of http://zfanta.com BlogIcon  환타

      함수를 사용한 곳에 return 1이면 1, return 0이면 0을 돌려줍니다.

      전체소스중 233줄에 if(check(x,y))에 보면 check(x,y)는 1또는 0을 돌려줍니다.

      if(1)또는 if(0)이 되겠죠.
      if(1)이면 if문안의 내용을실행하고 if(0)이면 실행하지 않습니다.

  4. 궁금증~! 2011/01/16 11:49  address  modify / delete  reply

    흐억 궁금증 하나 ㅇㅅㅇ... 님 무슨 컴파일러를 쓰시나요 ?ㅇㅅㅇ 제가 6.0을쓰는데
    getch는 conio.h가 있어야만하고 그런데 혹시 최신버전은 stdio.h에 getch가 있나요 !?

오늘은 뭐 돌 놓기.

이것만 하고 5줄 확인하는 함수만 만들면 끝나네요.

사실 다 만들어 놓고 조금씩 포스팅하는 환타 ㅋㅋㅋ

돌 놓는 함수는 따로 만들지 않고

move 함수에 case ENTER:만 추가해서 해보겠습니다.

윗부분에

추가하고

돌 좌표를 저장할 변수도 선언하고


move함수 마지막에 추가

이러면 돌을 놓고나서 키보드를 움직이면 또 지워지니까

돌이 있는지 확인하는 knock함수도 만들어주고


move 함수 switch문의 ENTER를 제외한 모든 case에


이 글이 유익하다면 (굽신굽신) ->

Trackback Address >> http://zfanta.com/trackback/306 관련글 쓰기

  1. 학생 2008/03/08 13:33  address  modify / delete  reply

    이거 왜 실행이 안됄까요 ㅠㅠ,;;;;;
    계속 에러가 ㅠ.ㅠ;

  2. 학생 2008/03/08 13:36  address  modify / delete  reply

    c:\documents and settings\administrator\my documents\c\cpp1.cpp(238) : error C2448: '<Unknown>' : function-style initializer appears to be a function definition
    Error executing cl.exe.
    이렇게 에러가 나요 ㅠ,ㅠ;; 어떻게 고쳐야 하는지요 ㅠㅠ.;; 차근차근 배우고 싶어요;

  3. 학생 2008/03/09 02:56  address  modify / delete  reply

    저... 죄송하지만 질문쩜 할께요;;
    int knock(x,y)
    {
    gotoxy(x,y);
    puts("○");
    if(board[x][y]==1)
    return 0;

    else
    return 1;
    }
    ////// 요 함수도 잘모르겠어요... board[x][y]가 1이면 0을 호출하구 아니면 1을 호출하는게
    뭘뜯하는건지;; ㅠㅠ.;;; 아직 배우는 중이라;;;; 아르켜주세효 ㅎㅎㅎ;;;

    case ENTER :
    if(board[x][y] == 0)
    {
    board[x][y]=1;
    gotoxy(x,y);
    puts("○");
    /// 이부분에서 엔터를 누를 경우. board[x][y]값이 0이랑 같으면 board[x][y]가 1로 치환돼고
    x,y좌표로 가서 ○ <---이걸 둔다는건데;;; 어떻게
    엔터를 치면 돌이 놓여지는지 모르겠어요;; 이해를 못하겠어요 ㅠ.ㅠ...... 알려주세요;;;;

    •  address  modify / delete 2008/03/09 12:17 Favicon of http://zfanta.com BlogIcon  환타

      board[][]배열에는 판의 상태를 나타냅니다. 0은 빈 곳,1은 돌이 있는 곳,
      knock함수는 case LEFT,RIGHT,UP,DOWN 에서 사용되는 데 만약 바로 전 위치에 돌이 없었다면 판을 다시 그려줘야 합니다. 그래서 board[x][y]가 1이 아니면(그 곳에 돌이 없으면) 1을 반환해서 if문의 내용을 실행합니다.

      case ENTER는 엔터를 누를 때 좌표(x,y) 배열[x][y]에 돌이있다는 값인 1을 대입하고 화면에 돌을 그려주는 역할을 합니다.

      이해 안되는 부분마다 질문 많이해주세요 ㅎㅎ

  4. 학생 2008/03/09 13:14  address  modify / delete  reply

    ㅎㅎ.. 여기까지 이제 이해가 간거 같아요 ㅎㅎ/
    board[][]이게 초기값을 설정안해주면 값이 0이라는걸 이제 알았어요;;;ㅎㅎ;
    차근차근 다음단계까지 보면서 나중에 또 질문해도 돼죠~? ㅎㅎ//

    •  address  modify / delete 2008/03/09 14:42 Favicon of http://zfanta.com BlogIcon 환타

      수고하셨어요^^
      초기화 없이 0으로하려면 전역변수로 전언을 해야합니다.
      질문 환영이에요 ㅎㅎ

  5. 왕초보ㅠ 2009/06/19 08:54  address  modify / delete  reply

    return 0;으로 되어있는거는.... 화면을 어떤 상태로 만드는 건가요?? 좌표에 돌이 있으면 return0;인데 return0;으로 하면 처음으로 되돌린다?? 그런건가요??

  6. 초보나그네 2010/04/23 17:29  address  modify / delete  reply

    지나가던 학생인데 질문좀 드려도 될까요?? 여기 짜 놓으신 프로그램이 혹시 네트워크상에 클라이언트가 접속해서 같이 오목을 둘 수 있는 프로그램인가요?? 워낙 기초도 모르는 초보라 엉뚱한 질문드립니다 ㅠㅠ