python/미니 프로젝트
소코반
june__Park
2021. 3. 1. 01:07
# 소코반
# 1. 게임 map의 사이즈는 7 x 7의 2차원 리스트이다.
# 2. 사용자로부터 벽의 설치개수를 물어 랜덤한 위치에 설치한다.
# 3. 공과 골대를 벽과 겹치지 않도록 랜덤한 위치에 설치한다.
# 4. 사용자로부터 플레이어의 위치 값을 입력받아 배치시킨다.
# 5. 플레이어는 상하좌우로 이동이 가능하다.
# 6. 플레이어를 이동시켜 공을 골대에 넣으면 게임이 종료된다.
# 예)
# 0 9 0 0 0 0 0
# 7 0 0 9 0 0 0
# 3 0 9 0 0 0 0
# 2 0 0 0 0 9 0
# 0 0 9 0 0 0 0
# 0 9 0 0 0 0 0
# 0 9 0 0 0 0 0
# 상(1)하(2)좌(3)우(4) 입력 : 1
# 0 9 0 0 0 0 0
# 3 0 0 9 0 0 0
# 2 0 9 0 0 0 0
# 0 0 0 0 0 9 0
# 0 0 9 0 0 0 0
# 0 9 0 0 0 0 0
# 0 9 0 0 0 0 0
# 게임 종료
import random
game = [[0] * 7 for i in range(7)]
size = 7
player = 2
ball = 3
goal = 7
wall = 9
wall_count = 0
p_y = 0
p_x = 0
ball_y = 0
ball_x = 0
goal_y = 0
goal_x = 0
# 벽 설치
wall_count = int(input("벽을 몇 개 설치하시겠습니까?"))
while wall_count != 0:
r_y = random.randint(0, size-1)
r_x = random.randint(0, size-1)
game[r_y][r_x] = wall
wall_count -= 1
# 공 설치
while True:
r_y = random.randint(0, size-1)
r_x = random.randint(0, size-1)
if game[r_y][r_x] == 0:
game[r_y][r_x] = ball
ball_y = r_y
ball_x = r_x
break
# 골대 설치
while True:
r_y = random.randint(0, size-1)
r_x = random.randint(0, size-1)
if game[r_y][r_x] == 0:
game[r_y][r_x] = goal
goal_y = r_y
goal_x = r_x
break
# 캐릭터 배치
while True:
p_y = int(input("캐릭터의 y좌표 입력 : "))
p_x = int(input("캐릭터의 x좌표 입력 : "))
if game[p_y][p_x] == 0:
game[p_y][p_x] = player
break
# Game Start
while True:
for i in range(size):
for j in range(size):
if game[i][j] == 2:
print("[&]",end="")
elif game[i][j] == 3:
print("[◐]",end="")
elif game[i][j] == 7:
print("[★]",end="")
elif game[i][j] == 9:
print("[#]",end="")
else:
print("[ ]",end="")
print()
# finish
if goal_y == ball_y and goal_x == ball_x:
print("게임 종료")
break
mov = int(input("상(1)하(2)좌(3)우(4) 입력 : "))
y = p_y
x = p_x
if mov == 1:
y -= 1
elif mov == 2:
y += 1
elif mov == 3:
x -= 1
elif mov == 4:
x += 1
else:
print("[잘못된 입력입니다.]")
continue
if y < 0 or y >= size:
print("[범위 초과]")
continue
if x < 0 or x >= size:
print("[범위 초과]")
continue
if game[y][x] != 0 and game[y][x] != 3:
print("[이동 불가]")
continue
# 공을 만난 경우
if game[y][x] == 3:
b_y = y
b_x = x
if mov == 1:
b_y -= 1
elif mov == 2:
b_y += 1
elif mov == 3:
b_x -= 1
elif mov == 4:
b_x += 1
if b_y < 0 or b_y >= size:
print("[범위 초과]")
continue
if b_x < 0 or b_x >= size:
print("[범위 초과]")
continue
if game[b_y][b_x] != 0 and game[b_y][b_x] != 7:
print("[이동 불가]")
continue
game[ball_y][ball_x] = 0
ball_y = b_y
ball_x = b_x
game[ball_y][ball_x] = 3
game[p_y][p_x] = 0
p_y = y
p_x = x
game[p_y][p_x] = 2