初学者BlackJack游戏

时间:2012-07-13 23:34:34

标签: c++ blackjack

我目前正在将语言从Java(初学者)转换为c ++,并希望复制我用Java制作的BlackJack游戏,但是在使用代码块进行C ++设置时遇到了困难。

代码设计:

  • 排名和套装的枚举。

  • Rank和Suit的52种变体形成共同创造52个卡片对象

  • 将对象存储在矢量

  • Randomise Vector

  • 从Vector到Player弹出两张牌

  • 弹出一张卡给经销商

  • 当玩家或经销商获得一张牌时,检索到的牌被计算并且值+ =到int player / dealerValue;

我对如何实现这一点感到很遗憾:

Deck.cpp:

     for(Suit suit: Suit.values()) {
        for (Rank rank : Rank.values()) {   
           add(new Card(rank, suit));   
        }
    }
     createDeck()
     shuffleDeck()
     dealUser()
     dealerDealer()

Player.cpp

     userVector
     dealerVector
     getUserVector()
     getDealerVector()
     addCardUser()
     addCardDealer()
     calcUserValue()
     calcDealerValue()

Card.cpp

     card(Rank rank, Suit suit) { }
     getSuit()
     getRank()

BlackJack.cpp

    call deck constructor
    Player user  =  new Player()
    Player dealer = new Player()

---游戏代码---

有人可以覆盖或指导我获得一些好的资源:

  • 管理标题文件

  • 我需要的一些方法的简短骨架代码块

  • 但最重要的是,我是否需要在此程序中使用指针?我的c ++书籍到了之前我几天只能访问在线YouTube教程,对任何类型的内存管理都不太自信。

  • 这个程序的任何一般c ++技巧都很棒。

非常感谢您花时间和耐心阅读本文。

2 个答案:

答案 0 :(得分:2)

解决您的观点:

管理头文件

不要打扰。只需将所有内容都放在一个源文件中(与Java不同,您完全可以在C ++中执行此操作)。也许有一段时间后你可以将它分解成多个源文件,如果你愿意的话。

方法的骨架代码块

如果你已经有了用Java编写的代码,那么就是你的骨架块。

我必须使用指针吗?

可能不是。但是,如果您只想开始使用看起来像Java代码的程序,则可以随时忽略手动内存管理,调用new,从不担心delete。你会在整个地方发生内存泄漏,但一次只有一件事,对吗?

典型的“现代”C ++风格几乎完全避免使用原始指针。你可以稍后再努力。

答案 1 :(得分:1)

我从“边做边学是更好”的角度来看待这个......所以这个答案的目的是让你走上正轨,这样你才能开始尝试。

  1. 设计:两种语言非常相似,因此无论Java或C ++如何,类和类结构都无关紧要,因此您可以继续思考“Java术语”使用C ++。你可以从相同的设计开始。

  2. 文件组织:将.java文件视为与.h文件和.cpp文件对相对应(并非总是如此,扩展名可能因首选项而异,但是现在这样做了)。将Java代码复制到.h头文件中,并将函数定义隔离到相应的.cpp文件中。通常的语法清理是必要的 - 将导入转换为#include<header.h>定义,为函数定义添加类名前缀(记住使用ClassName::语法)。还要记住,包含头文件并不意味着你要包含上下文 - 你仍然需要使用适当的命名空间来引用它。 注意:此步骤产生编译错误,但这可能是学习和习惯差异的最佳方式。

  3. 内存管理:在您的Q指针上,良好的C ++编程约定表示: pointers = no-no,堆栈变量和智能指针= yes-yes 。将堆栈变量用于正常/临时变量。对于参数等,请使用boost::shared_pointer(下载并安装boost libraries)。它的用法就像普通的C ++指针(即使用newlyDealtCard->member语法)。简而言之,原因是共享指针模仿Java对象模型 - 对象分配创建引用而不是副本,并且当所有引用都不再使用时,对象将自动删除。在100次中有99次,行为是相同的,它将节省您花在理解其他事情上的时间。一旦您熟悉C ++如何表示和处理内存,您就可以开始使用其他智能指针类型。 语法:

    卡newdealtCard =新卡(randomSuite,randomValue); //爪哇

    boost :: shared_pointer newlydealtCard(new Card(randomSuite,randomValue)); // C ++

  4. <强>继承: 对于interface,请使用关键字class。并声明函数pure virtual。 从这些“接口”或其他类派生时,现在使用公共继承。 C ++中还有另外两种类型,一旦你变得更加舒适,你就可以开始查找了。

  5. 其余的差异主要是语法或者只是命名不同的标准函数,它们不涉及透视变化。希望,当您编写更多代码时,您将能够在这些选项之外进行探索。

    祝你好运!