栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

基于Android实现数独游戏

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于Android实现数独游戏

本文实例为大家分享了Android实现数独游戏的具体代码,供大家参考,具体内容如下

1、在src中有4个Java类:

其中代码分别是:
Game.java:

package com.example.test1; 
 
import android.R.integer; 
 
public class Game { 
  public final String str="360000000004230800000004200" 
   +"070460003820000014500013020" 
   +"001900000007048300000000045"; 
   
  static int sudoku[]=new int [9*9]; 
   
  private int used[][][]=new int[9][9][]; 
  int sum=0; 
  public int[] getSudoku(){ 
    return sudoku; 
  } 
  public int sum(int a[]){ 
    for(int i=0;i

KeyDialog.java:

package com.example.test1; 
 
import android.app.Dialog; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.View; 
 
//该类用于实现Dialog,实现自定义的对话框功能 
public class KeyDialog extends Dialog{ 
    //用来存放代表对话框中按钮的对象 
    private final View keys[]=new View[9]; 
    private final int used[]; 
    private ShuduView myView; 
    //构造函数的第二个参数当中保存着当前单元格已经使用过的数字 
    public KeyDialog(Context context,int[] used,ShuduView myView) { 
 super(context); 
 this.used=used; 
 this.myView=myView; 
    } 
    //当一个Dialog第一次显示的时候,会调用Oncreate方法 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
 // TODO Auto-generated method stub 
 super.onCreate(savedInstanceState); 
 //设置标题 
 setTitle("KeyDialog"); 
 //用于为该Dialog设置布局文件 
 setContentView(R.layout.keypad); 
 findViews(); 
  
 //遍历整个used数组 
 for(int i=0;i

ShuduView.java:

package com.example.test1; 
 
import android.R.integer; 
import android.app.alertDialog; 
import android.app.alertDialog.Builder; 
import android.app.Dialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Paint.FontMetrics; 
import android.graphics.Paint.FontMetricsInt; 
import android.view.LayoutInflater; 
import android.view.MotionEvent; 
import android.view.View; 
import android.widget.TextView; 
 
public class ShuduView extends View{ 
  private float width; 
  private float height; 
  int selectedX; 
  int selectedY; 
  private Game game=new Game(); 
  public ShuduView(Context context) { 
      super(context); 
      // TODO Auto-generated constructor stub 
  } 
 
   
  @Override 
  protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
      // TODO Auto-generated method stub 
      this.width=w/9f; 
      this.height=h/9f; 
      super.onSizeChanged(w, h, oldw, oldh); 
  } 
 
 
  @Override 
  protected void onDraw(Canvas canvas) { 
      // TODO Auto-generated method stub 
      //绘制背景颜色 
      Paint background_paint = new Paint(); 
      background_paint.setColor(getResources().getColor(R.color.shudu_background)); 
      canvas.drawRect(0, 0, getWidth(), getHeight(), background_paint); 

      Paint white=new Paint(); 
      white.setColor(getResources().getColor(R.color.shudu_hilite)); 

      Paint light=new Paint(); 
      light.setColor(getResources().getColor(R.color.shudu_light)); 

      Paint dark=new Paint(); 
      dark.setColor(getResources().getColor(R.color.shudu_dark)); 

      for(int i=0;i<9;i++) 
      { 
   //画出横向的线 
   canvas.drawLine(0, i*height, getHeight(), i*height, light); 
   canvas.drawLine(0, i*height+1, getHeight(), i*height+1, white); 
   //画出纵向的线 
   canvas.drawLine( i*width,0, i*width,getHeight(), light); 
   canvas.drawLine( i*width+1,0, i*width+1, getHeight(), white); 
      } 
      for(int i=0;i<9;i++) 
      { 
   if(i%3!=0) 
   { 
continue; 
   } 
   canvas.drawLine(0, i*height, getHeight(), i*height, dark); 
   canvas.drawLine(0, i*height+1, getHeight(), i*height+1, white); 
   //画出纵向的线 
   canvas.drawLine( i*width,0, i*width,getHeight(), dark); 
   canvas.drawLine( i*width+1,0, i*width+1, getHeight(), white); 
      } 

      Paint number_paint=new Paint(); 
      number_paint.setColor(Color.BLACK); 
      //number_paint.setStyle(Paint.Style.STROKE); 
      number_paint.setTextSize(height*0.75f); 
      number_paint.setTextAlign(Paint.Align.CENTER); 

      FontMetrics fm=number_paint.getFontMetrics(); 
      float x=width/2; 
      float y=height/2-(fm.ascent+fm.descent)/2; 



      for(int i=0;i<9;i++) 
      { 
   for(int j=0;j<9;j++) 
   { 
canvas.drawText(game.getTileString(i, j), width*i+x, height*j+y, number_paint); 
   } 
      } 

      super.onDraw(canvas); 
  } 
   
  @Override 
  public boolean onTouchEvent(MotionEvent event) { 
      // TODO Auto-generated method stub 
      if(event.getAction()!=MotionEvent.ACTION_DOWN) 
      { 
   return super.onTouchEvent(event); 
      } 
      selectedX=(int)(event.getX()/width); 
      selectedY=(int)(event.getY()/height); 

      int used[]=game.getUsedTileByCoor(selectedX, selectedY); 
      int sum=0; 
      int sumNumber=0; 
      sumNumber=game.sum(game.getSudoku()); 
      if(sumNumber==45*9){ 
 alertDialog.Builder builder=new alertDialog.Builder(getContext()); 
 builder.setMessage("Success!") 
 .setPositiveButton("Exit", new DialogInterface.onClickListener() { 
    
   @Override 
   public void onClick(DialogInterface arg0, int arg1) { 
     arg0.cancel(); 
      
   } 
 }); 
 alertDialog alertDialog=builder.create(); 
 alertDialog.show();  
      } 
      else { 
 for(int i=0;i

MainActivity.java:

package com.example.test1; 
 
import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
 
public class MainActivity extends Activity { 
 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ShuduView sView=new ShuduView(this); 
    setContentView(sView); 
     
     
    //setContentView(R.layout.activity_main); 
  } 
 
 
  @Override 
  public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
  } 
   
} 

2、布局Layout中的配置文件:

其中activity_main.xml:

 
 
   
 
 

dialog.xml:

 
 
   
   
 
 

keypad.xml:

 
 
 
 
   
    

3、values中的配置文件
就只有color.xml是自己写的,另外三个都是自动生成
color.xml

 
 
    #ffe6f0ff 
  #64ff0000 
  #64ffffff 
  #6400ff00 
 

4、一切就绪直接运行就0k

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/156906.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号