Java贪吃蛇随笔

    private static Random r = new Random(); //利用random 

 

    this(r.nextInt(Yard.ROWS-2) + 2, r.nextInt(Yard.COLS));// nextInt(int a)  在0  到a  范围内产生随机数

 

 

  贪吃蛇编写步骤:

面向过程思想: 首先利用SE桌面编程  画出Frame框   然后加载线程 每隔一段时间重绘 内部的图像 包括  线 背景 蛇  蛋等

                    蛇 利用双向链表来表示

                    蛇与Egg吃掉 利用区域重合原理

 

面向对象:   Yard 就是背景框  主要属性 长 宽  背景颜色

                                         主要方法  刷新 重绘  键盘检测等

                                           键盘检测第一次用到:

private class KeyMonitor extends KeyAdapter {

        @Override
        public void keyPressed(KeyEvent e) {
            int key = e.getKeyCode();
            if(key == KeyEvent.VK_F2) {
                paintThread.reStart();
            }
            s.keyPressed(e);
        }

                   Snake  蛇  因为要做成双向链表  属性为 头 尾

                                           主要方法:1。 向头或尾添加Node节点

                                                         2. 尾部删除Node

                                                         3.   移动(在头部添加Node 尾部删除Node)

                                                         4.  Eat Egg 判断方式是  头 Node 和 Egg矩形区域是否重合

                                                                if(this.getRect().intersects(e.getRect())) {   //getRect 是自定义方法  intersects  是比较是否重复
                                                                     e.reAppear();

                                                          5.  判断是否有死亡  经过我改编变成了只能撞到自己身子 死亡    判断头Node的横纵 和 其它身子的横纵是否相等

                                                          6. 将蛇画出来 就是遍历Node元素 调用node类的Darw

                       Node类  :  是双向链表的一个元素  包括Node的 1.横纵 坐标点  

                                                                                      2.每个Node都有其自己的方向

                                                                                       3.其指向前一个的指针 和指向后一个元素的指针

                      Egg类:   就是随机出现Egg  包括 横纵坐标等

 

总结: 学习贪吃蛇游戏  并自己动手将其改编成了  撞到墙壁不死而是穿过墙壁 ,程序如下。

public void addToHead() {
        Node node = null;
        switch(head.dir) {
        case L :
            if(head.col==0){
                node = new Node(head.row, Yard.COLS, head.dir);
            }
            else{
                node = new Node(head.row, head.col - 1, head.dir);
            }
            break;
        case U :
            if(head.row==0){
                node = new Node(Yard.ROWS, head.col, head.dir);        
            }
            else {
                node = new Node(head.row - 1, head.col, head.dir);    
            }
            break;
        case R :
            if(head.col==Yard.COLS){
                node = new Node(head.row, 0, head.dir);    
            }
            else {
                node = new Node(head.row, head.col + 1, head.dir);
            }
            break;
        case D :
            if(head.row==Yard.ROWS){
                node = new Node(0, head.col, head.dir);
            }
            else {
                node = new Node(head.row + 1, head.col, head.dir);
            }
            break;
        }
        node.next = head;   // 双向链表 指针 新new出来的数  指向 开头   
        head.prev = node;   //开头那那个node 向前指向 head
        head = node;
        size ++;
    }

 

觉得写本游戏的收获:1.在实际出发 理解面向对象编程思想  

                            2. Snake  分成 Node 来写 每个Node都有自己的方向  也是绝了  顺其自然的实现了拐弯之类的

                            3.蛇在增长 的时候是  改变指针指向下一个  移动的时候是将后一个放在前一个头

                            4.学会键盘检测

转载于:https://www.cnblogs.com/zhaoprence/p/4772262.html

你可能感兴趣的:(Java贪吃蛇随笔)