常州红薯姐 發表於 2019-5-6 13:37:00

Android开发的斗地主牌桌实现源码

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