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

将开发过程经常用的内容片段珍藏起来,如下内容内容是关于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[i], 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] = i + 1;
}
}

private void shuffle() {
Random rdm = new Random();
for (int i = 0; i < 54; i++) {
int rdmNo = rdm.nextInt(54);
int temp = pukes[i];
pukes[i] = 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值