Andriod应用与游戏开发(纸牌小游戏)实验报告_第1页
Andriod应用与游戏开发(纸牌小游戏)实验报告_第2页
Andriod应用与游戏开发(纸牌小游戏)实验报告_第3页
Andriod应用与游戏开发(纸牌小游戏)实验报告_第4页
Andriod应用与游戏开发(纸牌小游戏)实验报告_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Andriod应用与游戏开发——纸牌小游戏实例这是胡老师给的纸牌小游戏,我用eclipse载入solitaire项目,再选择andriod运行方式运行这个项目,自动启动andriod模拟器之后,这个游戏就运行起来了。不知道为什么游戏在andriod模拟器上运行时是倒着的,不过还是可以玩的。这是正宗的电脑上的纸牌小游戏,可见使用java编写的纸牌游戏仿真度也是很高的。由于是在andriod模拟器上运行,对于我那个配置不高的本本电脑,光运行模拟器就卡个半死,运行这游戏卡到无语可想而知,上图中的梅花6在移动时都可以停在红桃7下面半天,使我已经没有在模拟器上玩它的欲望了。。。不说废话了直接进入正题,来看看编写此游戏的java代码。首先我们看看src文件夹下的各个类对此介绍一下各个类,因为我自己也对这些类不太熟悉,肯定会有一些错误的地方,所以仅供参考。AnimateCard类负责驱动游戏,连接其他类别。Card类是纸牌操作类,包括各种操作方法。CardAnchor类则与普遍的cardmain类一样是纸牌操作的具体步骤。Deck类顾名思义是桌面。Move类与movecard类都讲述了具体的鼠标移动纸牌的事件。Options类规定了各个界面的布局。Replay类是重新开始游戏。Rules类是纸牌游戏的具体规则,反正我是看不懂。Solitaire类以及stats类的确不知道是什么类。还是看看其中规则的实现代码吧publicclassCardextendsJLabelimplementsMouseListener,MouseMotionListener{ publicPointpoint,oldPoint;//point是初始鼠标位置 CardMainm=null; publicStringname;//卡片名称1-1 publicStringup="rear";//默认反面 publicintcurrentCol=0; publicbooleancanmove=false;//判断当前卡片是否可以拖拽 publicCard(CardMainm){ this.m=m; this.setSize(71,96); this.setVisible(true); this.addMouseListener(this); this.addMouseMotionListener(this); } publicCard(CardMainm,Stringname,Stringflag){ this.m=m; =name; if(flag=="front") this.turnFront(); else{ this.turnRear(); } this.setSize(71,96); this.setVisible(true); this.addMouseListener(this); this.addMouseMotionListener(this); } publicCardgetNext(Pointpoint){ Cardcard=null; point.y+=m.min; card=(Card)m.table.get(point); if(card!=null) returncard; point.y+=m.max-m.min; card=(Card)m.table.get(point); returncard; } publicvoidmoveto(Pointfrom,Pointto){ Pointto2=newPoint(); to2=to; Cardcard=this.getNext(from); m.table.remove(from); this.setLocation(to2); m.table.put(to2,this); if(card!=null) card.moveto(card.getLocation(),newPoint(to2.x,to2.y+m.max));//递归 } publicvoidmoving(intx,inty)//拖拽事件 { for(Cardcard:m.dragList) { Pointp=card.getLocation(); m.table.remove(p); p.x+=x; p.y+=y; card.setLocation(p); m.container.setComponentZOrder(card,0); m.table.put(p,card); } //Cardcard=this.getNext(this.getLocation()); //解决某个bug //if(this.getCol()==currentCol) //System.out.println(this.getCol()+":"+currentCol); //Pointp=this.getLocation(); /*m.table.remove(p); p.x+=x; p.y+=y; this.setLocation(p); m.container.setComponentZOrder(this,0); m.table.put(p,this); if(card!=null) card.moving(x,y);//递归*/ } publicvoidturnFront(){ this.setIcon(newImageIcon("images/"+name+".gif")); this.up="front"; } publicvoidturnRear(){ this.setIcon(newImageIcon("images/rear.gif")); this.up="rear"; } //错误地方回滚 publicvoidrollback(MouseEvente){ Cardcard=this; Pointlocal=card.getLocation(); this.moveto(local,oldPoint); //System.out.println(this.getLocation().toString()); } //获取当前卡片是第几列(1-7) publicintgetCol(){ PointnowPoint=this.getLocation(); intxx=nowPoint.x,col=0; for(inti=1;i<=7;i++){ if(Math.abs(xx-50-100*(i-1))<80){ col=i; break; } } returncol; } publicCardgetLastCard(){ Cardcard=null,lastcard=null; intcol=this.getCol();//当前列 intx=50+100*(col-1),y=180; //获取第一个 card=m.table.get(newPoint(x,y)); lastcard=card; while(card!=null){ lastcard=card; card=card.getNext(card.getLocation()); } returnlastcard; } publicbooleanCheck(){ //检查范围 CardlastCard=this.getLastCard(); intx=-1,y=-1; if(lastCard!=null){ x=Math.abs(this.getLocation().x-lastCard.getLocation().x); y=Math.abs(this.getLocation().y-lastCard.getLocation().y); } if(!((x>=0)&&(x<40)&&(y>=0)&&(y<40))){ System.out.println("范围出错"); returnfalse; } //检查花色 //黑1红2梅3方4 Stringcur=,last=lastC; intcolor1=Integer.valueOf(cur.substring(0,1)); intcolor2=Integer.valueOf(last.substring(0,1)); //System.out.println("color:"+color1+","+color2); if(Math.abs(color1-color2)%2==0){ System.out.println("colorwrong"); returnfalse; } //检查大小 intnum1=Integer.valueOf(cur.substring(2,cur.length())); intnum2=Integer.valueOf(last.substring(2,last.length())); //System.out.println("num:"+num1+","+num2); if(num2-num1!=1){ System.out.println("num1-num2!=1"); returnfalse; } //檢查牌是否翻開 if(lastCard.up=="rear"){ System.out.println("lastcardup==rear"); returnfalse; } returntrue; } //判断当前是不是待发牌堆 publicbooleanisCards(){ if(this.getLocation().x==600&&this.getLocation().y==30){ returntrue; }else returnfalse; } //判断当前是不是在4个框框内 publicbooleanisFour(){ Pointpoint=this.getLocation(); if(this.getNext(this.getLocation())!=null) returnfalse; intx=-1,y=-1; x=Math.abs(point.x-(50+100*(this.getCol()-1))); y=Math.abs(point.y-30); if((x>=0&&x<=40)&&(y>=0&&y<=40)){ System.out.println(x+","+y); returntrue; }else{ returnfalse; } } //放入框框 publicbooleanlocateFour(){ //框框是空的时候只能放A Cardcard=null; Pointpoint=newPoint(50+100*(this.getCol()-1),30); card=m.table.get(point); if(card==null){ Strings=.substring(2,.length()); if(!s.equals("1")){ System.out.println(s+"不是A"); returnfalse;//不是A } m.table.remove(this.getLocation()); this.setLocation(point); System.out.println(point.toString()); m.table.put(point,this); returntrue; }else{ //说明//框框不是空的时候由小到大,相同花色 Strings1=.substring(0,1); Strings2=.substring(0,1); intnum1=Integer.valueOf(.substring(2, .length())); intnum2=Integer.valueOf(.substring(2, .length())); if(!((s1.equals(s2))&&(num1-num2==1))) { System.out.println("花色不同"); returnfalse; } else{ m.table.remove(this.getLocation()); this.setLocation(point); System.out.println(point.toString()); m.table.put(point,this); returntrue; } } } publicbooleanisK(){ intx=-1,y=-1; Pointpoint=this.getLocation(); x=Math.abs(point.x-(50+100*(this.getCol()-1))); y=Math.abs(point.y-180); if(this.getLastCard()!=null) { System.out.println("当前K下面不为空"); returnfalse; } if(!((x>=0&&x<=40)&&(y>=0&&y<=40))){ System.out.println("区域错误"); returnfalse; } Stringstring=.substring(2,.length()); if(!string.equals("13")) { System.out.println("不是K"); returnfalse; } Pointpoint2=newPoint((50+100*(this.getCol()-1)),180); this.moveto(this.getLocation(),point2); returntrue; } @Override publicvoidmouseDragged(MouseEvente){ //TODOAuto-generatedmethodstub if(this.canmove){ Cardcard=this; Pointnow=e.getPoint(); intx,y; x=now.x-point.x; y=now.y-point.y; moving(x,y); } } @Override publicvoidmousePressed(MouseEvente){ //TODOAuto-generatedmethodstub point=e.getPoint(); oldPoint=this.getLocation(); currentCol=this.getCol(); m.dragList=newArrayList<Card>(); if(this.canmove) { m.dragList.add(this); Cardcard=this.getNext(this.getLocation()); while(card!=null) { System.out.println("list:"+); if(card.canmove) m.dragList.add(card); card=card.getNext(card.getLocation()); } } } @Override publicvoidmouseReleased(MouseEvente){ //TODOAuto-generatedmethodstub CardlastCard=this.getLastCard(); if(lastCard!=null&&lastCard.canmove==false){ if(lastCard.up=="rear"&&lastCard==this){ lastCard.canmove=true; lastCard.turnFront(); }else{ rollback(e); } } if(this.canmove)//如何能移动 { //当移动最上面4个框框时 if(this.isFour()&&this.locateFour())//将放入四个框框 { if(oldPoint.x

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论