信息工程学院实验报告
成绩
课程名称 Android开放性实验 指导教师 王志红 实验日期 2013、12、15 院(系) 信息工程学院 专业班级 2011计算机科学与技术 实验地点 B-4029 学生姓名 邵 帅 学 号 201101010023 实验项目名称 基于android的扫雷游戏的开发与实现
一、实验目的和要求 (1)安装Android SDK以及建立Eclipse和ADT插件的开发环境。 (2)学会模拟器的配置使用。 (3)学会简单的android应用程序开发。 二、实验原理 仿照windows上已有的扫雷游戏,做出能在Android系统上运行的扫雷游戏。 三、主要仪器设备或材料 具有Android开发平台的计算机。 四、实验方法与步骤(可加附页) 采用Eclipse开发工具,在Windows 7下进行,基于Android 4.2.2操作系统,使用的语言是Java语言。 1、搭建Android开发平台: (1)JDK安装:下载安装Java开发包(JDK)。选择“windows offline installation,multi-language”,根据屏幕提示完成安装。 (2)Eclipse安装:选择标有\"eclipse IDE for java developers\"的文件进行安装。进入解压后的目录,就可以看到一个名为“eclipse.exe”的可执行文件,双击此文件直接运行,eclipse 能自动找到用户先期安装的JDK路径。 (3)Android SDK安装:将下载的android-sdk压缩包解压为文件放于自选位置。在Eclipse中选择Windows>Preferences>Android>Browse找到解压文件>Apply>OK。打开环境变量,编辑Path,在变量值前添加:C: \\java\\adt-bundle-windows-x86-20130522\\sdk\ools;。 (4)ADT安装创建AVD:打开SDK Manager.exe,选择tools>Manage AVDs,在Android Virtual Device Manager中点击New,输入AVD的信息,点OK完成AVD的创建。 2、写布局文件main.xml 3、在主Activity中实现布局文件中的控件和界面中的控件相连,并写每个按钮的事件触发程序。 五、实验数据记录、处理及结果分析
山东英才学院
六、讨论、心得 通过本次实验,我学到了很多新的知识,掌握了Android环境的构建,学会了Anroid简单的应用程序的开发,通过设计布局,锻炼了我的综合运用能力。在创新实践过程中,不断地对源程序进行改进与完善,修改了以往扫雷程序的界面,界面更加漂亮。并且在编写的过程中,各种组件的运用,各种算法的应用,各种控件的利用我都是随着创新实践的不断深入而不断熟悉并逐步掌握的。 本次创新实践使我能力得到了很大的提高,同时也让我认识到自己的不足之处。程序虽然没有实现设备自适应性,界面不是特别美观,缺少一些组件的设置,以后还得继续加强对Android的学习。通过这次创新实践,让我懂得了很多,为以后找工作奠定了一定的基础。感谢这次创新实践,它让我收获颇丰。
山东英才学院
信息工程学院实验报告(附页)
主要的部分代码:
private TextView txtMineCount;//剩余地雷数 private TextView txtTimer;//计时
private ImageButton btnSmile;//新游戏按钮
private TableLayout mineField; //表的布局添加地雷 private Block blocks[][]; //所有的块
private int blockDimension = 24; //每块的宽度 private int blockPadding = 2; //块之间填充
private int numberOfRowsInMineField = 9;//雷区为9行 private int numberOfColumnsInMineField = 9;//雷区为9列 private int totalNumberOfMines = 10;//总共有10个雷 //定时器的运行时间保持跟踪
private Handler timer = new Handler(); private int secondsPassed = 0;
private boolean isTimerStarted; //检查是否已经开始或不定时 private boolean areMinesSet; //检查是否已经设置地雷 private boolean isGameOver;//检查是否游戏结束 private int minesToFind; //有待发现的地雷数量
public void onCreate(Bundle savedInstanceState) //游戏初始化 {
super.onCreate(savedInstanceState); setContentView(R.layout.main);
txtMineCount = (TextView) findViewById(R.id.MineCount); txtTimer = (TextView) findViewById(R.id.Timer); //设置定时器和雷的液晶风格的字体样式
Typeface lcdFont = Typeface.createFromAsset(getAssets(),
\"fonts/lcd2mono.ttf\");
txtMineCount.setTypeface(lcdFont); txtTimer.setTypeface(lcdFont);
btnSmile = (ImageButton) findViewById(R.id.Smiley);//设置为笑脸 btnSmile.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
山东英才学院
}
}
endExistingGame();//所有东西重置 startNewGame();//游戏开始
});
mineField = (TableLayout)findViewById(R.id.MineField); showDialog(\"点击笑脸,开始新游戏\", 2000, true, false);
private void startNewGame()//游戏开始 { }
//设置雷,并设置块的雷数
private void setMines(int currentRow, int currentColumn) {
//设置地雷排除用户点击的位置 Random rand = new Random();
int mineRow, mineColumn;//定义地雷所在的行和列 for (int row = 0; row < totalNumberOfMines; row++) {
//设置地雷所在的行和列
mineRow = rand.nextInt(numberOfColumnsInMineField); mineColumn = rand.nextInt(numberOfRowsInMineField);
if ((mineRow + 1 != currentColumn) || (mineColumn + 1 != currentRow)) { }
//排除用户点击的位置 else {
row--;
if (blocks[mineColumn + 1][mineRow + 1].hasMine()) { }
//雷在这个位置
blocks[mineColumn + 1][mineRow + 1].plantMine();
row--; //雷已经在那,不重复同一个块
createMineField();//监听点击一次和LongClick showMineField();//在用户界面显示所有块 minesToFind = totalNumberOfMines; isGameOver = false; secondsPassed = 0;
山东英才学院
}
}
}
int nearByMineCount; //计算地雷周围的块数
for (int row = 0; row < numberOfRowsInMineField + 2; row++) { }
for (int column = 0; column < numberOfColumnsInMineField + 2; column++) { }
//查找每个块附近的雷数 nearByMineCount = 0;
if ((row != 0) && (row != (numberOfRowsInMineField + 1)) && (column != 0) && { }
// 侧行(第0个和最后一个行/列) //设置行数和列数为9 else { }
blocks[row][column].setNumberOfMinesInSurrounding(9); blocks[row][column].OpenBlock(); //检查所有附近的块数
for (int previousRow = -1; previousRow < 2; previousRow++) { }
for (int previousColumn = -1; previousColumn < 2; previousColumn++) { }
if (blocks[row + previousRow][column + previousColumn].hasMine()) { }
//发现附近的雷,自加加 nearByMineCount++;
(column != (numberOfColumnsInMineField + 1)))
blocks[row][column].setNumberOfMinesInSurrounding(nearByMineCount);
private void winGame() {
山东英才学院
}
//所有东西重置
private void endExistingGame() { }
stopTimer(); //如果计时器正在运行,停止 txtTimer.setText(\"000\"); //恢复计时器 txtMineCount.setText(\"000\"); //恢复雷数量
btnSmile.setBackgroundResource(R.drawable.smile); //删除所有的地雷 mineField.removeAllViews();//设置所有变量,以支持所有比赛结束 isTimerStarted = false; areMinesSet = false; isGameOver = false; minesToFind = 0; stopTimer();
isTimerStarted = false; isGameOver = true;
minesToFind = 0; //设置雷数为0 //设置图标 为酷酷的样子
btnSmile.setBackgroundResource(R.drawable.cool); updateMineCountDisplay(); //更新雷数 //关闭所有按钮 //设置所有未标记的块
for (int row = 1; row < numberOfRowsInMineField + 1; row++) { }
//显示信息
showDialog(\"你赢了,花费 \" + Integer.toString(secondsPassed) + \"秒!\", 1000, false, true);
for (int column = 1; column < numberOfColumnsInMineField + 1; column++) { }
blocks[row][column].setClickable(false); if (blocks[row][column].hasMine()) { }
blocks[row][column].setBlockAsDisabled(false); blocks[row][column].setFlagIcon(true);
因篇幅问题不能全部显示,请点此查看更多更全内容