• 黑马程序员——贪吃蛇游戏项目分析过程


    ---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

    第一步:从什么地方入手

    1、 设计到几个对象(类)

    2、 每个类有什么方法

    游戏的显示面板

    GamePanel类

    Void display();//显示

    方块

    Shape类

    void moveLeft();           //左移

    void moveRight();         //右移

    void moveDown();        //下移

    void rotate();                //旋转(变形)

    void drawMe();             //显示

    自己能定时下移

    图形工厂

    ShapeFactory类(图形工厂)

    Shape getShape();           //生产出不同形状的图形

    Ground类

    Void accept(Shape);              //接受图形,把图形变成障碍物

    Void drawMe();                    //显示

    需要一个Controller类

    处理GamePanel激发的按键事件

    根据不同的情况、向Shape、ShapeFactory、Ground或GamePanel发出不同的指令

    第二步:过程设计分析:

    图形定时下落,每下落一次后都需要重新显示

    图形移动和变形后,也需要重新显示

    它又不能直接操控GamePanel,怎么办呢?

    Shape定时下落(事件源)——(shapeMovedDown)下落后,触发事件——Controller(状态改变需要重新显示)

    Shape的监听器ShapeListener


    ShapeListener

    Void shapeMovedDown(Shape);

    第三步:图形设计,及游戏过程设计

    基本概念:怎么表示图形,障碍物

    1、可以把显示区域想象成一个大大表格,一个格子可以代表一个障碍物,几个连在一起的格子可以组成一个图形。

    2、怎么区分格子呢(怎么表示这个格子呢?)

    用坐标,每个格子有它自己的坐标,左上角的那个格子的坐标是(0,0)

    重要概念:怎么表示图形的状态


    1、 图形变形:变形就是显示下一个状态

    2、 表示图形的状态


    图形的多种状态


    3、 图形的移动

    图形类里面要保存自己的位置信息,用left表示图形到左边界的距离,top表示图形到上边界的距离

    图形移动就是改变left和top的值

    基本概念:图形绝对坐标和相对坐标


    图形的移动


    4、画图形

    把组成图形的格子画出来:

    画方阵中标志为1的格子,标志为0的不画。

    图形中的格子在显示区域中的位置为:

    X坐标:left + 格子的x相对坐标

    Y坐标:top + 格子的y相对坐标

    (相对坐标是格子在方阵中的坐标)

    格子的宽度和高度


    格子坐标和像素坐标


    图形的移动或变形

    按键以后,图形是否就一定能够移动或变形?

           不一定,如果下一步的动作会使图形超出边界或有的点与障碍物重叠,则不允许图形做这个动作。



    5、 怎么存储和表示障碍物

    用一个和显示区域的格子相对应的二维数组保存障碍物的位置信息

    如果对应的位置是障碍物,则这个数组中相应的元素就为1,不是则为0

    6、 怎么把图形变成障碍物

    把属于图形的格子对应的位置都变成障碍物

    判断时要注意

            是指图形的身体超出边界或与障碍物重叠,而不是表示这个图形的4 x 4的方阵,因为方阵中的点并不都是图形的身体

    7、消除满行

           这个一行没有空白,则这一行就是满行

           满的那行,上面所有的行,整体下移一行,就是消除这个满行

    8、 判断游戏是否结束

    如果有的障碍物超出了上边界(容器满了),就是游戏结束

    完善后的Ground

    Ground类

    BooleanisMoveable(Shape,action);              //图形下一步的动作是否会被允许(边界、障碍物)

    Voidaccept(Shape);        //接受图形(把图形变成障碍物)

    VoiddeleteFullLine();     //扫描并删除满行

    Boolean isFull();     //是否还可以接受图形(是否满了)

    Void drawMe();              //显示自己的方法

    附录:俄罗斯、贪吃蛇游戏-项目视频及源代码下载http://www.itcast.cn/itcast_static/snakeVideo.htm


    ---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

    详细请查看:<a href="http://edu.csdn.net/heima" target="blank">http://edu.csdn.net/heima</a>

  • 相关阅读:
    http://the-automator.com/set-excel-font/
    ds finder 唤醒
    gateone8271
    todo
    VS调试运行出错,某些类库项目中引用的命名空间提示不存在
    很有意思的问题
    关于textedit 某些电脑下 输入 显示不全的问题
    SQL Server把一台服务器上的数据库转移到另外一台服务器上。而转移完成后,需要给一个"登录"关联一个"用户"时,发生错误:“错误15023:当前数据库中已存在用户或角色”或“用户、组或角色 在当前数据库中已存在”
    构造简单好用的年份、年月选择器
    大数据下的grid显示
  • 原文地址:https://www.cnblogs.com/kuyuyingzi/p/4266439.html
Copyright © 2020-2023  润新知