티스토리 뷰

개발

tile게임 만들기

KWG07(joseph0528) 2021. 1. 15. 00:11
반응형

어떤 분의 추천으로 만들게 됐다.

밑에 영상을 보고 플레이 방식을 알고 다시 글을 보기 바란다.

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
댓글