네 다시 돌아온 게임 제작 시간입니다. 10/15일에 올린다고 했는데 어느새 시간이 훌쩍 건너뛰어 18일이 되어버렸습니다. 갑자기 웹 취약점 분석하는 공부가 너무 재밌어서 몇일 시간을 뺏겨버렸습니다. 이번 오목 만들기에서는 네트워크 통신을 이용해서 통신 대전을 먼저 구현해보도록 하겠습니다. 오목은 포스팅이 상당히 길어질 것 같은데요 해 볼 수 있는것이 많이 있기 때문입니다. 자 그렇다면 순서대로 해 볼 내용들을 나열해보겠습니다. 1. 오목 클라이언트 제작 2. 오목 서버 제작 3. AI 와 오목 대결 할 수 있게 만들기 가 있는데요, 1->2 를 넘어갈 때 처음에 설계를 일부로 부실하게 할 것입니다. 지금은 이해 못하셔도 됩니다. 1에서 만든 오목은 클라이언트 에서 모든것을 처리해서 서버로 값을 넘기기만..
더 만들고 싶었었는데 작성해놓은 코드를 너무 오래 안봐서 잊어버렸습니다..... (이게 무슨...) 대신 바로 다음 차례인 서버 구축하여 1:1 로 오목을 즐길 수 있게 만드는 과정을 진행해보겠습니다. 서버가 어떤 역할을 하는지, 네트워크 프로그래밍에서 고려해야할 점들, 조금 더 나아가서 멀티스레드에 대해서도 알아봅시다...... (솔직히 테트리스 나머지는 그냥 조금씩 쓰면 되는것들이라.... 변명) 정확하게 10월 15일에 오목 - 네트워크 로 돌아오도록 하겠습니다. 클라이언트 부분은 역시 파이썬으로 서버는 C 로 작업하도록 하겠습니다.
자 여러가지 불편함을 느끼셨을 거라고 생각합니다. 필자도 많은 불편함을 느꼈습니다. 필자가 느낀 부분을 적어볼게요. 여러분이 느끼신건 여러분이 직접 만들어 보셔도 좋고 여러분이 생각한것중에 필자가 생각한것과 겹치는것도 있겠네요 필자가 생각한 첫번째 불편한 점은 꾹 눌러도 계속해서 움직이지 않는다는 것입니다. 이거 상당히 불편합니다. 이걸 어떻게 개선할 수 있을까요???? 두번째 불편한 점은 떨어지는 위치가 보이지 않아서 블럭을 자꾸 실수로 놓게 된다는것이네요..... 현대 테트리스에서는 이것을 고스트 라고 부른답니다. 세번째는 다음 블럭이 나타나지 않아서 게임이 힘들다는 생각은 안해보셨나요? 이것은 넥스트 블럭 입니다. 네번째는 현대 테트리스를 해보신 분이면 아시겠지만 블럭을 저장하고 바꾸는 기능이 있습..
네 돌아온 테트리스 제작입니다. 위와 같은 코드로 게임을 초기화 하고 판을 초기화 합시다. 위의 코드에 대한 설명은 딱히 필요 없을 것 같습니다. 그냥 초기화, 제목 변경, 이미지 로드, 시계 생성 밖에 없으니까요 네 별로 어렵지 않은 코드입니다. 게임오버가 되지 않은선에서 계속해서 루프를 실행합니다. 종료 처리가 들어오면 종료하라... 각 키에 따른 처리인데, x_position 과 y_position 을 1빼고 1더하고 하는 식으로 위치를 조정합니다. 이때 spacebar 의 처리가 독특한데 조금만 생각해보면 쉽게 알 수 있습니다. 한칸 내렸을때 블럭이 충돌하지 않는다면 한칸 내리고, 또 충돌하지 않는다면 한칸 내리고, 또 충돌하지 않는다면 한칸 내리고.... 하면서 충돌할때 그만하고 그곳에 블럭을 ..
네 다들 좋은 새벽입니다 필자는 새벽 세시에 잠이 안와서 이 글을 쓰고 있습니다. 자 테트리스 계속 제작을 진행 해 봅시다 아래의 함수는 새로운 블럭을 생성하는 함수입니다. 아주 간단합니다 그냥 superblock 에 block 객체를 새로 생성하고 자신의 block 에 블럭을 집어넣는 것 뿐입니다. 너무 간단한데.... 이렇게 하면 이전에 있던 블럭은 어떻게 될까요 더이상 연결된 곳이 없어서 참조 할 수 없으므로 파이썬에 있는 GC(Garbage Collector) 가 자원을 해제해줍니다. C/C++ 이였다면 메모리를 해제해주는 코드가 있었어야겠지요 ㅎㅎ.... 이전 객체를 파기했어야했습니다. 동적으로 생성해서 지우고 새로운 객체를 할당 받는 식으로 짜야 겠지만, 파이썬이라서 (자바도 됩니다) GC 가..
필자는 여러가지 생각을 해서 로직을 하나 떠올렸습니다 보드 판을 두개 준비해놓고, 하나는 이미 쌓여있는 블럭만 저장하고 하나에는 지금 떨어지는 블럭을 쌓여있는 블럭이 있는 부분에다가 삽입한 뒤, 삽입된 배열을 출력해주면 어떨까? 코드로 바로 진행해보겠습니다. 이전 상태의 게임보드... 라고 해서 gameBoard 와 똑같은 형식으로 새로 또 만들었습니다. 그리고 gameBoard 는 항상 낙하하고 있는 블럭을 하나씩 가지고 있습니다 gameBoard 클래스 내에 다음과 같이 선언해줍니다. superblock 은 block 클래스를 가지고 있는것이고 block 변수는 superblock 에 저장된 블럭만을 가지고 있게 됩니다. 자 다음에는 블럭을 insert 하는 과정이 필요하겠지요... 자 이 함수로 블..
자 테트리스를 어떻게 짤지 고민을 좀 해보셨나요 필자는 낙하하는 블럭을 따로 관리하기로 했습니다 이것도 여러가지 방법이 있는데요, (x,y) 의 배열을 네개 생성해서 이것이 낙하한다고 봐도 되구요 필자는 메모리를 마구마구 쓰고싶어서.... 이런식으로 블럭 셋을 정의했습니다 저걸 4*4 행렬이라고 생각하고 나열해보죠2는 막대기 입니다 2, 2, 2,2 2,0,0,0 2,2,2,2 2,0,0,00,0,0,0 2,0,0,0, 0,0,0,0 2,0,0,00,0,0,0 2,0,0,0, 0,0,0,0 2,0,0,00,0,0,0 2,0,0,0, 0,0,0,0 2,0,0,0 의 모양이 됩니다 별로 안어렵죠? 저걸 그냥 일렬로 풀어놓은것에 불과해요. 이렇게 만들고 보니까. 아 블럭은 또 다른 객체 아니에요? 라고 하실 ..
본격적으로 테트리스 제작을 시작해봅시다 저번 16퍼즐의 코드는 무척 구렸지만 이번 코드는 더 구립니다. 물론 구린 부분중 일부분은 수정할거지만 나머지는 할 생각도 능력도 없습니다.(응?) 자 우선 16퍼즐 만들기 할때 필자가 말했던 게임의 흐름(?) 이 생각나시나요 입력 -> (데이터) 처리및 갱신 -> 그리기 -> 입력 물론 입력은 버퍼에 받아서 따로 처리하고....(이래야 키가 씹히는 일이 줄어듭니다. 없다고는 말 못하고) 처리와 그리기는 따로 작성해야합니다. 처리를 함과 동시에 그린다던가 하면 나중에 다른 기기로 이식하거나 할때 고생좀 할걸요 ㅎㅎ 필자의 계획에는 라즈베리파이로 이동식 게임 만들기도 들어있습니다. 그때까지 보시는 분은 이 계시면 좋겠네요 물론 언제 필자가 그걸 만들지는 모르겠어요 테..
하... 드디어 돌아왔습니다. 우선 작동하는 게임과 어디를 손봐야하는지 정도.... 더 재미있게 만드는 법 생각하고 글로 옮겨 놓는데 1주일정도 걸렸네요. (필자가 코딩을 못하는 나머지 시간이 오래걸렸습니다.) 프로그래밍 못하는 프로그래머 괜찮아 박 전 대통령도 정치르...읍읍) 뭐 어찌됬건.... 테트리스를 만들어 보겠습니다. 사실 대학교 1학년 1학기 수업만 듣고도 만들 수 있습니다 보통 그 쯤 테트리스 과제가 나왔던거 같기도 하구요 전 대학때 자체공강 Person이라 지금 땅을 치고 후회하고 있습니다 열심히 공부해야합니다 저처럼 주 생활비 4만원 빌런 되기 싫으면 사실 열심히 공부해도 주 생활비 10만원 못찍음. 그냥 노세요 우선 테트리스에 대한 설명을 (모르는 사람이 있겠냐 싶지만요...) 하겠습..
드디어 16퍼즐 제작 마지막 글을 씁니다. 사실 다 만든건 2주가 넘었는데 제가 뭘 고쳤는지 기억이 안나서... 더듬으면서 쓰다보니 엉망이 되었네요. 오늘 적는 내용은 순도 300000% 필자 본인의 개인적인 생각이고 저보다 훨씬 더 잘 아시고 잘 하시는 분들 많아서... 우선 16퍼즐은 언제 맞춰지지 않는 모양이 될까요...? 일전에 이걸 해결하기 위해 방법이 두가지가 떠오른다고 했었던거 같은데 무작위로 생성 vs 이동 방향을 랜덤으로 설정하고 아주 많이 실행 후 게임 시작 뭐든 좋습니다. 다만 저는 무작위로 생성했고 그럼 그게 풀리지 않는 퍼즐 형태인 경우 새로 생성해주면 그만입니다. 지금은 수학시간이 아니니 코드로 옮길 지식만 얻도록 하겠습니다. http://semi.math1.org/monthly..
