Archief - Flex raar probleem

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

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:

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;
			}
		}
		
		
	}
}

Dieterg

Legacy Member
(mag ik vragen welke richting je volgt?).
sorry voor offtopic

sebbonny

Legacy Member
public function addCard(card:Card):void
{
this._hand.addItem(Card);
}

is dat niet case sensitive, en moet dat niet card zijn bij addItem ipv Card?
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan