My problem is this, I have the following code(supposed to be a working Blackjack - so far it only displays 4 cards on screen and does some basic math):
Code: Select all
//made by rezil, do not modify!
/* position can be: 1, 2, 3, 4, 5
pos 1: first card the player is dealt
pos 2: the second card the player is dealt
pos 3: if user hit, draw card here
pos 4: if user hit after pos 3, draw card here
pos 5; if user hit after pos 4, draw card here
*/
main()
{
thread trig_start();
}
trig_start()
{
t = getent("trigger_2","targetname");
while(1)
{
t waittill("trigger", user);
user thread initgame();
wait 5;
}
}
initGame()
{
self notify("another_game");
self endon("another_game");
self.score = 0;
self.dealer_score = 0;
self dealFirstTwoCards();
}
dealFirstTwoCards()
{
card1 = randomInt(13)+1;
card1_dealer = randomInt(13)+1;
suite1 = randomint(4)+1;
suite1_dealer = randomint(4)+1;
card2 = randomInt(13)+1;
card2_dealer = randomInt(13)+1;
suite2 = randomint(4)+1;
suite2_dealer = randomint(4)+1;
self dealCard("self", card1, suite1, 1, 0);
self.hudent_card1 = self.card[0];
self.value_card1 = self.card[0].game_value;
wait 0.3;
self dealCard("dealer", card1_dealer, suite1_dealer, 1, 1);
self.hudent_card1_dealer = self.card[1];
self.value_card1_dealer = self.card[1].game_value;
wait 0.3;
self dealCard("self", card2, suite2, 2, 2);
self.hudent_card2 = self.card[2];
self.value_card2 = self.card[2].game_value;
wait 0.3;
self dealCard("dealer", card2_dealer, suite2_dealer, 2, 3);
self.hudent_card2_dealer = self.card[3];
self.value_card2_dealer = self.card[3].game_value;
wait 0.3;
wait 0.5;
iprintlnbold("My cards: "+self.value_card1+ " and " +self.value_card2+ ". Dealer cards: " +self.value_card1_dealer+ " and " +self.value_card2_dealer+ ".");
if(checkBlackjack(self.value_card1, self.value_card2)) iprintlnbold("game over, you win");
else if(checkBlackjack(self.value_card1_dealer, self.value_card2_dealer)) iprintlnbold("game over, dealer wins");
}
//Draws a HUD image of a playing card with the value <value> to the specified person 'person' in the specified suite 'suite'. cardnum is the card index
dealCard(person, value, suite, position, cardnum)
{
if(!isdefined(self.card)) self.card = [];
if(!isdefined(self.card[cardnum]))
{
self.card[cardnum] = newclientHudElem(self);
self.card[cardnum].alignX = "left";
self.card[cardnum].alignY = "top";
self.card[cardnum].alpha = 1;
switch(position)
{
case 1:
if(person=="self") self.card[cardnum] setCardXY(190, 240);
else if(person=="dealer") self.card[cardnum] setCardXY(190, 80);
break;
case 2:
if(person=="self") self.card[cardnum] setCardXY(240, 240);
else if(person=="dealer") self.card[cardnum] setCardXY(240, 80);
break;
case 3:
if(person=="self") self.card[cardnum] setCardXY(290, 240);
else if(person=="dealer") self.card[cardnum] setCardXY(290, 80);
break;
case 4:
if(person=="self") self.card[cardnum] setCardXY(340, 240);
else if(person=="dealer") self.card[cardnum] setCardXY(340, 80);
break;
case 5:
if(person=="self") self.card[cardnum] setCardXY(390, 240);
else if(person=="dealer") self.card[cardnum] setCardXY(390, 80);
break;
default:
iprintln("^1 0 position set(or is greater than 5), ERROR!^3*");
break;
}
if((position==1) && (person=="dealer"))
{
if(randomint(2)==0) self.card[cardnum] setshader("bicycle_red", 72, 96);
else self.card[cardnum] setshader("bicycle_blue", 72, 96);
}
else self.card[cardnum] setshader(getShaderFromCard(value, suite), 72, 96);
if(value>10) self.card[cardnum].game_value=10;
else self.card[cardnum].game_value=value;
return self.card[cardnum].game_value;
}
}
//gets the correct shader name to use, also gives the card value
getShaderFromCard(value, suite)
{
shader_name = "";
switch(value)
{
case 1:
shader_name = "ace_";
break;
case 2:
shader_name = "two_";
break;
case 3:
shader_name = "three_";
break;
case 4:
shader_name = "four_";
break;
case 5:
shader_name = "five_";
break;
case 6:
shader_name = "six_";
break;
case 7:
shader_name = "seven_";
break;
case 8:
shader_name = "eight_";
break;
case 9:
shader_name = "nine_";
break;
case 10:
shader_name = "ten_";
break;
case 11:
shader_name = "jack_";
break;
case 12:
shader_name = "queen_";
break;
case 13:
shader_name = "king_";
break;
default:
iprintln("^1card value is 0, ERROR!^3*");
break;
}
shader_name = shader_name+"of";
switch(suite)
{
case 1:
shader_name = shader_name+"_clubs";
break;
case 2:
shader_name = shader_name+"_spades";
break;
case 3:
shader_name = shader_name+"_hearts";
break;
case 4:
shader_name = shader_name+"_diamonds";
break;
default:
iprintln("^1suite is 0, ERROR!^3*");
break;
}
return shader_name;
}
setCardXY(x_val, y_val)
{
self.x = x_val;
self.y = y_val;
}
checkBlackjack(value1, value2)
{
if((value1 == 1) || (value2==1))
{
value1+=10; //doesn't matter which card gets 10 added, if either of them is an ace
if(value1+value2==21)
{
iprintlnbold("^2$$$^7BLACKJACK!^2$$$");
return true;
}
else return false;
}
else return false; //need an ace for a blackjack
}
If I display the cards and delete them after spawning(and undefing the values) it works fine. The problem is when I don't do that I get the error. Perhaps I did something wrong in the script or there are simply too many 2d images precached(unlikely).
Hope you guys provide some answers to this, me and IzNoGoD have been at it for hours to no avail.
