一.设计题目
本课程设计,应用所学的设计模式技术设计一个有趣味的宠物蛋培养小游戏来加深对设计模式的应用场景、使用动机和优缺点分析的理解程度,名字叫做宠物蛋大作战。
二.设计要求
期末结课,老师要求使用三种以上的设计模式设计一个简单的小系统,在设计的过程中想法比较多,自己写了一个小小迷你游戏。里面还有很多不成熟的地方,等以后有时间再进行美化修改。整体上我用了五种模式实现了这个宠物蛋的养成小游戏,用安卓开发。当时考虑到刚学完没多久,或许对于界面设计也会方便一点。
关于设计模式的选用如下:
三.设计需求描述
玩家开局选择蛋的种类,有三种选择,分别为水生,陆生和天空这三种,接下来,玩家可以为蛋进行性别选择,然后进行花纹颜色的选择(预期不同的花纹对蛋进行不同的附魔属性,比如绿色和森林魔法,红色为火系魔法等,看后续能不能实现)然后进行为期八天的培养,玩家可以选择不同的培养活动改变蛋的基础属性,最后根据属性的综合情况结算蛋的情况。
-------------------------------------
四.实现展示
开始界面如下:
然后就是对应的性别和花纹选择,由于时间紧迫只有一天半的时间,这里简化了花纹的选择结果,砍掉了附魔效果(以后有机会优化修改),然后就是对蛋进行培养,培养时间到,结算结果。
上面的图片是自己手动绘制(就是说开发和美工都是自己,界面做的很丑,以后或许,啊,没有或许了,这种极简手绘就此一家,运行展示的时候已经社死一次了)而且图片的一些展示不够完善,时间不够没有修改。
五 关键代码
关于蛋的种类选择代码实现如下
public class ChoiceActivity extends AppCompatActivity {
private Button water;
private Button land;
private Button sky;
private Factory factory;
private Egg egg;
Bundle bundle;
DrawView drawView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_choice);
water=(Button) findViewById(R.id.water_button);
land=(Button) findViewById(R.id.land_button);
sky=(Button) findViewById(R.id.sky_button);
InitButtonListener initButtonListener=new InitButtonListener();
water.setOnClickListener(initButtonListener);
land.setOnClickListener(initButtonListener);
sky.setOnClickListener(initButtonListener);
}
private class InitButtonListener implements View.OnClickListener{
Intent i ;
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.water_button:
i = new Intent(ChoiceActivity.this, DecorActivity.class);
factory=new WaterFactory();
egg=factory.produceEgg();
egg.produce();
i.putExtra("type", egg.getType());
i.putExtra("msg",egg.getMsg());
bundle=new Bundle();
bundle.putSerializable("factory",factory);
bundle.putSerializable("egg", egg);
i.putExtras(bundle);
startActivity(i);
break;
case R.id.land_button:
i=new Intent(ChoiceActivity.this,DecorActivity.class);
factory=new LandFactory();
egg=factory.produceEgg();
egg.produce();
i.putExtra("type", egg.getType());
i.putExtra("msg",egg.getMsg());
bundle=new Bundle();
bundle.putSerializable("egg", egg);
bundle.putSerializable("factory", factory);
i.putExtras(bundle);
startActivity(i);
break;
case R.id.sky_button:
i=new Intent(ChoiceActivity.this,DecorActivity.class);
factory=new SkyFactory();
egg=factory.produceEgg();
egg.produce();
i.putExtra("type", egg.getType());
i.putExtra("msg",egg.getMsg());
bundle=new Bundle();
bundle.putSerializable("egg", egg);
bundle.putSerializable("factory", factory);
i.putExtras(bundle);
startActivity(i);
}
}
}
}
其余的按照这个底子创建抽象类和继承然后套模式就行(突然发现没有注释,为了报告整齐好像给删掉了,坏毛病,以后改)。
关于蛋的培育界面的修改刷新如下,这里注意自己自定义的View使用:
public class UpActivity extends AppCompatActivity {
int i=1;
TextView text;
Button sun;
Button feed;
Button sit;
Button play;
Button teach;
DrawView drawView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_up);
text=(TextView) findViewById(R.id.text2);
text.setText("第"+i+"天");
feed=(Button) findViewById(R.id.feed);
sit=(Button) findViewById(R.id.sit);
sun=(Button) findViewById(R.id.sun);
play=(Button)findViewById(R.id.play);
teach=(Button) findViewById(R.id.teach);
drawView=(DrawView) findViewById(R.id.view);
Intent intent=getIntent();
String color=intent.getStringExtra("color");
feed.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(i<=7){
i++;
text.setText("第"+i+"天");
drawView.choicefeed();
}
else{
Intent intent=new Intent(UpActivity.this,EndActivity.class);
intent.putExtra("color",color);
startActivity(intent);
}
}
});
sit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(i<=7){
i++;
text.setText("第"+i+"天");
drawView.choiceSite();
}
else{
Intent intent=new Intent(UpActivity.this,EndActivity.class);
intent.putExtra("color",color);
startActivity(intent);
}
}
});
sun.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(i<=7){
i++;
text.setText("第"+i+"天");
drawView.choiceSun();
}
else{
Intent intent=new Intent(UpActivity.this,EndActivity.class);
intent.putExtra("color",color);
startActivity(intent);
}
}
});
play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(i<=7){
i++;
text.setText("第"+i+"天");
drawView.choiceplay();
}
else{
Intent intent=new Intent(UpActivity.this,EndActivity.class);
intent.putExtra("color",color);
startActivity(intent);
}
}
});
teach.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(i<=7){
i++;
text.setText("第"+i+"天");
drawView.choiceTeach();
}
else{
Intent intent=new Intent(UpActivity.this,EndActivity.class);
intent.putExtra("color",color);
startActivity(intent);
}
}
});
}
完整代码和课程报告如下: