MiniJeffrey
Legacy Member
Hi,
Ik zit een simpele blackjack in flash te programmeren via flex, maar ik krijg een heel rare error in mijn klasse Game.
Ziehier de code:
en de error:
Bijkomende klassen:
CARD
SHOE
PLAYER
Ik zit een simpele blackjack in flash te programmeren via flex, maar ik krijg een heel rare error in mijn klasse Game.
Ziehier de code:
Code:
package games{
public class Game {
import cardgames.Card;
import cardgames.Player;
import cardgames.Shoe;
import mx.collections.ArrayCollection;
private var _shoe:Shoe;
private var _dealer:Player;
private var _player:Player;
private var _endDeal:Boolean;
public function Game():void {
this._shoe = new Shoe();
setValues(this._shoe.shoeCards);
shuffle(this._shoe.shoeCards);
this._player = new Player();
this._dealer = new Player();
}
public function newDeal():void {
this._endDeal = false;
this._dealer.emptyHand();
this._player.emptyHand();
for (var i:Number=0;i<2;i++){
switch (i){
case 0:
draw(this._dealer,true);
draw(this._dealer,false);
break;
case 1:
draw(this._player,true);
draw(this._player,true);
break;
}
}
checkEndDeal();
}
private function draw(player:Player, faceUp:Boolean):void {
if(this._shoe.isEmpty)
{
this._shoe.makeDeck();
setValues(this._shoe.shoeCards);
shuffle(this._shoe.shoeCards);
}
var card:Card = this._shoe.draw();
// trace (card.name);
card.faceUp = faceUp;
player.addCard(card);
}
private function checkEndDeal():void {
if (this.playerTotal >=21) dealerPlay();
}
public function playerNextCard():void {
if (!this._endDeal){
draw(this._player,true);
checkEndDeal();
}
}
public function playerPass():void {
if (!this._endDeal) dealerPlay();
}
public function dealerPlay():void {
this._endDeal = true;
this._dealer.turnCardsFaceUp();
var plTot:Number = this.playerTotal;
while( (plTot < 21) || (plTot == 21 && this.playerCards.length > 2 && plTot > this.dealerTotal))
draw(this._dealer,true);
}
public function getWinner():String {
var theWinner:String;
if (this.playerTotal>21) {
theWinner = "Player Burned, Dealer wins!";
} else if (this.playerTotal == 21 && this.playerCards.length == 2 && this.dealerTotal != 21) {
theWinner = "BLACKJACK";
} else if (this.playerTotal == this.dealerTotal) {
theWinner = "Equal";
} else if (this.dealerTotal>21) {
theWinner = "Dealer Burned, Player wins!";
} else if (this.dealerTotal>this.playerTotal) {
theWinner = "Dealer wins!";
} else {
theWinner = "Player wins!";
}
return theWinner;
}
private function setValues(cardDeck:ArrayCollection):void {
for (var i:Number = 0; i<52; i++) {
if (i%13<10) {
cardDeck[i].value = (i%13)+1;
} else {
cardDeck[i].value = 10;
}
}
}
private function shuffle(cardDeck:ArrayCollection):void {
var id1:Number;
var id2:Number;
var numCards:Number = cardDeck.length;
var numSwaps:Number = numCards*3;
var card:Card;
for (var i:Number = 1; i<=numSwaps; i++) {
id1 = Math.floor(Math.random()*numCards);
id2 = Math.floor(Math.random()*numCards);
card = cardDeck[id1];
cardDeck[id1] = cardDeck[id2];
cardDeck[id2] = card;
}
}
public function getCardImage(card:Object):String{
var c:Card = Card(card);
if (c.faceUp) return c.imageUrl;
else return 'assets/cards/back.gif';
return null;
}
public function get playerCards():ArrayCollection {
return this._player.hand;
}
public function get dealerCards():ArrayCollection {
return this._dealer.hand;
}
public function get playerTotal():Number {
return this.totalValue(this._player);
}
public function get dealerTotal():Number {
return this.totalValue(this._dealer);
}
public function get endDeal():Boolean {
return this._endDeal;
}
private function totalValue(player:Player):Number {
var ace:Boolean = false;
var total:Number = 0;
for (var i:Number = 0; i<player.count; i++) {
var c:Card = Card(player.hand[i]);
total += c.value;
if (Card(player.hand[i]).name == "ace")ace = true;
}
if (ace && (total+10)<=21)total += 10;
return total;
return 0;
}
}
}
en de error:
Code:
[SWF] C:\Users\Jeffrey\Documents\SCHOOL\Multimedia\BLACKJACKLESSON\bin-debug\BLACKJACK.swf - 742.251 bytes after decompression
TypeError: Error #1034: Type Coercion failed: cannot convert cardgames::Card$ to cardgames.Card.
at games::Game/totalValue()[C:\Users\Jeffrey\Documents\SCHOOL\Multimedia\BLACKJACKLESSON\src\games\Game.as:141]
at games::Game/get playerTotal()[C:\Users\Jeffrey\Documents\SCHOOL\Multimedia\BLACKJACKLESSON\src\games\Game.as:129]
at games::Game/checkEndDeal()[C:\Users\Jeffrey\Documents\SCHOOL\Multimedia\BLACKJACKLESSON\src\games\Game.as:54]
at games::Game/newDeal()[C:\Users\Jeffrey\Documents\SCHOOL\Multimedia\BLACKJACKLESSON\src\games\Game.as:37]
at BLACKJACK/initGame()[C:\Users\Jeffrey\Documents\SCHOOL\Multimedia\BLACKJACKLESSON\src\BLACKJACK.mxml:30]
at BLACKJACK/___BLACKJACK_Application1_creationComplete()[C:\Users\Jeffrey\Documents\SCHOOL\Multimedia\BLACKJACKLESSON\src\BLACKJACK.mxml:2]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.core::UIComponent/dispatchEvent()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:9298]
at mx.core::UIComponent/set initialized()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:1169]
at mx.managers::LayoutManager/doPhasedInstantiation()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\managers\LayoutManager.as:718]
at Function/http://adobe.com/AS3/2006/builtin::apply()
at mx.core::UIComponent/callLaterDispatcher2()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:8628]
at mx.core::UIComponent/callLaterDispatcher()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:8568]
Bijkomende klassen:
CARD
Code:
package cardgames
{
import mx.formatters.NumberBase;
public class Card
{
private var _suit:String; //private variabele met _ beginnen!
private var _name:String;
private var _value:Number;
private var _imageUrl:String;
private var _faceUp:Boolean;
public function Card(suit:String, name:String, url:String)
{
this._suit = suit;
this._name = name;
this._imageUrl = url;
this._faceUp = false;
}
public function get suit():String
{
if(this._faceUp) return this._suit; //als de kaart omgedraaid ligt mag je de waarde etc niet kunnen opvragen!
else return '';
}
public function get name():String
{
if(this._faceUp) return this._name;
else return '';
}
public function get value():Number
{
if(this._faceUp) return this._value;
else return 0;
}
public function set value(value:Number):void
{
this._value = value;
}
public function get imageUrl():String
{
if(this._faceUp) return this._imageUrl;
else return '';
}
public function get faceUp():Boolean
{
return this._faceUp;
}
public function set faceUp(value:Boolean):void
{
this._faceUp = value;
}
}
}
SHOE
Code:
package cardgames{
public class Shoe {
import mx.collections.ArrayCollection;
private var _cardDeck:ArrayCollection = new ArrayCollection();
public function Shoe() {
makeDeck();
}
public function makeDeck():void{
var cS:String;
var cN:String;
var cI:String;
var url:String = "assets/cards/";
var cardSuite:Array = new Array("hearts","spades","diamonds","cross");
var cardName:Array = new Array("ace", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "jack", "queen", "king");
for( var i:Number=0; i<52 ; i++)
{
cS = cardSuite[i/13];
cN = cardName[i%13];
cI = url+'kaart'+i+'.gif';
this._cardDeck.addItem(new Card(cS, cN, cI));
}
}
public function draw():Card
{
return Card(this._cardDeck.removeItemAt(0));
}
public function get shoeCards():ArrayCollection {
return this._cardDeck;
}
public function get isEmpty():Boolean{
return (this._cardDeck.length <= 0);
}
}
}
PLAYER
Code:
package cardgames{
public class Player {
import mx.collections.ArrayCollection;
private var _hand:ArrayCollection;
public function Player() {
this._hand = new ArrayCollection();
}
public function emptyHand():void {
this._hand.removeAll();
}
public function get hand():ArrayCollection {
return this._hand;
}
public function get count():Number{
return this._hand.length;
}
public function addCard(card:Card):void
{
this._hand.addItem(Card);
}
public function turnCardsFaceUp():void
{
for each (var c:Card in this._hand)
{
c.faceUp = true;
}
}
}
}