PowerPoint 프레젠테이션

Size: px
Start display at page:

Download "PowerPoint 프레젠테이션"

Transcription

1 퍼즐게임만들기

2 레 벨 퍼즐게임만들기 구 현 디 자 인 하 기 블 록 연 기획하기 쇄 2

3 레 벨 퍼즐게임만들기 구 현 디 자 인 하 기 블 록 연 기획하기 쇄 3

4 * 퍼즐게임기획하기 기획단계 게임주제 아이디어정리 기획서작성 사양서작성 연달아있어도사라지지않는 3 매치퍼즐 ex) 헥사 종이에연필로마구잡이식으로써본다 규칙, 캐릭터등 게임실행화면각요소별로만들기 4

5 * 퍼즐게임기획 - 규칙 기획단계 다음과같은규칙을가지고게임을제작하도록한다. - 모아야할블록수는세개 - 사라질때까지시간이걸린다 ( 투명도조절을해서사라지는것을표현 ) - 점수는연쇄했을때더높은점수를얻을수있도록한다 - 블록은언제든지자유롭게교체할수있다 - 연속교체불붙이기 ( 블록이사라지기전에연속적으로엮어서사라지도록 ) - 사라진블록은위에서보충 - 게임종료규칙을만든다. ( 제한시간, 10턴이내에 1만점획득등 ) 5

6 * 퍼즐게임기획서 기획단계 6

7 * 퍼즐게임사양서 기획단계 7

8 * 게임에필요한데이터정리 기획단계 8

9 레 벨 퍼즐게임만들기 구 현 디 자 인 하 기 블 록 연 기획하기 쇄 9

10 * 프로그램작성순서 구현단계 1. 블록을바닥에채운다. 2. 블록을마우스로잡는다. 3. 잡은블록을상하좌우로교체한다. 4. 가로세로같은색세개가모이면블록에불을붙여사라지게한다. 5. 사라진만큼블록을위에서채운다. 6. 점수가더해지도록한다. 7. 레벨디자인 ( 난이도조정 ) 을한다. 8. 시퀀스를연결한다. 10

11 1. 블록을바닥에채운다. 구현단계 - 프로젝트만들기 1 [File] [New Project] 로원하는위치에 Plattach 폴더를만들고지정한다. 2 유니티에디터가재시작된다. 3 [GameObject] [Create Other] [Directional Light] 로조명을생성한다. 4 [File] [Save Scene] 를실행하고 GameScene 으로저장한다. - 필요한스크립트준비 1 [GameObject] [Create Empty] 을선택하고 GameRoot 로이름을변경한다. 2 [GameObject] [Create Other] [Cube] 를선택하고 Block 으로이름을변경한다. 3 [Assets] [Create] [C# Script] 로 SceneControl, BlockRoot. BlockControl 스크립트를만든다. 4 [GameRoot] 에 SceneControl 스크립트와 BlockRoot 스크립트를컴포넌트로등록한다. 5 Block에 BlockControl 스크립트를컴포넌트로등록한다. 6 Block을 Project 브라우저로드래그앤드롭하여프리팹으로만든다. 7 Project 브라우저의 Block을 BlockPrefab 으로이름변경한다. 8 씬에있는 BlockPrefab을삭제한다 (Hierarchy에서삭제 ). 11

12 1. 블록을바닥에채운다. 구현단계 * 블록나열하기 BlockControl.cs // 블록에관한정보를다룬다. public class Block { public static float COLLISION_SIZE = 1.0f; // 블록의충돌크기. public static float VANISH_TIME = 3.0f; // 불붙고사라질때까지의시 간. public struct iposition { // 그리드에서의좌표를나타내는구조체. public int x; // X 좌표. public int y; // Y 좌표. public enum COLOR { // 블록색상. NONE = -1, // 색지정없음. PINK = 0, // 분홍색. BLUE, // 파란색. YELLOW, // 노란색. GREEN, // 녹색. MAGENTA, // 마젠타. ORANGE, // 주황색. GRAY, // 그레이. NUM, // 컬러가몇종류인지나타낸다 (=7). FIRST = PINK, // 초기컬러 ( 분홍색 ). LAST = ORANGE, // 최종컬러 ( 주황색 ). NORMAL_COLOR_NUM = GRAY.; // 보통컬러 ( 회색이외의색 ) 의수. public enum DIR4 { // 상하좌우네방향. NONE = -1, // 방향지정없음. RIGHT, // 우. LEFT, // 좌. UP, // 상. DOWN, // 하. NUM, // 방향이몇종류있는지나타낸다 (=4). ; public static int BLOCK_NUM_X = 9; // 블록을배치할수있는 X 방향최대수. public static int BLOCK_NUM_Y = 9; // 블록을배치할수있는 Y 방향최대수. 12

13 1. 블록을바닥에채운다. 구현단계 * 블록나열하기 BlockControl.cs public class BlockControl : MonoBehaviour { public Block.COLOR color = (Block.COLOR); // 블록색. public BlockRoot block_root = null; // 블록의신. public Block.iPosition i_pos; // 블록좌표. void Start() { this.setcolor(this.color); // 색칠을한다. void Update() { // 인수 color의색으로블록을칠한다. public void setcolor(block.color color) { this.color = color; // 이번에지정된색을멤버변수에보관한다. Color color_value; // Color 클래스는색을나타낸다. switch(this.color) { // 칠할색에따라서갈라진다. default: case Block.COLOR.PINK: color_value = new Color(1.0f, 0.5f, 0.5f); break; case Block.COLOR.BLUE: color_value = Color.blue; break; case Block.COLOR.YELLOW: color_value = Color.yellow; break; case Block.COLOR.GREEN: color_value = Color.green; break; case Block.COLOR.MAGENTA: color_value = Color.magenta; break; case Block.COLOR.ORANGE: color_value = new Color(1.0f, 0.46f, 0.0f); break; // 이게임오브젝트의머티리얼색상을변경한다. this.renderer.material.color = color_value; 13

14 1. 블록을바닥에채운다. 구현단계 * 블록나열하기 BlockRoot.cs 블록을가로세로바둑판모양으로관리 14

15 1. 블록을바닥에채운다. 구현단계 * 블록나열하기 BlockRoot.cs BlockRoot.cs public class BlockRoot : MonoBehaviour { public GameObject BlockPrefab = null; // 만들어낼블록의프리팹. public BlockControl[,] blocks; // 그리드. void Start() { void Update() { // 블록을만들어내고가로 9 칸, 세로 9 칸에배치한다. public void initialsetup(){ // 그리드의크기를 9 9 로한다. this.blocks = new BlockControl [Block.BLOCK_NUM_X, Block.BLOCK_NUM_Y]; // 블록의색번호. int color_index = 0; for(int y = 0; y < Block.BLOCK_NUM_Y; y+ +) { // 처음 ~ 마지막행 for(int x = 0; x < Block.BLOCK_NUM_X; x+ +) { // 왼쪽 ~ 오른쪽 // BlockPrefab 의인스턴스를씬에만든다. GameObject game_object = Instantiate(this.BlockPrefab) as GameObject; // 위에서만든블록의 BlockControl 클래스를가져온다. BlockControl block = game_object.getcomponent<blockcontrol>(); // 블록을그리드에저장한다. this.blocks[x, y] = block; // 블록의위치정보 ( 그리드좌표 ) 를설정한다. block.i_pos.x = x; block.i_pos.y = y; // 각 BlockControl 이연계할 GameRoot 는자신이라고설정한다. block.block_root = this; // 그리드좌표를실제위치 ( 씬의좌표 ) 로변환한다. Vector3 position = BlockRoot.calcBlockPosition(block.i_pos); // 씬의블록위치를이동한다. block.transform.position = position; // 블록의색을변경한다. block.setcolor((block.color)color_index); // 블록의이름을설정 ( 후술 ) 한다. block.name = "block(" + block.i_pos.x.tostring() + "," + block.i_pos.y.tostring() + ")"; // 전체색중에서임의로하나의색을선택한다. color_index = Random.Range(0, (int)block.color.normal_color_num); 15

16 1. 블록을바닥에채운다. 구현단계 * 블록나열하기 BlockRoot.cs BlockRoot.cs // 지정된그리드좌표로씬에서의좌표를구한다. public static Vector3 calcblockposition(block.iposition i_pos) { // 배치할왼쪽위구석위치를초기값으로설정한다. Vector3 position = new Vector3(-(Block.BLOCK_NUM_X / 2.0f - 0.5f), -(Block.BLOCK_NUM_Y / 2.0f - 0.5f), 0.0f); // 초깃값 + 그리드좌표 블록크기. position.x += (float)i_pos.x * Block.COLLISION_SIZE; position.y += (float)i_pos.y * Block.COLLISION_SIZE; return(position); // 씬에서의좌표를반환한다. 16

17 1. 블록을바닥에채운다. 구현단계 * 블록나열하기 SceneControl.cs public class SceneControl : MonoBehaviour { private BlockRoot block_root = null; void Start() { // BlockRoot 스크립트를가져온다. this.block_root = this.gameobject.getcomponent<blockroot>(); // BlockRoot 스크립트의 initialsetup() 을호출한다. this.block_root.initialsetup(); void Update() { 17

18 2. 마우스로블록잡기 구현단계 BlockControl.cs / Block 클래스 // 블록이어던상태인지알려주는클래스 public enum STEP { NONE = -1, // 상태정보없음. IDLE = 0, // 대기중. GRABBED, // 잡혀있음. RELEASED, // 떨어진순간. SLIDE, // 슬라이드중. VACANT, // 소멸중. RESPAWN, // 재생성중. FALL, // 낙하중. LONG_SLIDE, // 크게슬라이드중. NUM, // 상태가몇종류인지표시. ; BlockControl.cs / BlockControl 클래스 public Block.STEP step = Block.STEP.NONE; // 지금상태. public Block.STEP next_step = Block.STEP.NONE; // 다음상태. private Vector3 position_offset_initial = Vector3.zero; // 교체전위치. public Vector3 position_offset = Vector3.zero; // 교체후위치. void Start() { this.setcolor(this.color); this.next_step = Block.STEP.IDLE; // 다음블록을대기중으로. 18

19 2. 마우스로블록잡기 구현단계 Update() : 블록이잡혔을때에블록을크게하고그렇지않을때는원래대로돌아간다. BlockControl.cs / BlockControl 클래스 void Update() { Vector3 mouse_position; // 마우스위치. this.block_root.unprojectmouseposition( // 마우스위치획득. out mouse_position, Input.mousePosition); // 획득한마우스위치를 X와 Y만으로한다. Vector2 mouse_position_xy = new Vector2(mouse_position.x, mouse_position.y); // ' 다음블록 ' 상태가 ' 정보없음 ' 이외인동안. // =' 다음블록 ' 상태가변경된경우. while(this.next_step!= Block.STEP.NONE) { this.step = this.next_step; this.next_step = Block.STEP.NONE; switch(this.step) { case Block.STEP.IDLE: // ' 대기 ' 상태. this.position_offset = Vector3.zero; // 블록표시크기를보통크기로한다. this.transform.localscale = Vector3.one * 1.0f; break; case Block.STEP.GRABBED: // ' 잡힌 ' 상태. // 블록표시크기를크게한다. this.transform.localscale = Vector3.one * 1.2f; break; case Block.STEP.RELEASED: // ' 떨어져있는 ' 상태. this.position_offset = Vector3.zero; // 블록표시크기를보통사이즈로한다. this.transform.localscale = Vector3.one * 1.0f; break; // 그리드좌표를실제좌표 ( 씬의좌표 ) 로변환하고. // position_offset을추가한다. Vector3 position = BlockRoot.calcBlockPosition(this.i_pos) + this.position_offset; // 실제위치를새로운위치로변경한다. this.transform.position = position; 19

20 2. 마우스로블록잡기 구현단계 BlockControl.cs / BlockControl 클래스 public void begingrab(){ // 잡혔을때호출 this.next_step = Block.STEP.GRABBED; public void endgrab() // 놓았을때호출 { This.next_step = Block.STEP.IDLE; public bool isgrabbable() // 잡을수있는상태인지판단. { bool is_grabbable = false; switch(this.step) { case Block.STEP.IDLE: // ' 대기 ' 상태일때만. is_grabbable = true; // true( 잡을수있다 ) 를반환한다. break; return(is_grabbable); public bool iscontainedposition(vector2 position){ // 지정된마우스좌표가자신과겹치는지확인 bool ret = false; Vector3 center = this.transform.position; float h = Block.COLLISION_SIZE / 2.0f; do { // X 좌표가자신과겹치지않으면 break로루프를빠져나간다. if(position.x < center.x - h center.x + h < position.x) { break; // Y 좌표가자신과겹치지않으면 break로루프를빠져나간다. if(position.y < center.y - h center.y + h < position.y) { break; // X 좌표, Y 좌표모두겹쳐있으면 true( 겹쳐있다 ) 를반환한다. ret = true; while(false); return(ret); 20

21 2. 마우스로블록잡기 구현단계 BlockRoot.cs // 블록을잡는데필요한멤버변수선언 private GameObject main_camera = null; // 메인카메라. private BlockControl grabbed_block = null; // 잡은블록. void Start() { this.main_camera = GameObject.FindGameObjectWithTag("MainCamera"); // 카메라로부터마우스커서를통과하는광선을쏘기위해서필요 void Update() { Vector3 mouse_position; // 마우스위치. this.unprojectmouseposition( // 마우스위치를가져온다. out mouse_position, Input.mousePosition); // 가져온마우스위치를하나의 Vector2로모은다. Vector2 mouse_position_xy = new Vector2(mouse_position.x, mouse_position.y); if(this.grabbed_block == null) { // 잡은블록이비었으면. // if(!this.is_has_falling_block()) { 나중에주석처리벗긴다. if(input.getmousebuttondown(0)) { // 마우스버튼이눌렸으면 // blocks 배열의모든요소를차례로처리한다. foreach(blockcontrol block in this.blocks) { if(! block.isgrabbable()) { // 블록을잡을수없다면. continue; // 루프의처음으로점프한다. // 마우스위치가블록영역안이아니면. if(!block.iscontainedposition(mouse_position_xy)) { continue; // 루프의처음으로점프한다. // 처리중인블록을 grabbed_block에등록한다. this.grabbed_block = block; // 잡았을때의처리를실행한다. this.grabbed_block.begingrab(); break; // else { // 블록을잡았을때. if(! Input.GetMouseButton(0)) { // 마우스버튼이눌려져있지않으면. this.grabbed_block.endgrab(); // 블록을놨을때의처리를실행. this.grabbed_block = null; // grabbed_block을비우게설정. 21

22 2. 마우스로블록잡기 구현단계 unprojectmouseposition( ) 22

23 2. 마우스로블록잡기 구현단계 BlockRoot.cs public bool unprojectmouseposition( out Vector3 world_position, Vector3 mouse_position) { bool ret; // 판을작성한다. 이판은카메라에대해서뒤로향해서 (Vector3.back). // 블록의절반크기만큼앞에둔다. Plane plane = new Plane(Vector3.back, new Vector3( 0.0f, 0.0f, -Block.COLLISION_SIZE / 2.0f)); // 카메라와마우스를통과하는빛을만든다. Ray ray = this.main_camera.getcomponent<camera>().screenpointtoray( mouse_position); float depth; // 광선 (ray) 이판 (plane) 에닿았다면. if(plane.raycast(ray, out depth)) { // 광선이닿았으면 depth에정보가기록된다 // 인수 world_position을마우스위치로덮어쓴다. world_position = ray.origin + ray.direction * depth; ret = true; // 닿지않았다면. else { // 인수 world_position을 0인벡터로덮어쓴다. world_position = Vector3.zero; ret = false; return(ret); // 카메라를통과하는광선이블록에닿았는지를반환 23

24 3. 블록교체 구현단계 지금까지의프로그래밍을통해블록을잡을수있게되었다. 게임을진행하기위해서는주변블록을교체할수있어야한다. 24

25 3. 블록교체 구현단계 * calcslidedir() : 인수로지정한마우스위치를바탕으로어느쪽으로슬라이드되었는지판단하고그방향을 Block.DIR4 형값으로반환 BlockControl.cs public float vanish_timer = -1.0f; // 블록이사라질때까지의시간. public Block.DIR4 slide_dir = Block.DIR4.NONE; // 슬라이드된방향. public float step_timer = 0.0f; // 블록이교체된때의이동시간등. public Block.DIR4 calcslidedir(vector2 mouse_position){ Block.DIR4 dir = Block.DIR4.NONE; // 지정된 mouse_position과현재위치의차를나타내는벡터. Vector2 v = mouse_position - new Vector2(this.transform.position.x, this.transform.position.y); // 벡터의크기가 0.1보다크면. // ( 그보다작으면슬라이드하지않은걸로간주한다 ). if(v.magnitude > 0.1f) { if(v.y > v.x) { if(v.y > -v.x) { dir = Block.DIR4.UP; else { dir = Block.DIR4.LEFT; else { if(v.y > -v.x) { dir = Block.DIR4.RIGHT; else { dir = Block.DIR4.DOWN; return(dir); 25

26 3. 블록교체 구현단계 * calcdiroffset(): 지정된위치와방향을근거로현재위치와슬라이드할곳의거리가어느정도인지반환한다. BlockControl.cs public float calcdiroffset(vector2 position, Block.DIR4 dir){ float offset = 0.0f; // 지정된위치와블록의현재위치의차를나타내는벡터. Vector2 v = position - new Vector2( this.transform.position.x, this.transform.position.y); switch(dir) { // 지정된방향에따라갈라진다. case Block.DIR4.RIGHT: offset = v.x; break; case Block.DIR4.LEFT: offset = -v.x; break; case Block.DIR4.UP: offset = v.y; break; case Block.DIR4.DOWN: offset = -v.y; break; return(offset); BlockControl.cs // 이동시작을알리는메서드 public void beginslide(vector3 offset) { this.position_offset_initial= offset; this.position_offset = this.position_offset_initial; // 상태를 SLIDE로변경. this.next_step = Block.STEP.SLIDE; 26

27 3. 블록교체 구현단계 * Update() 메서드수정 BlockControl.cs void Update() { Vector3 mouse_position; this.block_root.unprojectmouseposition( out mouse_position, Input.mousePosition); Vector2 mouse_position_xy = new Vector2(mouse_position.x, mouse_position.y); this.step_timer += Time.deltaTime; float slide_time = 0.2f; if(this.next_step == Block.STEP.NONE) { // ' 상태정보없음 ' 의경우. switch(this.step) { case Block.STEP.SLIDE: if(this.step_timer >= slide_time) { // 슬라이드중인블록이소멸되면 VACANT( 사라진 ) 상태로이행. if(this.vanish_timer == 0.0f) { this.next_step = Block.STEP.VACANT; // vanish_timer가 0이아니면 IDLE( 대기 ) 상태로이행. else { this.next_step = Block.STEP.IDLE; break; // 변했을때만시행할부분 while(this.next_step!= Block.STEP.NONE) { this.step = this.next_step; this.next_step = Block.STEP.NONE; switch(this.step) { case Block.STEP.IDLE: this.position_offset = Vector3.zero; this.transform.localscale = Vector3.one * 1.0f; break; case Block.STEP.GRABBED: this.transform.localscale = Vector3.one * 1.2f; break; case Block.STEP.RELEASED: this.position_offset = Vector3.zero; this.transform.localscale = Vector3.one * 1.0f; break; 27

28 3. 블록교체 구현단계 * Update() 메서드수정 BlockControl.cs case Block.STEP.VACANT: this.position_offset = Vector3.zero; break; this.step_timer = 0.0f; switch(this.step) { case Block.STEP.GRABBED: // 잡힌상태. // 잡힌상태일때는항상슬라이드방향을체크. this.slide_dir = this.calcslidedir(mouse_position_xy); break; case Block.STEP.SLIDE: // 슬라이드 ( 교체 ) 중. // 블록을서서히이동하는처리. // ( 어려운부분이니지금은몰라도괜찮다 ). float rate = this.step_timer / slide_time; rate = Mathf.Min(rate, 1.0f); rate = Mathf.Sin(rate*Mathf.PI / 2.0f); this.position_offset = Vector3.Lerp( this.position_offset_initial, Vector3.zero, rate); break; Vector3 position = BlockRoot.calcBlockPosition(this.i_pos) + this.position_offset; this.transform.position = position; 28

29 3. 블록교체 구현단계 * BlockRoot 스크립트에새메서드추가 getnextblock( ): 블록이슬라이드할곳에어느블록이있는지반환한다. 인수 - 현재잡고있는블록. 슬라이드방향 getdirvector( ): 인수로지정된방향을바탕으로이동량의벡터를반환한다. 현재블록에서지정방향으로이동하는양반환 getopposite( ): 인수로지정된방향의반대방향을반환한다. 블록을서로교체할때, 이동할곳에있는블록은역방향이동 swapblock( ): 실제로블록을교체한다. 29

30 3. 블록교체 구현단계 * getnextblock( ) : 블록이슬라이드할곳에어느블록이있는지반환 BlockRoot.cs public BlockControl getnextblock( BlockControl block, Block.DIR4 dir){ BlockControl next_block = null; // 슬라이드할곳의블록을여기에저장. switch(dir) { case Block.DIR4.RIGHT: if(block.i_pos.x < Block.BLOCK_NUM_X - 1) { // 그리드안이라면. next_block = this.blocks[block.i_pos.x + 1, block.i_pos.y]; break; case Block.DIR4.LEFT: if(block.i_pos.x > 0) { // 그리드안이라면. next_block = this.blocks[block.i_pos.x - 1, block.i_pos.y]; break; case Block.DIR4.UP: if(block.i_pos.y < Block.BLOCK_NUM_Y - 1) { // 그리드안이라면. next_block = this.blocks[block.i_pos.x, block.i_pos.y + 1]; break; case Block.DIR4.DOWN: if(block.i_pos.y > 0) { // 그리드안이라면. next_block = this.blocks[block.i_pos.x, block.i_pos.y - 1]; break; return(next_block); 30

31 3. 블록교체 구현단계 * getdirvector( ) : 인수로지정된방향을바탕으로이동량의벡터를반환 * getopposite( ) : 인수로지정된방향의반대방향을반환 BlockRoot.cs public static Vector3 getdirvector(block.dir4 dir) { Vector3 v = Vector3.zero; switch(dir) { case Block.DIR4.RIGHT: v = Vector3.right; break; // 오른쪽으로 1단위이동. case Block.DIR4.LEFT: v = Vector3.left; break; // 왼쪽으로 1단위이동. case Block.DIR4.UP: v = Vector3.up; break; // 위로 1단위이동. case Block.DIR4.DOWN: v = Vector3.down; break; // 아래로 1단위이동. v *= Block.COLLISION_SIZE; // 블록의크기를곱한다. return(v); BlockRoot.cs public static Block.DIR4 getoppositdir(block.dir4 dir) { Block.DIR4 opposit = dir; switch(dir) { case Block.DIR4.RIGHT: opposit = Block.DIR4.LEFT; break; case Block.DIR4.LEFT: opposit = Block.DIR4.RIGHT; break; case Block.DIR4.UP: opposit = Block.DIR4.DOWN; break; case Block.DIR4.DOWN: opposit = Block.DIR4.UP; break; return(opposit); 31

32 3. 블록교체 구현단계 * swapblock( ) : 실제로블록을교체한다. BlockRoot.cs public void swapblock( BlockControl block0, Block.DIR4 dir, BlockControl block1) { // 각각의블록색을기억해둔다. Block.COLOR color0 = block0.color; Block.COLOR color1 = block1.color; // 각각의블록의확대율을기억해둔다. Vector3 scale0 = block0.transform.localscale; Vector3 scale1 = block1.transform.localscale; // 각각의블록의 ' 사라지는시간 ' 을기억해둔다. float vanish_timer0 = block0.vanish_timer; float vanish_timer1 = block1.vanish_timer; // 색을교체한다. block0.setcolor(color1); block1.setcolor(color0); // 확대율을교체한다. block0.transform.localscale = scale1; block1.transform.localscale = scale0; // ' 사라지는시간 ' 을교체한다. block0.vanish_timer = vanish_timer1; block1.vanish_timer = vanish_timer0; block0.beginslide(offset0); // 원래블록이동을시작한다. block1.beginslide(offset1); // 이동할위치의블록이동을시작한다. // 각각의블록의이동할곳을구한다. Vector3 offset0 = BlockRoot.getDirVector(dir); Vector3 offset1 = BlockRoot.getDirVector(BlockRoot.getOppositDir(dir)); 32

33 3. 블록교체 구현단계 * update() 메서드에교체파트추가 33

34 3. 블록교체 구현단계 * update() 메서드에교체파트추가 BlockRoot.cs do { // 슬라이드할곳의블록을가져온다. BlockControl swap_target = this.getnextblock(grabbed_block, grabbed_block.slide_dir); // 슬라이드할곳블록이비어있으면. if(swap_target == null) { break; // 루프탈출. // 슬라이드할곳의블록이잡을수있는상태가아니라면. if(! swap_target.isgrabbable()) { break; // 루프탈출. // 현재위치에서슬라이드위치까지의거리를얻는다. float offset = this.grabbed_block.calcdiroffset( mouse_position_xy, this.grabbed_block.slide_dir); // 수리거리가블록크기의절반보다작다면. if(offset < Block.COLLISION_SIZE / 2.0f) { break; // 루프탈출. // 블록을교체한다. this.swapblock( grabbed_block, grabbed_block.slide_dir, swap_target); this.grabbed_block = null; // 지금은블록을잡고있지않다. while(false); 34

35 레 벨 퍼즐게임만들기 구 현 디 자 인 하 기 블 록 연 기획하기 쇄 3 5

36 1. 3 매치로블록지우기 블록연쇄구현 BlockControl.cs public Material opague_material; // 불투명머티리얼. public Material transparent_material; // 반투명머티리얼. void Update() { // 굵은부분추가 Vector2 mouse_position_xy = new Vector2(mouse_position.x, mouse_position.y); if(this.vanish_timer >= 0.0f) { // 타이머가 0 이상이면. this.vanish_timer -= Time.deltaTime; // 타이머의값을줄인다. if(this.vanish_timer < 0.0f) { // 타이머가 0 미만이면. if(this.step!= Block.STEP.SLIDE) { // 슬라이드중이아니라면. this.vanish_timer = -1.0f; this.next_step = Block.STEP.VACANT; // 상태를 소멸중 으로. else { this.vanish_timer = 0.0f; 36

37 1. 3 매치로블록지우기 블록연쇄구현 BlockControl.cs void Update() { // 굵은부분추가 while(this.next_step!= Block.STEP.NONE) {... switch(this.step) { case Block.STEP.RELEASED: this.position_offset = Vector3.zero; this.transform.localscale = Vector3.one * 1.0f; break; case Block.STEP.VACANT: this.position_offset = Vector3.zero; this.setvisible(false); // 블록을표시하지않게한다. break; this.step_timer = 0.0f;... Vector3 position = BlockRoot.calcBlockPosition(this.i_pos) + this.position_offset; this.transform.position = position; this.setcolor(this.color); if(this.vanish_timer >= 0.0f) { Color color0 = // 현재색과흰색의중간색. Color.Lerp(this.renderer.material.color, Color.white, 0.5f); Color color1 = // 현재색과검은색의중간색. Color.Lerp(this.renderer.material.color, Color.black, 0.5f); // 불붙는연출시간이절반을지났다면. if(this.vanish_timer < Block.VANISH_TIME / 2.0f) { // 투명도 (a) 를설정. color0.a = this.vanish_timer / (Block.VANISH_TIME / 2.0f); color1.a = color0.a; // 반투명머티리얼을적용. this.renderer.material = this.transparent_material; // vanish_timer가줄어들수록 1에가까워진다. float rate = 1.0f - this.vanish_timer / Block.VANISH_TIME; // 서서히색을바꾼다. this.renderer.material.color = Color.Lerp(color0, color1, rate); 37

38 1. 3 매치로블록지우기 블록연쇄구현 BlockControl.cs public void tovanishing(){ // ' 사라질때까지걸리는시간 ' 을규정값으로리셋. this.vanish_timer = Block.VANISH_TIME; public void setvisible(bool is_visible){ // 그리기가능설정에인수를대입. this.renderer.enabled = is_visible; public bool isvanishing(){ // vanish_timer가 0보다크면 true. bool is_vanishing = (this.vanish_timer > 0.0f); return(is_vanishing); public void rewindvanishtimer(){ // ' 사라질때까지걸리는시간 ' 을규정값으로리셋. this.vanish_timer = Block.VANISH_TIME; public bool isvisible(){ // 그리기가능 (renderer.enabled가 true) 상태라면. // 표시되고있다. bool is_visible = this.renderer.enabled; return(is_visible); public bool isidle(){ bool is_idle = false; // 현재블록상태가 ' 대기중 ' 이고. // 다음블록상태가 ' 없음 ' 이면. if(this.step = = Block.STEP.IDLE && this.next_step = = Block.STEP.NONE) { is_idle = true; return(is_idle); 38

39 1. 3 매치로블록지우기 블록연쇄구현 BlockRoot.cs void Update() {... if(! Input.GetMouseButton(0)) {. // 낙하중또는슬라이드중이면. if(this.is_has_falling_block() this.is_has_sliding_block()) { // 아무것도하지않는다. // 낙하중도슬라이드중도아니면. else { int ignite_count = 0; // 불붙은개수. // 그리드안의모든블록에대해서처리. foreach(blockcontrol block in this.blocks) { if(! block.isidle()) { // 대기중이면루프의처음으로점프하고. continue; // 다음블록을처리한다. // 세로또는가로에같은색블록이세개이상나열했다면. if(this.checkconnection(block)) { ignite_count++; // 불붙은개수를증가. if(ignite_count > 0) { // 불붙은개수가 0보다크면. // =한군데라도맞춰진곳이있으면. int block_count = 0; // 불붙는중인블록수 ( 다음장에서사용한다 ). // 그리드내의모든블록에대해서처리. foreach(blockcontrol block in this.blocks) { if(block.isvanishing()) { // 타는중이면. block.rewindvanishtimer(); // 다시점화!. 39

40 1. 3 매치로블록지우기 블록연쇄구현 BlockRoot.cs // 인수로받은블록이세개의블록안에들어가는지파악하는메서드 public bool checkconnection(blockcontrol start) { bool ret = false; int normal_block_num = 0; // 인수인블록이불붙은다음이아니면. if(! start.isvanishing()) { normal_block_num = 1; // 그리드좌표를기억해둔다. int rx = start.i_pos.x; int lx = start.i_pos.x; // 블록의왼쪽을검사. for(int x = lx - 1; x > 0; x--) { BlockControl next_block = this.blocks[x, start.i_pos.y]; if(next_block.color!= start.color) { // 색이다르면. break; // 루프를빠져나간다. if(next_block.step = = Block.STEP.FALL // 낙하중이면. next_block.next_step = = Block.STEP.FALL) { break; if(next_block.step = = Block.STEP.SLIDE // 슬라이드중이면. next_block.next_step = = Block.STEP.SLIDE) { break; if(! next_block.isvanishing()) { // 불붙은상태가아니면. normal_block_num++; // 검사용카운터를증가. lx = x; 40

41 1. 3 매치로블록지우기 블록연쇄구현 BlockRoot.cs // 블록의오른쪽을검사. for(int x = rx + 1; x < Block.BLOCK_NUM_X; x+ +) { BlockControl next_block = this.blocks[x, start.i_pos.y]; if(next_block.color!= start.color) { break; do { // 오른쪽블록의그리드번호 - 왼쪽블록의그리드번호 +. // 중앙블록 (1) 을더한수가 3 미만이면. if(rx - lx + 1 < 3) { break; // 루프탈출. if(next_block.step = = Block.STEP.FALL next_block.next_step = = Block.STEP.FALL) { break; if(next_block.step = = Block.STEP.SLIDE next_block.next_step = = Block.STEP.SLIDE) { break; if(! next_block.isvanishing()) { normal_block_num++; if(normal_block_num = = 0) { // 불붙지않은블록이하나도없으면. break; for(int x = lx; x < rx + 1; x+ +) { // 나열된같은색블록을불붙은상태로. this.blocks[x, start.i_pos.y].tovanishing(); ret = true; while(false); rx = x; 41

42 1. 3 매치로블록지우기 블록연쇄구현 BlockRoot.cs normal_block_num = 0; if(! start.isvanishing()) { normal_block_num = 1; int uy = start.i_pos.y; int dy = start.i_pos.y; // 블록의위쪽을검사. for(int y = dy - 1; y > 0; y--) { BlockControl next_block = this.blocks[start.i_pos.x, y]; if(next_block.color!= start.color) { break; if(next_block.step = = Block.STEP.FALL next_block.next_step = = Block.STEP.FALL) { break; if(next_block.step = = Block.STEP.SLIDE next_block.next_step = = Block.STEP.SLIDE) { break; if(! next_block.isvanishing()) { normal_block_num++; dy = y; 42

43 1. 3 매치로블록지우기 블록연쇄구현 BlockRoot.cs // 블록의아래쪽을검사. for(int y = uy + 1; y < Block.BLOCK_NUM_Y; y + +) { BlockControl next_block = this.blocks[start.i_pos.x, y]; if(next_block.color!= start.color) { break; if(next_block.step = = Block.STEP.FALL next_block.next_step = = Block.STEP.FALL) { break; if(next_block.step = = Block.STEP.SLIDE next_block.next_step = = Block.STEP.SLIDE) { break; if(! next_block.isvanishing()) { normal_block_num++; uy = y; do { if(uy - dy + 1 < 3) { break; If(normal_block_num == 0) { break; for(int y = dy; y < uy + 1; y++) { this.blocks[start.i_pos.x, y].tovanishing(); ret = true; while(false); return(ret); 43

44 2. 블록보충하기 블록연쇄구현 44

45 2. 블록보충하기 블록연쇄구현 BlockControl.cs 45 private struct StepFall { while(this.next_step!= Block.STEP.NONE) { public float velocity; // 낙하속도. switch(this.step) { private StepFall fall;... void Update() { case Block.STEP.VACANT:... if(this.next_step = = Block.STEP.NONE) { case Block.STEP.RESPAWN: // 색을랜덤하게선택하여블록을그색으로설정. case Block.STEP.IDLE: int color_index = Random.Range( this.renderer.enabled = true; 0, (int)block.color.normal_color_num); break; this.setcolor((block.color)color_index); case Block.STEP.FALL: this.next_step = Block.STEP.IDLE; if(this.position_offset.y <= 0.0f) { break; this.next_step = Block.STEP.IDLE; case Block.STEP.FALL: this.position_offset.y = 0.0f; this.setvisible(true); // 블록을표시. this.fall.velocity = 0.0f; // 낙하속도리셋. break; break;... this.step_timer = 0.0f;...

46 2. 블록보충하기 블록연쇄구현 BlockControl.cs void Update() {... switch(this.step) {... case Block.STEP.SLIDE: float rate = this.step_timer / slide_time;... case Block.STEP.FALL: // 속도에중력의영향을부여한다. this.fall.velocity += Physics.gravity.y * Time.deltaTime * 0.3f; // 세로방향위치를계산. this.position_offset.y += this.fall.velocity * Time.deltaTime; if(this.position_offset.y < 0.0f) { // 다내려왔다면. this.position_offset.y = 0.0f; // 그자리에머무른다. break; 46

47 2. 블록보충하기 블록연쇄구현 BlockRoot.cs 47

48 2. 블록보충하기 블록연쇄구현 BlockRoot.cs // 하나라도연소중인블록이있는가?. bool is_vanishing = this.is_has_vanishing_block(); // 조건이만족되면블록을떨어뜨리고싶다. do { if(is_vanishing) { // 연소중인블록이있다면. break; // 낙하처리를실행하지않는다. if(this.is_has_sliding_block()) { // 교체중인블록이있다면. break; // 낙하처리를실행하지않는다. for(int x = 0; x < Block.BLOCK_NUM_X; x++) { // 열에교체중인블록이있다면그열은처리하지않고 // 다음열로진행한다. 주석처리를벗겨낸다 if(this.is_has_sliding_block_in_column(x)) { continue; // 그열에있는블록을위에서부터검사한다. for(int y = 0; y < Block.BLOCK_NUM_Y - 1; y++) { // 지정블록이비표시라면다음블록으로. if(! this.blocks[x, y].isvacant()) { continue; // 지정블록아래에있는블록을검사. for(int y1 = y + 1; y1 < Block.BLOCK_NUM_Y; y1++) { // 아래에있는블록이비표시라면다음블록으로. if(this.blocks[x, y1].isvacant()) { continue; // 블록을교체한다. this.fallblock(this.blocks[x, y], Block.DIR4.UP, this.blocks[x, y1]); break; 48

49 2. 블록보충하기 블록연쇄구현 BlockRoot.cs // 보충처리. for(int x = 0; x < Block.BLOCK_NUM_X; x++) { int fall_start_y = Block.BLOCK_NUM_Y; for(int y = 0; y < Block.BLOCK_NUM_Y; y++) { // 비표시블록이아니라면다음블록으로. if(! this.blocks[x, y].isvacant()) { continue; this.blocks[x, y].beginrespawn(fall_start_y); // 블록부활. fall_start_y++; while(false); 49

50 레 벨 퍼즐게임만들기 구 현 디 자 인 하 기 블 록 연 기획하기 쇄 5 0

51 1. 점수와시간삽입 레벨디자인 ScoreCounter.cs // 멤버변수초기화 51

52 1. 점수와시간삽입 레벨디자인 ScoreCounter.cs public void print_value(int x, int y, string label, int value) { // 지정된데이터를두개의행에나눠표시 // label 을표시. GUI.Label(new Rect(x, y, 100, 20), label, guistyle); y += 15; // 다음행에 value 를표시. GUI.Label(new Rect(x + 20, y, 100, 20), value.tostring(), guistyle); y += 15; public void addignitecount(int count){ this.last.ignite += count; // 연쇄수에 count 를합산. this.update_score(); // 점수계산. public void print_value(int x, int y, string label, int value) public void updatetotalscore() { this.last.total_socre += this.last.score; // 합계점수갱신. public bool isgameclear() { bool is_clear = false; // 현재합계점수가클리어기준보다크면. if(this.last.total_socre > QUOTA_SCORE) { is_clear = true; return(is_clear); public void clearignitecount(){ this.last.ignite = 0; // 연쇄횟수리셋. private void update_score(){ this.last.score = this.last.ignite * 10; // 점수갱신. 52

53 1. 점수와시간삽입 레벨디자인 SceneControl.cs 53

54 1. 점수와시간삽입 레벨디자인 SceneControl.cs // 화면에클리어한시간과메시지를표시 54

55 1. 점수와시간삽입 레벨디자인 BlackRoot.cs 점수에관련된부분을변경 연쇄된블록수만큼점수계산 불타는중엔리셋되지않는다 = 연쇄수가된다 55

56 1. 점수와시간삽입 레벨디자인 * 완성화면 * 56

57 2. 텍스트읽어오기 레벨디자인 LevelControl.cs // List 를사용하기위함 57

58 2. 텍스트읽어오기 레벨디자인 * LevelControl 클래스에필요한메서드 level_datas: 각레벨의레벨데이터를저장하는 List 값 select_level: 선택된레벨을저장하는 int 값 initialize( ): 초기화처리를한다 (level_datas를초기화할뿐 ). loadleveldata( ): 텍스트데이터를읽어와서그내용을해석하고데이터를보관한다. selectlevel( ): 몇개의레벨패턴에서지금사용할패턴을선택한다. getcurrentleveldata( ): 선택되어있는레벨패턴의레벨데이터를반환한다. getvanishingtime( ): 선택되어있는레벨패턴의연소시간을반환한다. 58

59 2. 텍스트읽어오기 레벨디자인 LevelControl.cs // 각레벨에데이터를저장 59

60 2. 텍스트읽어오기 레벨디자인 LevelControl.cs 60

61 2. 텍스트읽어오기 레벨디자인 * BlackRoot 클래스에필요한메서드 leveldata: 레벨데이터의텍스트를저장한다. level_control: LevelControl을저장한다. create( ): 레벨데이터의초기화, 로드, 패턴설정까지시행한다. selectblockcolor( ): 현재패턴의출현확률을바탕으로색을산출해서반환한다. 61

62 2. 텍스트읽어오기 레벨디자인 BlackRoot.cs 62

63 2. 텍스트읽어오기 레벨디자인 LevelControl.cs 나열할초기배치블록도선택된레벨의출현패턴을따르게하는수정 63

64 2. 텍스트읽어오기 SceneControl.cs BlockControl.cs 레벨디자인 // 레벨데이터의연소시간이반영되도록함 씬이시작될때텍스트데이터를읽고레벨선택을할수있게함 64

65 2. 텍스트읽어오기 레벨디자인 BlockControl.cs 65

66 3. 레벨디자인 레벨디자인 정책결정 난이도를비슷하게한다 패턴별로색상수와연소시간을바꾼다 패턴종류 패턴 A: 평균적인색상수 출현확률 연소시간 패턴 B: 색상수는조금적지만연소시간이조금짧다. 패턴 C: 색상수가적지만연소시간이짧다. 패턴 D: 색상수는조금많지만연소시간이조금길다. 패턴 E: 색상수는많지만연소시간이길다. 패턴 F: 특정색이나올확률이조금높지만연소시간이다소짧다. 패턴 G: 특정색이나올확률이높지만연소시간이짧다. 66

67 4. 게임시퀀스연결 레벨디자인 TitleScript.cs SceneControl.cs 67

68 * 완성! 레벨디자인 68

69 이번에도수고하셨습니다. 다음페이지에서보아요!

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 액션게임만들기 게임기획 액션게임만들기 제작하기 레벨디자인 2 * 액션게임을만들기까지 1 2 3 기획프로그래밍레벨디자인 3 1. 액션게임기획의과정 기획단계 기획서플레이어게임의틀 4 1-1. 기획서작성 기획단계 어떤게임을만들고싶은지, 어떤놀이가필요한지, 어떤형태로진행할것인지, 이게임이재미있을지, 목표 기획서 5 1-2. 플레이어선정 기획단계 Why? 대상에따라아이디어방향이달라짐

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 유니티와아두이노를활용한 VR 컨트롤러개발 Part 06 헬로앱스코딩교육 김영준 공학박사, 목원대학교겸임교수前 Microsoft 수석연구원 splduino@gmail.com http://www.helloapps.co.kr 키보드로물체생성하기 키보드로물체생성하기 public GameObject CubeObject; public GameObject MyCamera;

More information

chap 5: Trees

chap 5: Trees 5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3

More information

adfasdfasfdasfasfadf

adfasdfasfdasfasfadf C 4.5 Source code Pt.3 ISL / 강한솔 2019-04-10 Index Tree structure Build.h Tree.h St-thresh.h 2 Tree structure *Concpets : Node, Branch, Leaf, Subtree, Attribute, Attribute Value, Class Play, Don't Play.

More information

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 8 장클래스와객체 I 이번장에서학습할내용 클래스와객체 객체의일생직접 메소드클래스를 필드작성해 UML 봅시다. QUIZ 1. 객체는 속성과 동작을가지고있다. 2. 자동차가객체라면클래스는 설계도이다. 먼저앞장에서학습한클래스와객체의개념을복습해봅시다. 클래스의구성 클래스 (class) 는객체의설계도라할수있다. 클래스는필드와메소드로이루어진다.

More information

Microsoft PowerPoint - chap04-연산자.pptx

Microsoft PowerPoint - chap04-연산자.pptx int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); } 1 학습목표 수식의 개념과 연산자, 피연산자에 대해서 알아본다. C의 를 알아본다. 연산자의 우선 순위와 결합 방향에

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Microsoft PowerPoint 자바-기본문법(Ch2).pptx 자바기본문법 1. 기본사항 2. 자료형 3. 변수와상수 4. 연산자 1 주석 (Comments) 이해를돕기위한설명문 종류 // /* */ /** */ 활용예 javadoc HelloApplication.java 2 주석 (Comments) /* File name: HelloApplication.java Created by: Jung Created on: March

More information

K&R2 Reference Manual 번역본

K&R2 Reference Manual 번역본 typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct

More information

UI TASK & KEY EVENT

UI TASK & KEY EVENT 2007. 2. 5 PLATFORM TEAM 정용학 차례 CONTAINER & WIDGET SPECIAL WIDGET 질의응답및토의 2 Container LCD에보여지는화면한개 1개이상의 Widget을가짐 3 Container 초기화과정 ui_init UMP_F_CONTAINERMGR_Initialize UMP_H_CONTAINERMGR_Initialize

More information

Microsoft PowerPoint - chap05-제어문.pptx

Microsoft PowerPoint - chap05-제어문.pptx int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); 1 학습목표 제어문인,, 분기문에 대해 알아본다. 인 if와 switch의 사용 방법과 사용시 주의사항에 대해 알아본다.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 유니티와아두이노를활용한 VR 컨트롤러개발 헬로앱스코딩교육 김영준 공학박사, 목원대학교겸임교수前 Microsoft 수석연구원 splduino@gmail.com http://www.helloapps.co.kr 목차 1. 툴설치 2. 아두이노컨트롤러개발실습 3. 유니티기본명령어실습 4. 유니티 VR 콘텐츠개발실습 5. 블루투스를이용한아두이노컨트롤러연동실습 SW 설치

More information

Microsoft PowerPoint - 6-PythonGUI-sprite

Microsoft PowerPoint - 6-PythonGUI-sprite (Computer Science with Python and Pygame, Ch.14 introduction to Sprites) 순천향대학교컴퓨터공학과이상정 순천향대학교컴퓨터공학과 1 학습내용 스프라이트클래스 그룹클래스 스프라이트충돌 블록수집게임예 게임레벨증가및점수표시 스프라이트이동 순천향대학교컴퓨터공학과 2 (1) 스프라이트 (sprite) 큰그래픽장면의부분으로사용되는단일

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 CHAPTER 13. HTML5 위치정보와드래그앤드롭 SVG SVG(Scalable Vector Graphics) 는 XML- 기반의벡터이미지포맷 웹에서벡터 - 기반의그래픽을정의하는데사용 1999 년부터 W3C 에의하여표준 SVG 의장점 SVG 그래픽은확대되거나크기가변경되어도품질이손상되지않는다. SVG 파일에서모든요소와속성은애니메이션이가능하다. SVG 이미지는어떤텍스트에디터로도생성하고편집할수있다.

More information

C프로-3장c03逞풚

C프로-3장c03逞풚 C h a p t e r 03 C++ 3 1 9 4 3 break continue 2 110 if if else if else switch 1 if if if 3 1 1 if 2 2 3 if if 1 2 111 01 #include 02 using namespace std; 03 void main( ) 04 { 05 int x; 06 07

More information

Infinity(∞) Strategy

Infinity(∞) Strategy 반복제어 표월성 passwd74@cherub.sungkyul.edu 개요 for() 문 break문과 continue문 while문 do-while문 for() 문 for() 문형식 for( 표현식1; 표현식2; 표현식3) 여러문장들 ; 표현식 1 : 초기화 (1 번만수행 ) 표현식 2 : 반복문수행조건 ( 없으면무한반복 ) 표현식 3 : 반복문수행횟수 for()

More information

Microsoft PowerPoint PythonGUI-sprite

Microsoft PowerPoint PythonGUI-sprite (Sprite) 순천향대학교컴퓨터공학과 이상정 순천향대학교컴퓨터공학과 1 학습내용 소개 클래스 그룹클래스 충돌 블록수집게임예 게임레벨증가및점수표시 이동 순천향대학교컴퓨터공학과 2 소개 (sprite) 큰그래픽장면의부분으로사용되는단일 2차원이미지 => 쪽화면 게임의장면에서서로상호작용 ( 충돌등 ) 하는물체 => 캐릭터, 아바타 파이게임에서는일반적으로클래스로구현된객체

More information

1

1 1 2 3 4 5 6 b b t P A S M T U s 7 m P P 8 t P A S M T U s 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 Chapter 1 29 1 2 3 4 18 17 16 15 5 6 7 8 9 14 13 12 11 10 1 2 3 4 5 9 10 11 12 13 14 15

More information

이장에서다룰내용 테두리를제어하는스타일시트 외부여백 (Margin) 과내부여백 (Padding) 관련속성 위치관련속성 2

이장에서다룰내용 테두리를제어하는스타일시트 외부여백 (Margin) 과내부여백 (Padding) 관련속성 위치관련속성 2 03 장. 테두리여백지정하는속성 이번장에서는테이블, 레이어, 폼양식등의더예쁘게꾸미기위해서 CSS 를이용하여 HTML 요소의테두리속성을바꾸어보자. 이장에서다룰내용 1 2 3 테두리를제어하는스타일시트 외부여백 (Margin) 과내부여백 (Padding) 관련속성 위치관련속성 2 01. 테두리를제어하는스타일시트 속성값설명 border-width border-left-width

More information

Java ...

Java ... 컴퓨터언어 1 Java 제어문 조성일 조건문 : if, switch 어떠한조건을조사하여각기다른명령을실행 if 문, switch 문 if 문 if - else 문형식 if 문형식 if ( 조건식 ) { 명령문 1; 명령문 2;... if ( 조건식 ) { 명령문 1; 명령문 2;... else { 명령문 a; 명령문 b;... 예제 1 정수를입력받아짝수와홀수를판별하는프로그램을작성하시오.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 3 if, if else, if else if, switch case for, while, do while break, continue : System.in, args, JOptionPane for (,, ) @ vs. logic data method variable Data Data Flow (Type), ( ) @ Member field

More information

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - Java7.pptx HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)

More information

슬라이드 1

슬라이드 1 한국산업기술대학교 제 5 강스케일링및회전 이대현교수 학습안내 학습목표 3D 오브젝트의확대, 축소및회전방법을이해한다. 학습내용 3D 오브젝트의확대및축소 (Scaling) 3D 오브젝트의회전 (Rotation) 변홖공갂 (Transform Space) SceneNode 의크기변홖 (Scale) void setscale ( Real x, Real y, Real z)

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD> 2006 년 2 학기윈도우게임프로그래밍 제 8 강프레임속도의조절 이대현 한국산업기술대학교 오늘의학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용한다. FPS(Frame Per Sec)

More information

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public Chapter 9 Lab 문제정답 1. public class Circle private double radius; static final double PI=3.141592; // PI 이름으로 3.141592 로초기화된정적상수 (1) public Circle(double r) radius = r; (2) public double getradius() return

More information

Visual Basic 반복문

Visual Basic 반복문 학습목표 반복문 For Next문, For Each Next문 Do Loop문, While End While문 구구단작성기로익히는반복문 2 5.1 반복문 5.2 구구단작성기로익히는반복문 3 반복문 주어진조건이만족하는동안또는주어진조건이만족할때까지일정구간의실행문을반복하기위해사용 For Next For Each Next Do Loop While Wend 4 For

More information

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures 단일연결리스트 (Singly Linked List) 신찬수 연결리스트 (linked list)? tail 서울부산수원용인 null item next 구조체복습 struct name_card { char name[20]; int date; } struct name_card a; // 구조체변수 a 선언 a.name 또는 a.date // 구조체 a의멤버접근 struct

More information

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Crash Unity SDK... Log & Crash Search. - Unity3D v4.0 ios

More information

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt 변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short

More information

게임 기획서 표준양식 연구보고서

게임 기획서 표준양식 연구보고서 ᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞ ᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞ ᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞ ᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞ ᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞ ᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞ ᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞᆞ

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 3 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

Lab 3. 실습문제 (Single linked list)_해답.hwp

Lab 3. 실습문제 (Single linked list)_해답.hwp Lab 3. Singly-linked list 의구현 실험실습일시 : 2009. 3. 30. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 5. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Singly-linked list의각함수를구현한다.

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 1 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

(Microsoft PowerPoint - \301\24613\260\255 - oFusion \276\300 \261\270\274\272)

(Microsoft PowerPoint - \301\24613\260\255 - oFusion \276\300 \261\270\274\272) 게임엔진 제 13 강 ofusion 씬구성 이대현교수 한국산업기술대학교게임공학과 학습목차 Ofusion 을이용한 export Export 된씬의재현 씬노드애니메이션을이용한수동카메라트래킹 ofusion OGRE3D 엔진용 3D MAX 익스포터 http://www.ofusiontechnologies.com ofusion 의특징 Realtime Viewport 3D

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

유니티 변수-함수.key

유니티 변수-함수.key C# 1 or 16 (Binary or Hex) 1:1 C# C# (Java, Python, Go ) (0101010 ). (Variable) : (Value) (Variable) : (Value) ( ) (Variable) : (Value) ( ) ; (Variable) : (Value) ( ) ; = ; (Variable) : (Value) (Variable)

More information

제8장 자바 GUI 프로그래밍 II

제8장 자바 GUI 프로그래밍 II 제8장 MVC Model 8.1 MVC 모델 (1/7) MVC (Model, View, Controller) 모델 스윙은 MVC 모델에기초를두고있다. MVC란 Xerox의연구소에서 Smalltalk 언어를바탕으로사용자인터페이스를개발하기위한방법 MVC는 3개의구성요소로구성 Model : 응용프로그램의자료를표현하기위한모델 View : 자료를시각적으로 (GUI 방식으로

More information

슬라이드 1

슬라이드 1 핚국산업기술대학교 제 9 강캐릭터컨트롤러 이대현교수 학습안내 학습목표 씬노드의구성및회전방법을응용하여, 구면카메라및캐릭터컨트롤을구현해본다. 학습내용 구면카메라구현을위한씬노드구성및회전캐릭터컨트롤을위한씬노구구성및회전 카메라및캐릭터컨트롤구현목표 카메라컨트롤 WOW의카메라컨트롤 ( 구면카메라 ) 마우스를이용한좌우패닝, 상하피칭. 휠스크롤을이용한줌인및줌아웃. 캐릭터를중심으로회전됨.

More information

(Microsoft PowerPoint - \301\24608\260\255 - \261\244\277\370\260\372 \300\347\301\372)

(Microsoft PowerPoint - \301\24608\260\255 - \261\244\277\370\260\372 \300\347\301\372) 게임엔진 제 8 강광원과재질 이대현교수 한국산업기술대학교게임공학과 학습목차 조명모델 광원의색상설정 재질 분산성분의이해 분산재질의구현 경반사성분의이해 경반사재질의구현 조명 (Illumination) 모델 조명모델 광원으로부터공간상의점들까지의조도를계산하는방법. 직접조명과전역조명 직접조명 (direct illumination) 모델 물체표면의점들이장면내의모든광원들로부터직접적으로받는빛만을고려.

More information

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100 2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 6 강. 함수와배열, 포인터, 참조목차 함수와포인터 주소값의매개변수전달 주소의반환 함수와배열 배열의매개변수전달 함수와참조 참조에의한매개변수전달 참조의반환 프로그래밍연습 1 /15 6 강. 함수와배열, 포인터, 참조함수와포인터 C++ 매개변수전달방법 값에의한전달 : 변수값,

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 2... ( ). ( ). @ vs. logic data method variable behavior attribute method field Flow (Type), ( ) member @ () : C program Method A ( ) Method B ( ) Method C () program : Java, C++, C# data @ Program

More information

Microsoft Word - FunctionCall

Microsoft Word - FunctionCall Function all Mechanism /* Simple Program */ #define get_int() IN KEYOARD #define put_int(val) LD A val \ OUT MONITOR int add_two(int a, int b) { int tmp; tmp = a+b; return tmp; } local auto variable stack

More information

4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문

4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문 4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문 1. 클래스와객체 추상데이터형 : 속성 (attribute) + 메서드 (method) 예 : 자동차의속성과메서드 C++ : 주로 class

More information

Microsoft PowerPoint - ÀÚ¹Ù08Àå-1.ppt

Microsoft PowerPoint - ÀÚ¹Ù08Àå-1.ppt AWT 컴포넌트 (1) 1. AWT 패키지 2. AWT 프로그램과이벤트 3. Component 클래스 4. 컴포넌트색칠하기 AWT GUI 를만들기위한 API 윈도우프로그래밍을위한클래스와도구를포함 Graphical User Interface 그래픽요소를통해프로그램과대화하는방식 그래픽요소를 GUI 컴포넌트라함 윈도우프로그램만들기 간단한 AWT 프로그램 import

More information

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,

More information

슬라이드 1

슬라이드 1 2007 년 2 학기윈도우게임프로그래밍 제 7 강프레임속도의조절 이대현 핚국산업기술대학교 학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용핚다. FPS(Frame Per Sec)

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 9 강. 클래스의활용목차 멤버함수의외부정의 this 포인터 friend 선언 static 멤버 임시객체 1 /17 9 강. 클래스의활용멤버함수의외부정의 멤버함수정의구현방법 내부정의 : 클래스선언내에함수정의구현 외부정의 클래스선언 : 함수프로토타입 멤버함수정의 : 클래스선언외부에구현

More information

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2> 게임엔진 제 4 강프레임리스너와 OIS 입력시스템 이대현교수 한국산업기술대학교게임공학과 학습내용 프레임리스너의개념 프레임리스너를이용한엔터티의이동 OIS 입력시스템을이용한키보드입력의처리 게임루프 Initialization Game Logic Drawing N Exit? Y Finish 실제게임루프 오우거엔진의메인렌더링루프 Root::startRendering()

More information

Chapter 4. LISTS

Chapter 4. LISTS 6. 동치관계 (Equivalence Relations) 동치관계 reflexive, symmetric, transitive 성질을만족 "equal to"(=) 관계는동치관계임. x = x x = y 이면 y = x x = y 이고 y = z 이면 x = z 동치관계를이용하여집합 S 를 동치클래스 로분할 동일한클래스내의원소 x, y 에대해서는 x y 관계성립

More information

슬라이드 1

슬라이드 1 정적메모리할당 (Static memory allocation) 일반적으로프로그램의실행에필요한메모리 ( 변수, 배열, 객체등 ) 는컴파일과정에서결정되고, 실행파일이메모리에로드될때할당되며, 종료후에반환됨 동적메모리할당 (Dynamic memory allocation) 프로그램의실행중에필요한메모리를할당받아사용하고, 사용이끝나면반환함 - 메모리를프로그램이직접관리해야함

More information

02 C h a p t e r Java

02 C h a p t e r Java 02 C h a p t e r Java Bioinformatics in J a va,, 2 1,,,, C++, Python, (Java),,, (http://wwwbiojavaorg),, 13, 3D GUI,,, (Java programming language) (Sun Microsystems) 1995 1990 (green project) TV 22 CHAPTER

More information

슬라이드 1

슬라이드 1 한국산업기술대학교 제 10 강광원 이대현교수 학습안내 학습목표 오우거엔진의광원을이용하여 3D 공갂에서광원을구현해본다. 학습내용 평면메쉬의생성방법광원의종류및구현방법 광원의종류 : 주변광원 주변광원 (Ambient Light) 동일한밝기의빛이장면안의모든물체의표면에서일정하게반사되는것. 공갂안에존재하는빛의평균값이론적인광원 광원의종류 : 지향광원 지향광원 (Directional

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 06 반복문 01 반복문의필요성 02 for문 03 while문 04 do~while문 05 기타제어문 반복문의의미와필요성을이해한다. 대표적인반복문인 for 문, while 문, do~while 문의작성법을 알아본다. 1.1 반복문의필요성 반복문 동일한내용을반복하거나일정한규칙으로반복하는일을수행할때사용 프로그램을좀더간결하고실제적으로작성할수있음.

More information

PowerPoint Presentation

PowerPoint Presentation Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음

More information

API 매뉴얼

API 매뉴얼 PCI-DIO12 API Programming (Rev 1.0) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned

More information

chap01_time_complexity.key

chap01_time_complexity.key 1 : (resource),,, 2 (time complexity),,, (worst-case analysis) (average-case analysis) 3 (Asymptotic) n growth rate Θ-, Ο- ( ) 4 : n data, n/2. int sample( int data[], int n ) { int k = n/2 ; return data[k]

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 05 장 CSS3 선택자 1. 선택자개요 2. 기본선택자 3. 속성선택자 4. 후손선택자와자손선택자 5. 반응 / 상태 / 구조선택자 CSS 블록을생성할수있다. 선택자를이해하고적절한선택자를활용할수있다. 1 선택자개요 CSS3 선택자 특정한 HTML 태그를선택할때사용하는기능 선택한태그에원하는스타일이나스크립트적용가능 그림 5-1 CSS 블록 CSS 블록 style

More information

Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft PowerPoint - 04-UDP Programming.ppt Chapter 4. UDP Dongwon Jeong djeong@kunsan.ac.kr http://ist.kunsan.ac.kr/ Dept. of Informatics & Statistics 목차 UDP 1 1 UDP 개념 자바 UDP 프로그램작성 클라이언트와서버모두 DatagramSocket 클래스로생성 상호간통신은 DatagramPacket 클래스를이용하여

More information

gnu-lee-oop-kor-lec10-1-chap10

gnu-lee-oop-kor-lec10-1-chap10 어서와 Java 는처음이지! 제 10 장이벤트처리 이벤트분류 액션이벤트 키이벤트 마우스이동이벤트 어댑터클래스 스윙컴포넌트에의하여지원되는이벤트는크게두가지의카테고리로나누어진다. 사용자가버튼을클릭하는경우 사용자가메뉴항목을선택하는경우 사용자가텍스트필드에서엔터키를누르는경우 두개의버튼을만들어서패널의배경색을변경하는프로그램을작성하여보자. 이벤트리스너는하나만생성한다. class

More information

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp Lab 4. Circular singly-linked list 의구현 실험실습일시 : 2009. 4. 6. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 12. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Circular Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Circular

More information

Contents. 1. PMD ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 2. Metrics ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 3. FindBugs ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 4. ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ

Contents. 1. PMD ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 2. Metrics ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 3. FindBugs ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 4. ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 정적분석서 - 영단어수집왕 - Team.# 3 과목명 소프트웨어모델링및분석 담당교수 유준범교수님 201011320 김용현 팀원 201111360 손준익 201111347 김태호 제출일자 2015-06-09 1 Contents. 1. PMD ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 2. Metrics

More information

<4D F736F F F696E74202D20C1A63036C0E520BCB1C5C3B0FA20B9DDBAB928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63036C0E520BCB1C5C3B0FA20B9DDBAB928B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 6 장선택과반복 이번장에서학습할내용 조건문이란? if 문 if, else 문 중첩 if 문 switch 문 break문 continue문 지금까지는문장들이순차적으로실행된다고하였다. 하지만필요에따라서조건이만족되면문장의실행순서를변경할수있는기능이제공된다. 3 가지의제어구조 조건문 문장이실행되는순서에영향을주는문장 조건에따라서여러개의실행경로가운데하나를선택

More information

PowerPoint Presentation

PowerPoint Presentation 자바프로그래밍 1 배열 손시운 ssw5176@kangwon.ac.kr 배열이필요한이유 예를들어서학생이 10 명이있고성적의평균을계산한다고가정하자. 학생 이 10 명이므로 10 개의변수가필요하다. int s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; 하지만만약학생이 100 명이라면어떻게해야하는가? int s0, s1, s2, s3, s4,

More information

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다. Eclipse 개발환경에서 WindowBuilder 를이용한 Java 프로그램개발 이예는 Java 프로그램의기초를이해하고있는사람을대상으로 Embedded Microcomputer 를이용한제어시스템을 PC 에서 Serial 통신으로제어 (Graphical User Interface (GUI) 환경에서 ) 하는프로그램개발예를설명한다. WindowBuilder:

More information

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx 2018 학년도 1 학기 JAVA 프로그래밍 II 514760-1 2018 년봄학기 5/10/2018 박경신 Lab#1 (ImageTest) Lab#1 은영상파일 (Image) 을읽어서정보를출력 Java Tutorials Lesson: Working with Images https://docs.oracle.com/javase/tutorial/2d/images/index.html

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향

More information

Microsoft PowerPoint - 알고리즘_5주차_1차시.pptx

Microsoft PowerPoint - 알고리즘_5주차_1차시.pptx Basic Idea of External Sorting run 1 run 2 run 3 run 4 run 5 run 6 750 records 750 records 750 records 750 records 750 records 750 records run 1 run 2 run 3 1500 records 1500 records 1500 records run 1

More information

Gray level 변환 및 Arithmetic 연산을 사용한 영상 개선

Gray level 변환 및 Arithmetic 연산을 사용한 영상 개선 Point Operation Histogram Modification 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 HISTOGRAM HISTOGRAM MODIFICATION DETERMINING THRESHOLD IN THRESHOLDING 2 HISTOGRAM A simple datum that gives the number of pixels that a

More information

Microsoft PowerPoint - Chap12-OOP.ppt

Microsoft PowerPoint - Chap12-OOP.ppt 객체지향프로그래밍 (Object Oriented Programming) 12 장강사 강대기 차례 (Agenda) 멤버에대한동적메모리할당 암시적 / 명시적복사생성자 암시적 / 명시적오버로딩대입연산자 생성자에 new 사용하기 static 클래스멤버 객체에위치지정 new 사용하기 객체를지시하는포인터 StringBad 클래스 멤버에포인터사용 str static 멤버

More information

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - C++ 5 .pptx C++ 언어프로그래밍 한밭대학교전자. 제어공학과이승호교수 연산자중복 (operator overloading) 이란? 2 1. 연산자중복이란? 1) 기존에미리정의되어있는연산자 (+, -, /, * 등 ) 들을프로그래머의의도에맞도록새롭게정의하여사용할수있도록지원하는기능 2) 연산자를특정한기능을수행하도록재정의하여사용하면여러가지이점을가질수있음 3) 하나의기능이프로그래머의의도에따라바뀌어동작하는다형성

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

DocsPin_Korean.pages

DocsPin_Korean.pages Unity Localize Script Service, Page 1 Unity Localize Script Service Introduction Application Game. Unity. Google Drive Unity.. Application Game. -? ( ) -? -?.. 준비사항 Google Drive. Google Drive.,.. - Google

More information

BMP 파일 처리

BMP 파일 처리 BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)

More information

슬라이드 1

슬라이드 1 컬렉션프레임워크 (Collection Framework) 의정의 - 다수의데이터를쉽게처리할수있는표준화된방법을제공하는클래스들 - 데이터의집합을다루고표현하기위한단일화된구조 (architecture) - JDK 1.2 이전까지는 Vector, Hashtable, Properties와같은컬렉션클래스로서로다른각자의방식으로처리 - 컬렉션프레임워크는다수의데이터를다루는데필요한다양하고풍부한클래스들을제공하므로프로그래머의부담을상당부분덜어준다.

More information

Chapter 4. LISTS

Chapter 4. LISTS C 언어에서리스트구현 리스트의생성 struct node { int data; struct node *link; ; struct node *ptr = NULL; ptr = (struct node *) malloc(sizeof(struct node)); Self-referential structure NULL: defined in stdio.h(k&r C) or

More information

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - chap06-1Array.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-1 참고자료 배열 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 배열의선언과사용 같은형태의자료형이많이필요할때배열을사용하면효과적이다. 배열의선언 배열의사용 배열과반복문 배열의초기화 유연성있게배열다루기 한빛미디어

More information

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호 제이쿼리 () 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호 CSS와마찬가지로, 문서에존재하는여러엘리먼트를접근할수있다. 엘리먼트접근방법 $( 엘리먼트 ) : 일반적인접근방법

More information

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

var answer = confirm( 확인이나취소를누르세요.); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write( 확인을눌렀습니다.); else { document.write( 취소를눌렀습니다.); 자바스크립트 (JavaScript) - HTML 은사용자에게인터페이스 (interface) 를제공하는언어 - 자바스크립트는서버로데이터를전송하지않고서할수있는데이터처리를수행한다. - 자바스크립트는 HTML 나 JSP 에서작성할수있고 ( 내부스크립트 ), 별도의파일로도작성이가능하다 ( 외 부스크립트 ). - 내부스크립트 - 외부스크립트

More information

Microsoft PowerPoint - Lect04.pptx

Microsoft PowerPoint - Lect04.pptx OBJECT ORIENTED PROGRAMMING Object Oriented Programming 이강의록은 Power Java 저자의강의록을사용했거나재편집된것입니다. Class 와 object Class 와객체 클래스의일생 메소드 필드 String Object Class 와객체 3 클래스 클래스의구성 클래스 (l (class): 객체를만드는설계도 클래스로부터만들어지는각각의객체를특별히그클래스의인스턴스

More information

4장.문장

4장.문장 문장 1 배정문 혼합문 제어문 조건문반복문분기문 표준입출력 입출력 형식화된출력 [2/33] ANSI C 언어와유사 문장의종류 [3/33] 값을변수에저장하는데사용 형태 : < 변수 > = < 식 > ; remainder = dividend % divisor; i = j = k = 0; x *= y; 형변환 광역화 (widening) 형변환 : 컴파일러에의해자동적으로변환

More information

Microsoft PowerPoint - logo_2-미해답.ppt [호환 모드]

Microsoft PowerPoint - logo_2-미해답.ppt [호환 모드] Chap.2 Logo 프로그래밍기초 - 터틀그래픽명령어 ( 기본, 고급 ) 학습목표 터틀의이동과선그리기에대해살펴본다. 터틀의회전에대해살펴본다. 터틀펜과화면제어에대해살펴본다. 2012. 5. 박남제 namjepark@jejunu.ac.kr < 이동하기 > - 앞으로이동하기 forward 100 터틀이 100 픽셀만큼앞으로이동 2 < 이동하기 > forward(fd)

More information

API 매뉴얼

API 매뉴얼 PCI-TC03 API Programming (Rev 1.0) Windows, Windows2000, Windows NT, Windows XP and Windows 7 are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

Windows 8에서 BioStar 1 설치하기

Windows 8에서 BioStar 1 설치하기 / 콘텐츠 테이블... PC에 BioStar 1 설치 방법... Microsoft SQL Server 2012 Express 설치하기... Running SQL 2012 Express Studio... DBSetup.exe 설정하기... BioStar 서버와 클라이언트 시작하기... 1 1 2 2 6 7 1/11 BioStar 1, Windows 8 BioStar

More information

Chap 6: Graphs

Chap 6: Graphs AOV Network 의표현 임의의 vertex 가 predecessor 를갖는지조사 각 vertex 에대해 immediate predecessor 의수를나타내는 count field 저장 Vertex 와그에부속된모든 edge 들을삭제 AOV network 을인접리스트로표현 count link struct node { int vertex; struct node

More information

Chapter #01 Subject

Chapter #01  Subject Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned

More information

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - CSharp-10-예외처리 10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.

More information

JUNIT 실습및발표

JUNIT 실습및발표 JUNIT 실습및발표 JUNIT 접속 www.junit.org DownLoad JUnit JavaDoc API Document 를참조 JUNIT 4.8.1 다운로드 설치파일 (jar 파일 ) 을다운로드 CLASSPATH 를설정 환경변수에서설정 실행할클래스에서 import JUnit 설치하기 테스트실행주석 @Test Test 를실행할 method 앞에붙임 expected

More information

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어 개나리 연구소 C 언어 노트 (tyback.egloos.com) 프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어먹고 하더라구요. 그래서,

More information

자바로

자바로 ! from Yongwoo s Park ZIP,,,,,,,??!?, 1, 1 1, 1 (Snow Ball), /,, 5,,,, 3, 3, 5, 7,,,,,,! ,, ZIP, ZIP, images/logojpg : images/imageszip :, backgroundjpg, shadowgif, fallgif, ballgif, sf1gif, sf2gif, sf3gif,

More information

JAVA PROGRAMMING 실습 08.다형성

JAVA PROGRAMMING 실습 08.다형성 2015 학년도 2 학기 1. 추상메소드 선언은되어있으나코드구현되어있지않은메소드 abstract 키워드사용 메소드타입, 이름, 매개변수리스트만선언 public abstract String getname(); public abstract void setname(string s); 2. 추상클래스 abstract 키워드로선언한클래스 종류 추상메소드를포함하는클래스

More information

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070> #include "stdafx.h" #include "Huffman.h" 1 /* 비트의부분을뽑아내는함수 */ unsigned HF::bits(unsigned x, int k, int j) return (x >> k) & ~(~0

More information

Microsoft PowerPoint - lec2.ppt

Microsoft PowerPoint - lec2.ppt 2008 학년도 1 학기 상지대학교컴퓨터정보공학부 고광만 강의내용 어휘구조 토큰 주석 자료형기본자료형 참조형배열, 열거형 2 어휘 (lexicon) 어휘구조와자료형 프로그램을구성하는최소기본단위토큰 (token) 이라부름문법적으로의미있는최소의단위컴파일과정의어휘분석단계에서처리 자료형 자료객체가갖는형 구조, 개념, 값, 연산자를정의 3 토큰 (token) 정의문법적으로의미있는최소의단위예,

More information

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Spring Boot/JDBC JdbcTemplate/CRUD 예제 Spring Boot/JDBC JdbcTemplate/CRUD 예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) Spring Boot, Gradle 과오픈소스인 MariaDB 를이용해서 EMP 테이블을만들고 JdbcTemplate, SimpleJdbcTemplate 을이용하여 CRUD 기능을구현해보자. 마리아 DB 설치는다음 URL 에서확인하자.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 A 반 T2 - 김우빈 (201011321) 임국현 (201011358) 박대규 (201011329) Robot Vacuum Cleaner 1 Motor Sensor RVC Control Cleaner Robot Vaccum Cleaner 2 / Event Format/ Type Front Sensor RVC 앞의장애물의유무를감지한다. True / False,

More information