티스토리 뷰
반응형
얼 불춤이라는 리듬 게임이 있는데 하고 싶지만 게임을 깔 수가 없어서 직접 만든다.
현재 맵은 3개고 노래는 아직 모든 맵에 추가가 안되어있다.
지금 아직은 미완성이고 잘못 눌렀을 때 돌아가는 건 있지만 타이밍이 늦었을 때 다시 돌아가는 건 아직 추가를 안 했다.
앞으로 계속 만들 예정이고 작품이 잘 나왔으면 좋겠다.
import sys
import random
import pygame
import time
import math
import map
from tkinter import *
from tkinter import messagebox
from pygame.locals import QUIT,KEYDOWN,K_LEFT,K_RIGHT,K_UP,K_DOWN,Rect,MOUSEBUTTONDOWN,K_SPACE
def start():
pygame.init()
FPSCLOCK = pygame.time.Clock()
SURFACE = pygame.display.set_mode((1000,1000))
SURFACE.fill((0,0,0))
block=[]
item=[]
itemspeed=[]
itemslow=[]
cx=200
cy=200
y_max=90
map.map(block,item,itemspeed,itemslow,cx,cy,y_max,1)
blocksize=len(block)-1
under=0
changeb=[3,3]
itemlen=len(item)-1
itemspeedlen=len(itemspeed)-1
itemslowlen=len(itemslow)-1
print(blocksize,itemlen,itemspeedlen,itemslowlen)
#print(item)
#print(blocksize)
changeball=0
ballx=[3,3]
fast=pygame.image.load("rabbit.jpg")
slow=pygame.image.load("turtle.jpg")
changeswap=pygame.image.load("change.jpg")
tickspeed=50
swap=1
st=0
st1=0
st2=0
next=0
itemnext=0
itemspeednext=0
itemslownext=0
stemp=[-1,1]
qr=[fast,slow,changeswap]
judgment=[[],[],[]]
judgmentmessage=["perfect","slow","fast"]
judgmentcolor=[(0,255,0),(255,128,0),(255,0,0)]
qp=0
ani=[0]*(blocksize+1)
SURFACE.fill((0,0,0))
font1=pygame.font.SysFont('notosansmonocjkkrregular',100)
img1=font1.render("3",True,(255,255,255))
SURFACE.blit(img1, (500,500))
pygame.display.update()
FPSCLOCK.tick(1)
SURFACE.fill((0,0,0))
font1=pygame.font.SysFont('notosansmonocjkkrregular',100)
img1=font1.render("2",True,(255,255,255))
SURFACE.blit(img1, (500,500))
pygame.display.update()
FPSCLOCK.tick(1)
SURFACE.fill((0,0,0))
font1=pygame.font.SysFont('notosansmonocjkkrregular',100)
img1=font1.render("1",True,(255,255,255))
SURFACE.blit(img1, (500,500))
pygame.display.update()
FPSCLOCK.tick(1)
SURFACE.fill((0,0,0))
font1=pygame.font.SysFont('notosansmonocjkkrregular',100)
img1=font1.render("Start",True,(255,255,255))
SURFACE.blit(img1, (450,500))
pygame.display.update()
FPSCLOCK.tick(1)
my_image=pygame.Surface((50,50))
#pygame.mixer.music.load('star.mp3')
#pygame.mixer.music.play(1)
#start=time.time()
while 1:
#print(time.time()-start)
qnext=0
rnext=0
inext=0
SURFACE.fill((0,0,0))
pygame.draw.rect(SURFACE,(0,255,0),(block[min(blocksize,next)][0],block[min(blocksize,next)][1],block[min(blocksize,next)][2],block[min(blocksize,next)][3]),3)
pygame.draw.rect(SURFACE,(0,255,0),(block[min(blocksize,next+1)][0],block[min(blocksize,next+1)][1],block[min(blocksize,next+1)][2],block[min(blocksize,next+1)][3]),3)
pygame.draw.rect(SURFACE,(0,255,0),(block[min(blocksize,next+2)][0],block[min(blocksize,next+2)][1],block[min(blocksize,next+2)][2],block[min(blocksize,next+2)][3]),3)
#change
if block[min(blocksize,next+1)][0]-45<=item[min(itemlen,itemnext)][0]<=block[min(blocksize,next+1)][0]+45 and \
block[min(blocksize,next+1)][1]-25<=item[min(itemlen,itemnext)][1]<=block[min(blocksize,next+1)][1]+25:
if block[min(blocksize,next+1)][4]==1:
SURFACE.blit(changeswap,(item[min(itemlen,itemnext)][0],item[min(itemlen,itemnext)][1]))
qnext=1
if block[min(blocksize,next+2)][0]-45<=item[min(itemlen,itemnext+qnext)][0]<=block[min(blocksize,next+2)][0]+45 and \
block[min(blocksize,next+2)][1]-25<=item[min(itemlen,itemnext+qnext)][1]<=block[min(blocksize,next+2)][1]+25:
if block[min(blocksize,next+2)][4]==1:
SURFACE.blit(changeswap,(item[min(itemlen,itemnext+qnext)][0],item[min(itemlen,itemnext+qnext)][1]))
#speed
if block[min(blocksize,next+1)][0]-45<=itemspeed[min(itemspeedlen,itemspeednext)][0]<=block[min(blocksize,next+1)][0]+45 and \
block[min(blocksize,next+1)][1]-25<=itemspeed[min(itemspeedlen,itemspeednext)][1]<=block[min(blocksize,next+1)][1]+25:
if block[min(blocksize,next+1)][4]==2:
SURFACE.blit(fast,(itemspeed[min(itemspeedlen,itemspeednext)][0],itemspeed[min(itemspeedlen,itemspeednext)][1]))
rnext=1
if block[min(blocksize,next+2)][0]-45<=itemspeed[min(itemspeedlen,itemspeednext+rnext)][0]<=block[min(blocksize,next+2)][0]+45 and \
block[min(blocksize,next+2)][1]-25<=itemspeed[min(itemspeedlen,itemspeednext+rnext)][1]<=block[min(blocksize,next+2)][1]+25:
if block[min(blocksize,next+2)][4]==2:
SURFACE.blit(fast,(itemspeed[min(itemspeedlen,itemspeednext+rnext)][0],itemspeed[min(itemspeedlen,itemspeednext+rnext)][1]))
#slow
if block[min(blocksize,next+1)][0]-45<=itemslow[min(itemslowlen,itemslownext)][0]<=block[min(blocksize,next+1)][0]+45 and \
block[min(blocksize,next+1)][1]-25<=itemslow[min(itemslowlen,itemslownext)][1]<=block[min(blocksize,next+1)][1]+25:
if block[min(blocksize,next+1)][4]==3:
SURFACE.blit(slow,(itemslow[min(itemslowlen,itemslownext)][0],itemslow[min(itemslowlen,itemslownext)][1]))
inext=1
if block[min(blocksize,next+2)][0]-45<=itemslow[min(itemslowlen,itemslownext+inext)][0]<=block[min(blocksize,next+2)][0]+45 and \
block[min(blocksize,next+2)][1]-25<=itemslow[min(itemslowlen,itemslownext+inext)][1]<=block[min(blocksize,next+2)][1]+25:
if block[min(blocksize,next+1)][4]==3:
SURFACE.blit(slow,(itemslow[min(itemslowlen,itemslownext+inext)][0],itemslow[min(itemslowlen,itemslownext+inext)][1]))
#print(judgment)
for i_ in range(3):
tpop=-1
for i in judgment[i_]:
tpop+=1
if i[2]<=tickspeed:
font1=pygame.font.SysFont('notosansmonocjkkrregular',30)
img1=font1.render(judgmentmessage[i_],True,judgmentcolor[i_])
SURFACE.blit(img1, (i[0]+20,i[1]-40))
i[2]+=1
else:
judgment[i_].pop(tpop)
if block[min(blocksize,next+2)][0]-45<=itemslow[min(itemslowlen,itemslownext+inext)][0]<=block[min(blocksize,next+2)][0]+45 and \
block[min(blocksize,next+2)][1]-25<=itemslow[min(itemslowlen,itemslownext+inext)][1]<=block[min(blocksize,next+2)][1]+25:
if block[min(blocksize,next+2)][4]==3:
SURFACE.blit(slow,(itemslow[min(itemslowlen,itemslownext+inext)][0],itemslow[min(itemslowlen,itemslownext+inext)][1]))
rx=cx+y_max*math.sin(ballx[changeball%2])
ry=cy+y_max*math.cos(ballx[changeball%2])
rx1=cx+y_max*math.sin(ballx[changeball%2]+stemp[swap%2]*0.4)
ry1=cy+y_max*math.cos(ballx[changeball%2]+stemp[swap%2]*0.4)
rx2=cx+y_max*math.sin(ballx[changeball%2]+stemp[swap%2]*0.7)
ry2=cy+y_max*math.cos(ballx[changeball%2]+stemp[swap%2]*0.7)
if changeball%2==0:pygame.draw.circle(SURFACE,(255,0,0),(int(cx+25),int(cy+25)),90,2)
else:pygame.draw.circle(SURFACE,(0,84,255),(int(cx+25),int(cy+25)),90,2)
crxy=[[cx,cy],[rx,ry]]
crxy1=[[cx,cy],[rx1,ry1]]
crxy2=[[cx,cy],[rx2,ry2]]
qx=crxy[0][0]
qy=crxy[0][1]
#print(crxy)
#print((changeball+1)%2)
pygame.draw.ellipse(SURFACE,(255,80,0),Rect(crxy2[changeball%2][0],crxy2[changeball%2][1],50,50)) #turn
pygame.draw.ellipse(SURFACE,(255,60,0),Rect(crxy1[changeball%2][0],crxy1[changeball%2][1],50,50)) #turn
pygame.draw.ellipse(SURFACE,(255,0,0),Rect(crxy[changeball%2][0],crxy[changeball%2][1],50,50)) #turn
pygame.draw.ellipse(SURFACE,(0,84,255),Rect(crxy2[(changeball+1)%2][0],crxy2[(changeball+1)%2][1],50,50))
pygame.draw.ellipse(SURFACE,(0,44,255),Rect(crxy1[(changeball+1)%2][0],crxy1[(changeball+1)%2][1],50,50))
pygame.draw.ellipse(SURFACE,(0,4,255),Rect(crxy[(changeball+1)%2][0],crxy[(changeball+1)%2][1],50,50))
if swap%2==0:ballx[changeball%2]+=0.1
else:ballx[changeball%2]-=0.1
key=0
for event in pygame.event.get():
if event.type==QUIT:pygame.quit();sys.exit()
elif event.type==KEYDOWN:key=event.key
if key==K_DOWN or key==K_LEFT or key==K_RIGHT or key==K_UP:
if block[min(blocksize,next+1)][1]-25<=ry<=block[min(blocksize,next+1)][1]+25 and block[min(blocksize,next+1)][0]-45<=rx<=block[min(blocksize,next+1)][0]+45:
if block[min(blocksize,next+1)][1]-10<=ry<=block[min(blocksize,next+1)][1]+10:judgment[0].append([block[min(blocksize,next+1)][0],block[min(blocksize,next+1)][1],0])
elif block[min(blocksize,next+1)][1]+10<=ry:judgment[1].append([block[min(blocksize,next+1)][0],block[min(blocksize,next+1)][1],0])
elif block[min(blocksize,next+1)][1]-10>=ry:judgment[2].append([block[min(blocksize,next+1)][0],block[min(blocksize,next+1)][1],0])
if block[min(blocksize,next+1)][1]-25<=item[min(itemlen,itemnext)][1]<=block[min(blocksize,next+1)][1]+25 and \
block[min(blocksize,next+1)][0]-45<=item[min(itemlen,itemnext)][0]<=block[min(blocksize,next+1)][0]+45:
if block[min(blocksize,next+1)][4]==1:
swap+=1
itemnext+=1
if block[min(blocksize,next+1)][1]-25<=itemspeed[min(itemspeedlen,itemspeednext)][1]<=block[min(blocksize,next+1)][1]+25 and \
block[min(blocksize,next+1)][0]-45<=itemspeed[min(itemspeedlen,itemspeednext)][0]<=block[min(blocksize,next+1)][0]+45:
if block[min(blocksize,next+1)][4]==2:
tickspeed+=5
itemspeednext+=1
if block[min(blocksize,next+1)][1]-25<=itemslow[min(itemslowlen,itemslownext)][1]<=block[min(blocksize,next+1)][1]+25 and \
block[min(blocksize,next+1)][0]-45<=itemslow[min(itemslowlen,itemslownext)][0]<=block[min(blocksize,next+1)][0]+45:
if block[min(blocksize,next+1)][4]==3:
tickspeed-=5
itemslownext+=1
#cx=rx;cy=ry
#print("qp",qp)
if block[min(blocksize,next+1)][4]!=4:
if block[min(blocksize,next+1)][2]==70:
cx=block[min(blocksize,next+1)][0]+10
cy=block[min(blocksize,next+1)][1]
else:
cx=block[min(blocksize,next+1)][0]+25
cy=block[min(blocksize,next+1)][1]
changeball+=1;st=0;st1=0;st2=0
ballx[changeball%2]=ballx[(changeball+1)%2]+changeb[swap%2]
next+=1
else:
qewqr=0
#pygame.mixer.music.stop()
#pygame.mixer.music.load('star.mp3')
#pygame.mixer.music.play(1)
#under=0;cx=200;cy=200;ballx=[3,3];changeball=0;
#st=0;st1=0;st2=0
#next=0
#itemnext=0
#itemspeednext=0
#itemslownext=0
#tickspeed=50
#swap=1
pygame.display.update()
FPSCLOCK.tick(tickspeed)
start()
(이건 메인 코드이다.)
import sys
import random
import pygame
import time
import math
from tkinter import *
from tkinter import messagebox
from pygame.locals import QUIT,KEYDOWN,K_LEFT,K_RIGHT,K_UP,K_DOWN,Rect,MOUSEBUTTONDOWN,K_SPACE
def map(block,item,itemspeed,itemslow,cx,cy,y_max,cm):
if cm==1:
#y_max+=90
#cx+=200
#cy+=200
block+=[[180+i*90,200,90,50,0] for i in range(8)]+[[180+i*90,290,90,50,0] for i in range(7,-1,-1)]+[[200,380,70,50,0]]+[[270+i*90,380,90,50,0] for i in range(7)]
block+=[[810,470,70,50,0]]+[[270+i*90,470,90,50,0] for i in range(5,-1,-1)]+[[200,470,70,50,0]]
block+=[[200,560,70,50,0],[270,560,90,50,0],[360,560,90,50,0],[450,560,70,50,0],[450,470,70,50,0],[360,470,90,50,0],[380,560,90,50,0],[470,560,90,50,0],[560,560,70,50,0]]
block+=[[560,470,70,50,0],[470,470,90,50,0],[470,380,90,50,0],[560,380,70,50,0],[560,290,70,50,0],[470,290,90,50,0]]
block+=[[380,290,90,50,0],[310,290,70,50,0],[310,380,70,50,0],[310,470,70,50,0],[310,560,70,50,0]]
block+=[[380,560,90,50,1],[470,560,90,50,1],[560,560,90,50,1],[650,560,90,50,1],[740,560,90,50,1],[830,560,70,50,1]]
block+=[[830,470,70,50,0],[830,380,70,50,0],[830,290,70,50,0],[830,200,70,50,0]]
block+=[[740,200,90,50,0],[650,200,90,50,0],[560,200,90,50,0],[470,200,90,50,0],[380,200,90,50,0],[290,200,90,50,0]]
for i in range(5):
block.extend([[290,290+i*90,70,50,0],[380,290+i*90,70,50,0],[380,200+i*90,70,50,0],[290,200+i*90,70,50,0],[290,290+i*90,70,50,0]])
block+=[[290,740,90,50,0],[380,740,90,50,0],[470,740,90,50,0],[560,740,70,50,1],[470,740,70,50,1],[560,740,70,50,1]]
block+=[[560,650,70,50,0],[560,560,70,50,0],[560,470,70,50,0],[560,380,70,50,0]]#,[650,380,70,50,4],[470,380,90,50,0]]
block[7][2]=70
block[8][2]=70
block[15][0]+=20
block[15][2]=70
block[23][2]=70
block[3][4]=2
block[66][4]=3
item+=[[830,205,90,50],[380,295,90,50],[650,385,90,50],[200,565,70,50],[500,475,70,50],[570,385,70,50]]
item+=[[400,565,90,50],[490,565,90,50],[580,565,90,50],[670,565,90,50],[760,565,90,50],[850,565,90,50],[580,745,90,50],[490,745,90,50],[580,745,90,50]]
block[7][4]=1
block[13][4]=1
block[21][4]=1
block[24][4]=1
block[32][4]=1
block[42][4]=1
block[44][4]=1
itemspeed+=[[470,205,90,50],[670,205,90,50],[400,205,90,50]]
itemslow+=[[390,205,90,50]]
elif cm==2:
block+=[[180+i*90,200,90,50,0] for i in range(8)]+[[810,290+i*90,70,50,0] for i in range(7)]
block+=[[720,830,70,50,1],[720,740,70,50,1],[630,740,70,50,1],[630,650,70,50,1],[540,650,70,50,1],[540,560,70,50,1],[450,560,70,50,1],[450,470,70,50,1],[360,470,70,50,1]]
block+=[[360,380,90,50,0],[270,380,90,50,0],[270,470,90,50,3],[270,560,90,50,3],[270,650,90,50,0],[270,740,90,50,0],[270,830,90,50,0]]
block+=[[270,740,70,50,0],[360,740,70,50,0],[360,830,70,50,0],[270,830,70,50,0]]
block+=[[270,740,70,50,0],[360,740,70,50,0],[360,830,70,50,0],[270,830,70,50,0]]
block+=[[270,740,70,50,0],[360,740,70,50,0],[360,830,70,50,0],[270,830,70,50,0]]
block[2][4]=2
block[7][2]=70
itemspeed+=[[380,205,90,50]]
item+=[[740,835,90,50],[740,745,90,50],[650,745,90,50],[650,655,90,50],[560,655,90,50],[560,565,90,50],[470,565,90,50],[470,475,90,50],[380,475,90,50]]
itemslow+=[[290,475,90,50],[290,565,90,50]]
elif cm==3:
block+=[[180+i*90,200,90,50,0] for i in range(8)]+[[180+i*90,290,90,50,0] for i in range(7,-1,-1)]
block+=[[180+i*90,380,90,50,0] for i in range(8)]+[[180+i*90,470,90,50,0] for i in range(7,-1,-1)]
block+=[[180+i*90,560,90,50,0] for i in range(8)]+[[180+i*90,650,90,50,0] for i in range(7,-1,-1)]
block+=[[180+i*90,740,90,50,0] for i in range(8)]+[[180+i*90,830,90,50,0] for i in range(7,-1,-1)]
block[7][4]=1
block[15][4]=1
block[23][4]=1
block[31][4]=1
block[39][4]=1
block[47][4]=1
block[55][4]=1
block[63][4]=1
itemspeed+=[[0,0,0,0]]
item+=[[830,205,90,50],[200,295,90,50],[830,385,90,50],[200,475,90,50],[830,565,90,50],[200,655,90,50],[830,745,90,50],[200,835,90,50]]
itemslow+=[[-10,-10,101,10]]
(이건 맵 코드이다.)
이걸 해보고 싶으면 2번째 코드는 map이라고 저장하고 1번째 코드는 A Dance of Fire and Ice라고 저장한다 그리고 pygame을 설치해야 되고 파이썬 파일은 같은 위치에 있어야 한다. 아직 exe파일로 변환은 안 해놔서 나중에 exe파일로 바꾸면 그때 파일로 올리겠다.
그림파일도 저장해야지 오류 없이 사용할 수 있다.
반응형
'개발' 카테고리의 다른 글
2048게임 제작 (5) | 2021.02.28 |
---|---|
디스코드 봇 업데이트 (0) | 2021.02.08 |
디스코드 봇 개발 (1) | 2021.01.25 |
tile게임 만들기 (0) | 2021.01.15 |
오목 게임 만들기 (0) | 2021.01.13 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- BOJ
- 그래프 탐색
- 깊이 우선 탐색
- 자료구조
- KOI
- 느리게 갱신되는 세그먼트 트리
- 트리
- 이분 탐색
- codeforces
- C++
- 그래프 이론
- 트리에서의 다이나믹 프로그래밍
- 선분 교차 판정
- 이분매칭
- 정렬
- 완전 탐색
- discord bot
- 최소 스패닝 트리
- 다이나믹 프로그래밍
- 잡봇
- Python
- 세그먼트 트리
- 구현
- 개발
- 그리디 알고리즘
- 알고리즘
- 수학
- A Dance of Fire and Ice
- 누적 합
- 자료 구조
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함