디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

형들 제 질문을 받아주thㅔ요

유동늅(218.238) 2011.04.25 20:03:35
조회 106 추천 0 댓글 14

거북이가 움직이는데, 그 거북이가 팬을 물고있으면 거북이가 지나간 자리에 선을 찍찍 긋고, 아니면 그냥 거북이만 움직이고

1로 거북이 팬 놓게 하고, 2로 거북이 팬 집고, 3으로 우회전, 4로 좌회전, 5, (int)로 int 만큼 전진, 6으로 결과 출력 9로 뭐시기저시기...
문제를 풀어달라는게 아니라, 이미 문제는 풀었고 제출까지 끝냈는데 코드를 보니 좀 더 효율적으로 짤 수 있을거 같고, 지금 코드는 헛점도 있어서..
잠시만 시간을 내 줘서.. 이러면 좀 더 나아질거다 같은 충고를 해 줬으면 해서 글을 싸 봤어... 아래에 코드야.

코드는 자바로 짰어!

----------------------------------------------------------------
public class TurtleGraphicsTest {
        
        public static void main( String[] args )
        {
                System.out.println("The Turtle Graphics!");
                
                TurtleGraphcis myTurtleGraphcis = new TurtleGraphcis();
                
                myTurtleGraphcis.order();
                
                System.out.println("good bye!");
        }

}

----------------------------------------------------------------

import java.util.Scanner;

public class TurtleGraphcis {
        
        private int penStatus=0; // 팬의 상태, 0이면 팬 업, 1이면 팬 다운
        private int turtleDirection=12; // 팬의 방향
        private int[][] map = new int[20][20];
        private int currentRow=0;
        private int currentColumn=0;
        Scanner input = new Scanner( System.in );
        
        
        //거북이 명령 내리는 함수        
        public void order()
        {
                int orderNumber=0;
                
                System.out.println("Enter Your order.");
                System.out.printf("1 is pen up.\\n2 is pen down.\\n" +
                                "3 is turn right.\\n4 is turn left.\\n" +
                                "5 and integer is move integer.\\n" +
                                "6 Display the 20-by-20 array\\n" +
                                "9 is End of date.\\n");
                do
                {
                        System.out.println("Order me!");
                        orderNumber = input.nextInt();
                        
                        switch(orderNumber)
                        {
                                case 1:        //팬 업
                                        setPenStatus(0);
                                        break;
                                case 2:        //팬 다운
                                        setPenStatus(1);
                                        break;
                                case 3:        //거북이 우회전
                                        turtleDirectionPlus();
                                        break;
                                case 4:        //거북이 좌회전
                                        turtleDirectionMinus();
                                        break;
                                case 5:        //거북이 직진
                                {
                                        System.out.println("How many I move?");
                                        move(input.nextInt());
                                        break;
                                }
                                case 6:        //거북이 이동경로 출력
                                {        displayMap();
                                        break;
                                }
                                case 9:        //거북이 그만 가지고 놀기
                                        break;
                                default://이상한 명령이 내려졌을 때
                                        System.out.println("Enter enable order.\\n");
                                        break;
                        }
                }while(orderNumber !=9);
        }
        
        //팬 상태 조종 함수 부분
        public void setPenStatus(int status)
        {
                penStatus = status;
        }
        
        public int getPenStatus()
        {
                return penStatus;
        }//팬 상태 조종 함수 끝
        
        
        //거북이 방향 조종 함수        
        public void turtleDirectionPlus()
        {
                turtleDirection += 1;
        }
        
        public void turtleDirectionMinus()
        {
                turtleDirection -=1;
        }
        
        public int getTurtleDirection()
        {
                return turtleDirection;
        }//거북이 방향 조종 함수 끝
        
        
        //거북이 현재 위치 함수
        public void setCurrentRow(int row)
        {
                currentRow = row;
        }
        
        public void setCurrentColumn(int column)
        {
                currentColumn = column;
        }
        
        public int getCurrentRow()
        {
                return currentRow;
        }
        
        public int getCurrentColumn()
        {
                return currentColumn;
        }
        
        //거북이 이동함수
        public void move(int forward)
        {
                int a = forward;
                int direction;
                direction = getTurtleDirection()%4;
                
                if(direction==0)
                        moveRight(a);
                else if(direction==1)
                        moveDown(a);
                else if(direction==2)
                        moveLeft(a);
                else if(direction==3)
                        moveUp(a);
        }
        
        //거북이 오른쪽 이동
        public void moveRight(int a)
        {
                for(int b=1; b<=a; b++ )
                {
                        if(getCurrentColumn()>=19)
                        {
                                System.out.println("Turtle can\'t move anymore.");
                                break;
                        }


                        if(getPenStatus()==1)
                        {
                                map[getCurrentRow()][getCurrentColumn()] = 1;
                                map[getCurrentRow()][getCurrentColumn()+1] = 1;
                                setCurrentColumn(getCurrentColumn()+1);
                        }
                        else if(getPenStatus()==0)
                        {
                                setCurrentColumn(getCurrentColumn()+1);
                        }
                }
        }
        
        //거북이 왼쪽 이동
        public void moveLeft(int a)
        {
                for(int b=1; b<=a; b++ )
                {
                        if(getCurrentColumn()<=0)
                        {
                                System.out.println("Turtle can\'t move anymore.");
                                break;
                        }
                        
                        
                        if(getPenStatus()==1)
                        {
                                map[getCurrentRow()][getCurrentColumn()] = 1;
                                map[getCurrentRow()][getCurrentColumn()-1] = 1;
                                setCurrentColumn(getCurrentColumn()-1);
                        }
                        else if(getPenStatus()==0)
                        {
                                setCurrentColumn(getCurrentColumn()-1);
                        }
                }
        }
        
        //거북이 위로 이동
        public void moveUp(int a)
        {
                for(int b=1; b<=a; b++ )
                {
                        if(getCurrentRow()<=0)
                        {
                                System.out.println("Turtle can\'t move anymore.");
                                break;
                        }
                        
                        
                        if(getPenStatus()==1)
                        {
                                map[getCurrentRow()][getCurrentColumn()] = 1;
                                map[getCurrentRow()-1][getCurrentColumn()] = 1;
                                setCurrentRow(getCurrentRow()-1);
                        }
                        else if(getPenStatus()==0)
                        {
                                setCurrentRow(getCurrentRow()-1);
                        }
                }
        }
        
        //거북이 아래로 이동
        public void moveDown(int a)
        {
                for(int b=1; b<=a; b++ )
                {
                        if(getCurrentRow()>=19)
                        {
                                System.out.println("Turtle can\'t move anymore.");
                                break;
                        }
                        
                        
                        if(getPenStatus()==1)
                        {
                                map[getCurrentRow()][getCurrentColumn()] = 1;
                                map[getCurrentRow()+1][getCurrentColumn()] = 1;
                                setCurrentRow(getCurrentRow()+1);
                        }
                        else if(getPenStatus()==0)
                        {
                                setCurrentRow(getCurrentRow()+1);
                        }
                }
        }
        
        
        //거북이 이동경로 출력
        public void displayMap()
        {
                for(int row=0; row < map.length; row++)
                {
                        for(int column=0; column < map[row].length; column++)
                        {
                                if(map[row][column]==1)
                                {
                                        System.out.print(" *");
                                }
                                
                                else if (map[row][column]==0)
                                {
                                        System.out.print("  ");
                                }
                        }
                        System.out.println();
                }
        }
}
------------------------------------------------------------------------------------

 내가 가장 궁금한건 두가지인데,

첫째로, 거북이의 방향을 변수 turtledirection을 mod 4 해서, 그 값에 따라서 방향을 알아내는 방식을 사용하려고 했는데, 처음에는 저 변수를 0으로 초기화했다가, 만약 사용자가 처음에 왼쪽으로 움직여 버리면 음수가 되서 .. 음수값은 mod 못 하는거 맞지? 여튼 그런 문제점때문에 넉넉하게 12를 줬는데, 만약 사용자가 프로그램을 시작하자마자 파워하게 거북이를 좌로 13번 이상 돌려버리면 음수값이 되잖아..? 거북이가 너무 돌아서 주것슴다.. 라고 출력 할 수도 없는 노릇이고.. 더 좋은 방법이 있을까?

그리고 두번째로, 거북이가 상하좌우로 움직일 때 마다 다른 함수를 쓰는데.. 이걸 하나의 함수로 깔끔하게 처리 할 수 있을까? 저거만 줄여도 코드가 많이 줄어들고 더 보기 좋을거 같고.. 간결하게 표현 할 수 있을거 같은데 생각해내기가 힘드네..

그리고 혹시 다른 코드상 문제점 같은게 있으면 그것도 알려줬으면 해. 학부에 편입해서.. 객체지향이다 과정?지향이다 도 아직 잘 모르고.. 해서 아마 코드가 무척 지저분하고 그럴 거 같은데.. 짧은 조언이라도 좋으니까 부탁할게 형들!


추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 서비스업에 종사했다면 어떤 진상 고객이라도 잘 처리했을 것 같은 스타는? 운영자 24/10/14 - -
275021 엑세스 옜날버전에서 ㅇㅇ 0길이 허용이 null 맞지? kk(115.93) 11.09.23 33 0
275020 디버깅 창이 자꾸 꺼지네... 형들 도와줘ㅠ [9] 아스갤로그로 이동합니다. 11.09.23 95 0
275019 저는 멍청합니다. [2] 나 프갤할레갤로그로 이동합니다. 11.09.23 45 0
275017 최근의 분당살람의 일상 사진포함 [1] 분당살람갤로그로 이동합니다. 11.09.23 97 0
275016 16진수 를 10진수로 바꾸려면 어떻게 짜야하나요? [1] 서래마을산다갤로그로 이동합니다. 11.09.23 61 0
275015 최근의 분당살람의 일상 분당살람갤로그로 이동합니다. 11.09.23 69 0
275014 정보통신에서 한줄기 빛을 받았다 [뒷 주의] [1] 힙꼬맹갤로그로 이동합니다. 11.09.23 112 0
275012 키 1cm 크기 vs 프로그래밍 언어 레퍼런스 하나 통째로 외워지기 [3] ㅇㅇ(222.107) 11.09.23 115 0
275010 소스고치는것좀 도와줘요ㅠㅠ [2] ㅇㅕ대생(124.55) 11.09.23 84 0
275009 요로코롬 했는데 괜찮나요? [4] 서래마을산다갤로그로 이동합니다. 11.09.22 58 0
275008 오오 혼자서 안드로이드로 개인 프로젝트 하고 있는데.. 쿄스케갤로그로 이동합니다. 11.09.22 72 0
275007 비주얼씨에서 에러 어떻게 찾나요? [2] 서래마을산다갤로그로 이동합니다. 11.09.22 70 0
275006 프갤 공식 웹툰.html warota(221.150) 11.09.22 103 0
275004 자바좀 해야 되는데 거부감이 엄청남 [6] [성대아싸]갤로그로 이동합니다. 11.09.22 118 0
275003 횽들 [2] At Sunset갤로그로 이동합니다. 11.09.22 35 0
275002 님들 비주얼 스튜디오 2010 프로페셔널좀 주실분 ㅠㅠㅠㅠ [8] 칸토캣갤로그로 이동합니다. 11.09.22 85 1
275000 횽들 c언어 배우고 있는데 [1] At Sunset갤로그로 이동합니다. 11.09.22 56 0
274999 횽아들 포인터가 너무어려워서 코딩이 힘든데 좀만 도와주세여 ㅠㅠ [14] 닥회드,(110.13) 11.09.22 106 0
274998 IT로 성공한 사람은 대부분 명문대 출신임 [3] v(118.37) 11.09.22 316 0
274997 으으... 내 양심에 테스트를 받는중... [5] ㅇ.ㅇ(61.33) 11.09.22 72 0
274996 치킨집 개업할 돈이나 동료는 구했어?? warota(221.150) 11.09.22 48 0
274993 우와~.. 프갤 게시판 숙제 갤로 도배 당했네염 내꿈은버스기사갤로그로 이동합니다. 11.09.22 35 0
274992 pc 정비사 자격증 관련 질문좀 해도 괜찮을까여.. [6] ef.갤로그로 이동합니다. 11.09.22 91 0
274991 java 6개월 양산형 학원생갤러가 길을 잘 가고있는건지 질문합니다 [14] ㅁㄴㅇㅁㄴㅇ(182.208) 11.09.22 190 0
274989 문제 푸는데 c언어 이문제좀 간단하고 쉬운건데ㅠㅠ [4] ㅁㅁ(221.140) 11.09.22 359 0
274988 n횽 보긔요 [1] 쿄스케갤로그로 이동합니다. 11.09.22 52 0
274987 책 추쳔해줘줍쇼 . 츄젹방지(121.134) 11.09.22 46 0
274986 뇌지랄 알고리즘 조음? [2] C언어찌랭이갤로그로 이동합니다. 11.09.22 87 0
274985 학력은 필요없고 실력이 중요하다고? 그럼 학력은 실력이 아니란 거냐? [4] ㅇㅇ(222.107) 11.09.22 90 0
274984 쿄스케횽 네이트온들어와바빨리 ㅇㅇ Light search갤로그로 이동합니다. 11.09.22 22 0
274983 찰지구나 [2] SODMaster갤로그로 이동합니다. 11.09.22 30 0
274982 지식인의 힘으로 1번 풀었어요 ㅠㅠㅠㅠ [9] 서래마을산다갤로그로 이동합니다. 11.09.22 69 0
274981 여기 토크온,게임톡 하는사람있냐 [3] Light search갤로그로 이동합니다. 11.09.22 67 0
274977 남자가 봤을때 꼴불견인 남자 [5] 막장갤신학생갤로그로 이동합니다. 11.09.22 89 0
274976 좆대딩 입니다. [2] 내꿈은버스기사갤로그로 이동합니다. 11.09.22 46 0
274975 이 프로그래밍 뭐부터 풀어야되요? [7] ㅇㅇㅇ(61.105) 11.09.22 66 0
274972 난 사실 창조적이지 못해 [2] 로하로하알로하갤로그로 이동합니다. 11.09.22 40 0
274971 액션스크립트 이것좀 갈켜줘~ [2] ㅇㅇ(112.186) 11.09.22 45 0
274968 프갤러 개쉙기들 얼호가 글싸면 댓글 달고 내가 싸면???? [13] 로하로하알로하갤로그로 이동합니다. 11.09.22 71 0
274967 책 빌려달라는 인간 싫다 막장갤신학생갤로그로 이동합니다. 11.09.22 37 0
274966 새로운걸 창조하는게 개발자 맞지? [7] 힙꼬맹갤로그로 이동합니다. 11.09.22 70 0
274965 교수가 팩토리얼이랑 자연상수 문제로 내줫는데 [12] 일광면갤로그로 이동합니다. 11.09.22 154 0
274964 형들 저좀 도와주세요 ㅠㅠㅠㅠ [20] 서래마을산다갤로그로 이동합니다. 11.09.22 119 0
274963 리눅스 오 퍽킹 [4] 막장갤신학생갤로그로 이동합니다. 11.09.22 64 0
274962 얼호형 나 자짤 하나 그려줘. SODMaster갤로그로 이동합니다. 11.09.22 37 0
274961 얼호야 컴퓨터로도 그림 그리냐?? [11] 쿄스케갤로그로 이동합니다. 11.09.22 86 0
274960 잠시 c는 쫌 그만두고 디자인패턴에 대해 공부하고 싶은데 [3] 일광면갤로그로 이동합니다. 11.09.22 56 0
274959 for가 좋다 while이 좋다가 아니라 각자의 용도가 있는거임. [7] 숙신갤로그로 이동합니다. 11.09.22 92 0
274958 혀..형들.. C# 클래스파일 지운거 다시 못살림 ㅠ? [1] 아리햏(210.123) 11.09.22 39 0
274957 내가 학교 딱 처음갔을때느낀건데 [4] Light search갤로그로 이동합니다. 11.09.22 105 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2