[Cruce-commit] SF.net SVN: cruce:[55] C/trunk
Status: Beta
Brought to you by:
caiusb
|
From: <ali...@us...> - 2010-03-22 23:07:22
|
Revision: 55
http://cruce.svn.sourceforge.net/cruce/?rev=55&view=rev
Author: alinposho
Date: 2010-03-22 23:07:15 +0000 (Mon, 22 Mar 2010)
Log Message:
-----------
Am adugat functionalitate la playRound, dar nu am tetat-o.
Modified Paths:
--------------
C/trunk/client/client.c
C/trunk/protocol/protocol.c
C/trunk/server/gameLogic.c
C/trunk/server/server.c
C/trunk/server/server.h
Modified: C/trunk/client/client.c
===================================================================
--- C/trunk/client/client.c 2010-03-22 21:56:17 UTC (rev 54)
+++ C/trunk/client/client.c 2010-03-22 23:07:15 UTC (rev 55)
@@ -54,11 +54,11 @@
return 1;
}
+//asteapta primirea mesajului ALL_PLAYERS_JOINED_GAME
int waitAllPlayers() {
char message[MSG_SIZE];
int i;
- for (i = 3; i > 0; i--) {
- printf("%d more players to join the game...\n", i);
+ for (; ; ) {
memset(message, 0, MSG_SIZE);
read(player.sfd, &message, MSG_SIZE);
int code = decode_message(message);
@@ -97,6 +97,7 @@
unpad(message);
int code = decode_message(message);
printf("Received %s from server\n", message);
+ fflush(stdout);
if (code == NACK)
return 0;
else
@@ -355,29 +356,32 @@
/**
* Asteapta ca toti jucatorii sa dea start game
*/
-int gameStarted()
+void gameStarted()
{
char message[MSG_SIZE];
- memset(message, 0, MSG_SIZE);
- read(player.sfd, &message, MSG_SIZE);
- int code = decode_message(message);
- if (code == INFO_MSG)
+ for (;;)
{
- printf("%s\n", message);
- return 0;
- }
- else
- {
- if(code == GAME_STARTED)
+ memset(message, 0, MSG_SIZE);
+ read(player.sfd, &message, MSG_SIZE);
+ int code = decode_message(message);
+ if (code == INFO_MSG)
{
- printf("The game has started!\n");
- return 1;
+ printf("%s\n", message);
}
else
{
- printf("Received message: %s with code: %d\n", message, code);
- return 0;
+ if (code == GAME_STARTED)
+ {
+ printf("The game has started!\n");
+ fflush(stdout);
+ return;
+ }
+ else
+ {
+ printf("Received message: %s with code: %d\n", message, code);
+ fflush(stdout);
+ }
}
}
@@ -434,7 +438,7 @@
}
//wait for all player to press start game
- while(gameStarted() != 1);
+ gameStarted();
game();
Modified: C/trunk/protocol/protocol.c
===================================================================
--- C/trunk/protocol/protocol.c 2010-03-22 21:56:17 UTC (rev 54)
+++ C/trunk/protocol/protocol.c 2010-03-22 23:07:15 UTC (rev 55)
@@ -44,4 +44,5 @@
break;
}
}
+
}
Modified: C/trunk/server/gameLogic.c
===================================================================
--- C/trunk/server/gameLogic.c 2010-03-22 21:56:17 UTC (rev 54)
+++ C/trunk/server/gameLogic.c 2010-03-22 23:07:15 UTC (rev 55)
@@ -14,7 +14,7 @@
static void itoa(int n, char a[])
{
- int i, c;
+ int c;
if (n == 0)
{
@@ -35,7 +35,7 @@
//functiacare se ocupa de tot bid-ul de la inceput de joc
//returneaza
-int bid()
+void bid()
{
int i, j;
int expected[] = {BID_RESP,0};
@@ -50,7 +50,13 @@
{
int c_bid;
sendMessage(echipe[i].jucatori[j].sfd,BID,"");
- getMSG(&echipe[i].jucatori[j],expected,bid_ammt,NULL);
+ //Trebuie sa ne asiguram ca mesajul receptionat este bid-ul si nu altceva
+ int code = -1;
+ do
+ {
+ code = getMSG(&echipe[i].jucatori[j],expected,bid_ammt,NULL);
+ }
+ while(code == -1);
c_bid = atoi(bid_ammt);
if (c_bid > maxBid)
{
@@ -60,10 +66,30 @@
handWinnerTeam = i;
}
}
-
- return 0; //TODO ce returnez?
+ //informam jucatorii cine a castigat bid-ul
+ char info[100];
+ sprintf(info, "%s", echipe[handWinnerTeam].jucatori[handWinner].nume);
+ sendMessageToAll(END_BID, info);
+
}
+
+
+
+
+//calculeaza cate puncte a facut echipa in functie de cartile pe care le-a luat
+int puncteFacute(struct echipa team)
+{
+ int i;
+ int valoareCarti = 0;
+ for(i = 0; i < MAX_CARTI; i++)
+ {
+ valoareCarti += team.carti_luate[i].valoare;
+ }
+
+ return valoareCarti / 33;
+}
+
void initCarti(struct carte carti[24])
{
carti[0].valoare = 0;
@@ -139,8 +165,9 @@
carti[23].culoare = 'V';
}
+
//Genereaza si trimite cartile jucatorilor
-int sendCards()
+void sendCards()
{
int r;
int date[24];
@@ -177,14 +204,64 @@
//functia pentru o mana
-int playHand()
+
+void playHand()
{
+ displayInfoMessage(stdout, "Jucam o noua mana!\n");
echipe[0].scor++;
+}
+
+/**
+ * Functia care se ocupa de o runda de joc(de la sendCards pana cand jucatorii nu mai au carti in mana si sunt informati tot de metoda asta
+ * cat a facut fiecare echipa )
+ */
+void playRound()
+{
+ int i;
+ int j;
+
+ displayInfoMessage(stdout, "Jucam o noua runda.\n");
+
+ //fiecare runda incepe cu trimiterea cartilor
+ sendCards();
+
+ bid();
+
+
+ //spunem jcatorului care a castigat bid-ul sa incepa mana
+ for(i = 0; i < CARTI_MANA; i++)
+ {
+ playHand();
+ }
+
+ //Informam jucatorii ca s-a terminat runda si cine cate a facut fiecare echipa
+ char message[MSG_SIZE];
+
+ for (i = 0; i < NUMAR_ECHIPE; i++)
+ {
+ int puncte = puncteFacute(echipe[i]);
+ //Verificam daca nu cumva echipa care a castigat bid-ul a facut minus
+ if(i == maxBidTeam)
+ {
+ if(puncte < maxBid)
+ {
+ puncte = -maxBid;
+ }
+
+
+ }
+ sprintf(message, "Ati facut %d", puncte);
+ //trimitem mesajul jucatorilor;
+ for (j = 0; j < MAX_JUCATORI; j++)
+ {
+ sendMessage(echipe[i].jucatori[j].sfd, END_ROUND,message);
+ }
+ }
+
}
-
//Functie care returneaza true cand s-a sfarsit jocul sfarsitul jocului
int endOfGame()
{
@@ -232,8 +309,8 @@
while(false == endOfGame())
{
- displayInfoMessage(stdout, "***\nJucam o noua mana!\n***");
- playHand();
+ displayInfoMessage(stdout, "***\nJucam o noua runda!\n***");
+ playRound();
}
//s-a sfarsit jocul ii informam pe toti
Modified: C/trunk/server/server.c
===================================================================
--- C/trunk/server/server.c 2010-03-22 21:56:17 UTC (rev 54)
+++ C/trunk/server/server.c 2010-03-22 23:07:15 UTC (rev 55)
@@ -252,7 +252,7 @@
sprintf(buffer,"%s joined the game\n",msg);
displayInfoMessage(stdout, buffer);
- sendAckMessage(fd, "You are welcome to connect to server");
+ sendAckMessage(fd, "You are welcome to connect to server.");
//informam restul jucatorilor
for(i = 0; i < NUMAR_ECHIPE; i++)
{
@@ -424,6 +424,7 @@
}
displayInfoMessage(stdout, "Am receptionat mesajul gresit!\n");
+ return -1;
}
static void sigintRoutine(int sigNo)
@@ -496,9 +497,33 @@
}
}
+/**
+ * Functia care trimite un mesaj tuturor jucatorilor
+ * Returneaza 1 in caz de succes si -1 in caz de eroare
+ */
+int sendMessageToAll(int code, char info[])
+{
+ //adaugam header
+ char buffer[MSG_SIZE];
+ sprintf(buffer, "%d %s", code, info);
+ pad(buffer);
+ //trimitem mesajul tuturor jucatorilor
+ int i;
+ int j;
+ for (i = 0; i < NUMAR_ECHIPE; i++)
+ for (j = 0; j < MAX_JUCATORI; j++)
+ {
+ if (write(echipe[i].jucatori[j].sfd, &buffer, MSG_SIZE) != MSG_SIZE)
+ {
+ return false;
+ }
+ }
+ return true;
+}
+
int main(int argc, char *argv[])
{
displayInfoMessage(stdout, "Server started!\n");
Modified: C/trunk/server/server.h
===================================================================
--- C/trunk/server/server.h 2010-03-22 21:56:17 UTC (rev 54)
+++ C/trunk/server/server.h 2010-03-22 23:07:15 UTC (rev 55)
@@ -54,7 +54,12 @@
*/
void displayInfoMessage(FILE* infoMessageOutput, char *messag);
-int getMSG(struct jucator *jucator, int *expected, char* restOfMessage, int *sender_sfd);
+int getMSG(struct jucator *jucator, int *expected, char* restOfMessage, int *sender_sfd);
+
+//trimite mesajul jucatorului cu receiver_sfd
int sendMessage(int receiver_sfd, int code, char info[]);
+//trimite mesajul tuturor jucatorilor
+int sendMessageToAll(int code, char info[]);
+
#endif /* __SERVER_H__ */
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|