数独设计(4)

经过了前两天的设置后,我们就可以再View类中,进行游戏的布置,和进行操作了。

package com.mars.demo;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.FontMetrics;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;public class MyView extends View
{//定义单元格的宽和高public float width;public float height;private int selectX;private int selectY;public Game game = new Game();public MyView(Context context){super(context);// TODO Auto-generated constructor stub}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh){// TODO Auto-generated method stubthis.width = w/9f;this.height = h/9f;super.onSizeChanged(w, h, oldw, oldh);}@Overrideprotected void onDraw(Canvas canvas){//定义画笔对象-->绘制背景Paint paint = new Paint();//设置画笔的颜色paint.setColor(getResources().getColor(R.color.shudu_background));//绘制手机屏幕背景色canvas.drawRect(0, 0, getWidth(), getHeight(), paint);//定义画笔对象-->绘制格子线条Paint darkPaint = new Paint();darkPaint.setColor(getResources().getColor(R.color.shudu_dark));Paint hilitePaint = new Paint();hilitePaint.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, hilitePaint);//绘制纵线canvas.drawLine(i*width, 0, i*width, getHeight(), lightPaint);canvas.drawLine(i*width+1, 0, i*width+1, getHeight(), hilitePaint);}//这个for循环是绘制四根醒目的线for(int i = 0; i<9; i++){if(i % 3 != 0){continue;}//绘制横线canvas.drawLine(0, i*height, getWidth(), i*height, darkPaint);canvas.drawLine(0, i*height+1, getWidth(), i*height+1, hilitePaint);//绘制纵线canvas.drawLine(i*width, 0, i*width, getHeight(), darkPaint);canvas.drawLine(i*width+1, 0, i*width+1, getHeight(), hilitePaint);}//绘制数字Paint numberPaint = new Paint();//设置文字的一系列属性numberPaint.setColor(Color.BLACK);numberPaint.setStyle(Paint.Style.STROKE);numberPaint.setTextSize(height*0.75f);numberPaint.setTextAlign(Paint.Align.CENTER);FontMetrics fontMetrics = numberPaint.getFontMetrics();float x = width/2;float y = height/2 - (fontMetrics.ascent+fontMetrics.descent)/2;for(int i=0; i<9; i++)for(int j=0; j<9; j++){canvas.drawText(game.getTitleString(i, j), i*width + x, j*height+y, numberPaint);}super.onDraw(canvas);}@Overridepublic boolean onTouchEvent(MotionEvent event){// TODO Auto-generated method stubif(event.getAction() != MotionEvent.ACTION_DOWN){return super.onTouchEvent(event);}selectX = (int)(event.getX()/width);selectY = (int)(event.getY()/height);int[] used = game.getUsedTile(selectX, selectY);StringBuffer sb = new StringBuffer();for(int i = 0; i<used.length; i++){sb.append(used[i]);}Log.i("TAG", sb.toString());KeyDialog keyDialog = new KeyDialog(this.getContext(), used, this);keyDialog.show();/*//定义一个layoutInflate对象,转载view文件LayoutInflater layoutInflater = LayoutInflater.from(this.getContext());View view = layoutInflater.inflate(R.layout.dialog, null);TextView textView = (TextView) view.findViewById(R.id.usedTextId);textView.setText(sb.toString());//创建对话框,弹出viewAlertDialog.Builder builder = new AlertDialog.Builder(this.getContext());builder.setView(view);AlertDialog dialog = builder.create();dialog.show();*/return true;}//View类接受KeyDialog传递过来的数据,调用业务逻辑Game类,进行处理public void setSelectTile(int tile){Log.i("TAG", game.setTileIfValid(selectX, selectY, tile)+""+tile);if(game.setTileIfValid(selectX,selectY,tile)){invalidate();//重新绘制View对象}}}

 在主类中调用MyView对象。

package com.mars.demo;import android.os.Bundle;
import android.app.Activity;public class MainActivity extends Activity
{@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);//setContentView(R.layout.activity_main);setContentView(new MyView(this));}}

 

通过上面数独游戏的学习,我了解了Paint类,Canvas类。我学习了一些绘制图形的基本知识,进一步巩固了一些android的基本知识。从中,我发现,作为一个程序员,一定要不断的去敲代码,勇于去实践,程序时敲出来的。很多时候,我们看别人写程序,感觉逻辑都很清晰,思路也不紊乱,但是,真正当自己去实践的时候,你会发现,其实并不是那么容易。当你出现问题的时候,你得尝试去调试,这样,我们才能不断成长。

程序员都是在调试Bug,调试错误中成长起来的。这是我非常赞同的一句话。在此,给自己一句勉励的话,希望自己在今后的学习日子中,不怕困难,用于去尝试。

转载于:https://www.cnblogs.com/kasion/p/4838886.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405013.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[react] 使用高阶组件(HOC)实现一个loading组件

[react] 使用高阶组件(HOC)实现一个loading组件 function HOC(wrappedComponent) {return class extends React.Component {render() {if(!this.props.data) {return (<div>loading</div> )}return <wrappedComponent {...this.props}/>}} } 个人简介 我是…

Linux 延时函数

有一些延时函数写法非常占用CPU&#xff0c;比如while(gettime()>timeSet){}&#xff0c;在Linux中应当尽量使用系统调用执行延时&#xff0c;在延时等待期间执行一次进程调度&#xff0c;降低延时函数的CPU占用率。 Linux中的延时函数有sleep&#xff0c;usleep和nanoslee…

文件系统ext3的文件大小限制

From: http://blog.sina.com.cn/s/blog_640233a30100r3u0.html 想解决缓存的性能问题&#xff0c;准备选用BerkeleyDB作为存储方式&#xff0c;但会有单个文件的问题。 BerkeleyDB的性能没有问题的&#xff0c;DB库非常紧凑&#xff0c;不超过500K&#xff0c;但可以管理大至…

GDI+ 设置不同的分辨率来显示不同大小的图片

通过改变内存图像的分辨率来改变图像在屏幕的大小。 原理是&#xff1a;屏幕的大小/图像&#xff08;内存的图像&#xff09;的大小 屏幕的分辨率/图像&#xff08;内存的图像&#xff09;的分辨率。 注意&#xff1a;当图像的分辨率率变大时&#xff0c;图像本身的像素点的大小…

关于UILabel

一&#xff1a;创建一个label UILabel *label [[UILabel alloc]initWithFrame:CGRectMake(15, 100, 345, 100)]; 二&#xff1a;UILabel的一些属性 (1) 设置文字&#xff1a;label.text "这是我的一个Label"; (2) 设置文字颜色&#xff1a;label.textColor [UIC…

[react] React中如何监听state的变化?

[react] React中如何监听state的变化&#xff1f; 16.x 之前使用componentWillReveiveProps componentWillReceiveProps (nextProps){ if(this.props.visible ! nextProps.visible){ //props 值改变做的事 } } 2.16.x 之后使用getDerivedStateFromProps,16.x 以后componentWil…

Access和sql server的语法区别

Access和sql server的语法区别 一、有区别的函数及解决方案 以下所示的解决方案中的函数定义在untDataBase单元中TAdoConn类的方法中。 序号简述Access语法SqlServer语法Oracle语法DB2语法解决方案01系统时间Date()GETDATE()SYSDATE GetSysTimeStr02连接字符串&||GetConcat…

CM3计算板安装硬件时钟DS3231

1、硬件连接 DS3231是高速&#xff08;400kHz&#xff09;I2C接口的实时时钟芯片&#xff0c;0C至40C范围内精度为2ppm&#xff0c;-40C至85C范围内精度为3.5ppm&#xff0c;工作电压3.3V&#xff0c;提供电池备份&#xff0c;具有输入低功耗&#xff0c;实时时钟产生秒、分、…

初识JavaScript———JavaScript注意事项(1)

javascript能实现高级编程语言所不能实现的效果。javascript区分大小写。 JS能单独写在一个文件上&#xff0c;文件后缀为JS。JS文件不能直接运行&#xff0c;需嵌入到HTML文件中执行&#xff0c;我们需在HTML中添加如下代码&#xff0c;就可将JS文件嵌入HTML文件中。 <scri…

[react] 如何更新组件的状态?

[react] 如何更新组件的状态&#xff1f; ReactDOM.render this.setState this.forceUpdate useState useReducer 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

Source Insight(vs2012,ultraedit) 中Tab键设置为4个空格代替

From: http://blog.csdn.net/wfdtxz/article/details/8520629 Source insight中显示TAB符用4个空格代替 Options->Document Options 将 Visible tabs 打勾 - Source insight中将输入的TAB符转换为空格: 1. Options->Document Options 将 Expand Tabs 打勾2. TAB符宽度…

虚拟机性能测试:八 性能分析—Windows体验指数

先上总分&#xff0c;由于Windows VitualPC不支持Windows体验指数评分&#xff0c;所以它的分数为0。 通过对比发现除了vmware对图形处理的较好外&#xff0c;其它的虚拟机图形的处理都不怎么样。这也是影响体验指数的主要原因。其他的还是差别不大的。转载于:https://blog.51c…

java servlet+oracle 新手可看

最近公司领导告诉接下去接的一个产品&#xff0c;可能会涉及到oracle数据库&#xff0c;以前用得最多的是mssql,前些时间学了下mysql也算少许用过。oracle没接触过。应为我之前做过.net开发&#xff0c;所以数据访问接口这块&#xff0c;涉及到的ashx wcf webserver这些&#x…

source insight 解决自动缩进 和 TAB键=4个SPACE

From: http://blog.sina.com.cn/s/blog_6f2274fb01013ld4.html 转自&#xff1a;http://blog.csdn.net/yjzl1911/archive/2010/06/13/5669037.aspx 1. SMART TAB的用法. 解决自动缩进. 新开一个PROJECT后&#xff0c;点Options->Document Options&#xff0c;弹出对话框后…

[react] React v15中怎么处理错误边界?

[react] React v15中怎么处理错误边界&#xff1f; React 15 中有一个支持有限的错误边界方法 unstable_handleError。此方法不再起作用&#xff0c;同时自 React 16 beta 发布起你需要在代码中将其修改为 componentDidCatch。 个人简介 我是歌谣&#xff0c;欢迎和大家一起交…

Forms身份验证基本原理

要采用Forms身份验证&#xff0c;先要在应用程序根目录中的Web.config中做相应的设置: <authentication mode"forms"> <forms name".ASPXAUTH " loginUrl"/login.aspx" timeout"30" path "/"> </form…

我的SourceInsight配置(附图)

SourceInsight是个不错的工具&#xff0c;在开发过程中查看代码还是非常方便的&#xff0c;但是经常会出现这样一个问题&#xff1a;在sourceInsight中缩进整齐的代码&#xff0c;通过其他编辑器打开就不再对齐了&#xff0c;这看上去非常不爽。 在经过反复搜索、总结后&#…

[react] 你有用过React.Fragment吗?说说它有什么用途?

[react] 你有用过React.Fragment吗&#xff1f;说说它有什么用途 就是包裹几个同级元素&#xff0c;但是自身不会渲染在dom当中 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通…

linux tune2fs命令详解

From: http://blog.chinaunix.net/uid-7530389-id-2050094.html 一.简介&#xff1a; tune2fs是调整和查看ext2/ext3文件系统的文件系统参数&#xff0c;Windows下面如果出现意外断电死机情况&#xff0c;下次开机一般都会出现系统自检。Linux系统下面也有文件系统自检&#x…

[react] 说出几点你认为的React实践

[react] 说出几点你认为的React最佳实践 使用HOC实现组件复用完善测试用例Testing使用Typescript或者Flow对代码进行静态检测代码规范及格式化ES lint, Prettie个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家…