Skip to content

Instantly share code, notes, and snippets.

@jrosskopf
Created November 1, 2011 18:59
Show Gist options
  • Save jrosskopf/1331536 to your computer and use it in GitHub Desktop.
Save jrosskopf/1331536 to your computer and use it in GitHub Desktop.
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MIN_RAND_NUMBER 10
#define MAX_RAND_NUMBER 60
#define STATE_YOU 0
#define STATE_BOT 1
unsigned int get_random_number() {
time_t now;
time(&now);
srand(now);
return rand() % MAX_RAND_NUMBER + MIN_RAND_NUMBER;
}
bool is_divisor(unsigned int number, unsigned int input) {
return number % input == 0 ? true : false;
}
unsigned int request_divisor_from_bot(unsigned int cur_number) {
for(unsigned int i = rand() % cur_number; i > 0; i--) {
if (is_divisor(cur_number, i) == true) {
printf("BOT: %2d\n", i);
return i;
}
}
printf("BOT: %2d\n", 1);
return 1;
}
unsigned int request_divisor_from_user(unsigned int cur_number) {
unsigned int input_number;
while(1) {
printf("YOU: ");
if (scanf("%u", &input_number) != 1) {
printf("**Fehler** Eingabe keine positive, ganze Zahl\n");
continue;
}
if (input_number >= cur_number) {
printf("**Fehler** Zahl zu gross\n");
continue;
}
if (is_divisor(cur_number, input_number) == false) {
printf("**Fehler** Zahl %d ist kein Divisor von %d\n",
input_number, cur_number);
continue;
}
return input_number;
}
return 0; // never reached
}
int main(int argc, char *argv[]) {
unsigned char player_state = STATE_YOU;
unsigned int cur_number = get_random_number();
while(cur_number > 1) {
printf("Number: %2d\n", cur_number);
if (player_state == STATE_YOU) {
cur_number -= request_divisor_from_user(cur_number);
}
else {
cur_number -= request_divisor_from_bot(cur_number);
}
player_state ^= STATE_BOT;
}
if (player_state == STATE_YOU) {
printf("Du hast verloren!\n");
}
else {
printf("Du hast den Bot geschlagen!\n");
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment