[ create a new paste ] login | about

Link: http://codepad.org/4c6bxomf    [ raw code | fork ]

C, pasted on Oct 1:
#include <stdio.h>
#include <stdlib.h>

#define win 0
#define draw 1
#define lose 2

struct RPGCHARACTER {
	int hp;
	char name[20];
	int str;
	int def;
	int lucky;
};

int randRan(int min, int max);
int attack(struct RPGCHARACTER *a, struct RPGCHARACTER *b);
int escape(struct RPGCHARACTER *a);
int command1(struct RPGCHARACTER *a);
int battle(struct RPGCHARACTER *a, struct RPGCHARACTER *b);
void showStatus(struct RPGCHARACTER *a);
int inputRange(char *mes, int min, int max);
void inputPlayer(struct RPGCHARACTER *a);

int main(void) {
	struct RPGCHARACTER enemies[5];
	struct RPGCHARACTER playerStatus;
	struct RPGCHARACTER player;
	int winCount = 0;
	int loseCount = 0;
	int drawCount = 0;
	int i;
	
	for (i = 0; i < 5; i++) {
		sprintf(enemies[i].name, "おちんぽ%d", i);
		enemies[i].hp = randRan(50, 100);
		enemies[i].str = randRan(25, 75);
		enemies[i].def = randRan(25, 75);
		enemies[i].lucky = randRan(0, 100);
	}
	
	/* inputPlayer(&playerStatus); */
	sprintf(playerStatus.name, "ドキンちゃん");
	playerStatus.hp = 100;
	playerStatus.str = 75;
	playerStatus.def = 75;
	playerStatus.lucky = 100;
	
	player = playerStatus;
	puts("");
	for (i = 0; i < 5; i++) {
		printf("%sとの戦闘\n", enemies[i].name);
		switch (battle(&player, &enemies[i])) {
		case win :
			winCount++;
			if (playerStatus.hp < player.hp + 50) {
				player.hp = playerStatus.hp;
			} else {
				player.hp += 50;
			}
			break;
		case draw:
			drawCount++;
			break;
		case lose:
			loseCount++;
			player.hp = playerStatus.hp;
			break;
		}
	}
	printf("%d勝%d敗%d分け\n", winCount, loseCount, drawCount);
	return EXIT_SUCCESS;
}

int randRan(int min, int max) {
	int ran = max - min + 1;
	int rem = RAND_MAX - ((RAND_MAX - ran + 1) % ran);
	int num;
	do {
		num = rand();
	} while (rem < num);
	return (num % ran) + min;
}

int attack(struct RPGCHARACTER *a, struct RPGCHARACTER *b) {
	int damage;
	if (a->str > b->def) {
		damage = a->str - b->def + 10;
	} else if (a->str < b->def) {
		damage = 5;
	} else {
		damage = 0;
	}
	
	if (b->hp < damage) {
		b->hp = 0;
	} else {
		b->hp -= damage;
	}
	return damage;
}

int escape(struct RPGCHARACTER *a) {
	int n = randRan(0, 100);
	if (n < a->lucky) {
		return 1;
	} else {
		return 0;
	}
}

int command1(struct RPGCHARACTER *a) {
	int i;
	printf("%sのターン\n", a->name);
	printf("1:攻撃\n");
	printf("2:逃げる\n");
	printf("コマンドを入力してください:");
	scanf("%d", &i);
	return i;
}

int battle(struct RPGCHARACTER *a, struct RPGCHARACTER *b) {
	while (1) {
		puts("");
		showStatus(a);
		puts("");
		switch (command1(a)) {
		case 1:
			puts("");
			printf("%sが%sを攻撃しました\n", a->name, b->name);
			printf("%sに%dのダメージを与えました\n", b->name, attack(a, b));
			break;
		case 2:
			puts("");
			printf("%sは逃げだしました\n", a->name);
			switch (escape(a)) {
			case 0:
				printf("逃げることができませんでした\n");
				break;
			case 1:
				printf("逃げることができました\n");
				puts("");
				return draw;
			}
			break;
		}
		puts("");
		if (b->hp < 1) {
			printf("%sとの戦闘に勝ちました\n", b->name);
			puts("");
			return win;
		}
		printf("%sが%sを攻撃しました\n", b->name, a->name);
		printf("%sは%dのダメージを受けました\n", a->name, attack(b, a));
		if (a->hp < 1) {
			printf("%sとの戦闘に負けました\n", b->name);
			puts("");
			return lose;
		}
	}
}

void showStatus(struct RPGCHARACTER *a) {
	printf("name: %s\n", a->name);
	printf("hp  : %d\n", a->hp);
	printf("str : %d\n", a->str);
	printf("def : %d\n", a->def);
	printf("luc : %d\n", a->lucky);
}

int inputRange(char *mes, int min, int max) {
	int n;
	while (1) {
		printf("%s", mes);
		scanf("%d", &n);
		if (min <= n && n <= max) {
			return n;
		}
		printf("%dから%dまでの数字を入力してください\n", min, max);
	}
}

void inputPlayer(struct RPGCHARACTER *a) {
	printf("name : ");
	scanf("%s", &a->name);
	
	a->hp = inputRange("hp(50-100):", 50, 100);
	a->str = inputRange("str(25-75):", 25, 75);
	a->def = inputRange("def(25-75):", 25, 75);
	a->lucky = inputRange("luc(0-100):", 0, 100);
}


Create a new paste based on this one


Comments: