/*
* 楚新钓鱼 - 98版C++兼容版本
* 编译环境: VC++ 6.0 / Turbo C++ 3.0 / Borland C++ 5.5
* 编译命令: cl chuxin_fishing.cpp 或 tcc chuxin_fishing.cpp
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
/* ========== 常量定义 ========== */
#define MAX_LEVEL 10000
#define MAX_MAPS 4
#define MAX_RODS 4
#define MAX_TECHNIQUES 4
#define MAX_FISH_TYPES 12
#define MAX_QUESTS 5
#define NAME_LEN 32
/* ========== 数据结构 ========== */
/* 鱼种定义 /
typedef struct {
char name[NAME_LEN];
int min_level; / 角色最低等级可钓 /
int base_value; / 基础价值(金币) /
int difficulty; / 难度系数 1-100 /
int map_id; / 所属地图ID */
} Fish;
/* 地图定义 /
typedef struct {
char name[NAME_LEN];
int unlock_level; / 解锁所需角色等级 /
int fish_count; / 该地图鱼种数量 /
int fish_indices[MAX_FISH_TYPES]; / 鱼种索引 */
} Map;
/* 鱼竿定义 /
typedef struct {
char name[NAME_LEN];
int price; / 购买价格 /
int power_bonus; / 钓力加成 /
int luck_bonus; / 幸运加成 */
} Rod;
/* 钓法定义 /
typedef struct {
char name[NAME_LEN];
int level; / 当前等级 /
int success_bonus; / 成功率加成% /
int value_bonus; / 鱼获价值加成% */
} Technique;
/* 任务定义 /
typedef struct {
char desc[64];
int target_fish_id; / 目标鱼种索引,-1表示任意 /
int target_count; / 目标数量 /
int current_count; / 当前进度 /
int reward_gold; / 金币奖励 /
int reward_exp; / 经验奖励 /
int completed; / 是否已完成 */
} Quest;
/* 玩家数据 /
typedef struct {
char name[NAME_LEN];
int level;
long exp;
long gold;
int current_rod; / 当前装备鱼竿索引 /
int current_technique; / 当前使用钓法索引 /
int current_map; / 当前所在地图 /
int rods_owned[MAX_RODS]; / 已拥有鱼竿标记 */
int total_fish_caught;
int fish_caught_by_type[MAX_FISH_TYPES];
} Player;
/* ========== 全局数据 ========== */
Fish g_fishes[MAX_FISH_TYPES] = {
{"小鲫鱼", 1, 10, 20, 0},
{"草鱼", 1, 25, 35, 0},
{"鲤鱼", 5, 50, 45, 0},
{"青鱼", 10, 80, 55, 1},
{"鲢鱼", 15, 120, 60, 1},
{"黑鱼", 20, 200, 70, 1},
{"鲈鱼", 30, 350, 75, 2},
{"鳜鱼", 40, 500, 80, 2},
{"黄颡鱼", 50, 800, 85, 2},
{"中华鲟", 100, 2000, 90, 3},
{"金鲤鱼", 200, 5000, 95, 3},
{"楚新神鱼", 500, 20000,99, 3}
};
Map g_maps[MAX_MAPS] = {
{"新手池塘", 1, 3, {0, 1, 2}},
{"青溪河", 5, 3, {3, 4, 5}},
{"洞庭湖", 30, 3, {6, 7, 8}},
{"楚新秘境", 100, 3, {9, 10, 11}}
};
Rod g_rods[MAX_RODS] = {
{"竹制鱼竿", 0, 0, 0},
{"碳素鱼竿", 500, 10, 5},
{"钛合金鱼竿", 3000, 25, 15},
{"楚新神竿", 20000, 50, 30}
};
Technique g_techniques[MAX_TECHNIQUES] = {
{"基础抛竿", 1, 0, 0},
{"沉底钓法", 1, 5, 10},
{"浮钓技法", 1, 10, 20},
{"楚新秘钓", 1, 20, 50}
};
Quest g_quests[MAX_QUESTS];
Player g_player;
/* ========== 函数声明 ========== */
void init_game(void);
void init_quests(void);
void show_main_menu(void);
void show_status(void);
void go_fishing(void);
void upgrade_character(void);
void upgrade_technique(void);
void buy_rod(void);
void switch_map(void);
void switch_rod(void);
void switch_technique(void);
void show_quests(void);
void do_lottery(void);
void show_help(void);
int calc_exp_needed(int level);
int roll_fish(int map_id, int rod_idx, int tech_idx);
void complete_quest_check(void);
/* ========== 主函数 ========== */
int main(void) {
srand((unsigned)time(NULL));
init_game();
}
/* ========== 核心逻辑 ========== */
void init_game(void) {
strcpy(g_player.name, "楚新钓手");
g_player.level = 1;
g_player.exp = 0;
g_player.gold = 100;
g_player.current_rod = 0;
g_player.current_technique = 0;
g_player.current_map = 0;
g_player.total_fish_caught = 0;
}
void init_quests(void) {
/* 初始化5个循环任务 */
strcpy(g_quests[0].desc, "钓5条小鲫鱼");
g_quests[0].target_fish_id = 0;
g_quests[0].target_count = 5;
g_quests[0].current_count = 0;
g_quests[0].reward_gold = 50;
g_quests[0].reward_exp = 30;
g_quests[0].completed = 0;
}
int calc_exp_needed(int level) {
/* 升级所需经验: 等级*100, 满级后返回极大值 */
if (level >= MAX_LEVEL) return 999999999;
return level * 100;
}
void show_status(void) {
printf("\n--- 角色状态 ---\n");
printf("姓名: %s 等级: %d/%d\n", g_player.name, g_player.level, MAX_LEVEL);
printf("经验: %ld/%d 金币: %ld\n", g_player.exp, calc_exp_needed(g_player.level), g_player.gold);
printf("地图: %s 鱼竿: %s 钓法: %s(Lv.%d)\n",
g_maps[g_player.current_map].name,
g_rods[g_player.current_rod].name,
g_techniques[g_player.current_technique].name,
g_techniques[g_player.current_technique].level);
printf("总渔获: %d 条\n", g_player.total_fish_caught);
printf("----------------\n");
}
void show_main_menu(void) {
show_status();
printf("\n=== 主菜单 ===\n");
printf("1. 开始钓鱼\n");
printf("2. 升级角色 (金币)\n");
printf("3. 升级钓法 (金币)\n");
printf("4. 购买/切换鱼竿\n");
printf("5. 切换地图\n");
printf("6. 切换钓法\n");
printf("7. 查看任务\n");
printf("8. 幸运抽奖\n");
printf("9. 帮助说明\n");
printf("0. 退出游戏\n");
printf("请选择: ");
}
/* 钓鱼核心逻辑 */
void go_fishing(void) {
Map *cur_map = &g_maps[g_player.current_map];
Rod *cur_rod = &g_rods[g_player.current_rod];
Technique *cur_tech = &g_techniques[g_player.current_technique];
}
int roll_fish(int map_id, int rod_idx, int tech_idx) {
Map *map = &g_maps[map_id];
Rod *rod = &g_rods[rod_idx];
Technique *tech = &g_techniques[tech_idx];
}
void complete_quest_check(void) {
int i;
for (i = 0; i < MAX_QUESTS; i++) {
if (g_quests[i].completed) continue;
}
/* 升级角色 */
void upgrade_character(void) {
if (g_player.level >= MAX_LEVEL) {
printf("已达满级 %d, 无法继续升级!\n", MAX_LEVEL);
return;
}
}
/* 升级钓法 */
void upgrade_technique(void) {
printf("\n--- 钓法列表 ---\n");
int i;
for (i = 0; i < MAX_TECHNIQUES; i++) {
printf("%d. %s (Lv.%d/%d) 成功率+%d%% 价值+%d%%\n",
i + 1,
g_techniques[i].name,
g_techniques[i].level,
MAX_LEVEL,
g_techniques[i].success_bonus,
g_techniques[i].value_bonus);
}
printf("0. 返回\n");
printf("选择要升级的钓法: ");
}
/* 购买/切换鱼竿 */
void buy_rod(void) {
printf("\n--- 鱼竿列表 ---\n");
int i;
for (i = 0; i < MAX_RODS; i++) {
printf("%d. %s (价格:%d金币) 钓力+%d 幸运+%d [%s]\n",
i + 1,
g_rods[i].name,
g_rods[i].price,
g_rods[i].power_bonus,
g_rods[i].luck_bonus,
g_player.rods_owned[i] ? "已拥有" : "未购买");
}
printf("0. 返回\n");
printf("请选择 (购买或切换): ");
}
/* 切换地图 */
void switch_map(void) {
printf("\n--- 地图列表 ---\n");
int i;
for (i = 0; i < MAX_MAPS; i++) {
printf("%d. %s (解锁等级:%d) [%s]\n",
i + 1,
g_maps[i].name,
g_maps[i].unlock_level,
g_player.level >= g_maps[i].unlock_level ? "可进入" : "未解锁");
}
printf("0. 返回\n");
printf("请选择: ");
}
/* 切换钓法 */
void switch_technique(void) {
printf("\n--- 钓法列表 ---\n");
int i;
for (i = 0; i < MAX_TECHNIQUES; i++) {
printf("%d. %s (Lv.%d) 成功率+%d%% 价值+%d%%\n",
i + 1,
g_techniques[i].name,
g_techniques[i].level,
g_techniques[i].success_bonus,
g_techniques[i].value_bonus);
}
printf("0. 返回\n");
printf("请选择: ");
}
/* 查看任务 */
void show_quests(void) {
printf("\n--- 任务列表 ---\n");
int i;
for (i = 0; i < MAX_QUESTS; i++) {
printf("%d. %s\n", i + 1, g_quests[i].desc);
if (g_quests[i].completed) {
printf(" [已完成]\n");
} else {
printf(" 进度: %d/%d | 奖励: %d金币 +%d经验\n",
g_quests[i].current_count,
g_quests[i].target_count,
g_quests[i].reward_gold,
g_quests[i].reward_exp);
}
}
printf("0. 返回\n");
printf("请选择: ");
int choice;
scanf("%d", &choice);
}
/* 幸运抽奖 */
void do_lottery(void) {
int cost = 100;
printf("\n=== 幸运抽奖 ===\n");
printf("抽奖消耗: %d金币\n", cost);
printf("当前金币: %ld\n", g_player.gold);
printf("1. 抽奖一次\n");
printf("0. 返回\n");
printf("请选择: ");
}
/* 帮助说明 */
void show_help(void) {
printf("\n=== 游戏帮助 =\n");
printf("1. 钓鱼: 消耗时间获取金币和经验\n");
printf("2. 升级角色: 消耗金币直接提升等级\n");
printf("3. 升级钓法: 消耗金币提升钓法等级,增加成功率和鱼获价值\n");
printf("4. 鱼竿: 购买更好的鱼竿增加钓力和幸运值\n");
printf("5. 地图: 高等级解锁新地图,钓更珍贵的鱼\n");
printf("6. 任务: 完成指定钓鱼目标获取额外奖励\n");
printf("7. 抽奖: 消耗100金币随机获取金币和经验\n");
printf("8. 满级: 角色和钓法满级均为 %d 级\n", MAX_LEVEL);
printf("==============\n");
printf("按回车键返回...");
getchar(); getchar();
}