数独设计(4)
經(jīng)過了前兩天的設(shè)置后,我們就可以再View類中,進(jìn)行游戲的布置,和進(jìn)行操作了。
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();//設(shè)置畫筆的顏色paint.setColor(getResources().getColor(R.color.shudu_background));//繪制手機(jī)屏幕背景色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);}//這個(gè)for循環(huán)是繪制四根醒目的線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);}//繪制數(shù)字Paint numberPaint = new Paint();//設(shè)置文字的一系列屬性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();/*//定義一個(gè)layoutInflate對象,轉(zhuǎn)載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());//創(chuàng)建對話框,彈出viewAlertDialog.Builder builder = new AlertDialog.Builder(this.getContext());builder.setView(view);AlertDialog dialog = builder.create();dialog.show();*/return true;}//View類接受KeyDialog傳遞過來的數(shù)據(jù),調(diào)用業(yè)務(wù)邏輯Game類,進(jìn)行處理public void setSelectTile(int tile){Log.i("TAG", game.setTileIfValid(selectX, selectY, tile)+""+tile);if(game.setTileIfValid(selectX,selectY,tile)){invalidate();//重新繪制View對象}}}?在主類中調(diào)用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));}}?
通過上面數(shù)獨(dú)游戲的學(xué)習(xí),我了解了Paint類,Canvas類。我學(xué)習(xí)了一些繪制圖形的基本知識,進(jìn)一步鞏固了一些android的基本知識。從中,我發(fā)現(xiàn),作為一個(gè)程序員,一定要不斷的去敲代碼,勇于去實(shí)踐,程序時(shí)敲出來的。很多時(shí)候,我們看別人寫程序,感覺邏輯都很清晰,思路也不紊亂,但是,真正當(dāng)自己去實(shí)踐的時(shí)候,你會發(fā)現(xiàn),其實(shí)并不是那么容易。當(dāng)你出現(xiàn)問題的時(shí)候,你得嘗試去調(diào)試,這樣,我們才能不斷成長。
程序員都是在調(diào)試Bug,調(diào)試錯誤中成長起來的。這是我非常贊同的一句話。在此,給自己一句勉勵的話,希望自己在今后的學(xué)習(xí)日子中,不怕困難,用于去嘗試。
轉(zhuǎn)載于:https://www.cnblogs.com/kasion/p/4838886.html
總結(jié)
- 上一篇: 梦到自己奶奶去世是什么预兆
- 下一篇: 做梦梦到猫是胎梦吗