andriod手机程序.doc_第1页
andriod手机程序.doc_第2页
andriod手机程序.doc_第3页
andriod手机程序.doc_第4页
andriod手机程序.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android课程设计学号:20097869姓名:班级:指导老师: 目录:一:需求分析2二:实现效果及代码3三:总结24简单的扫雷游戏一:需求分析1. 开发平台及工具OS:Windows XP SP3CPU:Intel(R)Core(TM)2 Duo CPU T6570 2.00GHzRAM:2.00GBHardDisk:320GBJdk-http://technetwork/java/javase/downloads/index.htmlEclipse-/downloadsSDK-/sdk/index.htmlADT-/sdk.eclipse-adt.html2. 题目描述由于个人能力有限,故而我选择了最简单的小游戏:扫雷。扫雷是一个很简单确最广为人知的小游戏,相信只要接触过电脑的人都知道这个游戏,扫雷的规则很简单,点开一个方格后,该方格如果不是地雷则会显示一个数字,该数字代表此方格周围的八个格子当中随机分布着几颗地雷,有些格子处于地图边缘则是五个格子,角落的四个格子由于处于两条地图边缘则只有三个格子,根据这种规律就可以推断出已打开的格子(已打开的格子会显示数字)周边哪些格子有地雷哪些格子没有地雷,游戏的最终目标是找出所有地雷。二:实现效果及代码 package com.china.square;import java.util.ArrayList;import java.util.List;import com.china.square.elossap.ElosSap;import com.china.square.linksee.LinkSee;import android.app.Activity;import android.content.Intent;import android.content.pm.PackageManager;import android.content.pm.ResolveInfo;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.TextView;import android.widget.AdapterView.OnItemClickListener;public class Square extends Activity /* Called when the activity is first created. */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); PackageManager pm = getPackageManager(); Intent mainIntent = new Intent(SQUARE, null); mainIntent.addCategory(ent.category.SQUARE); List ls = pm.queryIntentActivities(mainIntent, 0); int i = 0; ArrayListal = new ArrayList(); setTitle(String.valueOf(ls.size(); while (i ls.size() ResolveInfo ri = ls.get(i); al.add(ri.loadLabel(pm).toString(); i+; ArrayAdaptera = new ArrayAdapter(this, android.R.layout.simple_list_item_1, al); ListView lv = (ListView)this.findViewById(R.id.lv); lv.setAdapter(a); lv.setOnItemClickListener(new ItemClickListener(); private class ItemClickListener implements OnItemClickListenerOverridepublic void onItemClick(AdapterView arg0, View arg1, int arg2,long arg3) / TODO Auto-generated method stubString strText = (TextView)arg1).getText().toString();if (strText = null) return;else if (strText.equals(扫雷)Intent in = new Intent(Square.this, ElosSap.class);startActivity(in); package com.china.square.elossap;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;import com.china.square.R;import android.app.Activity;import android.app.AlertDialog;import android.content.Context;import android.content.DialogInterface;import android.content.res.Resources;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Point;import android.graphics.Rect;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.util.Log;import android.view.KeyEvent;import android.view.Menu;import android.view.MenuItem;import android.view.MotionEvent;import android.view.View;import android.widget.LinearLayout;import android.widget.Toast;public class ElosSap extends Activity String TAG = ELOS;private final int SQUARELEMENT_NUMBERS = 9;private ElosView evElos = null;int nTimeInterval = 500;int nCents = 0;int nStage = 1;int nSapBGChoice = 1;private final int ELOS_HEIGHT = 60;private final int ELOS_WIDTH = 50;boolean bPlaying = true;int nElosYOffset = 0;int nElosXOffset = 0;int nPlayerChoice = 0;int nDrawableChoice = 0;int ELOS_CHOICES = 15;int DRAWABLE_CHOICES = SQUARELEMENT_NUMBERS;private Rect rtElosArea = new Rect();private ElosLogic elosGuard = null;private int nTotalLines = 0;private int nTotalColumns = 0;private int nElosHeight = 0;private int nElosWidth = 0;private int nElosAreaWidth = 0;private int nElosAreaHeight = 0;private boolean bReset = true;private Drawable drArr = new DrawableSQUARELEMENT_NUMBERS;/ArrayListlstTrail = new ArrayList();/* 记录路径上的所有的ElosLogic */private void InitElosLogicGuard()elosGuard = new ElosLogicnTotalLinesnTotalColumns;int i = 0;while (i nTotalLines)for (int j = 0; j nTotalColumns; j+)elosGuardij = new ElosLogic();i+;Drawable drBGArr = new Drawable4;private Drawable drSap = null;private void RetriveDrawable(Context c)Resources res = c.getResources();drArr0 = res.getDrawable(R.drawable.blue);drArr1 = res.getDrawable(R.drawable.green);drArr2 = res.getDrawable(R.drawable.orange);drArr3 = res.getDrawable(R.drawable.purple);drArr4 = res.getDrawable(R.drawable.qing);drArr5 = res.getDrawable(R.drawable.red);drArr6 = res.getDrawable(R.drawable.yellow);drArr7 = res.getDrawable(R.drawable.blue);drArr8 = res.getDrawable(R.drawable.green);drBGArr0 = res.getDrawable(R.drawable.p2);drBGArr1 = res.getDrawable(R.drawable.p1);drBGArr2 = res.getDrawable(R.drawable.p3);drBGArr3 = res.getDrawable(R.drawable.p4);drSap = res.getDrawable(R.drawable.sap);private int GetElosHeight(Drawable dr)/return dr.getMinimumHeight();return ELOS_HEIGHT;private int GetElosWidth(Drawable dr)/return dr.getMinimumWidth();return ELOS_WIDTH;private boolean IsSuccessded()Log.d(TAG, IsSuccessded?);int nCount = 0;for (int i = 0; i elosGuard.length; i+)for (int j = 0; j elosGuardi.length; j+)if (!elosGuardij.bTouch)nCount+;if (nCount = this.nTotalSaps) return true;return false;Thread thdTimer = null;boolean bReportResult = false;final int ELOS_START = Menu.FIRST;final int ELOS_SETTING = ELOS_START + 1;final int ELOS_ABOUT = ELOS_SETTING + 1;final int ELOS_ZEROSHOW = ELOS_ABOUT + 1;final int ELOS_BG = ELOS_ZEROSHOW + 1;Overridepublic boolean onCreateOptionsMenu(Menu menu) / TODO Auto-generated method stubmenu.add(0, ELOS_START, 0, 开始);menu.add(0, ELOS_SETTING, 1, 设置);menu.add(0, ELOS_ABOUT, 2, 关于);menu.add(0, ELOS_ZEROSHOW, 3, 0显示模式);menu.add(0, ELOS_BG, 4, 切换背景);return super.onCreateOptionsMenu(menu);private String strSapCount = new String20;Overridepublic boolean onOptionsItemSelected(MenuItem item) / TODO Auto-generated method stubif (item.getItemId() = ELOS_START)MakeElosLogicNet(elosGuard);InitGame();evElos.invalidate();else if (item.getItemId() = ELOS_SETTING)AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setSingleChoiceItems(strSapCount, this.nTotalSaps - 1, listener);builder.setTitle(请选择地雷个数);builder.setIcon(drSap);builder.setNeutralButton(确定, null);builder.show();else if (item.getItemId() = ELOS_ABOUT)AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setMessage(扫雷1.0nCopyRight (C) ALL RIGHTS PRESERVEDn2012.10n作者:LIUYANGYANG);builder.setIcon(drSap);builder.setTitle(扫雷);builder.setPositiveButton(确定, null);builder.show();else if (item.getItemId() = ELOS_ZEROSHOW)this.bZeroShowTag = !this.bZeroShowTag;evElos.invalidate();else if (item.getItemId() = ELOS_BG)this.nSapBGChoice = (nSapBGChoice + 1)%5;evElos.invalidate();return super.onOptionsItemSelected(item);private DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener()Overridepublic void onClick(DialogInterface dialog, int which) / TODO Auto-generated method stublstSap.clear();nTotalSaps = Integer.parseInt(strSapCountwhich);MakeElosLogicNet(elosGuard);InitGame();evElos.invalidate();Overrideprotected void onStop() / TODO Auto-generated method stubif (thdTimer != null)if (thdTimer.isAlive()thdTimer.stop();super.onStop();Overrideprotected void onCreate(Bundle savedInstanceState) / TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.elos);LinearLayout ll = (LinearLayout)this.findViewById(R.id.elos);LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.FILL_PARENT);params.leftMargin = 1;params.rightMargin = 1;ll.addView(evElos = new ElosView(this), params);params = new LinearLayout.LayoutParams(params);RetriveDrawable(this);nElosHeight = GetElosHeight(drArr0);nElosWidth = GetElosWidth(drArr0);nElosYOffset = nElosHeight;for (int i = 0; i = this.nTotalLines | nCurRow = this.nTotalColumns | nCurCol 0) return null;return elosGuardnCurRownCurCol;private boolean bZeroShowTag = true;Rect rtDraw = new Rect();Paint ptFrame = new Paint();private void DrawElos(ElosLogic elosLogic, Canvas canvas, int nOffset)ptFrame.setColor(Color.BLACK);if (!elosLogic.IsDraw() return;Drawable dr = elosLogic.GetDrawable();if (dr = null) Log.d(TAG, drawble is null.);rtDraw.set(elosLogic.GetRect();rtDraw.right = rtDraw.right - nOffset;rtDraw.bottom = rtDraw.bottom - nOffset;Rect rt = new Rect();if (elosLogic.nSaps != 0 | !bZeroShowTag | elosLogic.bSap) rt.set(rtDraw);rt.left+;rt.right-;rt.top+;rt.bottom-;if (elosLogic.bTouch) dr.setBounds(rt);else dr.setBounds(rtDraw);dr.draw(canvas);if (!elosLogic.bTouch)/canvas.drawRoundRect(new RectF(rtDraw.left-1, rtDraw.top-1, rtDraw.right+1, rtDraw.bottom+1), 1, 1, ptFrame);canvas.drawLine(rtDraw.left-1, rtDraw.top-1, rtDraw.right+1, rtDraw.top-1, ptFrame);canvas.drawLine(rtDraw.right+1, rtDraw.bottom+1, rtDraw.right+1, rtDraw.top-1, ptFrame);canvas.drawLine(rtDraw.right+1, rtDraw.bottom+1, rtDraw.left-1, rtDraw.bottom+1, ptFrame);canvas.drawLine(rtDraw.left-1, rtDraw.top-1, rtDraw.left-1, rtDraw.bottom+1, ptFrame);else if (elosLogic.nSaps != 0)/canvas.drawRoundRect(new RectF(rt.left-1, rt.top-1, rt.right+1, rt.bottom+1), 1, 1, ptFrame);canvas.drawLine(rt.left-1, rt.top-1, rt.right+1, rt.top-1, ptFrame);canvas.drawLine(rt.right+1, rt.bottom+1, rt.right+1, rt.top-1, ptFrame);canvas.drawLine(rt.right+1, rt.bottom+1, rt.left-1, rt.bottom+1, ptFrame);canvas.drawLine(rt.left-1, rt.top-1, rt.left-1, rt.bottom+1, ptFrame);if (elosLogic.bTouch)if (!elosLogic.bSap & elosLogic.nSaps != 0)int nNum = elosLogic.nSaps;ptFrame.setTextSize(20);canvas.drawText( + nNum, rt.centerX() - 5, rt.centerY() - 5, ptFrame);private void DrawElosLogicNet(Canvas canvas, ElosLogic elosLogicGuard)for (int i = 0; i elosLogicGuard.length; i+)for (int j = 0; j elosLogicGuardi.length; j+)if (elosLogicGuardij.IsDraw()DrawElos(elosLogicGuardij, canvas, 1);private void MakeElosLogicNet(ElosLogic elosGuard)int nLen = elosGuard.length;if (nLen != this.nTotalLines) Log.d(TAG, guard len is error); int nColumns = this.nTotalColumns;if (nColumns != elosGuard0.length) Log.d(TAG, guard len is error);int i = 0;Rect rt = new Rect();while (i nLen)/process j = 0;for (; j this.nTotalColumns; j+)/-left-if (j = 0)elosGuardij.SetElosLogicLeft(null);elseelosGuardij.SetElosLogicLeft(elosGuardij - 1);/-right-if (j = this.nTotalColumns - 1)elosGuardij.SetElosLogicRight(null);elseelosGuardij.SetElosLogicRight(elosGuardij + 1);/-up-if (i = 0)elosGuardij.SetElosLogicUp(null);elseelosGuardij.SetElosLogicUp(elosGuardi - 1j);/-down-if (i = this.nTotalLines - 1)elosGuardij.SetElosLogicDown(null);elseelosGuardij.SetElosLogicDown(elosGuardi + 1j);/-assign rect for elos logic-rt.left = j*this.nElosWidth + nElosXOffset;rt.top = i*this.nElosHeight + this.nElosYOffset;rt.right = rt.left + this.nElosWidth;rt.bottom = rt.top + this.nElosHeight;elosGuardij.SetRect(rt);elosGuardij.SetDrawable(drArr6);/if (i = 0 | i = this.nTotalLines - 1 |j = this.nTotalColumns - 1 | j = 0)elosGuardij.SetDraw(false);elosGuardij.SetDraw(true);elosGuardij.bSap = false;elosGuardij.nSaps = 0;/elosGuardij.bIsPressed = false;elosGuardij.bTouch = false;i+;private class ElosView extends Viewpublic ElosView(Context context) super(context);/ TODO Auto-generated constructor stubint vvvv = 0;protected void onDraw(Canvas canvas) / TODO Auto-generated method stubsuper.onDraw(canvas);Rect rt = new Rect(0, 0, canvas.getWidth(), canvas.getHeight();rtElosArea.set(rt);if (nSapBGChoice != 4)drBGArrnSapBGChoice.setBounds(rt);drBGArrnSapBGChoice.draw(canvas);else Paint pt = new Paint();pt.setColor(Color.WHITE);canvas.drawRect(rt, pt);if (bReset)/-nElosAreaHeight = this.getHeight();nElosAreaWidth = this.getWidth();/-nTotalLines = nElosAreaHeight/nElosHeight;nElosYOffset = nElosAreaHeight%nElosHeight;nTotalColumns = nElosAreaWidth/nElosWidth;nElosXOffset = nElosAreaWidth%nElosWidth/2;InitElosLogicGuard();MakeElosLogicNet(elosGuard);InitGame();/evElos.invalidate();bReset = false;vvvv+;DrawElosLogicNet(canvas, elosGuard);if (bReportResult)Toast.makeText(ElosSap.this, 游戏结束,得分: + nCents, Toast.LENGTH_SHORT).show();vvvv+;bReportResult = false;Overridepublic boolean onTouchEvent(MotionEvent event) / TODO Auto-generated method stubif (event.getAction() = MotionEvent.ACTION_DOWN)Log.d(TAG, onTouchEvent);int ix = (int)event.getX();int iy = (int)event.getY();Point pt = new Point(ix, iy);ElosLogic logic = GetElosLogicByPoint(pt);if (logic != null & !logic.bTouch)logic.bTouch = true;if (!logic.bSap)logic.SetDrawable(drArrlogic.nSaps);else /game failedReportFail();ClearSaps();ProcessSapAfterTouch(logic);RestoreElosLogicRecursive(logic);this.invalidate(logic.GetRect();if (IsSuccessded()Log.d(TAG, Succeeded true);ShowSaps();ClearSaps();ReportWinner();elseLog.d(TAG, Succeeded false);else if (event.getAction() = MotionEvent.ACTION_UP)Log.d(TAG, onTouchEvent exited);return super.onTouchEvent(event);private void ReportWinner()Toast.makeText(this, 你胜利了, Toast.LENGTH_SHORT).show();private void IncreaseCentAroundSap(ElosLogic sap)if (sap = null) return;if (sap.GetElosLogicLeft() != null)sap.GetElosLogicLeft().nSaps+;if (sap.GetElosLogicRight() != null)sap.GetElosLogicRight().nSaps+;if (sap.GetElosLogicUp() != null)sap.GetElosLogicUp().nSaps+;if (sap.GetElosLogicDown() != null)sap.GetElosLogicDown().nSaps+;if (sap.GetElosLogicLeft() != null & sap.GetElosLogicLeft().GetElosLogicUp() != null)sap.GetElosLogicLeft().GetElosLogicUp().nSaps+;if (sap.GetElosLogicLeft() != null & sap.GetElosLogicLeft().GetElosLogicDown() != null)sap.GetElosLogicLeft().GetElosLogicDown().nSaps+;if (sap.GetElosLogicRight() != null & sap.GetElosLogicRight().GetElosLogicUp() != null)sap.GetElosLogicRight().GetElosLogicUp().nSaps+;if (sap.GetElosLogicRight() != null & sap.GetElosLogicRight().GetElosLogicDown() != null)sap.GetElosLogicRight().GetElosLogicDown().nSaps+;private int nTotalSaps = 10;private void InitSapElosLogic(ElosLogic logic)if (logic = null) return;IncreaseCentAroundSap(logic);/在MakeElosLogicNet之后使用private void InitGame()CreateSaps(nTotalSaps);private ArrayListMap lstSap = new ArrayListMap();private void Create

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论