Guest User

Untitled

a guest
Jun 20th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.35 KB | None | 0 0
  1. #include "ui.h"
  2. #include <stdio.h>
  3. #include <unistd.h>
  4. #include <pthread.h>
  5. #include <stdlib.h>
  6.  
  7. pthread_mutex_t mutex;
  8. pthread_cond_t cond;
  9.  
  10. int gold = 100;
  11. int zombies = 1;
  12. int soldiers = 0;
  13. int health = 100;
  14.  
  15. void *gold_miner()
  16. {
  17. while(1)
  18. {
  19. pthread_mutex_lock(&mutex);
  20. gold = gold + 10;
  21. pthread_cond_signal(&cond);
  22. print_gold(gold);
  23. pthread_mutex_unlock(&mutex);
  24. sleep(1);
  25. }
  26. return NULL;
  27. }
  28.  
  29. void *zombies_attack()
  30. {
  31. while(1)
  32. {
  33. pthread_mutex_lock(&mutex);
  34. while(gold < 100)
  35. {
  36. pthread_cond_wait(&cond, &mutex);
  37. }
  38. pthread_mutex_unlock(&mutex);
  39. for(int i = 5; i > 0; i--)
  40. {
  41. print_zombies(i, zombies);
  42. sleep(1);
  43. }
  44. print_zombies(5, zombies);
  45. pthread_mutex_lock(&mutex);
  46. if(zombies > soldiers)
  47. {
  48. health = health - (zombies - soldiers);
  49. print_health(health);
  50. print_fail("Zombie attack succeded ;(!");
  51. if(health <= 0)
  52. {
  53. game_end(zombies);
  54. }
  55.  
  56. }else
  57. {
  58. print_health(health);
  59. print_succ("Zombie attack deflected! :)");
  60. }
  61. zombies = zombies * 2;
  62. pthread_mutex_unlock(&mutex);
  63. }
  64. return NULL;
  65. }
  66.  
  67. int main()
  68. {
  69. init();
  70. print_gold(100);
  71. print_soldiers(0);
  72. print_zombies(5, 13);
  73. print_health(100);
  74.  
  75. pthread_mutex_init(&mutex, NULL);
  76. pthread_cond_init(&cond,NULL);
  77.  
  78. pthread_t pthzombie;
  79. pthread_create(&pthzombie, NULL, zombies_attack, NULL);
  80.  
  81. while(1)
  82. {
  83. int ch = get_input();
  84.  
  85. switch(ch)
  86. {
  87. case 'q':
  88. game_end(zombies);
  89. break;
  90.  
  91. case 'm':
  92. pthread_mutex_lock(&mutex);
  93. if(gold >= 100)
  94. {
  95. gold = gold - 100;
  96. print_gold(gold);
  97. pthread_t thread;
  98. pthread_create(&thread, NULL, gold_miner, NULL);
  99. print_msg("Miner created!");
  100. }else{
  101. print_fail("Not enough gold!");
  102. }
  103. pthread_mutex_unlock(&mutex);
  104. break;
  105.  
  106. case 's':
  107. pthread_mutex_lock(&mutex);
  108. if(gold >= 10)
  109. {
  110. gold = gold - 10;
  111. print_gold(gold);
  112. soldiers++;
  113. print_soldiers(soldiers);
  114. print_msg("Soldier created!");
  115. }else{
  116. print_fail("Not enough gold!");
  117. }
  118. pthread_mutex_unlock(&mutex);
  119. break;
  120.  
  121. case 'x':
  122. pthread_mutex_lock(&mutex);
  123. if(gold >= 100)
  124. {
  125. gold = gold - 100;
  126. print_gold(gold);
  127. soldiers = soldiers + 10;
  128. print_soldiers(soldiers);
  129. print_msg("10 x soldiers created!");
  130. }else{
  131. print_fail("Not enough gold!");
  132. }
  133. pthread_mutex_unlock(&mutex);
  134. break;
  135. }
  136. }
  137. }
Add Comment
Please, Sign In to add comment