코딩 스쿨에 오신것을 환영합니다~~

질의응답 게시판

 
오목 코드에 대한 질문입니다.
오 * 진 | 2019-03-08
▷ 첨부파일 : omok.py (4930 Byte)      [저장]

numpy를 공부할것을 권해주셔서 요즘 numpy에 대해 학습중인데요

numpy가 배열에 관한 모듈이다보니까 왠지 배열스럽게(?) 생긴 오목을 한번 만들어보자는 생각이 들어서 

도전해봤습니다. 



방향키로 놓을 위치로 찾아가서 스페이스바를 누르면 돌을 놓는 방식입니다.

일단 돌이 놓여지는 데이터랑 실제 눈에 보이는 돌 그래픽의 위치를 수치적으로 맞추는부분이 굉장히 헷갈렸고

말씀해주신 numpy 의 마스크로 돌이 5개 연속됨을 감지하는 규칙을 만드려고 했는데 

대체 어떻게 해야 할지 헤매다가 np.eye 메서드가 단위행렬을 만드는데 여기에 매개변수 k 에 값을 넣어주면

단위행렬의 1을 오른쪽, 또는 왼쪽으로 이동시킬수있다는걸 구글링으로 알게되서 

'어떻게든 만들었다' 라는 느낌으로 만들었습니다.


이 프로그램을 만들때 반복된 2가지의 과정이 있는데

어림잡아서 수치기입 > 테스트 실행 > 이상함발생 > 조금씩 수치변경
함수 정의 > 테스트 실행 > 오류 발생 > global 추가 


이 방식으로 나가다보니까 뭔가 global 을 계속 쓰게되고, 복잡해지고 
한눈에 코드를 파악하기가 점점 힘들어지면서
코드가 점점 내 뇌가 제어할 수 있는 범위를 벗어나는 느낌이 들더라고요
그냥 컴퓨터를 믿고(?) 코드입력 > 테스트 > 코드입력 > 테스트 를 반복하면서 조금씩 완성시켰습니다.

근데 또 완성시켜놓고 다시 읽어봐도 global 을 더이상 어떻게 줄일 방법이 떠오르지 않네요.



그리고 이 질문을 올린 가장큰 이유는

오목이 완성되서 한쪽이 이기고 게임이 끝났을때 엔터키를 누르면 다시 재시작하게 코드해놨는데

뭔가 이상하게 실행이됩니다.

엔터를 딱 눌렀을때 바로 재시작이 안되고 조금 있다가 재시작이 되고
어쩔때는 금방 재시작이 되기도 하고..
왜이런일이 생기는걸까요


tkinter 에 대해서도 검색으로 찔끔찔끔 배워가지고 짤막하게 써먹는거라 
어떤식으로 동작하는지 머릿속으로 안그려지니까
원인도 못찾겠네요..

  • 오 * 진
  • 2019-03-08 (21:56)
재시작 하는 키를 엔터가 아니라 다른키로 바꾸니까 해결되었습니다.
엔터가 좀 특별하게 내부적으로 사용되고 있거나 그래서 그런가 싶기도하고 신기하네요
  • 관 * 자
  • 2019-03-09 (07:13)
안녕하세요, 
바쁜일 지나면 코드 살펴볼께요. 감사합니다.^^
  • 관 * 자
  • 2019-03-12 (03:33)
네. 오목 게임 프로그램을 작성하신 코드를 살펴보았습니다.

잘 작업하셨습니다. 이런식으로 하시면 금방 일취월장하실 겁니다.

그리고 고수가 짜놓은 프로그램도 같이 비교해 보세요.

파이썬에서 게임제작을 위한 모듈인 pygame을 이용하여 그래픽한 오목게임을 만든 소스를 공개한 다음의 페이지에서 소스를 다운받아 어떤식으로 프로그램을 작성했는지 살펴보시면 많은 도움이 되실겁니다.

https://boongubbang.tistory.com/289

^^
  • 오 * 진
  • 2019-03-12 (11:45)
감사합니다~