소개
토요일 실습예제 진행
진행 방법
구글스튜디오의 Build기능을 사용해서 카드메모리게임을 만들어보았습니다.
프롬프트는 진님이 공유해준 프롬프트에 이미지는 이마젠에서 생성한 것을 사용하라는 프름프트만 추가했습니다.
기능: 4x4 카드 맞추기 게임 사용자는 16장의 카드에서 8쌍의 같은 그림을 모두 찾아 게임을 완료할 수 있다.
시나리오 1: 게임이 시작될 때
만약: 게임이 시작되면
그러면: 16장의 카드가 4x4 그리드에 뒷면으로 배치되어야 한다.
그리고: 카드들은 무작위로 섞여 있어야 한다.
시나리오 2: 짝이 맞는 카드를 뒤집었을 때
배경: 2장의 카드가 뒤집혔고, 두 카드의 그림이 같다.
만약: 사용자가 기다리면
그러면: 두 카드는 앞면이 보이는 상태를 유지해야 한다.
그리고: 해당 두 카드는 '짝이 맞춰진' 상태로 표시되어야 한다.
그리고: 시도 횟수가 1 증가해야 한다.
시나리오 3: 짝이 틀린 카드를 뒤집었을 때
배경: 2장의 카드가 뒤집혔고, 두 카드의 그림이 다르다.
만약: 사용자가 기다리면
그러면: 두 카드는 다시 뒷면으로 뒤집혀야 한다.
그리고: 짝이 맞춰진 카드의 수는 변하지 않아야 한다.
그리고: 시도 횟수가 1 증가해야 한다.
시나리오 4: 게임을 완료했을 때
배경: 모든 8쌍의 카드를 성공적으로 찾았다.
만약: 마지막 짝이 맞춰지면
그러면: 게임이 종료되었음을 알리는 승리 메시지가 표시되어야 한다.
그리고: 총 시도 횟수가 메시지에 포함되어야 한다.
핵심 데이터 구조
객체 Card: { id, imageId, isFlipped, isMatched }
배열 gameCards: 16개의 Card 객체
배열 flippedCards: 현재 뒤집힌 Card 객체 (최대 2개)
변수 moveCount: 시도 횟수
변수 isGameWon: 게임 승리 여부
함수: 게임_초기화()
gameCards 배열을 비웁니다.
8쌍의 Card 객체를 생성합니다.
Fisher-Yates 알고리즘으로 gameCards 배열을 섞습니다.
flippedCards를 비우고, moveCount를 0, isGameWon을 false로 초기화합니다.
renderGame() 함수를 호출하여 화면을 그립니다.
함수: 카드_클릭_처리(cardId)
cardId에 해당하는 카드를 gameCards에서 찾습니다.
만약 카드가 이미 뒤집혔거나(isFlipped) 짝이 맞춰졌거나(isMatched), 또는 이미 2장이 뒤집혔다면 함수를 즉시 종료합니다.
클릭한 카드의 isFlipped를 true로 변경하고, flippedCards 배열에 추가합니다.
renderGame()을 호출합니다.
만약 flippedCards의 길이가 2이면:
a. moveCount를 1 증가시킵니다.
b. 1초 대기 후 checkMatch() 함수를 호출합니다.
함수: 짝_확인()
flippedCards에 있는 2개의 카드를 가져옵니다.
만약 두 카드의 imageId가 같으면:
a. 두 카드의 isMatched를 true로 변경합니다.
b. 모든 카드의 isMatched가 true인지 확인하여, 게임이 종료되었는지 체크합니다.
c. 만약 게임이 끝났다면, isGameWon을 true로 설정하고 승리 메시지를 표시합니다.
만약 두 카드의 imageId가 다르면:
a. 두 카드의 isFlipped를 false로 변경합니다.
flippedCards 배열을 비웁니다.
renderGame()을 호출합니다.
그리고 이마젠을 사용해서 이미지를 생성하고, 그 이미지를 사용해줘나노바나나로 생성한 이미지를 사용하지 않고 이마젠이란 모델을 사용했는데, 별도의 주제를 주지 않았더니 풍경이미지 를 생성해주었습니다. 혹시 명확한 주제를 주면 그걸로 나올 것으로 생각했는데, 전혀 적용되지 않았습니다.
결과와 배운 점
작년에 파이선코드로 만들때 시간이 많이 걸렸던 경험이 있었는데, 지금은 프롬프트 하나로 배포까지 된다는 걸 보고 AI의 발전속도에 새삼 놀라고 있습니다.
도움 받은 글 (옵션)
진여진님의 프롬프트 (본문내용참조)