灵通163百科在线-实用的手机,证券免费资源网站

您现在的位置:首页 > K-JAVA资源 > JAVA游戏 >

Java游戏开发:有趣的扑克牌建模程序

教程来源:www.lt163.com     点击数:     更新时间:2017-05-19 20:20

【IT168 技术】罗大佑有歌云:“无聊的日子总是会写点无聊的歌曲......”,我不是歌手,我是程序员,于是无聊的日子总是会写点无聊的程序。程序不能太大,不然没有时间完成;程序应该有趣,不然就达不到消磨时间的目的;程序应该有那么一点挑战性,不然即使写完了也没有进步。

  金钩钓鱼游戏是我儿时经常玩的一种扑克牌游戏,规则非常简单,两个玩家,一旦牌发到手里之后,接下来每个人出什么牌基本上已经就定了,玩家没有自己做决策的机会,所以这个游戏很容易用程序自动模拟出来。

  (一)关于金钩钓鱼游戏

  基本规则(简化版):两个玩家(Player),一副扑克(Deck),大小王(Joker)可要可不要,我们的游戏假定包含大小王,洗牌(Shuffle)之后,每个玩家得到同样数目的牌(27张),玩家任何时候不能看自己手里的牌,玩家依次出牌,每次出一张,轮到自己出牌时,抽出自己手中最底下的一张牌放到牌桌(Board)上,牌桌上的牌按照玩家出牌的顺序摆成一条长链。J(钩)是最特殊的一张牌,当某个玩家出到J时,便将牌桌上的所有牌都归为己有,并放到自己牌池的最上面(与出牌时恰恰相反),此即所谓“金钩钓鱼”,此时牌桌清空,再由此玩家重新出牌。另外,当自己出的牌与牌桌上的某张牌点数相同时,便将牌桌中那张牌及其之后的牌都归为己有(包含自己刚出的那张),再由此玩家重新出牌,比如牌桌上的牌为3,7,8,4,9,当某个玩家出了8,便将牌桌上的8,4,9连同自己刚出的8一并收回,派桌上剩下3,7。最后,谁手中的牌最先出完,谁就输了。

  (二)对于一副牌的建模

  由于花色(Suit)对于此游戏并不重要,所以对扑克牌建模时省略了对花色的建模,同样,由于不需要比较大小,牌的点数(Rank)可以用String来表示(其中王用"W"表示)。

Card.java

  package com.thoughtworks.davenkin.simplefishinggame;

  
public class Card {

  
privateString rank;

  
public Card(String rank) {

  this.rank
= rank;

  }

  
publicString getRank() {

  return rank;

  }

  }

  一副扑克(Deck)由54张牌组成:

Deck.java

  package com.thoughtworks.davenkin.simplefishinggame;

  import java.util.ArrayList;

  import java.util.Collections;

  
public class Deck {

  ArrayList cards
=new ArrayList();

  
public Deck() {

  buildDeck();

  }

  
private void buildDeck() {

  buildNumberCards();

  buildCard(
"J");

  buildCard(
"Q");

  buildCard(
"K");

  buildCard(
"A");

  buildJokerCard();

  }

  
private void buildJokerCard() {

  cards.add(
new Card("W"));

  cards.add(
new Card("W"));

  }

  
private void buildNumberCards() {

  
for (int rank =2; rank <=10; rank++) {

  buildCard(rank);

  }

  }

  
private void buildCard(int rank) {

  
for (int index =1; index <=4; index++) {

  cards.add(
new Card(String.valueOf(rank)));

  }

  }

  
private void buildCard(String rank) {

  
for (int index =1; index <=4; index++) {

  cards.add(
new Card(rank));

  }

  }

  
public ArrayList getCards() {

  return cards;

  }

  
public void shuffle() {

  Collections.shuffle(cards);

  }

  }

  Deck不仅包含54张牌,还定义了洗牌(shuffle)等方法。

  (三)对玩家的建模

  玩家(Player)有自己的名字和自己手中所剩的牌,最重要的是出牌(playCard)成员方法:

没有相关教程
UC浏览器 最先进实用的手机端浏览器,最大限度节省页面浏览流量,点击下载
老虎地图 绿色纯免费GPS定位省流量的最佳手机地图,点击下载
网秦手机安全系列 手机杀毒防盗,防火墙,构建手机安全,点击进入
塞班精品游戏 最流行最给力的塞班S60免签名名精品游戏合集,点击进入
阿里通 手机上轻松拨打网络电话和收发短信,高音质超省话费,资费标准
爱科手机电话 国内最好的手机网络电话领先品牌,价格低廉,点击查看
愤怒的小鸟2 全民挑战超流行休闲游戏力推新作-愤怒的小鸟2,点击查看
魔力旺旺 淘宝卖家首选的交易工具

资源下载排行
文章阅读排行