javascript 팁이 있는 곳입니다.
  • 웹미니 한줄 전광판 영역 입니다.
글 수 109

0

조회 수 : 8070 신고 : 0

작성자 : 이병준
포인트 : 0 | 레벨 : 0
미리보기 :  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
 <meta http-equiv="content-type" content="text/html; charset=ecukr">
  <TITLE>지렁이게임</TITLE>
    <style>
    .block {width:25px;height:25px;border:solid 3;border-color:#999999;border-top-color:#ffffff;border-left-color:#ffffff}
    .onblock {width:25px;height:25px;border:solid 2;border-color:#CC0000;background-color:red;}
    .hblock{width:25px;height:25px;border:solid 2;border-color:#0033CC;background-color:blue;}
    .nblock{width:25px;height:25px;border:solid 2;border-color:#339900;background-color:#33CC33;}
    .xblock{width:25px;height:25px;border:solid 2;border-color:#000000;background-color:#000000;}
    </style>
    <script>
    //////////////////////////////////////////////////////
    // 만든이 : 리트쿠우(LitQoo) / 김현수
    // 홈페이지 : hsdooki.namoweb.net / litqoo.tistory.com
    // 이메일 : hsdooki@dreamwiz.com
    //////////////////////////////////////////////////////

        var set_row=10;
        var set_col=10;
        var direction="t";
        var sn = new Array();
        var newblock = new snake(0,0);
        var cnt = 0;
        var timerid=0;
        var set_xblock=0;
        var ticker=0;

        
        //구조체
        function snake(x,y,st){
            this.x=x;
            this.y=y;
            this.st=st;
        }

        //랜덤함수
        function snake_rand(max){
            rand=0;
            while(rand==0)rand=(Math.floor(Math.random()*max));
            return rand;
        }

        //새꼬리 만드기
        function make_new(){
            while(1){
                x=snake_rand(set_col+1);
                y=snake_rand(set_row+1);
                tempname = eval("game.block_"+x+"_"+y+"");
                if(tempname.className=="block"){
                    tempname.className="nblock";
                    break;
                }
            }
            newblock.x = x;
            newblock.y = y;
        }

        //블럭디스플레이
        function display(s,st){
            tempname = eval("game.block_"+s.x+"_"+s.y+"");
            tempname.className = st;
        }

        //타이머
        function game_timer(){
            
            ticker++;
            
            //꼬리옮기기
            if(cnt>=1){
                display(sn[cnt],"block");
                for (i=cnt;i>=1;i--)
                {    
                    sn[i].x = sn[i-1].x;
                    sn[i].y = sn[i-1].y;                
                    display(sn[i],"onblock");
                }
            }

            //머리옮기기
            if(direction=="t")sn[0].y--;
            if(direction=="b")sn[0].y++;
            if(direction=="l")sn[0].x--;
            if(direction=="r")sn[0].x++;
            
            //끝났는지 범위 검사
            if(sn[0].x<=0 || sn[0].y<=0 || sn[0].y>set_row || sn[0].x>set_col){game_end(); return false;}
            tempname = eval("game.block_"+sn[0].x+"_"+sn[0].y+"");
            
            //새블럭먹었을경우 꼬리 늘이고 새블럭
            if(tempname.className=="nblock"){
                cnt++;
                sn[cnt] = new snake(sn[cnt-1].x,sn[cnt-1].y);
                display(sn[cnt],"onblock");
                make_new();

            //끝났는지 블럭검사
            }else if(tempname.className!="block"){
                game_end(); return false;
            }
            
            //포인트계산
            game.gp.value=cnt*10+set_xblock*100+ticker;

            //머리블럭 나타내기
            display(sn[0],"hblock");
            
            //속력계산
            turm = 800-cnt*20;
            if(turm<200)turm=200;
            game.speed.value = turm;
            timerid=setTimeout("game_timer()",turm);
        }

        //그리기
        function make_map(){
            temp="";
            for(y=1;y<=set_row;y++){
                for(x=1;x<=set_col;x++){
                    temp+=("<input type=button name='block_"+x+"_"+y+"' class='block'>");
                }
                temp+=("<br>");
            }
            return temp;
        }
        
        //방향설정
        function game_key(event){
            if(event.keyCode==37)direction="l";
            if(event.keyCode==38)direction="t";
            if(event.keyCode==39)direction="r";
            if(event.keyCode==40)direction="b";
        }
    
        //게임시작, 초기화
        function game_start(){
            set_col = game.game_col.value*1;
            set_row = game.game_row.value*1;
            set_xblock = game.game_xblock.value*1;
            ticker=0;
            newblock.x=0;
            newblock.y=0;
            sn[0]=new snake(5,5);
            sn[1]=new snake(5,6);
            cnt = 1;
            //그리기
            map = make_map();
            document.getElementById("game_div").innerHTML=map;
            game_timer();
            make_new();
            make_xblock();
        }

        //장애물 생성
        function make_xblock(){
            check=1;
            while(set_xblock>=check){
                x=snake_rand(set_col-1)+1;
                y=snake_rand(set_row-1)+1;
                xbox=new snake(x,y);
                tempname = eval("game.block_"+x+"_"+y+"");
                if(tempname.className=="block"){
                    display(xbox,"xblock");
                    check++;
                }
            }
        }

        //게임끝
        function game_end(){
            game.gdata.value="가로:"+game.game_col.value+",세로:"+game.game_row.value+",장애물:"+game.game_xblock.value+",꼬리:"+cnt+",시간:"+ticker;
            clearTimeout(timerid);        
            alert("게임끝");
        }

    </script>
 </HEAD>
 <BODY onload="" onkeydown="game_key(event)">
 

 <form name=game method="post">
<INPUT TYPE="hidden" NAME="gid" value="snake">
<input type="hidden" name="gdata" value="">
<input type="hidden" name="gpoint" value="">

 <TABLE border=1 align=center>
 <TR>
    <TD> 가로<input name=game_row value=10 size=3>
            세로<input name=game_col value=10 size=3>
            장애물<input name=game_xblock value=5 size=3><INPUT TYPE="button" VALUE="게임시작" ONCLICK="game_start()"></TD>
 </TR>
 <TR>
        <TD align=center>    
            <div id="game_div">        
            <script>
            for(y=1;y<=set_row;y++){
                for(x=1;x<=set_col;x++){
                    document.write("<input type=button name='block_"+x+"_"+y+"' class='block'>");
                }
                document.write("<br>");
            }
            </script>
            </div>
        </TD>
 </TR>
 <TR>
    <TD align=center>점수<input name=gp value=0 size=3 readonly> 속도<input name=speed value=0 size=3 readonly> </TD>
 </TR>
 </TABLE>
 </form>
 </BODY>
</HTML>

소스를 다듬을 필요가 있을것 같은데 영 귀찮네요...
그나저나 링크엔 점수를 등록하여 랭킹을 표시할수있게 해놨는데
이걸 계속 뚫으시는 분들이 있네요. 이런 개구쟁이들 같으니..
당췌 이걸 어떻게 막아야 할지..
소중한 댓글 부탁드립니다.
추천수 10단위당 메달이 1개씩 노출되고, 추천수에 따라 배경색이 변하며, 일정수의 추천수를 받을시 BEST 아이콘이 붙게됩니다.
추천수에 따른 배경색 보기 본문으로 바로가기
  • 추천수 50개이상
  • 추천수 30개이상
  • 추천수 20개이상
  • 추천수 10개이상
  • 추천수 3개이상
닫기

첫번째 댓글을 남겨주세요!

List of Articles
번호 제목 글쓴이 날짜 추천 수sort 조회 수
89 자바스크립트 1일차 document [1] title: [ani]보라색 나비바비인형 2005-04-09 17 6090
88 속보용 알림장 [1] title: [ani]깜빡이는 표정빽짱구 2004-04-08 17 5064
87 상태표시줄에 링크주소 감추기 title: [ani]깜빡이는 표정빽짱구 2004-04-30 16 7286
86 따라다니는 메뉴 끄기기능까지 title: [ani]깜빡이는 표정빽짱구 2004-04-05 16 5264
85 자바스크립트 3일차 prompt, parseInt [2] title: [ani]보라색 나비바비인형 2005-04-11 15 6995
84 작은 그림과 큰그림 한문서 안에 넣기 [2] title: [ani]깜빡이는 표정빽짱구 2004-02-07 15 5490
83 hit 탭메뉴 소스 title: [ani]깜빡이는 표정빽짱구 2006-03-09 14 15212
82 브라우저를 동적으로 부드럽게 리사이징하기 title: [ani]깜빡이는 표정빽짱구 2006-02-05 14 8343
81 D-day 스크립트 title: [ani]깜빡이는 표정빽짱구 2004-02-29 14 7979
80 즐겨찾기 추가하기 title: [ani]깜빡이는 표정빽짱구 2004-02-16 14 5665
79 상태표시줄을 바꿔보자5 (마퀴형식) title: [ani]깜빡이는 표정빽짱구 2004-02-07 14 4790
78 이미지 체인징 효과주기 title: [ani]깜빡이는 표정빽짱구 2004-02-07 14 6109
77 hit 새창 띄우는 스크립트 [2] title: [ani]깜빡이는 표정빽짱구 2005-08-23 13 10520
76 익스플로어 상태 표시줄에 스크립트 에러 경고 없애기 title: [ani]깜빡이는 표정빽짱구 2005-01-20 13 8137
75 상태표시줄 링크주소 가리기 [1] title: [ani]깜빡이는 표정빽짱구 2004-08-06 13 7569
74 타이틀바 꾸미기3 (옆으로 움직임) [1] title: [ani]깜빡이는 표정빽짱구 2004-04-22 13 5703
73 오른쪽 마우스 클릭시 즐겨찾기 나오기 title: [ani]깜빡이는 표정빽짱구 2004-04-07 13 4975
72 상태표시줄 링크주소 안보이게 하기 title: [ani]깜빡이는 표정빽짱구 2004-02-28 13 9570
71 렌덤배경 이미지 title: [ani]깜빡이는 표정빽짱구 2004-02-22 13 4921
70 상태표시줄 바꿔보자4 (소문자가 대문자로) [1] title: [ani]깜빡이는 표정빽짱구 2004-02-07 13 4916