티스토리 뷰
반응형
어떤 분의 추천으로 만들게 됐다.
밑에 영상을 보고 플레이 방식을 알고 다시 글을 보기 바란다.
https://www.youtube.com/watch?v=mFGevho4OLY
이 게임이고 구현은 생각보다 간단했다.
여기서 회색 상자는 벽이고 파란색 원은 도착지점이다. 빨간색 원은 도착지점 안에 넣어야 되는 말(?)이고 초록색은 들어가면 안 되는 말(?)이다. 여기서 화살표 키로 이동할 수 있고 처음에 5*5 크기의 맵을 입력 하라고 뜬다. 이때 1은 빈 공간, 2는 벽, 3은 초록색 원, 4는 빨간색 원, 5는 파란색 원이다. 파란색 원은 한 개만 넣어야 되고 초록색 원이랑 빨간색 원, 벽의 개수는 자유이다. 하지만 가끔씩 깰 수 없는 맵을 입력 했을 경우 다시 시작하면 된다. 이 게임도 조금씩 업그레이드를 할 예정이고 오목은 지금 AI를 넣는 중이다.
플레이 가능한 입력:
1 1 3 1 1
4 1 2 1 3
1 2 1 5 1
1 1 1 1 2
1 1 1 1 3
1 1 1 2 1
3 1 3 4 1
1 1 1 2 1
4 1 2 5 1
1 1 4 1 1
4 3 1 3 4
1 2 1 2 1
1 1 5 1 1
1 2 1 2 1
1 1 1 1 4
이걸 다 깨도 맵은 5*5 사이즈에 원하는 대로 만들 수 있으니 자신만의 맵을 만들어서 하면 된다.
import sys
import random
import pygame
import time
from math import *
from tkinter import *
import tkinter.messagebox
from pygame.locals import QUIT,KEYDOWN,K_LEFT,K_RIGHT,K_UP,K_DOWN,Rect,MOUSEBUTTONDOWN,K_SPACE
print("맵을 입력해주세요")
tilt=[list(map(int,input().split())) for i in range(5)]
pygame.init()
FPSCLOCK = pygame.time.Clock()
SURFACE = pygame.display.set_mode((600,600))
SURFACE.fill((80,188,223))
#tilt=[list(map(int,input().split())) for i in range(5)]
#tilt=[[0]*5]*5
#tilt=[[1,2,1,2,1],[1,1,1,1,1],[1,2,5,1,1],[1,3,4,2,1],[1,3,4,2,1]]
notthing=1
wall=2
greenblob=3
redblob=4
goal=5
rbc=0
move=""
key=0
for i in range(5):
for g in range(5):
if tilt[i][g]==goal:finsh=[i,g]
if tilt[i][g]==redblob:rbc+=1
def count(i,wi,start,end,y,x):
global rbc
if i==finsh[wi[0]]:
if start<=finsh[wi[1]]<=end:
if tilt[y][x]==redblob:
rbc-=1
tilt[y][x]=notthing
if rbc==0:print("Game Win!!");sys.exit()
else:print("Game over");sys.exit()
return 1
return 0
while 1:
move=""
for event in pygame.event.get():
if event.type==KEYDOWN:key=event.key
elif key==K_DOWN:move="down"#;print("A")
elif key==K_LEFT:move="left"#;print("B")
elif key==K_RIGHT:move="right"#;print("C")
elif key==K_UP:move="up"#;print("D")
if move=="left":
for i in range(5):
endx=0
for g in range(5):
if tilt[i][g]==wall:endx=g+1
if tilt[i][g]==greenblob or tilt[i][g]==redblob:
if g!=endx:
if count(i,[0,1],endx,g,i,g)==0:
tilt[i][endx]=tilt[i][g];tilt[i][g]=notthing
endx+=1
if move=="right":
for i in range(5):
endx=4
for g in range(4,-1,-1):
if tilt[i][g]==wall:endx=g-1
if tilt[i][g]==greenblob or tilt[i][g]==redblob:
if g!=endx:
if count(i,[0,1],g,endx,i,g)==0:
tilt[i][endx]=tilt[i][g];tilt[i][g]=notthing
endx-=1
if move=="up":
for i in range(5):
endy=0
for g in range(5):
if tilt[g][i]==wall:endy=g+1
if tilt[g][i]==greenblob or tilt[g][i]==redblob:
if g!=endy:
if count(i,[1,0],endy,g,g,i)==0:
tilt[endy][i]=tilt[g][i];tilt[g][i]=notthing
endy+=1
if move=="down":
for i in range(5):
endy=4
for g in range(4,-1,-1):
if tilt[g][i]==wall:endy=g-1
if tilt[g][i]==greenblob or tilt[g][i]==redblob:
if g!=endy:
if count(i,[1,0],g,endy,g,i)==0:
tilt[endy][i]=tilt[g][i];tilt[g][i]=notthing
endy-=1
#print(move)
SURFACE.fill((80,188,223))
for i in range(44,600,102):
pygame.draw.lines(SURFACE,(255,255,255),False,[[44,i],[556,i]],2)
pygame.draw.lines(SURFACE,(255,255,255),False,[[i,44],[i,556]],2)
for i in range(5):
for g in range(5):
if tilt[i][g]==wall:
pygame.draw.rect(SURFACE, (128,128,128), [54+100*g,54+100*i,80,80])
if tilt[i][g]==greenblob:
pygame.draw.circle(SURFACE,(0,128,0),[99+100*g,99+100*i],40)
if tilt[i][g]==redblob:
pygame.draw.circle(SURFACE,(255,0,0),[99+100*g,99+100*i],40)
if tilt[i][g]==goal:
pygame.draw.circle(SURFACE,(0,103,163),[99+100*g,99+100*i],40)
pygame.display.update()
반응형
'개발' 카테고리의 다른 글
2048게임 제작 (5) | 2021.02.28 |
---|---|
디스코드 봇 업데이트 (0) | 2021.02.08 |
디스코드 봇 개발 (1) | 2021.01.25 |
오목 게임 만들기 (0) | 2021.01.13 |
얼불춤 만들기(A Dance of Fire and Ice) (3) | 2021.01.09 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 그리디 알고리즘
- 완전 탐색
- 수학
- KOI
- 다이나믹 프로그래밍
- 개발
- 자료 구조
- 이분 탐색
- 최소 스패닝 트리
- Python
- codeforces
- 자료구조
- discord bot
- 세그먼트 트리
- A Dance of Fire and Ice
- 느리게 갱신되는 세그먼트 트리
- 잡봇
- 깊이 우선 탐색
- 트리
- 트리에서의 다이나믹 프로그래밍
- 이분매칭
- 정렬
- 누적 합
- 선분 교차 판정
- BOJ
- 그래프 탐색
- C++
- 알고리즘
- 그래프 이론
- 구현
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함