Pharo6.Bloc 1개로 게임이 하나 떨어졌어요.
Pharo에서 UI 프레임이 계속 나타납니다."Smalltalk 하면 MVC인데 요즘 UI가 지저분하다"는 사람들은 옆에 있어도 새로운 UI 프레임을 따라잡기가 힘들다.피곤할 때 사무처리성 코드를 쓰는 것이 고통스러워서 빠뜨린 게임을 하면서 즐겁게 공부했다.
내가 즐겁게 만들 수 있는 물건이니까 별거 아니야.어떤 보석이 하나하나 위에서 떨어지고 용발어 하나로 3개 이상 모으면 사라지고 연쇄되는 것이 바로 낙격풍의 간단한 물건이다.결국 학급 수는 5개에 불과했다.퉤.
한 보석이 떨어진 게임의 포장에 적힌 대사에 영감을 받아 스타폴 나이트(Starfall Night)라는 이름을 지었다.
설치하다.
소스가 github 위에서 굴러가고 있다.Baseline Of도 없습니다.미안해. 게으름 피웠어.그나저나 Baseline Of를 썼는데 Metacello에서 읽을 수가 없어요. 누가 도와주세요.)
https://github.com/tomooda/StarfallNight/tree/master/repository/StarfallNight
케이스에 git clone으로 이걸 해요.
git clone https://github.com/tomooda/StarfallNight.git
그런 다음 Pharo 6.1에서 읽습니다.하지만 먼저 Bloc을 설치해야 합니다.Playground에서 Doit 아래의 코드 슬라이스를 사용하십시오. 예를 들어 본가의 README에서.(또는 Doit보다 Inspect it가 완성되면 이해하기 쉬우므로 추천)Metacello new
baseline: 'Bloc';
repository: 'github://pharo-graphics/Bloc:pharo6.1/src';
load: #core
그런 다음 StarfallNight를 읽습니다.Monticello Browser를 여십시오."+Repository"버튼을 누르면 Repository type에 대한 질문이 나타납니다. tonel://를 선택하십시오.이렇게 되면 가져온 원본 디렉터리를 선택해야 합니다. 따라서 아까 git clone 디렉터리의 Starfall Night/repository 디렉터리를 선택하십시오.이렇게 하면 잘 읽을 수 있을 거예요.어쨌든 플레이 그라운드에서
StarfallNightModel example inspect
수행하십시오.그래서 검사기가 열립니다. 이것이 바로 게임 화면입니다.무슨 버튼을 누르면 별이 떨어지는 밤이 시작된다.보석을 좌우로 이동시켜 위에서 보석을 회전시키고 아래에서 보석을 떨어뜨린다.그리고 말이야, 알았지?그 게임이 빠진 간략한 버전이야.
Bloc
Bloc은 아직 개발 중이며 Pharo의 새로운 UI 프레임워크입니다.Sparta를 사용하니 대단한 퍼포먼스를 할 수 있는 렌더링 엔진을 사용한 것 같다.
Bloc은 github에서 개발 중입니다.
https://github.com/pharo-graphics/Bloc
강좌도 준비됐습니다.잘 모르겠지만 카드 뒤집기 게임인 것 같아요.비록 훑어보았을 뿐이지만 그래도 매우 유용하다.추천
전체 이미지
어쨌든 Bloc에서는 모델과 뷰가 분리되어 있습니다.모델에서 Starfall Night의 규칙을 코드로 기술합니다.뷰는 Bloc 요소인 Blelement의 하위 클래스로 정의되고 drawSpartaCanvasOn: 방법으로 그려집니다.아마도 이 방면의 느낌은 Morph와 매우 비슷할 것이다.모델과 뷰의 공동 작업에는 Announcement 메커니즘이 사용됩니다.이번에는 모형을 바꾸면 뷰만 알려주지만, 화면의 의미에서 판과 떨어진 보석과 다음 보석의 각각의 변경에 관한 전용 애너언스먼트를 제작했다.
일단 게임 모형을 써볼게요.
StarfallNightModel browse
이렇게 하면 모델의 원본을 읽을 수 있다.물론 일반적으로 시스템 브라우저에서 Starfall Night Model을 찾아 선택하는 것도 마찬가지다.모든 액션스 프로토콜의 방법을 보면 무슨 게임인지 알 수 있다.기본적으로 고정된 보석을 떨어뜨린 판면은 실례 변수인 콜럼스에 저장되며, 현재 떨어진 보석은 3조의current Jewels, 다음에 떨어진 보석은 3조의next Jewels에 저장된다.떨어진 보석의 맨 밑에 있는 보석 x 좌표는column이고 y 좌표는row이다.
액션스 프로토콜에서 보듯이 보석을 왼쪽으로 이동하는 레프트 방법, 오른쪽으로 이동하는 라이트 방법, 바닥에 떨어지는 다운 방법, 회전하는rotate로 게임을 조작한다.
또 하나의fall방법은 한 프레임 한 프레임 떨어지면서 보석이 땅에 떨어진 후tateyokoname으로 제거 처리하고 보석이 사라진 부분을 수축한 다음 다음 다음 보석next를 꺼내는 등이다.응, 다 간단해.
그리고 낙하 게임이기 때문에 타이머 장치로 일정 속도로 낙하 처리를 해야 한다.이것은 onStep 방법으로 Blanimation이라는 반을 사용하고 타이머 장치로 일정한 간격을 두고 두드린다.바로 게임스타트입니다.이는 stepping에서 간격 타이머를 쉽게 사용하는 Morphic과 다릅니다.
gameStart
self initialize.
animation
ifNil: [ animation := BlAnimation new
duration: 300 milliSeconds;
beInfinite;
onFinishedDo: [ self onStep ] ].
animation isRunning
ifFalse: [ animation start ]
참고로 printOn: 고정된 보석의 판면을 문자로 표시하기 때문에 표시되지 않아도 지령선에 따라 놀 수 있습니다.한번 보여주세요.
어쨌든 Blelement의 하위 클래스를 만들고 모형을 참조하면서 그림을 drawSparta Canvas On으로 그린다.그리고 키보드 이벤트 처리.
먼저 모델과의 콜라보레이션, 이런 느낌.
starfallNight: aStarfallNightModel
starfallNight := aStarfallNightModel.
self
addEventHandler:
(BlEventHandler
on: BlKeystrokeEvent
do: [ :anEvent | self onKeystroke: anEvent ]).
self requestFocus.
starfallNight announcer
when: StarfallNightBoardUpdatedAnnouncement
send: #onBoardChange
to: self.
starfallNight announcer
when: StarfallNightNextUpdatedAnnouncement
send: #onNextChange
to: self.
starfallNight announcer
when: StarfallNightJewelsUpdatedAnnouncement
send: #onJewelsChange
to: self
그녀에게 리퀘스트 포커스를 주지 않으면 이벤트를 찾지 못하고 빠져든다.다들 조심하세요.그리고 그림을 그리는 것, 어수선하게 쓰여진 코드지만 이젠 부끄러워할 나이도 아니니 햇볕을 쬐자.이런 느낌.
drawOnSpartaCanvas: aCanvas
aCanvas fill
paint: self backgroundPaint;
path: self boundsInLocal;
draw.
1 to: starfallNight numberOfRows do: [ :r |
1 to: starfallNight numberOfColumns do: [ :c |
| rect |
rect := aCanvas shape
roundedRectangle: (((c - 1) * 40) @ ((starfallNight numberOfRows - r) * 40) extent: 39 @ 39)
radii: (BlCornerRadii radius: 10).
aCanvas fill
paint:
((starfallNight at: r @ c)
ifNotNil: [ :jewelIndex | self colorAt: jewelIndex ]
ifNil: [ Color black ]);
path: rect;
draw ] ].
starfallNight currentJewels
ifNotNil: [ 1 to: 3 do: [ :index |
| r c |
r := starfallNight row + index - 1.
c := starfallNight column.
(r between: 1 and: starfallNight numberOfRows)
ifTrue: [ | rect |
rect := aCanvas shape
roundedRectangle: (((c - 1) * 40) @ ((starfallNight numberOfRows - r) * 40) extent: 39 @ 39)
radii: (BlCornerRadii radius: 10).
aCanvas fill
paint: (self colorAt: (starfallNight currentJewels at: index));
path: rect;
draw ] ] ].
starfallNight nextJewels
ifNotNil: [ 1 to: 3 do: [ :index |
| rect |
rect := aCanvas shape
roundedRectangle: ((6 * 40 + 10) @ (160 - (index * 40)) extent: 39 @ 39)
radii: (BlCornerRadii radius: 10).
aCanvas fill
paint: (self colorAt: (starfallNight nextJewels at: index));
path: rect;
draw ] ]
스파르타의 화포는 그림의 종류에 따라 화포에서 화가를 꺼내 다양한 설정을 한다.draw는 바로 이런 구조로 우리에게 그림을 그려준다.Pharo 사람들은 빌딩을 정말 좋아하는 것 같아요.열이 좀 있어요.기타
다른 반은 모두 Announcement이니 상관없다.부류가 될 뿐이야.
그리고 모델 반에서 example 방법을 써서 작동하는데 나 같은 로봇은 어느새 댓글에 코드를 쓰려고 했지만 지금은 Praga를 사용하고 있다.
example
<script: 'StarfallNightModel example'>
| model element space |
model := StarfallNightModel new.
element := StarfallNightElement new.
element starfallNight: model.
^ element
이 인스펙트를 하면 몰더블 인스펙터의 힘으로 라이브 태그를 게임 화면으로 사용할 수 있다.Raw 태그를 선택한 경우 일반 검사자로 사용할 수도 있습니다.변명하다.총결산
그러니 별이 지는 밤에 시간을 잊고 스몰톡을 즐겨라.장난꾸러기.
Reference
이 문제에 관하여(Pharo6.Bloc 1개로 게임이 하나 떨어졌어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tomooda/items/1b9f9cba95f5ec5b3f56텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)