-
Notifications
You must be signed in to change notification settings - Fork 4
[회의록] 2021.04.17 기존 코드 분석
Hyeonyi Ju edited this page May 1, 2021
·
1 revision
# Erase line
erase_count = 0
rainbow_count = 0
matrix_contents = []
combo_value = 0
for j in range(board_y+1):
is_full = True
for i in range(board_x):
if matrix[i][j] == 0 or matrix[i][j] == 9 : #빈 공간이거나, 장애물블록
is_full = False
if is_full: # 한 줄 꽉 찼을 때
erase_count += 1
k = j
combo_value += 1
//is full을 세분화 필요
//위에 코드 해결하면 됨
#####(1) 블럭이 다른 블록에 닿여도 이동이 가능함 => 다음 블록 딜레이 발생
# Set speed
if not game_over:
keys_pressed = pygame.key.get_pressed()
if keys_pressed[K_DOWN]:
pygame.time.set_timer(pygame.USEREVENT, framerate) #프레임 시간만큼 빠르게 소프트드롭
else:
pygame.time.set_timer(pygame.USEREVENT, game_speed)
//드롭 후 timer 조절로 해결 가능해보임 또는 framerate나 game_speed
# Set speed
if not game_over:
keys_pressed = pygame.key.get_pressed()
if keys_pressed[K_DOWN]:
pygame.time.set_timer(pygame.USEREVENT, framerate) #프레임 시간만큼 빠르게 소프트드롭
else:
pygame.time.set_timer(pygame.USEREVENT, game_speed)
// Hard drop 참고해서 해결 필요
# Hard drop
elif event.key == K_SPACE:
ui_variables.fall_sound.play()
ui_variables.drop_sound.play()
while not is_bottom(dx, dy, mino, rotation, matrix):
dy += 1
hard_drop = True
pygame.time.set_timer(pygame.USEREVENT, framerate)
draw_mino(dx, dy, mino, rotation, matrix)
screen.fill(ui_variables.real_white)
draw_image(screen, gamebackground_image , board_width * 0.5, board_height * 0.5, board_width, board_height) #(window, 이미지주소, x좌표, y좌표, 너비, 높이)
draw_board(next_mino1, next_mino2, hold_mino, score, level, goal)
pygame.display.update()
elif event.key == K_j :
framerate = int(framerate-speed_change)
print(framerate)
# Game over screen
부분에서 이름을 키보드 방향키로 입력 받음 마우스클릭 이벤트 입력받는거랑 키보드 입력 받는거랑 뒤죽박죽인 느낌인데, 어쩌다가 한번씩 키보드 방향키로 이름 입력 성공함 전체적으로 수정 필요 밑 코드는 이름 입력 부분 일부!
elif event.type == KEYDOWN:
if event.key == K_RETURN:
ui_variables.click_sound.play()
#1p점수만 저장함
outfile = open('leaderboard.txt', 'a')
outfile.write(chr(name[0]) + chr(name[1]) + chr(name[2]) + ' ' + str(score) + '\n')
outfile.close()
game_over = False
pygame.time.set_timer(pygame.USEREVENT, 1) #0.001초
#name은 3글자로 name_locationd은 0~2, name[name_location]은 영어 아스키코드로 65~90.
elif event.key == K_RIGHT:
if name_location != 2:
name_location += 1
else:
name_location = 0
pygame.time.set_timer(pygame.USEREVENT, 1) #0.001초
elif event.key == K_LEFT:
if name_location != 0:
name_location -= 1
else:
name_location = 2
pygame.time.set_timer(pygame.USEREVENT, 1)
elif event.key == K_UP:
ui_variables.click_sound.play()
if name[name_location] != 90:
name[name_location] += 1
else:
name[name_location] = 65
pygame.time.set_timer(pygame.USEREVENT, 1)
elif event.key == K_DOWN:
ui_variables.click_sound.play()
if name[name_location] != 65:
name[name_location] -= 1
else:
name[name_location] = 90
pygame.time.set_timer(pygame.USEREVENT, 1)
game_over = True
를 중간에 어디 넣어줘야 할 듯
# Create new mino
else:
if hard_drop or bottom_count == 6:
hard_drop = False
bottom_count = 0
draw_mino(dx, dy, mino, rotation, matrix)
if is_stackable(next_mino1, matrix):
mino = next_mino1
# next_mino1 = next_mino2
next_mino1 = randint(1, 7)
dx, dy = 3, 0
rotation = 0
hold = False
score += 10 * level
else: # 더이상 쌓을 수 없으면 게임오버
pvp = True
game_status = 'pvp'
if score >= score_2P :
draw_image(screen, gameover_image,board_width * 0.15, board_height * 0.5, int(board_width * 0.25), int(board_height * 0.45)) #(window, 이미지주소, x좌표, y좌표, 너비, 높이)
else :
ui_variables.GameOver_sound.play()
draw_image(screen,pvp_lose_image,board_width * 0.15, board_height * 0.5, int(board_width * 0.25), int(board_height * 0.6)) #(window, 이미지주소, x좌표, y좌표, 너비, 높이)
draw_image(screen,pvp_win_image,board_width * 0.6, board_height * 0.5, int(board_width * 0.25), int(board_height * 0.55)) #(window, 이미지주소, x좌표, y좌표, 너비, 높이)
pvp = False
pygame.mixer.music.stop()
if game_status == 'start':
start = True
pygame.mixer.music.play(-1)
if game_status == 'pvp':
pvp = True
pygame.mixer.music.play(-1)
ui_variables.click_sound.play()
game_over = False
pause = False
else:
bottom_count += 1
//(3)을 해결하면 될 듯
//콤보처럼 이미지 보이게 추가 아래는 콤보 이미지 보여주고 소리 내는 코드인데 1~10 콤보 마다 이미지 지정까지 되어있어서 레벨변수로 바꿔주고, 레벨 이미지, 레벨 사운드만 넣어주면 될 듯
for i in range(1, 11): #10가지의 콤보 이미지 존재. 각 숫자에 해당하는 이미지 불러옴
combos.append(pygame.image.load("assets/Combo/" + str(i) + "combo.png"))
large_combos.append(pygame.transform.smoothscale(combos[i - 1], (150, 200))) #콤보이미지를 특정 크기로 불러옴, 150=가로크기, 200=세로크기#
combos_sound = []
for i in range(1, 10): #1-9까지 콤보사운드 존재. 각 숫자에 해당하는 음악 불러옴
combos_sound.append(pygame.mixer.Sound("assets/sounds/SFX_" + str(i + 2) + "Combo.wav"))
이런식으로 ㅁ ㅁ ㅁ ㅁ
원래한줄은 aaaaaaaaaa
//상대에서 장애물 블록을 채우는 부분인데 If문 안에 수정해서 가능할 듯
while attack_line >= 1 : #2p에게 공격 보내기
for i in range(board_x):
if matrix_2P[i][board_y-attack_point] == 0 : #비어있는 공간을
matrix_2P[i][board_y-attack_point] = 9 #모두 장애물 블록으로 채움
attack_line -= 1
attack_point += 1
while attack_line_2P >= 1 : #1p에게 공격 보내기
for i in range(board_x):
if matrix[i][board_y-attack_point_2P] == 0 : #비어있는 공간을
matrix[i][board_y-attack_point_2P] = 9 #모두 장애물 블록으로 채움
attack_line_2P -= 1
attack_point_2P += 1
클래식: 가로줄삭제, 세로줄삭제, 속도 느리게, 빠르게
타임어택: 가로줄삭제, 세로줄삭제, 속도 느리게, 빠르게, 시간 증가
PVP: 가로줄삭제, 세로줄삭제, 속도 느리게, 빠르게, 상대 다음 블럭 블라인드, 키보드반대로
=>2,3은 자료조사 후 최종 판단
- 맵모드 추가 머스타드팀 참고 https://github.com/CSID-DGU/2019-2-OSSPC-mustard-4
- 오래 안깨지면 까만색 블럭으로 점점 바뀌기 (안깨지는 블록)
- 두번 깨야하는 블럭 추가
- 소개
- 라이센스: MIT
- SWOT 분석(장점: 다양한 모드, 꼼꼼한 주석, pygame, …, 단점: 버그, 아이템이 없어서 단조롭다, ...)
- 선정 이유: 기존 테트리스 게임에 비해 다양한 모드가 있어 다양하게 즐길 수 있는 테트리스 게임이다. 하지만 아이템이 없어서 단조롭고 실제 플레이 했을 때 예상보다 즐길 수 있는 요소들이 적어서 아쉬웠다. 여기에 다양한 아이템과 모드를 더 추가하고 버그를 개선해 이 오픈소스가 가지고 있는 장점을 극대화해 재미있게 즐길 수 있는 테트리스 게임으로 보완하고자 한다.
- 위의 개발 사항 선정 내용
- 변경 후 화면 구성
- 기술 조사
- 라이선스 : MIT
- 개발환경(Ubuntu, Python 3.8, VS Code)
- 기대효과: 오픈소스를 활용~~, 협업방식~~
- 최종 결과물: 프로젝트, 깃헙 readme, 발표자료, 영상시연,
- 역할분담
- 타임라인
- 프로젝트 시스템구조
다음 회의 까지(수요일 저녁 8시)
- 자동 추천 기능 자료조사 =>현이
- 다른 컴퓨터로 2P 자료조사 =>현하
- 기존 프로젝트 분석 =>채림
다음 회의때 의논 사항
- 역할분담
- 타임라인
이후 할 일
- 예상 결과물 사진
- 프로젝트 시스템구조
- 발표자료, 연습