我目前正在将语言从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 ++技巧都很棒。
非常感谢您花时间和耐心阅读本文。
答案 0 :(得分:2)
解决您的观点:
不要打扰。只需将所有内容都放在一个源文件中(与Java不同,您完全可以在C ++中执行此操作)。也许有一段时间后你可以将它分解成多个源文件,如果你愿意的话。
如果你已经有了用Java编写的代码,那么就是你的骨架块。
可能不是。但是,如果您只想开始使用看起来像Java代码的程序,则可以随时忽略手动内存管理,调用new
,从不担心delete
。你会在整个地方发生内存泄漏,但一次只有一件事,对吗?
典型的“现代”C ++风格几乎完全避免使用原始指针。你可以稍后再努力。
答案 1 :(得分:1)
我从“边做边学是更好”的角度来看待这个......所以这个答案的目的是让你走上正轨,这样你才能开始尝试。
设计:两种语言非常相似,因此无论Java或C ++如何,类和类结构都无关紧要,因此您可以继续思考“Java术语”使用C ++。你可以从相同的设计开始。
文件组织:将.java文件视为与.h文件和.cpp文件对相对应(并非总是如此,扩展名可能因首选项而异,但是现在这样做了)。将Java代码复制到.h头文件中,并将函数定义隔离到相应的.cpp文件中。通常的语法清理是必要的 - 将导入转换为#include<header.h>
定义,为函数定义添加类名前缀(记住使用ClassName::
语法)。还要记住,包含头文件并不意味着你要包含上下文 - 你仍然需要使用适当的命名空间来引用它。 注意:此步骤将产生编译错误,但这可能是学习和习惯差异的最佳方式。
内存管理:在您的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 ++
<强>继承强>:
对于interface
,请使用关键字class
。并声明函数pure virtual。
从这些“接口”或其他类派生时,现在使用公共继承。 C ++中还有另外两种类型,一旦你变得更加舒适,你就可以开始查找了。
其余的差异主要是语法或者只是命名不同的标准函数,它们不涉及透视变化。希望,当您编写更多代码时,您将能够在这些选项之外进行探索。
祝你好运!