SlideShare a Scribd company logo
1 of 42
Download to read offline
오순도순 병아리 키우기
밀’KISS’
조원들 역할
황용하 : 코드 작성, GUI 설계, 효과음 ,배
경음악, 사진편집
최효림 : 그림 그리기, PPT 작성, 효과음,
사진편집
홍지현 : 아이디어, 배경음악, 사진편집
김가영 : 아이디어, 효과음, 사진 편집
게임 방법
1. 여러 알 중에서 원하는 알을 선택한다.
2. 이름을 지어주고, 배경음악을 선택한다.
3. 게임이 시작된다.
4. 쓰담쓰담, 목욕시키기 등을 하면 애정
도, 포만감 등이 올라간다.
5. 일정한 때가 되면 밤/낮이 바뀐다.
6. 상태가 모두 만족되면 진화한다.
7. 진화 후 다 키우면 게임은 끝난다.
코드 설명
Opening Function
[handles.im0,~,handles.alpha0]=imread('0.png');
:alpha를 이용해서 투명처리 된 그림을 불러온다.
handles.im800=imread('800.jpg');
:배경 그림들을 불러온다.
axes(handles.axes20);
axis off;
:그림을 불러 올 axes의 x축과 y축 값들을 지워준다.
Opening Function
axes(handles.axes2);
set(handles.axes2,'Position',[63 20 17 5]);
:원하는 위치에 axes2를 불러온다.
[s4, Fs]=audioread(‘꼬끼오.WAV');
handles.a3=audioplayer(s4,Fs);
:’꼬끼오.wav’라는 오디오 파일을 불러오고,
handles.a3를 사용하면 오디오가 재생된다.
pushbutton12
axes(handles.axes12);
a10=imshow(handles.im10);
set(a10,'AlphaData',handles.alpha10);
axis off;
:axes12를 불러오고, a10에 불러온 그
림을 axes12에 투명색으로 한 부분이
투명하게 뜨도록 한다.
그리고 x축, y축의 값을 지워준다.
axes(handles.axes1);
axis([0 100 0 100]);
plot([0 0 100 100 0],[0 100 100 0
0],'k');
:axes1를 불러온 후, 범위를 정해준다.
그리고 x좌표와 y좌표를 지정해서 검
정색 테두리를 만들어준다.
set(handles.pushbutton6,'Enable','off');
set(handles.pushbutton7,'Enable','off');
set(handles.pushbutton8,'Enable','off');
set(handles.pushbutton9,'Enable','off');
:지금 사용하면 안 되는 버튼들을 누르
지 못하게 만든다.
set(handles.pushbutton12,'Visible','off');
set(handles.text22,'Visible','off');
axes(handles.axes12);
cla;
: 위의 방식을 이용해서 3가지의
pushbutton과 알그림이 있는 axes와 텍스
트가 보이지 않게 한다.
set(handles.text15,'String',‘알 부화중...');
axes(handles.axes14);
a0=imshow(handles.im0);
set(a0,'AlphaData',handles.alpha0);
pause(0.2);
:위에 ‘알 부화중…’이라는 문구를 뜨게하
고 투명인 부분이 유지되도록 axes에 0.2
초 간격을 두며 다른 그림을 띄워서 마치
동영상처럼 보이게 한다.
axes(handles.axes15);
a00=imshow(handles.im00);
set(a00,'AlphaData',handles.alpha00);
set(handles.uipanel2,'Visible','on');
set(handles.text15,'String',' 병아리 탄생 !');
stop(handles.a5);
:uipanel2을 띄우고 투명처리되게 그림을
불러오고 위에 text15에 ‘병아리 탄생’이라
는 문구를 넣어준다.
a=get(handles.edit1,'String');
set(handles.text17,'String',a);
set(handles.uipanel2,'Visible','off');
axes(handles.axes15); cla; pause(1);
set(handles.uipanel2,'Visible','off');
pause(1);
:오른쪽 위 text에 사용자로부터 받은
이름값을 string으로 지정해주고 axes
등을 보이지 않게 한다.
set(handles.text2,'Visible','on');
set(handles.uibuttongroup3,'Visible','on');
set(handles.pushbutton3,'Visible','on');
set(handles.pushbutton2,'Visible','on');
set(handles.text15,'String',‘배경음악을 들
을 수 있습니다. 틀어주세요!');
:왼쪽 배경음악의 버튼그룹을 활성화 시
켜서 선택 할 수 있게 하고, 위의 text에
배경음악을 틀어달라는 문구를 띄운다.
function music(handles)
disp(handles.shape);
switch handles.shape
case 1
stop(handles.a);
stop(handles.a1);
stop(handles.a2);
play(handles.a); end
:music함수를 만들고 switch를 이용해서 각
각 맞는 case에 들어가 그에 해당하는 노래를
실행한다.
if start==1
‘자 곧 시작합니다!'
‘이제부터 저를 키워주세요!.'
start=start+1; end
stop(handles.a);
stop(handles.a1);
stop(handles.a2);
guidata(hObject,handles);
: if 문을 이용해서 위의 시키는 것을 마치면 배경과
병아리를 불러오고, 시작하기 버튼을 보이게 한다.
위의 text에는 문구를 시간간격을 두고 띄운다.
:if문이 끝나고 노래를 모두 끈다.
: guidata 값을 이용해서 위의 값을 저장한다.
axes(handles.axes7);
axis([0 100 0 100]);
handles.b=patch([0 0 30 30 0],[0 100 100
0 0],'b');
axis off;
:앞에서 한 듯이 set을 이용해서 버튼들을
활성화 시키고, 텍스트 등을 보이게 한다.
그리고 axes를 불러와서 patch를 이용해 현
재 상태에 맞는 수치를 그래프로 볼 수 있게
하였다.
handles.x=randi([29 92]);
x=handles.po(1);
a=max(abs(x-handles.x));
aa=floor(a/2);
handles.xx=linspace(x, handles.x, aa);
handles.lexx=length(handles.xx);
stop(handles.xy);
start(handles.move);
guidata(hfigure, handles);
:랜덤 값에서 현재 위치를 뺀 이동거리를 2로
나누어주고, 그 값을 linspace를 통해 일정구
간으로 나누어준다. 그리고 그 길이만큼 x축
으로만 이동하게 한다.
(랜덤 수 까지만 가므로, 29부터 92이외의 좌
표에는 갈 수 없다.)
if handles.background>=25
stop(handles.xy);
stop(handles.move);
:pushbutton6과 7을 누를때마다
background가 1씩 증가하게 한다. 그리고 If
문을 이용해서 background 값, 즉 버튼이
총 25이상 눌리게 되면 모든 것은 멈추고 밤
이된다.
(밤이 되는 것은 앞에서 처럼 일정한 시간
간격을 두고 그림을 불러온다.)
handles.background=handles.background+1;
if handles.apm==1||handles.apm==0
if handles.background>=25
handles.set=1;
end
end
if handles.set==1
if handles.apm==1
if handles.background>=25
stop(handles.xy);
stop(handles.move);
:행동버튼을 한번 누를 때마다 background가 1씩 증
가하였다. Handles.apm은 밤과 낮을 구분하는 것이
고, handles.set은 밤/낮이 바뀌는 함수가 실행 되야
하는지, 행동에 대한 함수가 실행 되야 하는지 판단하
는 것이다. 즉, set과 apm이 1이고, background가 25
이상이면 행동이 멈추고 밤과 낮이 바뀌어야 한다.
c=randi(3);
c1=randi(3);
Else if c==2
set(handles.text15,'String',‘병아리가 먹기 싫
다네요!');
if c4==1
axes(handles.axes2);
a501=imshow(handles.im501);
set(a501,'AlphaData',handles.alpha501);
:맨 처음에 랜덤 값을 정해주고, 랜덤 중 어떤
수가 나오면 병아리가 먹기 싫어한다는 문구
와 다른 표정이 뜨게 한다.
handles.g2=handles.g2+1;
axes(handles.axes7);
set(handles.b,'Xdata',[0 0 handles.g2
handles.g2 0]);
set(handles.text12,'String',handles.g2);
:axes2는 포만감 그래프 창이고, handles.g2
는 포만감 수치이다. 버튼이 눌러질 때마다
랜덤 값에 따라 포만감 수치는 올라가고, 애
정도는 떨어지고 그에 맞는 값을 patch와
text에 적용시켜준다.
아침에서 밤이 된 것과 같이 조건이 만
족하면 밤에서 아침이 된다.
If
handles.g1>=100&&handles.g2>=100&&hand
les.g3==4&&handles.g4==4&&handles.lv==2
handles.lv=3
stop(handles.xy);
stop(handles.move);
:If문을 이용해서 애정도,포만감,깨끗함,튼튼함
이 모두 만족하면 다음단계로 넘어가게 된다.
그 과정에서 axes에 새로운 이미지를 불러오고
상태를 처음 상태처럼 초기화 값을 넣어준다.
느낌/생각
타이머 함수를 쓸때 gui는 하나의 함수
를
읽고 있을 때 다른 함수가 실행되면 오
류로 간주 한다는 것을 알게 되었다.
그리고 gui 내에서 만들어진 함수가 아
닌 직접 만든 함수를 gui데이터에 저장
시키기 위해 guidata(hObject,handles);
를 써야 된다는 것을 알게 되었다.
axes(handles.axes); 에 따라 axes 좌표가
인식되어 그려지는 것을 알게 되었고 set
을 통해 uicontrol을 할 수 있게 되었다.
또한 병아리와 닭, 배경 그림을 종이에 하
나하나 그렸다. 그 그림들의 배경을 투명
으로 편집에서 불러오면 검정이 되는 것
을 해결하고 싶어서 찾아보다가 alpha라
는 것을 이용하면 투명이 유지된다는 것
을 알게 되었다.
구글에 나오지 않는 닭 키우기를 직접 구
상하고 만드는 과정에서 매트랩 속의 gui
에 대해 전문적인 지식을 쌓을 수 있었다.
어렵게 다가간 만큼 더 심도 있게 배울 수
있는 계기가 되었다.

More Related Content

Viewers also liked (6)

Timeline
TimelineTimeline
Timeline
 
Boruch_Nicholas_PPP
Boruch_Nicholas_PPPBoruch_Nicholas_PPP
Boruch_Nicholas_PPP
 
DH 199 Social Media Analytics
DH 199 Social Media AnalyticsDH 199 Social Media Analytics
DH 199 Social Media Analytics
 
Gsm technology
Gsm technologyGsm technology
Gsm technology
 
Timeline
TimelineTimeline
Timeline
 
Cesar Soto MAR. 2016
Cesar Soto MAR. 2016Cesar Soto MAR. 2016
Cesar Soto MAR. 2016
 

오순도순 병아리 GUI