在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → 基于Android的数独游戏

基于Android的数独游戏

一般编程问题

下载此实例
  • 开发语言:Others
  • 实例大小:0.56M
  • 下载次数:6
  • 浏览次数:102
  • 发布时间:2020-09-18
  • 实例类别:一般编程问题
  • 发 布 人:robot666
  • 文件格式:.pdf
  • 所需积分:2
 

实例介绍

【实例简介】
基于Android的数独游戏,数独游戏中的公共资源文件主要有字符串资源文件、数组资源文件和颜色资源文件,设置完 公共资源文件之后,在开发程序时,用户即可很方便的进行调用。本节将对数独游戏中的公共资 源文件进行讲解在编写项目代码之前,需要制定好项目的文件夹组织结构,如不同的 Java 包存放不同的窗体、 公共类、数据模型、工具类或者图片资源等,这样不但可以保证团队开发的一致性,也可以规范 系统的整体架构。创建完程序中可能用到的文件夹或者 Java 包之后,在开发时,只需将创建的类 文件或者资源文件保存到相应的文件夹中即可。数独游戏的文件夹组织结构如图 B-1 所示。数独游戏是一款比较传统的游戏,
B基于 Android的数独游戏 B.41字符串资源文件 字符串资源存储在 文件中,主要定义游戏中用到的公共字符串,主要代码如下。 < xml version="1.0"encoding="utf-8?> <resources> < string name="he11o"> Android版的数独游戏</ string> < string name=" apo name">数独</ strin < string name="btn1">继续</ string> < string name=" about text">数独游戏是一款比较传统的游戏,它由81个(9行*9列)单元格组成, 玩家要试着在这些单元格中填入1~9的数字, 使数字在每行、每列和每区(3行*3列的部分)中都只出现一次,游戏开始时,部分单元格中已经填入一些 已知的数字,玩家只需要在剩下的空单元格中填入数字。 道正确的数独谜题只有·个答案。 </string> < string name=" about tit1e">关于数独游戏</ string> <string name="settings label">k.. </string> < string name=" settings title">游戏设置</ string> <string name="settings shortcut">s</string < string name=" music tit1e">音乐</ string> < string name=" music summary">播放背景音乐</ string> < string name=" hints tit1e">提示</ string> < string name=" hints summary">是否显示提示</ string> <!-开始游戏-- < string name=" new game tit1e">难度</ string> < string name=" easy label">简单</ s-ring> < string name=" medium1abe1">一般</ string> < string Late=" hard labe1”>高级</s-ring> < string name=" game tit1e">数独游戏</ string> < string name=" no moves1abe1">不能填充仟何数字</ string> < string name=" keypad tit1e">键盘</ string> </resources> B42数组资源文件 数组资源存储在 文件中,主要定义数独游戏中的种难易程度,主要代码如下。 < xml version="1.0 encoding=utf-8?> .resources> <array name=difficulty"> <item>string/easy label</item> Item>@string/medium label</item <item>string/hard label</item> <array> </resources> B43颜色资源文件 颜色资源存储在 文件中,主要定义游戏中用到的各种背景色,比如主界面背景色、 Android程序设计实用教程 填充数字的单元格背景色、提醒背景色等,主要代码如下。 <?xml version="1.0"encoding="utf-8?> <resoure <color name="background">+75FF6600</color> <color name=puzzle background">#ffe6foff</color> <color name=puzzle hilite>FFFFFFFF</color> I name le light">#64c6d4e=</color> <color name="puzzle dark">#6456648f</color> <color name="puzzle foreground">#ff000000</color> <color name="puzzle hint 0>#64ff0000</color> <color name=puzzle hint >#6400ff80</color> <color name=puzzle hint 2>2000ff80</color> <color name="puzzle selected">#64ff8000</color> </resources> B.5游戏主窗体设计 主窗体是程序操作过程中必不可少的,它是与用户交互中的重要环节。通过主窗体,用户可 以调用系统相关的各子模块,快速掌握本系统中所实现的各个功能。数独游戏的主窗体主要为用 户提供继续游戏、新建游戏、査看数据游戏规则及退岀游戏的链接按钮。主窗体运行结果如图 所示 5554 MyAVD 7 10: 45 Basic Controls 数独 Android版的数独游戏 DPAD not enabled in AVD 继续 新游戏 关于 退出 图数独游戏主窗体 B5.1设计系统主窗体布局文件 数独游戏的主窗体有两种布局方式,一种针对竖屏,一种针对横屏,其中,针对竖屏的布局 文件存放在 目录下,实现代码如下 <l-neArlayoutxmlns:android="http://schemas.androidcom/apk/res/android" android: background="@color/background android: orientation=horizontal" android: layout android: layout height=fill parent ndrcid: padding=30dip 4 B基于 Android的数独游戏 <LinearLayout android: orientation=vertical oid: layout width=fill android: layout height=wrap content android: cravity=center <Text android: layout width="fill parent android: la yout height ap content android: text="@string/hello /> <Button android: id="@+id/button1 android: text="string/btnl android: layout height=wrap content android: layout width="wrap content"/> <Button android: id="@+id/but ton2 android:text="新游戏 android: layout height=wrap content android: layout width="wrap content"/> <Button android: id=@+id/button3'r android:text="关于 android: layout height=wrap content android: layout width="wrap content"/> <Button android: id="@+id/button 4 android:text="退出" droid: layout height=wrap content android: layout width=wrap content"/> </LinearLayout> </Linearl 针对横屏的布局文件存放在 目录下,实现代码如下。 KlineaRlayoutxmlns:android-http android. com/apk/res/android" droid: background=C android: orientation=horizontal android: 1 t width="fill p android: layout height=fill parent android: padding=15d .LinearLayout android: orientation=vertical android: layout width=fill parent t height android: layout gravity=center android: paddingLeft=20dip' android: paddingRight=20dip <Textview droid: la yout width=fill parent android: layout height=wrap content android: text="@string/hell android: layout marginBottom=20dip droid: texts 24.5 <Tablelayout 5 Android程序设计实用教程 android: layout width="wrap content ndrcid: la yout height ap conte android: gravity=center larid: stretchcol <Butt droid: id="@+id/button1 android: text="@string, btn1 android: layout height=wrap content android: layout width="wrap content"/> <Button android: id="@+id /but 2 android:text="新游戏" droid: layout height android: layout width=wrap content"/> Button a @+id/button android:text="关于 droid: 1 ap c android: layout width=wrap content"/> <Button android: id=@+id/button 4 droid:text="退出 android: layout width=wrap content "/> </Tablel </LinearLayout> </Linearlayout> B52为界面中的按钮添加监听事件 在 包中创建一个 文件,该文件中主要是为界面中的按钮 添加监听事件,代码如下。 blic class SudokuActivity extends Activity implements OnClickListener t private static final String TAg=Sudo"i @override public void onCreate(Bundle savedInstarcestate)i super onCreate(savedInstancestate) setCortentview(R layout main)i View continueButton=this. finaviewbyid(R.id. button1);//为继续按钮绑定单击事件 continue Button. setonClicklistener(this) View rewButton-this findv-ewById(R id button2) newButton. setonClicklistener(this)i View aboutButton=this findviewById(R id button)i aboutButton. setonclicklistener(this,i View exitButton=this. findviewById(R,id. button4);//为退出按钮添加单击事件监听 exitButton. setOnClickListener( this) pub Click(View v) Intent itch (v getId()i case r.id. button1 StartGame(GameActivity DIFFICULTY CONTINUE) break R. id. button B基于 Android的数独游戏 Dialog() break case r. id. button 3 Intent( this, About class) break se r.id. button: finish( break dover pAuse i super. onPause()i Music. stop(this)i protected void onResume() super. onResume()i private void openNewGameDialog()i new AlertDialog Builder(this) setTitle(r string. new game title) setItems(Rarray difficulty, new DialogInterface. OnClicklistener() d public void oncl-ck(DialogInterface d nt il StartGame(i) how( private void startGame(int i f Logd(TAG,clicked on +1) Intent intent=new Intent(this, GameActivity class)i intent. put. ra(GameActivity KEY DTFFTCUL TY, i)i startActivity(intent)i @Override public boolean onCreateOptionsMenu(Menu menu super. onCreateoptionsMenu(menu)i Menlulniflater inflater-getMenuInflater()i inflater inflate(R menu menu, menu)i return truei OVerride blic boolean onoptionsItemSelected(MenuItem item) super. onoptionsItemSelected(item)i switch (item. getItemId()i case R. id. settings startActivity(new Intent (this, SettingsActivity. class))i return truei return false; 7 Android程序设计实用教程 B.5.3绘制数独游戏界面 在 包中创建一个 文件,该文件中主要是绘制数独游戏的界面 代码如下。 public class Puzzleview extends View t private static final string TAG=sudoku i private final gameActivity gamei private float width private float height private int selxi te int sely private final Rect selrect-new Rect()i //记录当前位置 private static final String SELX=selx; private static final String SElY="selY private static final String VIEW STATE="viewstate"; private static final int ID-42i public Puzzleview(Concext context) super(context) this game=(GameActivity) context setFocusable(t setFocusableinTouchMode(true setid(工D); //设置ID用于记录当前位置 **大大用于记录当前位置★*★**/ @Override rotected void onRestoreinstancestate(parcelable state) i Log d(TAG, "onRestoreInstancestate")i dle=(Bundle)stat select(bundle getInt(SELX), bundle, getInt(SELY))i super. onRestoreInstancestate(bundle. getParcelable (vIEW STaTe))i etr:rn @Override protected Parcelable onSaveInstancestate() Parcelable p=super. onSaveInstancestate(i Log d(TAG,onsaveInstancestate) Bundle bundle-new Bundle( tInt ISELX bundle. putIntISElY, selv)i buncle. outpace1ab1e(V⊥上WsAE,p); return bundle x★大大★大大大大大★大大大大大大大大★★大大★大大★★大大★大大太★大大大★大大大★大大大★大 protected void onsizeChanged (int w, int h, int old, int old)i width=w/9f; height=h/9f tRect(sex, sely select Log d(TAG, onSizeChanged: width"+width+height "theight super. onsizeChanged(N, h, claw, olah)i @Override B基于 Android的数独游戏 d onDraw(Canvas carvas) i Paint background=new Paint(i background. setColor(getResources(). getColor(R color puz. le background))i asdrawrect (0,0, getwidth(), getHeight(), background) //绘制网格线 dark setcolor(getRescurces(). getColor(R colcr puzzle dark))i Paint hilite-new Paint o hilite setColor(getResources(). getColor(R color puzzle hilite))i Paint light=new Paint() light setColor(getResources(). getColor(R color puzzle light)) //绘制次要网格线 for(int i=0;i<g;i++)i canvas.drawLine(0, i*heigh=, getwidth(), i*height, light)i canvas.drawLine(0, i*=+l, getwidth(), i*height+l, hilite)i anvas drawLine(=*width, 0, i*width, getHeight(), light)i canvas.drawLine(=*widthll,0,i*widthIl, getHeight(), hilite)i //绘制主要网格线 0;i<9;i++){ (i%3!=0) ontinue Else i canvas. drawLine(0, i*height+l, getwidtho, iheight+l, hilite canvas drawLine(i*width, 0, i*width, getHeight(), dark) canvas. drawLine(i*width+l, 0, i*width+-, cetHeight(), hilite)i //输出数字 Paint foreground=new Paint (Paint. ANTI ALIAS FLAG)i foreground setColor(getResources(). getColor(R color puzzle foreground))i foreground setstyle(style. FILL)i foreground. setTextsize(height*0.75f) foreground. setfextscalex(width/height)i foreground. setTextAlign(Align cenTer); //设置文字居中 FontMetrics fm=foreground. getFontMetrics(i float x=width/2; height/2-( fm. ascent+fm. descent)/2 for(int 1=0;1<9; 1++)( for(int j=0;3<9:3++)i canvas. drawText(this game. getTilestring(i,j) i*widthS, j*height+y, fo //绘制 hints f(SettingsActivity. getHints(getContext()))t //判断是否显示高亮提 Paint hint=new Paint(i int cl=t getresources(). ge=Color(R color puzzle hint 0) getResources(). getColor( getResources(). getColor(R color puzzle hint 2)); Rect r=new Rect o for(int j=0;3<9:j++) Android程序设计实用教程 int mouseleft=9-game. getUsedTiles(i,j).length if(mouseleft<c. length)( g hint setcolor(c [mouseleft])i canvas. drawrect(r, hint)i //绘制选定区 Log d(TAG," select+select)i Paint selected Paint()i selected. setColor(getResources(). getColor(R color puzzle selected))i canvas. drawrect(selrect, selected)i super onDraw(canvas)i @Override public boolean onKey Down(int keyCode, keyl Logd(TAG,onKeyDown: keycode=+keyCode+event=+event)i switch(keyCode)t Eⅴent. KEYCODE DPAD UP select (selX, selY-1) case keyEvent. KEYCODE DPAD DOWN: case keyEvent. KEYCODE DPAD LEFT: elect(selx-l, sely) case Keyevent. KEYCODE DPAD RIGHT select(selX+l sely) break se KeyEvent. KEYCODE 0 case keyevent. KEYCODE SPACE: setselectedTile(0) break case Event. KEYCODE 1 setselectedTile(l break case KeyEvent. KEYCODE 2 break case KeyEvent. KEYCODE 3 SelectedTile(3) break t KEYCODE 4 tselectedTile( 4 break ase Keyevent. KEYCODE 5 setselectedr'ile(5)i break case keyevent. KEYCODE 6 setSelectedTile(6) break: Eⅴent. KEYCODE7: setselectedrile(7) 10 【实例截图】
【核心代码】

标签:

实例下载地址

基于Android的数独游戏

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警