Android游戏开发之数独课时----4
来源:互联网 发布:苹果手机怎么看mac地址 编辑:程序博客网 时间:2024/05/21 14:42
新加了一个类:Game
package com.example.shudu_1;
public class Game {
private final String str="360000000"+
"004230800"+
"000004200"+
"070460003"+
"820000014"+
"500013020"+
"001900000"+
"007048300"+
"000000045";
private int sudoku[]=new int[9*9];
public Game(){
sudoku=fromPuzzleString(str);
}
private int getTile(int x,int y){
return sudoku[y*9+x];
}
public String getTileString(int x,int y){
int v=getTile(x, y);
if(v==0){
//当值为零的时候是不填写的
return "";
}else
return String.valueOf(v);
}
private int[] fromPuzzleString(String src) {
int []sudo=new int[src.length()];
for(int i=0;i<sudo.length;++i){
sudo[i]=src.charAt(i)-'0';
}
return sudo;
}
}
第二步:MyView
package com.example.shudu_1;
import android.content.Context;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.FontMetrics;
import android.support.v4.view.PagerAdapter;
import android.text.style.LineHeightSpan.WithDensity;
import android.view.View;
public class MyView extends View {
//设置单元格的宽度和高度
private float width;
private float height;
private Game game=new Game();
public MyView(Context context) {
super(context);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
//计算当前单元格的高度和宽度
this.width=w/9f;
this.height=h/9f;
super.onSizeChanged(w, h, oldw, oldh);
}
@Override
protected void onDraw(Canvas canvas) {
//生成用于绘制背景色的画笔
Paint backgroundPaint=new Paint();
//设置背景的颜色
backgroundPaint.setColor(getResources().getColor(R.color.shudu_background));
//绘制背景色
canvas.drawRect(0, 0, getWidth(), getHeight(), backgroundPaint);
Paint darkPain=new Paint();
darkPain.setColor(getResources().getColor(R.color.shudu_dark));
Paint hiliPaint=new Paint();
hiliPaint.setColor(getResources().getColor(R.color.shudu_hilite));
Paint lightPaint=new Paint();
lightPaint.setColor(getResources().getColor(R.color.shudu_light));
for(int i=0;i<9;++i){
//以下两行代码用户绘制横向的单元格
//明线和黑线才能合成一条雕刻的线
canvas.drawLine(0, i*height, getWidth(), i*height,lightPaint);
canvas.drawLine(0, i*height+1, getWidth(), i*height+1,hiliPaint);
//纵向
canvas.drawLine(i*width, 0, i*width, getHeight(), lightPaint);
canvas.drawLine(i*width+1, 0, i*width+1, getHeight(), hiliPaint);
}
//绘制黑线
for(int i=0;i<9;++i){
if(i%3!=0){
continue;
}
//以下两行代码用户绘制横向的单元格
//明线和黑线才能合成一条雕刻的线
canvas.drawLine(0, i*height, getWidth(), i*height,darkPain);
canvas.drawLine(0, i*height+1, getWidth(), i*height+1,hiliPaint);
//纵向
canvas.drawLine(i*width, 0, i*width, getHeight(), darkPain);
canvas.drawLine(i*width+1, 0, i*width+1, getHeight(), hiliPaint);
}
//绘制文字
Paint numberPain=new Paint();
numberPain.setColor(Color.BLACK);
numberPain.setStyle(Paint.Style.STROKE);
numberPain.setTextSize(height*0.75f);
numberPain.setTextAlign(Paint.Align.CENTER);
FontMetrics fm=numberPain.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), i*width+x, j*height+y, numberPain);
}
}
super.onDraw(canvas);
}
}
第三部:
package com.example.shudu_1;
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);
//setContentView(R.layout.activity_main);
setContentView(new MyView(this));
}
@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;
}
}
- Android游戏开发之数独课时----4
- Android游戏开发之数独课时----1
- Android游戏开发之数独课时----2
- Android游戏开发之数独课时----3
- Android游戏开发之数独课时----5
- Android 游戏开发之 数独游戏
- android开发——数独游戏
- 数独游戏开发
- Android数独游戏01
- Android数独游戏02
- Android数独游戏03
- Android数独游戏04
- android数独游戏机器人
- android游戏开发项目实战——数独
- android游戏开发项目实战——数独 .
- Android数字游戏之数独(自动随机生成不同难度的数独)
- Android 简单数独开发
- 第一章 游戏之乐 构造数独
- Launcher中采用的设计模式
- [LeedCode OJ]#154 Find Minimum in Rotated Sorted Array II
- HTTP请求的使用以及POST与GET的区别
- dropdown模式下可以设置Prompt的Spinner
- TCP/IP协议详解-TCP简介与TCP建立与终止
- Android游戏开发之数独课时----4
- iOS 分类的基本使用(更改frame)以及全局变量.pch的使用
- NSDate相关知识点
- 欢迎使用CSDN-markdown编辑器
- JAVA并发编程6_线程协作/生产者-消费者
- Java Classloader机制解析
- mybatis+mysql返回插入值后的主键id
- C#开发微信公众平台-就这么简单
- JAVA集锦(二)--相对路径与绝对路径之间的转换