结对编程作业
https://github.com/Ph12112/Pigtail
一、原型设计
2.2.1提供此次结对作业的设计说明,要求:(16分)
刚开始我不知道得怎么做原型设计,后来同学给我推荐了Android Studio,我学了一周以后,发现它用来做app和原型设计都很方便简洁,许多东西在软件上就能实现,不需要我再去学其他东西。以下是原型设计图:


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 | 制作小游戏 |


浙公网安备 33010602011771号