歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android數獨游戲源碼

Android數獨游戲源碼

日期:2017/3/1 10:11:51   编辑:Linux編程

Android數獨游戲源碼 ,照著mars的視頻教程學的。

  1. package com.example.android;
  2. import android.annotation.SuppressLint;
  3. import android.content.Context;
  4. import android.graphics.Canvas;
  5. import android.graphics.Color;
  6. import android.graphics.Paint;
  7. import android.graphics.Paint.Align;
  8. import android.graphics.Paint.FontMetrics;
  9. import android.util.AttributeSet;
  10. import android.view.MotionEvent;
  11. import android.view.View;
  12. @SuppressLint("DrawAllocation")
  13. public class myView extends View{
  14. public myView(Context context, AttributeSet attrs) {
  15. super(context, attrs);
  16. }
  17. //方格長寬
  18. float width;
  19. float height;
  20. //選定的坐標
  21. int selectX;
  22. int selectY;
  23. myGame mGame=new myGame();
  24. //繪圖函數
  25. @Override
  26. protected void onDraw(Canvas canvas) {
  27. super.onDraw(canvas);
  28. //畫背景
  29. Paint bgPaint=new Paint();
  30. bgPaint.setColor(getResources().getColor(R.color.bg));
  31. canvas.drawRect(0,0,getWidth(),getHeight()*2/3f, bgPaint);
  32. //線條畫筆
  33. Paint darkPaint =new Paint();
  34. darkPaint.setColor(getResources().getColor(R.color.dark));
  35. Paint hilitePaint =new Paint();
  36. hilitePaint.setColor(getResources().getColor(R.color.hilite));
  37. Paint lightPaint =new Paint();
  38. lightPaint.setColor(getResources().getColor(R.color.light));
  39. //繪制線條
  40. for(int i=0;i<9;i++){
  41. canvas.drawLine(0, i*height,getWidth(),i*height,lightPaint);
  42. canvas.drawLine(0, i*height+1,getWidth(),i*height+1,hilitePaint);
  43. canvas.drawLine(i*width, 0,i*width,getHeight(),lightPaint);
  44. canvas.drawLine(i*width+1,0,i*width+1,getHeight(),hilitePaint);
  45. if(i%3==0){
  46. canvas.drawLine(0, i*height,getWidth(),i*height,darkPaint);
  47. canvas.drawLine(0, i*height+1,getWidth(),i*height+1,hilitePaint);
  48. canvas.drawLine(i*width, 0,i*width,getHeight(),darkPaint);
  49. canvas.drawLine(i*width+1, 0,i*width+1,getHeight(),hilitePaint);
  50. }
  51. }
  52. //繪制數字
  53. Paint numberPaint =new Paint();
  54. numberPaint.setColor(Color.BLACK);
  55. numberPaint.setStyle(Paint.Style.STROKE);
  56. numberPaint.setTextSize(height*0.75f);
  57. numberPaint.setTextAlign(Align.CENTER);
  58. //調節文字居中
  59. FontMetrics fMetrics=numberPaint.getFontMetrics();
  60. float x=width/2;
  61. float y=height/2-(fMetrics.ascent+fMetrics.descent)/2;
  62. for(int i=0;i<9;i++)
  63. {
  64. for(int j=0;j<9;j++)
  65. {
  66. canvas.drawText(mGame.getNumber(i+1, j+1), i*width+x, y+j*height, numberPaint);
  67. }
  68. }
  69. }
  70. //觸摸事件
  71. @Override
  72. public boolean onTouchEvent(MotionEvent event) {
  73. int x=(int)(event.getX()/width);
  74. int y=(int)(event.getY()/height);
  75. int []t=mGame.getUsed(x, y);
  76. selectX=x;
  77. selectY=y;
  78. myDialog mDialog=new myDialog(getContext(), t, this);
  79. mDialog.show();
  80. return super.onTouchEvent(event);
  81. }
  82. //獲得屏幕尺寸
  83. @Override
  84. protected void onSizeChanged(int w, int h, int oldw, int oldh) {
  85. super.onSizeChanged(w, h, oldw, oldh);
  86. //每一個小格的長寬
  87. this.width=w/9f;
  88. this.height=h/9f*2/3;
  89. }
  90. public void setTitle(int i){
  91. mGame.setTitle(i,selectX,selectY);
  92. invalidate();
  93. }
  94. }

  1. package com.example.android;
  2. public class myGame {
  3. String data="008309100" +
  4. "900060004" +
  5. "007504800" +
  6. "036000540" +
  7. "001000600" +
  8. "042000970" +
  9. "005907300" +
  10. "600010008" +
  11. "004608200";
  12. int numbers[][] =new int[9][9];
  13. public myGame(){
  14. //初始化data
  15. for(int i=0;i<9;i++)
  16. for(int j=0;j<9;j++)
  17. {
  18. numbers[i][j]=data.charAt(i+j*9)-'0';
  19. }
  20. }
  21. //得到值
  22. public String getNumber(int x,int y){
  23. if(numbers[x-1][y-1]==0)
  24. return "";
  25. else
  26. return ""+numbers[x-1][y-1];
  27. }
  28. //算出已經被用的數字
  29. public int[] getUsed(int x,int y){
  30. int c[]=new int[9];
  31. //x列
  32. for(int i=0;i<9;i++)
  33. {
  34. if(numbers[x][i]!=0)
  35. {
  36. c[numbers[x][i]-1]=numbers[x][i];
  37. //System.out.println("x:"+numbers[x][i]);
  38. }
  39. }
  40. //y排
  41. for(int i=0;i<9;i++)
  42. {
  43. if(numbers[i][y]!=0)
  44. {
  45. c[numbers[i][y]-1]=numbers[i][y];
  46. //System.out.println("y:"+numbers[i][y]);
  47. }
  48. }
  49. //小九宮格
  50. x=(x/3)*3;
  51. y=(y/3)*3;
  52. for(int i=0;i<9;i++)
  53. {
  54. if(numbers[x+i%3][y+i/3]!=0)
  55. {
  56. c[numbers[x+i%3][y+i/3]-1]=numbers[x+i%3][y+i/3];
  57. }
  58. }
  59. return c;
  60. }
  61. //設置選定的數字
  62. public void setTitle(int i,int x,int y){
  63. numbers[x][y]=i;
  64. }
  65. }

  1. package com.example.android;
  2. import android.app.Dialog;
  3. import android.content.Context;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. public class myDialog extends Dialog{
  7. myView mView;
  8. View keys[]=new View[9];
  9. int []used=new int[9];
  10. //傳入已經使用過的數字
  11. public myDialog(Context context,int[] useed,myView m) {
  12. super(context);
  13. this.mView=m;
  14. this.used=useed;
  15. }
  16. @Override
  17. protected void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. //設置標題
  20. setTitle("可選數字");
  21. //設置布局文件
  22. setContentView(R.layout.table);
  23. int id[]=new int[]{R.id.bt1,R.id.bt2,R.id.bt3,R.id.bt4,
  24. R.id.bt5,R.id.bt6,R.id.bt7,R.id.bt8,R.id.bt9};
  25. for(int i=0;i<9;i++)
  26. {
  27. final int t=i+1;
  28. keys[i]=findViewById(id[i]);
  29. keys[i].setOnClickListener(new View.OnClickListener() {
  30. public void onClick(View v) {
  31. mView.setTitle(t);
  32. dismiss();
  33. }
  34. });
  35. }
  36. for(int i=0;i<9;i++)
  37. {
  38. if(used[i]!=0)
  39. keys[used[i]-1].setVisibility(View.INVISIBLE);
  40. }
  41. }
  42. }

  1. <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="wrap_content"
  3. android:layout_height="wrap_content"
  4. android:orientation="vertical"
  5. android:stretchColumns="*" >
  6. <TableRow
  7. android:id="@+id/row1"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content" >
  10. <Button
  11. android:id="@+id/bt1"
  12. android:layout_width="wrap_content"
  13. android:layout_height="wrap_content"
  14. android:text="1" />
  15. <Button
  16. android:id="@+id/bt2"
  17. android:layout_width="wrap_content"
  18. android:layout_height="wrap_content"
  19. android:text="2" />
  20. <Button
  21. android:id="@+id/bt3"
  22. android:layout_width="wrap_content"
  23. android:layout_height="wrap_content"
  24. android:text="3" />
  25. </TableRow>
  26. <TableRow
  27. android:id="@+id/row2"
  28. android:layout_width="wrap_content"
  29. android:layout_height="wrap_content" >
  30. <Button
  31. android:id="@+id/bt4"
  32. android:layout_width="wrap_content"
  33. android:layout_height="wrap_content"
  34. android:text="4" />
  35. <Button
  36. android:id="@+id/bt5"
  37. android:layout_width="wrap_content"
  38. android:layout_height="wrap_content"
  39. android:text="5" />
  40. <Button
  41. android:id="@+id/bt6"
  42. android:layout_width="wrap_content"
  43. android:layout_height="wrap_content"
  44. android:text="6" />
  45. </TableRow>
  46. <TableRow
  47. android:id="@+id/row3"
  48. android:layout_width="wrap_content"
  49. android:layout_height="wrap_content" >
  50. <Button
  51. android:id="@+id/bt7"
  52. android:layout_width="wrap_content"
  53. android:layout_height="wrap_content"
  54. android:text="7" />
  55. <Button
  56. android:id="@+id/bt8"
  57. android:layout_width="wrap_content"
  58. android:layout_height="wrap_content"
  59. android:text="8" />
  60. <Button
  61. android:id="@+id/bt9"
  62. android:layout_width="wrap_content"
  63. android:layout_height="wrap_content"
  64. android:text="9" />
  65. </TableRow>
  66. </TableLayout>
Copyright © Linux教程網 All Rights Reserved