'오목'에 해당되는 글 7건

  1. 2009/07/25   C언어로 오목게임만들기 개선 (4)
  2. 2008/02/14   C언어로 오목만들기 5 마지막. (15)
  3. 2008/01/26   C언어로 오목만들기 4 (7)
http://zfanta.com/entry/C언어로-오목만들기-5-마지막

배운지 얼마 안돼서 만들었던 더러운 소스를 개선해봤습니다.


지금 다시 만들어도 더럽긴 하네요.......
질문이나 버그는 리플로 많이 달아주세요.

영양가 없는 글에는 짤방


저작자 표시 비영리 변경 금지

이 글이 유익하다면 (굽신굽신) ->
Tag // c, 게임, 오목

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

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

    Tracked from There Ain't Just Unlogical - #pragma pack (the UNique subroutine) 2009/07/25 22:33  delete

    일단 지난 번에 제가 바꿔 놓은 코드에 좀 문제가 있습니다. 누가 이겼는지 안 나오더군요.. 잘 되더니 왜 그러지;; 뭐 좀 바꿨더니 다시 됩니다만. /* five_in_a_row.h * by ZFanta & UNique */ #ifndef FIVE_IN_A_ROW #define FIVE_IN_A_ROW #include "tool.h" #define UP 72 #define DOWN 80 #define LEFT 75 #define RIGHT 77 #..

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

    Tracked from There Ain't Just Unlogical - #pragma pack (the UNique subroutine) 2009/09/30 16:11  delete

    이 코드를 리팩토링하기 시작한 후로 상당히 많은 시간이 흘렀는데.... 제대로 된 개선은 한 적이 없다. 미쳤구나. 시간이 많던 방학 동안에는 아예 안 건드렸다. 원래 check()를 바꿔 보려고 했습니다만 더 최적화시키기는 어려워 보입니다.-_-;; 대신에 move()의 길이를 좀 더 줄여 보도록 하겠습니다. /* five_in_a_row.h * by ZFanta & UNique */ #ifndef FIVE_IN_A_ROW #define FIVE_..

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

    Tracked from There Ain't Just Unlogical - #pragma pack (the UNique subroutine) 2009/11/12 13:47  delete

    드디어 check()를 줄일 아이디어를 구체화시켰습니다.-_- 현재 방식 그대로라면 모듈로 분리한다 해도 거의 아무런 차이가 없으므로, 아예 검사 방식 자체를 바꾸려고 했습니다만 그게 잘 안 되고 있었습니다. 뻘소리를 좀 하자면 오늘은 2010 수능 D-day이면서 2011 수능 D-364 즉 52주... 어차피 블로깅이 많이 줄었지만 앞으로 1년간 거의 잠수 탈 것 같습니다. 새로운 검사 방식을 소개합니다. 1. 검사 방식에 있어서 생긴 차이는 아..

  4. Subject: 환타 오목 게임 재구성: 최종본.

    Tracked from There Ain't Just Unlogical - #pragma pack (the UNique subroutine) 2009/11/12 13:47  delete

    지환태 님의 오목 게임 소스를 처음 접한 것은 올해 중순이었을 겁니다. 오목을 만들어 보겠다는 생각 자체를 하지 않았기 때문에 당연히 소스에 관심이 갔고, 소스 자체가 그다지 깔끔하지 못해서 리팩토링(refactoring)을 해 보고 싶었습니다. (환타[지환태] 님께서도 C언어를 배운지 얼마 안 되었을 때 만들었다고 고백하셨습니다.) 처음엔 허락도 받지 않고 시작한 재구성인데 환타 님께서 관심을 가져 주셨으며, 다섯 번에 걸친 재구성(R1, R2,..

  5. Subject: dd

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

    dd

  1. Favicon of http://un-i.tistory.com BlogIcon Un-i-que 2009/07/25 22:31  address  modify / delete  reply

    끄윽-_-;; 역시 textarea가 좀 느리네요.

    그나저나 잘 고치시네요. 역시 제가 괜히 설친 건가요...

  2. 흐음.. 2009/11/12 18:21  address  modify / delete  reply

    컴파일 하기 귀찮 ㄷㄷ...
    그냥 컴파일 해서 실행파일도 올려주시면 흐음...

  3. 이런 2010/01/26 20:28  address  modify / delete  reply

    이걸 어떻게 복사함...번호 안습..ㅜㅜ

  4. Sens 2010/04/02 22:12  address  modify / delete  reply

    오호 대단하십니다 열심히 배우고 갑니다.

오랜만에 오목포스팅 드디어 끝이다.
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가 있나요 !?