System Programming ( Signal ) in C language – Fishing Game

#include <stdio.h>
#include <signal.h>
#include <stdbool.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
bool fishingRodFlag= false;
bool fishEscapeFlag= true;
bool waitingFishAlarm= true;
static int fish=0;
static int pid=0;
static int ranFishUpTime=0;
static int ranFishEscapeTime=0;
void sig_handler(int used){
switch(used){
case SIGINT:
if(!fishingRodFlag){
printf(“nCast the fishing rod!n”);
printf(“Bait into water, waiting fish…n”);
fishingRodFlag = true;
waitingFishAlarm = true;
fishEscapeFlag = true;
ranFishUpTime = (rand()%3)+3;
alarm(ranFishUpTime);
}else{
printf(“nPull the fishing rodn”);
if(!fishEscapeFlag){
fish++;
printf(“Catch a fish!n”);
alarm(0);
}else{
if(!waitingFishAlarm)
printf(“The bait is eatenn”);
}
fishingRodFlag = false;
alarm(0);
printf(“nFishing rod is ready!n”);
}
break;
case SIGTSTP:
printf(“nTotally catch fishes: %dn”,fish);
kill(pid, SIGSTOP);
break;
case SIGALRM:
if(waitingFishAlarm){
if(fishingRodFlag){
printf(“nFish is bitting, pull the fishing rod!n”);
ranFishEscapeTime= 3;  // 3 secs later will escape
alarm(ranFishEscapeTime);
fishEscapeFlag = false;
}
waitingFishAlarm = false;
}else{
fishEscapeFlag = true;
if(fishEscapeFlag){
printf(“nThe fish was escaped!n”);
}
}
break;
}
}
int main(int argc, char* argv[]){
pid = getpid();
//printf(“%d”, pid);
signal(SIGINT, sig_handler);
signal(SIGTSTP, sig_handler);
srand(time(NULL));
signal(SIGALRM, sig_handler);
printf(“nnThis program designed by RongSonHo from CCU comm departmentn”);
printf(“ for System Programming course.n”);
printf(“Designed Date: 2016/05/25(Wed.)n”);
printf(“nnWelcome to RS Fishing Game!n”);
printf(“This Game use system signal to implement.n”);
printf(“nRules:n”);
printf(“ Casting down the fishing rod / Pulling up the rod: Ctrl+Cn”);
printf(“ Exit the Game and get the fishing result: Ctrl+Zn”);
printf(“nnFishing rod is ready!n”);
while(1)
sleep(1);
return 0;

}

作者

RongSon

Graduate Student of CCU COMM Game Development, Network Communication, macOS/Ubuntu/Android, Arduino/Raspberry Pi/Intel Edison, Java/Python/C/C++

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *