on
[Python] 스네이크 게임3
[Python] 스네이크 게임3
728x90
import os import keyboard import random from time import sleep snakeY=5 snakeX=5 snkae_length=1 def printMap(field): for i in field: for j in i: print(j, end=" ") print() field = [["□" for col in range(11)] for row in range(11)] os.system('cls') printMap(field) #게임시작 #input("========PushAnyKey========") os.system('cls') field[snakeY][snakeX] = "■" printMap(field) def moveRight(): os.system('cls') global snakeX field[snakeY][snakeX] = "□" snakeX +=1 field[snakeY][snakeX] = "■" printMap(field) sleep(0.1) def moveLeft(): os.system('cls') global snakeX field[snakeY][snakeX] = "□" snakeX -=1 field[snakeY][snakeX] = "■" printMap(field) sleep(0.1) def moveUp(): os.system('cls') global snakeY field[snakeY][snakeX] = "□" snakeY -=1 field[snakeY][snakeX] = "■" printMap(field) sleep(0.1) def moveDown(): os.system('cls') global snakeY field[snakeY][snakeX] = "□" snakeY +=1 field[snakeY][snakeX] = "■" printMap(field) sleep(0.1) def getPoint(): pointX = random.randrange(0,10) pointY = random.randrange(0,10) if(field[pointY][pointX] != "■"): field[pointY][pointX] = "★" printMap(field) else: pointList=[] pointList.append([pointX][pointY]) while [pointX][pointY] not in pointList: pointX = random.randrange(0,10) pointY = random.randrange(0,10) field[pointY][pointX] printMap(field) count=0 while True: if keyboard.is_pressed('up'): moveUp() count+=1 elif keyboard.is_pressed('down'): moveDown() count+=1 elif keyboard.is_pressed('left'): moveLeft() count+=1 elif keyboard.is_pressed('right'): moveRight() count+=1 if(count==5): getPoint() count=0
방향키로 뱀을 움직이는 것과 별을 맵에 출력하는 함수를 만들었다.
첫 번째로 방향키 모듈을 검색해보았을 때 keyboard 모듈을 사용하는 것 같아서 import keyboard를 달아주었지만 내가 찾는 명령어가 없었다. 알고보니 동명의 keyboard 모듈이였던 것 같다. 이걸 어떻게 알고 찾아 쓰라는건가.
내가 사용하는 모듈을 같은 폴더에 넣어주고 나서 제대로 작동이 되더라, 라이브러리를 자동으로 관리해주는 자바만 쓰다가 파일시스템에서 필요한 모듈을 직접 옮겨야되는 경험을 해보니 다소 불편하다.
파이썬은 원래 이런건가 아니면 내가 뭔갈 잘못하고 있는건가 모르겠다.
두 번째로 4가지의 방향 함수를 하나의 함수로 합치려고 시도했으나 전역 변수간 무언가 충돌 때문에 생각대로 되지 않았다. 그리고 나중에 꼬리를 만들 때도 하나의 함수로 만들어 두면 코드수정이 굉장히 어렵고 복잡해질 것 같은 느낌이 들어서 그냥 4개의 함수로 다시 되돌려 두었다.
세 번째로 맵에 뱀이 먹을 별을 만들었다.
일단 별이 맵에 출력은 되게 만들었는데 이미 오브젝트가 존재하는 좌표에는 별이 출력되지 않게 작성한 로직 부분이 제대로 동작하고 있는지, (중복된 값이 제대로 배열에 들어가서 걸러지고 있는지) 확실치가 않다.
콘솔을 찍어서 확인해보고 싶지만 콘솔이 실시간으로 clear되고 있어서 볼 수가 없다. debug모드로 확인해봐야 할듯 하다. 이쯤부터 새벽1시가 되니 피곤해서 로직이 제대로 눈에 들어오지도 않아서 그냥 대충 생각나는대로 마무리 했다.
일단 별의 출력되는 템포를 임의로 만들어 두었는데, 이 부분도 적절하게 수정이 필요할듯 하다.
추가적으로 비쥬얼스튜디오로 파이썬 소스를 실행할 때마다 간헐적으로 원격소켓이 열리면서 실행을 거부 에러 메시지가 발생하는데 무슨 에러인지 도통 알 수가 없다.
from http://jong99.tistory.com/142 by ccl(A) rewrite - 2021-09-12 06:01:46