home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
alib
/
d1xx
/
d186
/
cards'o'rama.lha
/
Cards'O'Rama
/
Sources
/
sources.zoo
/
gameloop.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-02-25
|
9KB
|
372 lines
/* gameloop.c */
/* */
/* Okay, now it's time to play... */
int pairs; /* Must be global! */
int playercolor;
int movingplayer;
static int bonus;
gameloop()
{
extern int selectbutton;
extern int turn1, turn2;
extern int score1, score2;
extern struct Screen *s;
extern struct Window *w;
extern struct RastPort *rp;
extern int enemy;
extern int percentage;
int success;
int whichplayer;
/* This is where the game is played! */
pairs = 16; /* pairs available */
bonus = 0;
/* It's better to move first, so we must decide which player will be */
/* the first to move: we pick a number in the range (1 - 100) and if */
/* this number is uneven than the player that moves first is the blue */
/* one. Otherwise the first to move is the yellow one... */
whichplayer = customrand(1, 100); /* establish player to move */
if (whichplayer & 1) /* Uneven: blue player moves first */
{
while(pairs > 0)
{
success = TRUE;
while(success == TRUE && pairs > 0)
{
selectbutton = FALSE;
playercolor = COLOR1;
movingplayer = 1;
success = picktwocards(FIRST);
if (success == PICKED_QUIT)
return(success);
}
success = TRUE;
if ((enemy) && (pairs > 0))
{
writestring(rp, "Now it's my turn!", COLOR2);
Delay(70);
writestring(rp, "Now it's my turn!", FALSE);
}
while(success == TRUE && pairs > 0)
{
selectbutton = FALSE;
playercolor = COLOR2;
movingplayer = 2;
if (enemy) /* If I'm playing against my Amiga... */
{
OffMenu(w, 0x3f00);
OffMenu(w, 0x3f01);
success = amigamoves(); /* Let her make a move */
OnMenu(w, 0x3f00);
OnMenu(w, 0x3f01);
}
else
{
success = picktwocards(SECOND);
if (success == PICKED_QUIT)
return(success);
}
}
}
}
else /* Even: yellow player moves first */
{
while(pairs > 0)
{
success = TRUE;
if (enemy)
{
writestring(rp, "Now it's my turn!", COLOR2);
Delay(70);
writestring(rp, "Now it's my turn!", FALSE);
}
while(success == TRUE && pairs > 0)
{
selectbutton = FALSE;
playercolor = COLOR2;
movingplayer = 2;
if (enemy) /* If I'm playing against my amiga */
{
OffMenu(w, 0x3f00);
OffMenu(w, 0x3f01);
success = amigamoves(); /* Let her make a move */
OnMenu(w, 0x3f00);
OnMenu(w, 0x3f01);
}
else
{
success = picktwocards(SECOND);
if (success == PICKED_QUIT)
return(success);
}
}
success = TRUE;
while(success == TRUE && pairs > 0)
{
selectbutton = FALSE;
playercolor = COLOR1;
movingplayer = 1;
success = picktwocards(FIRST);
if (success == PICKED_QUIT)
return(success);
}
}
}
/* Game over: display informations about the winner (if any...) */
if (score1 > score2)
writestring(rp, "Player 1, you are the winner!", COLOR1);
else if (score2 > score1)
{
if (enemy)
writestring(rp, "Yeah! I Am The Winner!", COLOR2);
else
writestring(rp, "Player 2, you are the winner!", COLOR2);
}
else if (turn1 < turn2)
writestring(rp, "Player 1, you are the winner!", COLOR1);
else if (turn1 > turn2)
{
if (enemy)
writestring(rp, "Yeah! I Am The Winner!", COLOR2);
else
writestring(rp, "Player 2, you are the winner!", COLOR2);
}
else
writestring(rp, "No winner this time...", COLOR3);
OnMenu(w, 0x3f02); /* Re-enable menus */
OnMenu(w, 0x3f03);
OnMenu(w, 0x0001);
OffMenu(w, 0x0021);
OffMenu(w, 0x0041);
if (levelitem[0].Flags & CHECKED)
percentage = 10;
else if (levelitem[1].Flags & CHECKED)
percentage = 20;
else if (levelitem[2].Flags & CHECKED)
percentage = 30;
}
picktwocards(flag)
int flag;
{
extern struct Window *w;
extern int turn1, turn2;
extern int score1, score2;
extern int selectbutton;
extern int memory;
int myvalue;
int cardnumber1;
int cardnumber2;
int cardimage1;
int cardimage2;
int situation = FALSE;
writestring(rp, PICK_FIRST_STRING, playercolor);
OnMenu(w, 0x0021); /* First card: I can peek */
do
{
cardnumber1 = 1000; /* Default illegal values */
cardimage1 = 1000; /* Default illegal values */
myvalue = waitformess();
if (myvalue == PICKED_QUIT)
return(myvalue);
if (selectbutton)
{
cardnumber1 = pickacard();
if (cardnumber1 != 1000)
cardimage1 = showcard(cardnumber1);
}
}
while(cardnumber1 == 1000 || cardimage1 == 1000);
writestring(rp, PICK_FIRST_STRING, FALSE);
writestring(rp, PICK_SECOND_STRING, playercolor);
OffMenu(w, 0x0021); /* Second card: I can't peek */
do
{
cardnumber2 = 1000; /* Default illegal value */
cardimage2 = 1000; /* Default illegal value */
myvalue = waitformess();
if (myvalue == PICKED_QUIT)
return(myvalue);
if (selectbutton)
{
cardnumber2 = pickacard();
if ((cardnumber2 != 1000) && (cardnumber2 != cardnumber1))
cardimage2 = showcard(cardnumber2);
}
}
while(cardnumber2 == 1000 || cardimage2 == 1000);
writestring(rp, PICK_SECOND_STRING, FALSE);
if (cardimage1 == cardimage2)
{
bonus += 1000;
if (pairs > 1)
writestring(rp, RIGHT_STRING, COLOR3);
Delay(50);
deletecard(cardnumber1);
deletecard(cardnumber2);
if (flag == FIRST)
{
score1 += bonus;
turn1 += 1;
pairs -= 1;
update(flag, turn1, score1);
}
else
{
score2 += bonus;
turn2 += 1;
pairs -= 1;
update(flag, turn2, score2);
}
situation = TRUE;
if (pairs > 0)
writestring(rp, RIGHT_STRING, FALSE);
return(situation);
}
bonus = 0;
writestring(rp, WRONG_STRING, COLOR3);
Delay(50);
covercard(cardnumber1);
covercard(cardnumber2);
if (flag == FIRST)
{
turn1 += 1;
update(flag, turn1, score1);
}
else
{
turn2 += 1;
update(flag, turn2, score2);
}
situation = FALSE;
writestring(rp, WRONG_STRING, FALSE);
return(situation);
}
pickacard()
{
extern int currentmousex;
extern int currentmousey;
int row, col;
int cardnumber;
if (currentmousex >= 2 && currentmousex <= 30)
col = 0;
else if (currentmousex >= 33 && currentmousex <= 61)
col = 1;
else if (currentmousex >= 64 && currentmousex <= 92)
col = 2;
else if (currentmousex >= 95 && currentmousex <= 123)
col = 3;
else if (currentmousex >= 126 && currentmousex <= 154)
col = 4;
else if (currentmousex >= 157 && currentmousex <= 185)
col = 5;
else if (currentmousex >= 188 && currentmousex <= 216)
col = 6;
else if (currentmousex >= 219 && currentmousex <= 247)
col = 7;
else
return(1000);
if (currentmousey >= 14 && currentmousey <= 52)
row = 0;
else if (currentmousey >= 55 && currentmousey <= 93)
row = 1;
else if (currentmousey >= 96 && currentmousey <= 134)
row = 2;
else if (currentmousey >= 137 && currentmousey <= 175)
row = 3;
else
return(1000);
cardnumber = col + row * 8;
return(cardnumber);
}
showcard(card)
int card;
{
extern UWORD mycardsposition[];
extern struct Image mycardsimage[];
extern struct RastPort *rp;
int left = 2;
int top = 13;
int toffset;
int loffset;
int cardimage;
toffset = card / 8;
loffset = card %8 ;
top = top + 41 * toffset;
left = left + 31 * loffset;
card += 1;
cardimage = mycardsposition[card];
if (cardimage != 1000)
placecard(rp, &mycardsimage[cardimage], left, top);
return(cardimage);
}
covercard(card)
int card;
{
extern struct Image mycardsimage[];
extern struct RastPort *rp;
int left = 2;
int top = 13;
int toffset;
int loffset;
toffset = card / 8;
loffset = card %8 ;
top = top + 41 * toffset;
left = left + 31 * loffset;
placecard(rp, &mycardsimage[0], left, top);
return(0);
}