发一个Android斗地主游戏的牌桌实现。
为了节约内存资源,每张扑克牌都是剪切形成的,当然这也是当前编程的主流方法。
1、主Activity
-
packagecom.bison;
-
-
importandroid.app.Activity;
-
importandroid.content.pm.ActivityInfo;
-
importandroid.os.Bundle;
-
importandroid.view.Window;
-
importandroid.view.WindowManager;
-
-
-
-
-
-
-
-
publicclassPukeActivityextendsActivity{
- @Override
-
publicvoidonCreate(BundlesavedInstanceState){
-
super.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
-
-
-
-
-
- setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
- setContentView(newGameView(this));
- }
- }
2、牌桌页面
-
packagecom.bison;
-
-
importandroid.content.Context;
-
importandroid.graphics.Bitmap;
-
importandroid.graphics.BitmapFactory;
-
importandroid.graphics.Canvas;
-
importandroid.graphics.Rect;
-
importandroid.view.MotionEvent;
-
importandroid.view.SurfaceHolder;
-
importandroid.view.SurfaceView;
-
-
importcom.bison.utils.Person;
-
-
-
-
-
-
-
-
-
-
publicclassGameViewextendsSurfaceViewimplementsSurfaceHolder.Callback{
-
privateFlushThreadthread=null;
-
privateBitmapsourceBitmap=null;
-
privateBitmapbackgroundDesk=null;
-
privateBitmapbackgroundPuke=null;
-
-
privatefinalPersonperson;
-
privateintpukeWidth=0;
-
privateintpukeHeight=0;
-
privateintdeskWidth=0;
-
privateintdeskHeight=0;
-
privateintleft=0;
-
-
publicGameView(Contextcontext){
-
super(context);
- getHolder().addCallback(this);
-
this.thread=newFlushThread(getHolder(),this);
- initBitmap();
-
this.person=newPerson();
-
this.left=deskWidth/2-(16*25+pukeWidth)/2;
- }
-
-
privatevoidinitBitmap(){
- sourceBitmap=BitmapFactory.decodeResource(getResources(),
- R.drawable.smallcard);
- pukeWidth=sourceBitmap.getWidth()/14;
- pukeHeight=sourceBitmap.getHeight()/4;
-
- backgroundDesk=BitmapFactory.decodeResource(getResources(),
- R.drawable.gameback2);
-
- deskWidth=backgroundDesk.getWidth();
- deskHeight=backgroundDesk.getHeight();
-
- backgroundPuke=BitmapFactory.decodeResource(getResources(),
- R.drawable.cardback);
- }
-
- @Override
-
protectedvoidonDraw(Canvascanvas){
- canvas.drawBitmap(backgroundDesk,0,0,null);
- personPaint(canvas,pukeWidth,pukeHeight);
- deskthreePukes(canvas,pukeWidth,pukeHeight);
- }
-
-
publicvoidpersonPaint(Canvasc,intpukeWidth,intpukeHeight){
- Rectsrc=newRect();
- Rectdst=newRect();
-
-
for(inti=0;i<3;i++){
-
for(intj=0;j<17;j++){
-
if(i==0){
- c.drawBitmap(backgroundPuke,35,85,null);
- }
-
if(i==1){
- src=person.cardRect(person.person2[j],pukeWidth,
- pukeHeight);
- dst.set(left+j*25,this.deskHeight-20-pukeHeight,
- left+j*25+pukeWidth,deskHeight-20);
- c.drawBitmap(sourceBitmap,src,dst,null);
- }
-
if(i==2){
- c.drawBitmap(backgroundPuke,deskWidth-35-pukeWidth,
-
85,null);
- }
- }
- }
- }
-
-
privatevoiddeskthreePukes(Canvasc,intpukeWidth,intpukeHeight){
- Rectsrc=newRect();
- Rectdst=newRect();
-
for(inti=0;i<3;i++){
- src=person.cardRect(person.threePukes[i],pukeWidth,pukeHeight);
- dst.set(280+i*pukeWidth,12,280+(i+1)*pukeWidth,
-
12+pukeHeight);
- c.drawBitmap(sourceBitmap,src,dst,null);
- }
- }
-
- @Override
-
publicbooleanonTouchEvent(MotionEventevent){
-
returnsuper.onTouchEvent(event);
- }
-
- @Override
-
publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,
-
intheight){
- }
-
- @Override
-
publicvoidsurfaceCreated(SurfaceHolderholder){
-
this.thread.setFlag(true);
-
this.thread.start();
- }
-
- @Override
-
publicvoidsurfaceDestroyed(SurfaceHolderholder){
-
booleanretry=true;
-
this.thread.setFlag(false);
-
while(retry){
-
try{
- thread.join();
- retry=false;
- }catch(InterruptedExceptione){
- e.printStackTrace();
- }
- }
-
- }
-
-
classFlushThreadextendsThread{
-
privatebooleanflag=false;
-
privatefinalintspan=500;
-
privatefinalGameViewgameView;
-
privatefinalSurfaceHolderholder;
-
-
publicFlushThread(SurfaceHolderholder,GameViewgameView){
-
this.gameView=gameView;
-
this.holder=holder;
- }
-
- @Override
-
publicvoidrun(){
- Canvascanvas;
-
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(InterruptedExceptione){
- e.printStackTrace();
- }
- }
- }
-
-
publicbooleanisFlag(){
-
returnflag;
- }
-
-
publicvoidsetFlag(booleanflag){
-
this.flag=flag;
- }
-
- }
-
- }
3、相关实体类
扑克牌类:
-
packagecom.bison.utils;
-
-
importjava.util.Random;
-
-
-
-
-
-
-
-
publicclassCards{
-
publicint[]pukes=newint[54];
-
-
privatestaticCardscardsInstance=null;
-
-
privateCards(){
- setPuke();
- shuffle();
- }
-
-
publicstaticCardsgetInstance(){
-
if(cardsInstance==null){
- cardsInstance=newCards();
- }
-
returncardsInstance;
- }
-
-
privatevoidsetPuke(){
-
for(inti=0;i<54;i++){
- pukes[i]=i+1;
- }
- }
-
-
privatevoidshuffle(){
- Randomrdm=newRandom();
-
for(inti=0;i<54;i++){
-
intrdmNo=rdm.nextInt(54);
-
inttemp=pukes[i];
- pukes[i]=pukes[rdmNo];
- pukes[rdmNo]=temp;
- }
- }
- }
玩家类:
-
packagecom.bison.utils;
-
-
importandroid.graphics.Rect;
-
-
-
-
-
-
-
-
publicclassPerson{
-
privatefinalCardsmCards=Cards.getInstance();
-
-
publicint[]person1=newint[17];
-
publicint[]person2=newint[17];
-
publicint[]person3=newint[17];
-
-
publicint[]threePukes=newint[3];
-
-
publicPerson(){
- personHold(mCards.pukes);
- }
-
-
privatevoidpersonHold(int[]pukes){
-
intk=0;
-
for(inti=0;i<3;i++){
-
if(i==0){
-
for(intj=0;j<17;j++){
- person1[j]=pukes[k++];
- }
- sort(person1);
- }
-
if(i==1){
-
for(intj=0;j<17;j++){
- person2[j]=pukes[k++];
- }
- sort(person2);
- }
-
if(i==2){
-
for(intj=0;j<17;j++){
- person3[j]=pukes[k++];
- }
- sort(person3);
- }
- }
-
- threePukes[0]=pukes[51];
- threePukes[1]=pukes[52];
- threePukes[2]=pukes[53];
- }
-
-
privatevoidsort(int[]ary){
-
for(inti=0;i<ary.length;i++){
-
for(intj=0;j<ary.length-i-1;j++){
-
if(ary[j]>ary[j+1]){
-
inttemp=ary[j];
- ary[j]=ary[j+1];
- ary[j+1]=temp;
- }
- }
- }
- }
-
-
-
-
-
-
-
-
publicRectcardRect(intcardValue,intwidth,intheight){
-
intx=0,y=0;
-
if(cardValue%4==0){
- x=cardValue/4-1;
- y=4;
- }else{
- x=cardValue/4;
- y=cardValue%4;
- }
-
-
intleft=x*width;
-
inttop=(y-1)*height;
-
intright=(x+1)*width;
-
intbottom=(y)*height;
-
returnnewRect(left,top,right,bottom);
- }
- }
PS:斗地主还是可以做成很复杂的。相关图片
分享到:
相关推荐
安卓Android源码——斗地主源码实现.zip
重要源码,欢迎下载
android斗地主源码SurfaceView框架实现,内部代码有详细注释,方便学习游戏Surfaceview框架
网络很多pdf的,没有资源图片,而且代码不全,先找到一个demo,有图片资源。
Android应用源码开发Demo,主要用于毕业设计学习。
本站之前介绍过一个单机斗地主项目源码,在本站搜索斗地主就可以找到,那个项目算法正常不过ui很一般,本项目也是一个安卓斗地主项目源码本项目的UI很漂亮,但是游戏的算法有问题,如果把之前那个斗地主的算法拿过来...
本项目是一款单机版本斗地主游戏源码,应该说这个游戏太强大了,是一款android上的手机游戏,可以与手机进行发牌,洗牌,出牌等动作,还可以叫地主,等 可以学习下Canvas的功能,很多游戏场景都是基于Canvas画出来的...
源码参考,欢迎下载
Android斗地主游戏完整源代码,游戏操作:2:发牌-1:随机地主 0:游戏中 1:游戏结束,重新开始或者退出。游戏没有结束,继续。如果本家ID是NPC,则执行语句中的操作。用到很多android编程技巧,比如 时间倒计时、随机...
斗地主小游戏源码 PHP在线斗地主源码 PHP+flash
java课程设计——游戏开发,基于java实现的斗地主单机游戏源码 java课程设计——游戏开发,基于java实现的斗地主单机游戏源码 java课程设计——游戏开发,基于java实现的斗地主单机游戏源码 java课程设计——游戏...
安卓Android源码——游戏源码带有详细注释的单机斗地主项目.zip
三家斗地主HTML5源码
本项目是一个单机的斗地主项目源码,不过这个项目的分辨率有点问题,我在真机和模拟器的480*800上无论是横屏还是竖屏游戏都只能显示一部分画面,可能项目是使用的更低分辨率创建的,不过我玩了玩这个项目的却比java...
不要分,但是希望大家下载了能评测下,做个评论好吗,谢谢支持,之前发了个java版的单机斗地主,受到大家的支持,现在又初学安卓,于是花了一个星期做了一个安卓版的斗地主,代码比之前有所优化,可能还是有待发现的...
腾讯手机游戏,QQ欢乐斗地主,游戏源码,全套完整的手机游戏源代码,做手游的同学绝对不容错过 package com.tq.tencent.android.sdk; import com.tq.tencent.android.sdk.cp_config.AppInfoConfig; public class ...
html5 canvas实现的手机端斗地主游戏源码
Cocos2d-X斗地主游戏完整源码,游戏分有新手场,初级场,中级场,高级场和大师场5个级别,画面非常精美。。