结对编程作业

https://github.com/Ph12112/Pigtail

一、原型设计

2.2.1提供此次结对作业的设计说明,要求:(16分)

刚开始我不知道得怎么做原型设计,后来同学给我推荐了Android Studio,我学了一周以后,发现它用来做app和原型设计都很方便简洁,许多东西在软件上就能实现,不需要我再去学其他东西。以下是原型设计图:

![截屏2021-10-24 19.57.47](/Users/a495/Downloads/截屏2021-10-24 19.57.47.png)

![16941635079696_.pic](/Users/a495/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9/f8060e1163eb00f0f52a983246b779d8/Message/MessageTemp/a8451b79ed5382019754e064d33af8f2/Image/16941635079696_.pic.jpg)

2.2.2遇到的困难及解决方法:(4分)

遇到的困难:因为之前没有做过原型设计,所以刚开始一头雾水,不知道从何入手,难以做出想象中的翻转移动画面等

解决方法:通过B站和《第一行代码》学会了如何使用Android Studio,虽然因为时间太短,没法深入学习更多用法,只能做出一个简陋的UI,但是勉强能用一下。

二、原型设计实现

2.3.1代码实现思路: (11分)

  • 网络接口的使用

    由于我没有找到队友,且时间有限,所以我只写了本地对战与人机对战,没有去学习网络接口的使用

  • 代码组织与内部实现设计(类图)

    主要是对牌组的设计和洗牌发牌操作

    setOnClickListener(new View.OnClickListener()//单击按钮操作
    inintUI()  //定义布局
    startActivity(intent);//界面切换函数
    Collections.shuffle(pokers);   //洗牌
    
  • 说明算法的关键与关键实现部分流程图

    由于人机模式只是用简陋的抽牌出牌作为AI,所以只有UI界面需要算法流程(UI也没啥算法流程)

    8F98DA8173AFC2E40252213175404496

  • 贴出你认为重要的/有价值的代码片段,并解释(2分)

    动态按钮添加设置控件的算法

    private Button[] button = new Button[??];//先声明按钮数组
    
    linearLayout = (LinearLayout) findViewById(R.id.layout_button);//获取布局
    
    for (int i = 0; i < sTitle.length; i++) {//循环实例化按钮,并添加到布局中
       button[i] = new Button(this);
        button[i].setText(sTitle[i]);
        button[i].setId(i);                         //注意,这里是关键,我们要手动的设置id给按钮,不然这个按钮返回的id为-1.
        button[i].setBackgroundResource(R.drawable.top_bg);
        button[i].setTextColor(Color.WHITE);
        button[i].setOnClickListener(this);
        linearLayout.addView(button[i]);
       }
    
    .....................
    
    public void onClick(View v) {        //复写的点击方法
      for (int i = 0; i < button.length; i++) {
        if (v.getId() == button[i].getId()) {   //这里获取的id就不会错啦。
        System.out.println(sTitle[i]);
         Toast.makeText(this, sTitle[i], Toast.LENGTH_SHORT).show();
         launchActivity(sTitle[i], Tianyuan.class);
        }
       }
    

    牌组的建立——将卡组先转化为数字存入,再通过toString()函数转化为不同的花色的imageView图片输出

    public Poker(int flower, int number) {
        this.flower = flower;
        this.number = number;
    }
    
    public int getFlower() {
        return flower;
    }
    public void setFlower(int flower) {
        this.flower = flower;
    }
    public int getNumber() {
        return number;
    }
    public void setNumber(int number) {
        this.number = number;
    }
    /*
      1.花色:1-♦ 2-♣ 3-♥ 4-♠
      2。点数转化:11-J 12-Q 13-K 14-A 15-2
     */
    @Override
    public String toString() {
        String flower = null;
        if (this.flower == 4) {
            flower = "♠";
        } else if (this.flower == 3) {
            flower = "♥";
        } else if (this.flower == 2) {
            flower = "♣";
        } else if (this.flower == 1) {
            flower = "♦";
        }
        String number = null;
        if (this.number == 11) {
            number = "J";
        } else if (this.number == 12) {
            number = "Q";
        } else if (this.number == 13) {
            number = "K";
        } else {
            number = String.valueOf(this.number);
        }
        return flower + number;
    }
    
  • 性能分析与改进

    监听函数消耗最多的响应时间,并且由于后退函数设置的不规范,经常导致app闪退

  • 描述你改进的思路(2分)

    通过CSDN学会了finish()函数,使用以后,结束进程返回界面就不会造成闪退,但是监听函数没有找到改进算法(本来也就是在网上学习的,知识储备不足改进)

  • 展示性能分析图和程序中消耗最大的函数

    获取监听函数:

    public class MyButton {
        public MyButton(Context context) {
        }
        private OnKeyValueListener mOnkeyValueListener; //定义监听接口,接受Main类传过来的监听对象
    //模拟用户触摸屏幕时系统底层进行的操作
    public void doClick() {
        mOnkeyValueListener.getKeyValueClick("点击了A"); //该方法可以在A类跟Main类中调用,都会将内容传给Main类。这句话就实现了监听的效果
    }
    
    public OnKeyValueListener getmOnkeyValueListener() {
        return mOnkeyValueListener;
    }
    
    public void setmOnkeyValueListener(OnKeyValueListener mOnkeyValueListener) {
        this.mOnkeyValueListener = mOnkeyValueListener; //Main类中调用该方法,传入监听对象
    }
    }
    

    传入监听函数

    public class MainActivity extends Activity implements OnKeyValueListener{
    MyButton myButton ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myButton = new MyButton(MainActivity.this);
        myButton.setmOnkeyValueListener(this); //传递监听对象到A类
    
        myButton.doClick(); //这里是调用A类中的方法,接受到A类传入的内容
    }
    
    @Override
    public void getKeyValueClick(String value) {
        Log.d("panzq","######## value = "+value); //打印获取到的内容
    }
    }
    

    因为做的是安卓app,不知道性能分析图在哪里看

    2.3.3遇到的代码模块异常或结对困难及解决方法。(4分)

    • 困难描述(1分)

      刚开始点击按钮就会闪退,无法进入想要的界面;52张卡牌全部要设置成按钮,太过繁杂

    • 解决过程(2分)

      通过CSDN,学会finish()的使用解决了闪退问题;学会使用动态构建按钮

    • 有何收获(1分)

      学会了不一样的控件使用方法,和布局的设置方法

2.3.5提供此次结对作业的PSP和学习进度条(每周追加),示例如下(2分)

第N周 新增代码(行) 累计代码(行) 本周学习耗时(小时) 累计学习耗时(小时) 重要成长
1 0 0 14 14 学习原型设计,以及Android Studio软件使用方法
2 0 0 8 22 制作原型模型
3 300 300 12 34 学习xml,深入了解Android
4 300 600 12 46 制作小游戏

三、心得

posted @ 2021-10-24 22:53  今夕9  阅读(63)  评论(0)    收藏  举报