|
将开发过程经常用的内容片段珍藏起来,如下内容内容是关于Android开发的斗地主牌桌实现的内容。
package com.bison; import android.app.Activity; import android.content.pm.ActivityInfo; import android.os.Bundle; import android.view.Window; import android.view.WindowManager; public class PukeActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); setContentView(new GameView(this)); } } 2、牌桌页面
package com.bison; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Rect; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import com.bison.utils.Person; public class GameView extends SurfaceView implements SurfaceHolder.Callback { private final Person person; public GameView(Context context) { super(context); getHolder().addCallback(this); } sourceBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.smallcard); pukeHeight = sourceBitmap.getHeight() / 4; backgroundDesk = BitmapFactory.decodeResource(getResources(), R.drawable.gameback2); deskHeight = backgroundDesk.getHeight(); backgroundPuke = BitmapFactory.decodeResource(getResources(), R.drawable.cardback); } @Override protected void onDraw(Canvas canvas) { canvas.drawBitmap(backgroundDesk, 0, 0, null); personPaint(canvas, pukeWidth, pukeHeight); deskthreePukes(canvas, pukeWidth, pukeHeight); } public void personPaint(Canvas c, int pukeWidth, int pukeHeight) { Rect src = new Rect(); Rect dst = new Rect(); for (int i = 0; i < 3; i++) { for (int j = 0; j < 17; j++) { c.drawBitmap(backgroundPuke, 35, 85, null); } src = person.cardRect(person.person2[j], pukeWidth, pukeHeight); c.drawBitmap(sourceBitmap, src, dst, null); } c.drawBitmap(backgroundPuke, deskWidth - 35 - pukeWidth, 85, null); } } } } private void deskthreePukes(Canvas c, int pukeWidth, int pukeHeight) { Rect src = new Rect(); Rect dst = new Rect(); for (int i = 0; i < 3; i++) { src = person.cardRect(person.threePukes, pukeWidth, pukeHeight); 12 + pukeHeight); c.drawBitmap(sourceBitmap, src, dst, null); } } @Override public boolean onTouchEvent(MotionEvent event) { return super.onTouchEvent(event); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceCreated(SurfaceHolder holder) { this.thread.setFlag(true); this.thread.start(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { boolean retry = true; this.thread.setFlag(false); while (retry) { try { thread.join(); retry = false; } catch (InterruptedException e) { e.printStackTrace(); } } } class FlushThread extends Thread { private boolean flag = false; private final int span = 500; private final GameView gameView; private final SurfaceHolder holder; public FlushThread(SurfaceHolder holder, GameView gameView) { this.gameView = gameView; this.holder = holder; } @Override public void run() { Canvas canvas; while (this.flag) { canvas = null; try { canvas = this.holder.lockCanvas(null); synchronized (this.holder) { this.gameView.onDraw(canvas); } } finally { if (canvas != null) { this.holder.unlockCanvasAndPost(canvas); } } try { Thread.sleep(span); } catch (InterruptedException e) { e.printStackTrace(); } } } public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; } } }
3、相关实体类扑克牌类:
package com.bison.utils; import java.util.Random; public class Cards { public int[] pukes = new int[54]; private static Cards cardsInstance = null; private Cards() { setPuke(); shuffle(); } public static Cards getInstance() { if (cardsInstance == null) { cardsInstance = new Cards(); } return cardsInstance; } private void setPuke() { for (int i = 0; i < 54; i++) { pukes = i + 1; } } private void shuffle() { Random rdm = new Random(); for (int i = 0; i < 54; i++) { int rdmNo = rdm.nextInt(54); int temp = pukes; pukes = pukes[rdmNo]; pukes[rdmNo] = temp; } } }
玩家类:
package com.bison.utils; import android.graphics.Rect; public class Person { private final Cards mCards = Cards.getInstance(); public int[] person1 = new int[17]; public int[] person2 = new int[17]; public int[] person3 = new int[17]; public int[] threePukes = new int[3]; public Person() { personHold(mCards.pukes); } private void personHold(int[] pukes) { int k = 0; for (int i = 0; i < 3; i++) { if (i == 0) { for (int j = 0; j < 17; j++) { person1[j] = pukes[k++]; } sort(person1); } if (i == 1) { for (int j = 0; j < 17; j++) { person2[j] = pukes[k++]; } sort(person2); } if (i == 2) { for (int j = 0; j < 17; j++) { person3[j] = pukes[k++]; } sort(person3); } } threePukes[0] = pukes[51]; threePukes[1] = pukes[52]; threePukes[2] = pukes[53]; } private void sort(int[] ary) { for (int i = 0; i < ary.length; i++) { for (int j = 0; j < ary.length - i - 1; j++) { if (ary[j] > ary[j + 1]) { int temp = ary[j]; ary[j] = ary[j + 1]; ary[j + 1] = temp; } } } } public Rect cardRect(int cardValue, int width, int height) { int x = 0, y = 0; if (cardValue % 4 == 0) { x = cardValue / 4 - 1; y = 4; } else { x = cardValue / 4; y = cardValue % 4; } return new Rect(left, top, right, bottom); } }
来源:https://www.cnblogs.com/gdszlg/p/10819097.html |