이클립스에서 import 후 한글이 다 깨지는 현상이 나타나신다면프로젝트 우클릭 또는 상단 메뉴 project > properties > Resource 탭에 Text file encoding 에 MS949 설정으로 바꿔보시거나새로 첨부한 UTF8 인코딩 버전으로 실행해보세요----------------------------------------Head First Java: 뇌 회로를 자극하는 자바 학습법책에 있는 챕터 6장에 있는 DotComGame을 개선하였습니다.닷컴만 찾는게 아닌 폭탄과 보너스를 심고 표도 출력합니다.폭탄을 찾으면 게임 종료 , 보너스를 찾으면 시도횟수 초기화합니다.자세한 개선내용은 다음과 같습니다.닷컴개수 그리드사이즈 7*7,8*8은 3개, 9는 4개, 10은 5개1. 무작위로 폭탄심기 개수는 닷컴개수와 동일2. 힌트 프롬프트 창에 hint라 치면 제공- 9개의 힌트 중 무작위로 알려주며 이미 알려주거나 맞춘 것은 제외하여 알려줌3. 보너스 찾으면 미스 카운트 리셋, 개수는 닷컴과 동일4. 재시도 카운트 초과시 게임 끝 - 그리드 사이즈 7*7,8*8은 재시도 20번, 9는 30번, 10,11은 40번 제한, 초과시 게임종료5. 그리드 사이즈 설정 7*7 ~ 11*11까지 - attemps 횟수도 조절(칸이 넘어가지 않게 닷컴배치 횟수)6 출력세분화 -try/miss/hit 개수를 시도할 때마다 노출7 종료 명령어- close 치면 겜 종료그리고 재시도 Y/N 입력해서 여부를 묻기8. 게임시간 출력- 한판 걸린 시간(게임 끝날 때 표시)과 누적 시간체크(끝날 때 누적시간 출력)- i/o 사용해서 파일로 관리(time.txt) 형식으로9. "show map"이라 입력하면 표를 보여줌코드에 주석을 달아 이해를 돕도록 하였습니다.압축파일에는 소스코드와 개선목표 txt파일 그리고 책에 있는 GameHelper 코드 설명 촬영사진이 있습니다.
C언어로 작성하였습니다. 서버와 클라이언트 프로젝트도 같이 압축 첨부하였습니다.간단한 1:1채팅 프로그램을 윈도우와 리눅스 간에 가능하도록 만든 프로그램 소스입니다.스레드를 이용하여 핑퐁형식이 아닌 연속으로 채팅이 가능합니다.스레드가 pthread를 사용하여서 윈도우 상에서 pthread를 사용하기 위해서는 pthread for win32 윈도우용 pthread 라이브러리를 다운받으시고 속성을 연결해주어야 합니다. <pthread.h> 인클루드 필수입니다.다운로드 하는 곳은 http://sourceware.org/pthreads-win32/이곳에서 ftp://sourceware.org/pub/pthreads-win32/dll-latest 누르신후dll/include/lib/이걸 받으시면 됩니다.첨부파일에 pthread 라이브러리를 같이 포함하였습니다.사용방법은- 프로젝트 -> 속성 -> VC++ 디렉터리로 간다. - - 포함 디렉터리 항목에 다운받은 include 폴더를 추가하고, - - 라이브러리 디렉터리 항목에 다운받은 lib 폴더를 추가한다. - 프로젝트 -> 속성 -> 링커 -> 입력 -> 추가 종속성 항목에 LIB 파일들을 적어준다. - 프로젝트 -> 속성 -> C/C++ -> 일반 -> 추가 포함 디렉터리에 include, lib 폴더를 모두 등록시킨다.위의 절차를 하시면 사용 가능합니다.채팅 프로그램은 서버와 클라이언트가 있는데서버=윈도우, 클라이언트= 리눅스서버=리눅스 , 클라이언트=윈도우서버,클라이언트=윈도우서버,클라이언트=리눅스이렇게 4가지 환경에서 1:1채팅이 가능하고프로그래밍 소스는 윈도우와 리눅스버전이 따로 있는게 아니라#ifdef ,#else, #endif 로 작성하여똑같은 소스를 윈도우나 리눅스에서 실행가능한 멀티 플랫폼 코드롤 작성하였습니다.윈도우7 , visual studio 2005에서 작성하였고 VMware 8.0.3 build-703057로 ,리눅스 ubuntu 11.04를 설치하였고 리눅스 내에서, 이클립스와, gcc로 작성하였습니다.
* 간단한 채팅프로그램입니다. 우리가 흔히 쓰는 메신저 채팅 정도의 수준이 아닌 서로 주고 받고 하는 채팅입니다.예를 들면 A가 채팅을 해야 B가 채팅할 수 있습니다. 무조건 서로 한번씩만 채팅이 가능합니다. 순서없이 아무렇게나 채팅이 가능한 프로그램은 아닙니다.*C언어로 작성하였습니다. 총 27페이지이며 링크모음파일 , 서버와 클라이언트 프로젝트도 같이 압축 첨부하였습니다.간단한 1:1채팅 프로그램을 윈도우와 리눅스 간에 가능하도록 만든 프로그램 소스입니다.채팅 프로그램은 서버와 클라이언트가 있는데서버를 윈도우 클라이언트를 리눅스로 하여 1:1채팅이 가능하고반대로도 가능합니다.프로그래밍 소스는 윈도우와 리눅스버전이 따로 있는게 아니라#ifdef ,#else, #endif 로 작성하여똑같은 소스를 윈도우나 리눅스에서 실행가능한 멀티 플랫폼 코드롤 작성하였습니다.압축파일이고 안에는 pDF로 작성된 보고서가 있고 소스코드가 들어있습니다.또 이걸 만들면서 참고하였던 링크들을 모아놓은 html문서가 있습니다.따로 검색안하셔도 되고 모아놓은 링크중에서 모르는거 찾아 들어가시면 되겠습니다.처음에는 소켓에 관한 함수조사와 OSI 7계층 간단한 조사 통신방식에 대한 조사가 되어있고 그 이후로는 에코서버 예제실습과 윈도우, 리눅스상에서 각각 작성한 1:1 채팅프로그램 소스가 있으며 마지막에 윈도우와 리눅스간 1:1 채팅소스가 있습니다. 동작 동영상도 첨부되어 있습니다. 문서상에서 재생누르시면 됩니다.윈도우7 , visual studio 2005에서 작성하였고 VMware 8.0.3 build-703057로 ,리눅스 ubuntu 11.04를 설치하였고 리눅스 내에서, 이클립스와, gcc로 작성하였습니다.
디지털논리회로실험◆실험 목표◆-디지털논리회로실험시간에 배운 내용을 토대로 교통신호 제어기를 만든다.-신호등의 점등시간은 주도로와 부도로 녹색등 8초, 황색신호등은 2초로 한다.-펄스 발생시 함수발생기 대신 555타이머를 이용한 멀티바이브레이터를 사용한다.◆사용 부품◆LED 9개330 8개, 10k 2개, 10m 1개, 2.2M 1개, 0.1uF 캐패시터 1개74139 1개7408 2개7432 1개7474 1개토글스위치 1개555타이머 1개16핀 소켓 1개, 14핀소켓 5개, 8핀소켓 1개◆설계순서◆1. 교통신호등 설계(좌회전 추가)2. 그레이코드 설계3. 카운터설계4. 555타이머를 이용한 1Hz 주파수발진기 설계 및 최종 설계도1. 교통신호등 설계교통신호순서를 나타낸 진리표상태코드상태출력신호등 출력G1G2S1'S2'S3'S4'MR'MY'MG'SR'SY'SG'*************1**************************10011101※M=주도로 S=부도로위 진리표에 따르면 신호등은 MG' 와 SR'→ MY' 와 SR'→ MR' 와 SG'→ MR' 와 SY' 순서로 점등된다.이를 토대로 교통신호등을 설계한다.최신디지털공학실험 13장 디멀티플렉서를 이용한 조합논리에 있는 설계도를 참고하였다.교통신호등 설계도여기서 각 신호등 끝에 좌회전 신호등을 하나씩 추가하였다. 좌회전 신호등은 각 도로 녹색등과 같이 연결하였다. 그 이유는 예를 들어 부도로가 빨간불일시 주도로는 직진과 좌회전이 가능하기 때문에 녹색등과 좌회전 신호등은 동시에 켜져도 상관없기 때문이다. 이와 같이 부도로도 주도로가 빨간불 일시 직진과 좌회전이 가능하다.※교통신호등 설계시 애로사항처음에 교통신호등을 브래드보드에 설계했을 때에는 아무 불이 들어오지 않았다. 아무리 회로를 살피고 또 살펴도 틀린 곳은 없었다. 그래서 처음부터 다시 껴보고 브래드보드도 교체 해보고 이상없는지 체크도 해보았으나 아무 문제가 없었다. 그래서 전압을 조금 높혀보았는데 모든 LED에 불이 들어오고 말았다. 원인을 아무디코더의 순서를 결정하는 그레이코드 카운터를 설계.마찬가지로 13장 그레이코드를 참고하였다.그레이코드 설계도여기서 5번핀과 12번핀 사이에서 나오는 출력을 신호등디코더인 74139 A에 입력, 9번출력을 B로 입력한다.그레이 코드와 신호등을 연결 후 펄스 발생기를 사용하여 작동이 잘되는지 확인해본다.그레이코드와 신호등을 결합한 설계도3. 카운터 설계교통신호등 제어기를 설계하는데 있어 가장 중요한 카운터를 설계카운터를 이용하여 녹색등8초 황색등2초를 만들어내야 한다.설계의 방법에는 10진 카운터, 16진 카운터를 이용하는 방법이 있다.또 D플립플롭 7474 칩을 이용한 설계와 JK 플립플롭 7490, 7493를 이용한 설계가 있다.그 중에서 나는 7493을 이용하여 10진카운터를 설계하기로 했다.우선 10진 카운터이므로 0000부터 1001까지 카운트가 된다. 여기서 8초 2초를 나누어야 하는데 그 방법으로는 8초에 해당되는 0111, 10초에 해당하는 1001이 있다. 이것을 따로 빼내어 AND게이트로 묶은 후 OR게이트로 다시 한번 묶는 것이다. 하지만 모두 빼낼 경우 항상 0이 되기 때문에 1만 빼낸다. (유의해야 할 점은 다른 경우의 수도 살펴보아 8초와 10초의 결과가 중복되면 안된다.)그렇게 되면 OR게이트는 8초, 10초 일 때마다 1을 출력하게 된다. 그리고 10진 카운터이기 때문에 10초가 되면 자동으로 리셋되어서 다시 0000부터 시작하게 된다. 이것이 내가 10진카운터를 이용한 이유이다. 16진카운터를 이용했을 경우 리셋을 해주기 위해 NAND게이트가 필요하다. 그렇게 되면 칩 개수가 늘어날 뿐만 아니라 결선도 더 복잡해진다. 하지만 10진카운터를 사용하였을 경우 자동으로 리셋이 될뿐더러 7493은 NAND게이트를 내장하고 있어 따로 NAND게이트를 추가할 필요가 없다. 그래서 카운터를 설계하는데 필요한 칩의 수를 3개까지 줄일 수 있었다. 7493과 AND게이트를 내장한 7408, OR게이트를 내장한 7432를 사용하였다.7493을 이용한 이용한 설계도와 비교해보면 상당히 복잡한 것을 볼 수 있다. 7474칩 2개에 7408칩 2개, 7400게이트 하나를 쓰기위해 7400칩을 추가해야하고 OR게이트 7432를 사용하였다. 총 6개의 칩이 필요할뿐더러 7474 결선도 상당히 복잡하다. 그래서 나중에 기판에 납땜을 할 때 많은 어려움이 있을거라 생각하고 좀 더 쉬운 설계방법을 찾기 시작하여 7493으로 설계를 하여 칩 개수를 반으로 줄일 수 있었다.같은 기능이라도 좀 더 작고 간단하며 알아보기 쉬운 설계도가 가장 효율적이라는 것을 느낄 수 있었다.4. 555타이머를 이용한 1Hz 주파수발진기 설계시간을 주는 타이머로써 설계에 필요한 시간은 초 단위이기 때문에 1Hz를 만들어내는 발진기를 설계한다.이를 구하는 방법은 공식을 이용하여 구한다.주파수를 구하는 공식은 아래와 같다.REL LRARROW {1.44} {(R1+2R2)C1} =f 처음에는 무작정 아무 값을 대입하여 1Hz에 가깝게 나오도록 맞추려 했었다. 하지만 쉽지 않았고고민을 거듭하던 끝에 1Hz가 나오기 위해서는 분자와 분모가 같으면 된다는 사실이었다. 처음부터 했으면 금방 했었을텐데 그냥 무작정 하다보니 시간낭비만 하였다. 그래서 R1에 10M 을 R2에 2.2M 을 캐패시터는 0.1uF을 넣기로 하였다. 그렇게 되면 정확히 분모가 1.44가 나와서 분자랑 똑같아 진다. 결과 값을 토대로 주파수 발진기를 설계하였다.555타이머를 이용한 1Hz 주파수 발진기오실로스코프를 이용하여 측정한 1Hz 주파수 발진기오실로스코프를 이용하여 측정해보았더니 일정한 간격으로 주파수가 측정되었고 3번 출력에 LED를 달아보았더니 1초마다 깜빡였다. (5번핀은 인터넷을 조사해본 결과 안정용으로 캐패시터를 달기 때문에 생략해도 무방하다고 하였다.)이로써 교통신호 제어기를 만드는데 필요한 부분들이 모두 완성 되었다.이제 각 부분을 모두 결합한 설계도이다.연결순서는 타이머→카운터→그레이코드→신호등 순서이다. 555타이머의 3번출력을 7493 14번핀 INPUT 통신호등, 새벽모드 뒷면 납땜카운터와 주파수 발진기 뒷면 납땜완성된 교통신호등2층구조로 만들게 된 이유는 초반 7474를 이용한 16진 카운터를 설계하려 했는데 기판에 공간이 부족할꺼 같았으나 7493 10진 카운터 설계로 공간을 확보하였다. 그리고 세그먼트기능을 추가하기 위해 부족한 공간을 대비하여 기판을 더 쌓았으나 브래드보드에서 계속된 실패와 쇼트현상으로 세그먼트 기능은 포기하게 되었다. 그래서 완성하고 나니 빈 공간이 너무 많이 남았다. 기판 하나에 다 들어갔을 법했다. 하지만 이미 너무 많은 작업을 한 상태라 계속 진행하였다. 또 작동을 해보았으나 1,2초정도 오차가 있었다. 또 갑자기 시간이 제 멋대로 바뀌기도 하였다. 그리고 기판을 제작하던 중 새벽모드를 어떻게 할까 생각하였는데 기존 신호등으로 새벽모드를 만들기에는 어려움이 너무 많았고 LED를 추가하여 따로 만들 생각을 하였다. 그래서 VCC를 끊어서 스위치를 연결하여 스위치를 키면 신호등은 꺼지고 새벽모드 신호등만 켜지게 할려고 했으나 막상 만들어보니 제대로 작동하지를 않았다.완성 후 해결되지 않은 문제점들1. 정확한 시간분배가 되지 않는다.2. 세그먼트 모의 실험시 쇼트현상3. 새벽모드 작동 시 신호등이 꺼지지 않는 현상.4. 카운터 설계시 이론과 실제 작동시 결과 값이 다른 점.5. 칩의 이상유무 판단하는 법이 같은 문제점들이 아직 해결되지 않았다. 내가 할 수 있는 모든 것은 다 해봤으나 원인을 찾지 못했다. 왠지 해결될 거 같으면서도 안되는 문제들이었다. 아직 내가 많이 부족하다는 생각을 하게 되었다.이번 프로젝트를 마치고 나며..우선 진짜 힘들었다. 초등학교 실과시간이후로 처음한 납땜이었으며 디지털논리회로를 이해하는게 여간 쉬운 일이 아니었다. 처음에 과제를 내주셨을 때는 한달 간의 여유가 있었다. 그래서 계획을 짰는데 1주차에 신호등과 그레이코드 완성 2주차에 카운터 완성 3주차는 기말고사 기간 4주차는 타이머 완성 및 최종완성이었다. 그래서 과제 발표 그 주에 구로유통상가를 가서 도 결과가 안 나온다. 진짜 답답했다. 이유도 알 수 없었고 체크해볼만한 건 다 해보았으나 해결이 안됐다. 그래서 설마 하고 칩을 바꿔보았다. 그랬더니 작동이 되었다... 황당했다. 분명 사온 부품이었기 때문이다. 그렇게 신호등 그레이코드 완성하는데 2주를 보냈다. 시간이 촉박했고 카운터를 설계해야했는데 도무지 감이 안잡혀 디지털논리회로 책도 뒤지고 도서관가서 논리회로 책들을 모두 뒤져 보았다. 하지만 머리가 나쁜건지 그래도 이해가 되질 않아서 거의 좌절하다시피 했으나 친구에게 물어보고 선배한테도 물어보며 겨우겨우 길을 찾아나갔다. 그러나 막상 브래드보드에 만들어서 해보면 되질 않았다. 정말 답답했다. 왜 안되는건가.. 정말 누가 옆에서 딱 붙어서 이건 맞다 아니다만 해줬으면 싶었다. 결국 절박한 심정으로 교수님을 찾아갔지만 내 궁금증은 풀리지 않았다. 교수님은 스스로 깨우치길 바라셨다. 교수님이 하신말씀이 머리를 의심하되 하드웨어를 의심하진 말라고 하셨다. 그 말이 확 와 닿았다. 그래서 내가 부족한 탓이라 안되는거라고 생각했다. 다시 제작에 들어갔으나 똑같았다. 그래서 원인을 찾으려고 할 수 있는 건 다 해보았다. 그런데 이번에도 혹시나 하고 부품을 바꿔 껴보았다. 그랬더니 되었다. 그리고 브래드보드에서 안되던 것도 기판에 제작해보니까 작동이 되었다. 이 때부터 나는 하드웨어를 의심하기 시작했다. 그랬더니 생기는 문제마다 부품문제였다. 왜 그런건지는 모르겠다. 그래서 칩 이상유무를 판단할 수 있는 방법을 찾아보았으나 나오지가 않았다. 결국 될 때까지 부품을 계속 갈아끼워 보았다. 이런 식으로 겨우겨우 밤새가며 완성을 하였다. 프로젝트 시작할 때는 보너스 까지도 다 할 생각이었지만 시간이 갈수록 기본기능에 충실해 지기로 하였다. 완성을 하고 작동을 해보았다. 정확하게 나오진 않았지만 약간의 차이가 있었다. 완벽하진 않지만 내가 여기까지 해냈다는 게 신기했다. 지난 과정들을 생각해보니 진짜 많은 어려움을 겪었다. 물론 나뿐만 아니라 모두가 그랬을 거다. 그리고 같다.