java - 贪吃蛇相关问题?
黄舟
黄舟 2017-04-17 17:55:08
0
1
706

先附上地址:https://github.com/KingJeason/MySnake.git。
第一个问题 :
我判断蛇死亡的函数是:

private void checkDead() {

    for(`Node` n = head.next; n != null; n = n.next) {
        if(getRectangle(head).intersects(getRectangle(n))) {
            y.stop(y.gogogo);
        }
    }
    
}

意思就是遍历一遍蛇。如果蛇头的区域和蛇神的任何一个区域有交集。则死亡。
Ok。让我们回到游戏中。比如一条蛇从左到右行驶。

这时,如果迅速按下 下-左键。蛇就会死亡。原因是蛇还没有往下走一格就向左移动。则碰到了蛇的第二个节点。这就比较蛋疼了 。该如何改进。

第二个问题。
我设计的思路是由诺基亚老款机有一款贪吃蛇游戏而得。(黑白屏的那种) 就是每吃五个球。会出现一个分数比较高的大球。 先说说我写的小球的实现吧。
public void eat(Egg e){

    if(this.getRectangle(head).intersects(e.getRectangle())){
        e.reAppear();//如果蛇头和小球有交集,则改变小球的位置。
        this.addTohead();//增加蛇的一节。
        this.score += 5;//分数+5。
        
    }
}

然后我在线程里调用了这个函数。
但是大球该如何实现呢。我的思路是 在 Egg(小球)类里写一个成员变量
public static int num = 0;
然后在线程成判断

 if(e.num % 5 == 0 && e.num != 0){
                
                b.draw(g);//调用BigEgg(大球)里的draw方法。
            }

说了这么多,我的问题来了 ,大球总要吃吧。在吃完大球后,我不希望他再次出现,而是要等小球再次吃五次才出现大球。这时,eat方法该怎么写。。。
if(this.getRectangle(head).intersects(e.getRectangle())){
????
}

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

모든 응답(1)
Peter_Zhu

귀하의 코드를 살펴보고 몇 가지 제안을 드렸습니다.

bin 폴더에 있는 클래스 파일을 git에 추가하는 것은 권장하지 않습니다

질문 1: 뱀이 한 칸에 도달하면 뱀이 죽었는지 확인하는 기능을 실행하세요. 이전에 C 언어로 욕심쟁이 뱀을 작성한 적이 있습니다. 내 방법은 2차원 배열을 유지하고 이 2차원 배열을 사용하여 뱀의 몸을 나타내는 것입니다. 1은 뱀의 몸임을 의미합니다. 뱀의 몸이 아니다.

참조: https://github.com/sadhen/snacurse

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿