2017-2018-1 20162304 实验五

2017-2018-1 20162304 实验五

分析系统架构

  • 我们就从图中提取出较为重要的游戏界面进行分析
  • 主要类:AnimLayer类、Card类、GameView类、Config类
  1. AnimLayer类是用于控制动画效果的类,以下为其中一段控制方块合并消失的动画

    public void createMoveAnim(final Card from, final Card to, int fromX,
            int toX, int fromY, int toY) {
        final Card c = getCard(from.getNum());      //将要移动的Card从原来的地方消失
        LayoutParams lp = new LayoutParams(Config.CARD_WIDTH, Config.CARD_WIDTH);   //CARD_WIDTH=0
        lp.leftMargin = fromX * Config.CARD_WIDTH;  //将card里面的布局的宽和高变成0;
        lp.topMargin = fromY * Config.CARD_WIDTH;
        c.setLayoutParams(lp);  //c在执行这个方法之后,view的大小将发生改变
    
        if (to.getNum() <= 0) {    //如果移动到的位置的Card为0,则将此Card的TextView隐藏。
            to.getLabel().setVisibility(View.INVISIBLE);
        }
  2. Card类是2048中每个小卡片的类,以下这段代码是为不同数值的卡片附上不同的颜色
    public void setNum(int num) {
        this.num = num;
    
        if (num<=0) {
            label.setText("");
        }else{
            label.setText(num+"");
        }
    
        switch (num) {
        case 0:
            label.setBackgroundColor(0x00000000);
            break;
        case 2:
            label.setBackgroundColor(0xffeee4da);
            break;
        case 4:
            label.setBackgroundColor(0xffede0c8);
            break;
        case 8:
            label.setBackgroundColor(0xfff2b179);
            break;
        case 16:
            label.setBackgroundColor(0xfff59563);
            break;
        case 32:
            label.setBackgroundColor(0xfff67c5f);
            break;
        case 64:
            label.setBackgroundColor(0xfff65e3b);
            break;
        case 128:
            label.setBackgroundColor(0xffedcf72);
            break;
        case 256:
            label.setBackgroundColor(0xffedcc61);
            break;
        case 512:
            label.setBackgroundColor(0xffedc850);
            break;
        case 1024:
            label.setBackgroundColor(0xffedc53f);
            break;
        case 2048:
            label.setBackgroundColor(0xffedc22e);
            break;
        default:
            label.setBackgroundColor(0xff3c3a32);
            break;
        }
    }
  3. GameView类是实现整个游戏操作的一个类,以下是向左滑动的一个方法
    private void swipeLeft() {
    
        boolean merge = false;
    
        for (int y = 0; y < Config.LINES; y++) {  //LINES=4
            for (int x = 0; x < Config.LINES; x++) {
    
                for (int x1 = x + 1; x1 < Config.LINES; x1++) {//向左滑动时,将全部的数组遍历一遍,如果找到不为0的,且其左边为0时
                    if (cardsMap[x1][y].getNum() > 0) {
    
                        if (cardsMap[x][y].getNum() <= 0) {   //cardsMap[x][y].getNum()获取card上面的数字
    
                            MainActivity
                                    .getMainActivity()
                                    .getAnimLayer()
                                    .createMoveAnim(cardsMap[x1][y],
                                            cardsMap[x][y], x1, x, y, y);
    
                            cardsMap[x][y].setNum(cardsMap[x1][y].getNum());
                            cardsMap[x1][y].setNum(0);
    
                            x--;
                            merge = true;
    
                        } else if (cardsMap[x][y].equals(cardsMap[x1][y])) {
                            MainActivity
                                    .getMainActivity()
                                    .getAnimLayer()
                                    .createMoveAnim(cardsMap[x1][y],
                                            cardsMap[x][y], x1, x, y, y);   //使用这个方法之后,在效果上可以表示成移动了
                            cardsMap[x][y].setNum(cardsMap[x][y].getNum() * 2);//这个地方可以修改数字的增加原本是2
                            cardsMap[x1][y].setNum(0);
    
                            MainActivity.getMainActivity().addScore(
                                    cardsMap[x][y].getNum());
                            merge = true;
                        }
    
                        break;
                    }
                }
            }
        }
    
        if (merge) {
            addRandomNum();
            checkComplete();
        }
    }

    编译、运行、测试系统

实验五-1-编译、运行、测试

  1. git clone 小组项目
  2. 编译项目,提交编译成功截图(全屏,要有学号信息)
  3. 提交运行过程中的截图(全屏,要有学号信息)

    git clone

    运行代码

实验五-2-代码修改

  1. 在小组项目中,找一个合适的地方添加一个按钮,点击显示自己的学号
  2. 提交运行截图(全屏,要有学号信息)
  3. 在项目中找一个界面,自己复制一份命名为XXXbak,修改代码,替换原来的部分
  4. 提交运行截图(全屏,要有学号信息)
  • 代码修改

分析数据结构、排序、查找算法的应用

  • 我们的小组项目的数据逻辑中主要运用了二维数组,通过这个二维数组我们可以确定出每一个卡片的位置

    private Card[][] cardsMap = new Card[Config.LINES][Config.LINES];
    private List<Point> emptyPoints = new ArrayList<Point>();  
  • 此外我们的项目中也运用到了排序算法,用于排行榜分数的排名
时间: 2024-08-30 11:08:26

2017-2018-1 20162304 实验五的相关文章

2017-2018-2 20165205 实验五《网络编程与安全》实验报告

实验内容 实验五 网络编程与安全-1 两人一组结对编程: 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA 结对实现中缀表达式转后缀表达式的功能 MyBC.java 结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java 上传测试代码运行结果截图和码云链接 首先实现MyBC.java(后缀转中缀) public class MyBC { public static String toPostfix(String

2017-2018-1 20162307 实验五

2017-2018-1 20162307 实验五 北京电子科技学院(BESTI) 实 验 报 告 课程:程序设计与数据结构 班级:1623 姓名:张韵琪 学号:20162307 指导教师:娄嘉鹏老师.王志强老师 实验日期:2017年12月11号 实验密级:非密级 实验时间:三天 必修/选修:必修 实验名称:团队项目 实验仪器:电脑 实验目的与要求: 目的: 小组合作项目,开发2048 要求: 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程

2017-2018-2 20165318 实验五《网络编程与安全》实验报告

2017-2018-2 20165318 实验五<网络编程与安全>实验报告 一.实验报告封面 课程:Java程序设计        班级:1653班        姓名:孙晓暄        学号:20165318 指导教师:娄嘉鹏                          实验日期:2018年5月28日 实验时间:13:45 - 3:25                实验序号:实验五 实验名称:网络编程与安全 二.实验内容及步骤 目录 任务一 任务二 任务三 任务四 任务五 实验体

2017-2018-2 20165228 实验五 《网络编程与安全》实验报告

一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:苏祚堃 学号:20165228 指导教师:娄嘉鹏 实验日期:2018年5月28日 实验时间:15:30 - 17:50 实验序号:实验五 实验名称:网络编程与安全 实验要求: 1.掌握Java Socket的相关内容: 2.学会建立客户端与服务器端之间的联系: 3.学习并应用密码学的相关内容 严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施. 二.实验内容及步骤 提交点1: 要求: 两人一组结对编程: 参考http://www

20165323 实验五 网络编程与安全

一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:杨金川 学号:20165323 指导教师:娄嘉鹏 实验日期:2018年5月28日 实验时间:15:25 - 17:15 实验序号:实验五 实验名称:网络编程与安全 二.实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2.完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).

20165223 实验五 网络编程与安全

实验五 网络编程与安全 目录 一.实验报告封面 二.具体实验内容 (一)网络编程与安全-1 (二)网络编程与安全-2 (三)网络编程与安全-3 (四)网络编程与安全-4 (五)网络编程与安全-5 三.实验总结 四.PSP时间 一.实验报告封面 北京电子科技学院(BESTI) 实 验 报 告 ◆ ◇ ◆ ◇ 课程 Java程序设计 班级 1652班 姓名 蔡霓 学号 20165223 成绩 指导教师 娄嘉鹏 实验日期 2018年5月28日 实验密级 非密级 预习程度 已预习 实验时间 13:45

20165332实验五 网络编程与安全

20165332实验五 网络编程与安全 实验报告封面 课程:Java程序设计 班级:1653 姓名:延亿卓 学号:20165332 指导教师:娄嘉鹏 实验日期:2018.5.28 实验时间:15:25 - 17:15 实验序号:五 实验名称:网络编程与安全 实验目的 1.了解计算机网络基础 2.掌握JavaSocket编程 3.理解混合密码系统 4.掌握Java密码技术相关API的使用 一.网络编程与安全-1 实验要求: 参考http://www.cnblogs.com/rocedu/p/676

实验五 网络编程与安全

20165225 实验五 网络编程与安全 实验报告封面: 课程:Java程序设计 班级:1652班 姓名:王高源 学号:20165225 指导教师:娄嘉鹏 实验日期:2018年5月14日 实验时间:3:35 - 5:15 实验序号:实验5 实验名称:网络编程与安全 实验内容: 1.掌握Java Socket的相关内容: 2.学会建立客户端与服务器端之间的联系: 3.学习并应用密码学的相关内容 严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施. 网络编程与安全一: 实验要求: 两人一组结对编程

20172329 2017-2018-2 《程序设计与数据结构》实验五报告

这是这学期最后一次实验了,也是学到了很多东西,希望自己可以可以善始善终,加油! 让我们开始这一篇博客吧! 20172329 2017-2018-2 <程序设计与数据结构>实验五报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 王文彬 学号:20172329 实验教师:王志强 实验日期:2018年6月11日 必修/选修: 必修 一.实验内容 1.网络编程与安全-1 两人一组结对编程: a. 参考http://www.cnblogs.com/rocedu/p/6766748