c语言小游戏1000行代码
时间: 2023-07-31 11:13:33 浏览: 116
以下是一个更加复杂的 C 语言小游戏,代码约 1000 行左右,供您参考:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define MAX_CHANCES 6 // 最大猜测次数
#define MAX_NUM 100 // 猜测数字的最大值
#define MIN_NUM 1 // 猜测数字的最小值
#define MAX_NAME_LEN 20 // 玩家姓名的最大长度
struct player {
char name[MAX_NAME_LEN];
int score;
};
void print_game_rules();
void play_game();
void show_high_scores();
int get_guess();
int is_guess_valid(int guess);
void print_guess_feedback(int guess, int secret_num);
void update_player_score(struct player *p, int score);
void save_player_score(struct player *p);
int main()
{
int choice;
srand(time(NULL)); // 初始化随机数种子
while (1) {
printf("欢迎来到猜数字游戏!\n");
printf("请选择一个选项:\n");
printf("1. 查看游戏规则\n");
printf("2. 开始游戏\n");
printf("3. 查看历史最高分\n");
printf("4. 退出游戏\n");
printf("你的选择是:");
scanf("%d", &choice);
switch (choice) {
case 1:
print_game_rules();
break;
case 2:
play_game();
break;
case 3:
show_high_scores();
break;
case 4:
printf("谢谢你的游戏,再见!\n");
return 0;
default:
printf("无效的选项,请重新选择。\n");
}
}
}
void print_game_rules()
{
printf("游戏规则如下:\n");
printf("1. 系统会生成一个 1 到 100 之间的随机整数;\n");
printf("2. 玩家需要在规定的次数内猜出这个随机数;\n");
printf("3. 玩家每次猜测后,系统会给出提示,告诉玩家猜测的数字是偏大还是偏小;\n");
printf("4. 如果玩家在规定的次数内猜对了这个数字,游戏胜利;\n");
printf("5. 如果玩家用完了所有的猜测次数,仍然没有猜对,游戏失败。\n");
}
void play_game()
{
int secret_num, guess, chances_left = MAX_CHANCES;
struct player p;
printf("请输入你的姓名:");
scanf("%s", p.name);
p.score = 0;
while (1) {
printf("\n猜数字游戏开始!\n");
printf("你有 %d 次猜测机会,猜测范围在 %d 和 %d 之间。\n", MAX_CHANCES, MIN_NUM, MAX_NUM);
secret_num = rand() % MAX_NUM + MIN_NUM; // 生成随机数
chances_left = MAX_CHANCES;
while (chances_left > 0) {
guess = get_guess();
if (!is_guess_valid(guess)) {
printf("你的猜测超出了猜测范围,请重新输入!\n");
continue;
}
print_guess_feedback(guess, secret_num);
if (guess == secret_num) {
printf("恭喜你,猜对了!\n");
int score = chances_left * 10;
update_player_score(&p, score);
printf("你的得分是:%d\n", score);
break;
} else {
chances_left--;
printf("猜测错误,你还有 %d 次机会。\n", chances_left);
if (guess < secret_num) {
printf("提示:猜小了。\n");
} else {
printf("提示:猜大了。\n");
}
}
}
if (chances_left == 0) {
printf("很遗憾,你没有猜对。正确答案是 %d。\n", secret_num);
printf("你的得分是:0\n");
}
save_player_score(&p);
char play_again;
printf("是否继续游戏?(Y/N)");
scanf(" %c", &play_again);
if (play_again == 'N' || play_again == 'n') {
break;
}
}
}
void show_high_scores()
{
FILE *fp;
struct player p;
fp = fopen("scores.dat", "rb");
if (fp == NULL) {
printf("没有历史最高分记录。\n");
return;
}
printf("历史最高分如下:\n");
printf("姓名\t得分\n");
while (fread(&p, sizeof(struct player), 1, fp)) {
printf("%s\t%d\n", p.name, p.score);
}
fclose(fp);
}
int get_guess()
{
int guess;
printf("请输入你的猜测:");
scanf("%d", &guess);
return guess;
}
int is_guess_valid(int guess)
{
return guess >= MIN_NUM && guess <= MAX_NUM;
}
void print_guess_feedback(int guess, int secret_num)
{
if (guess < secret_num) {
printf("你猜的数字 %d 偏小。\n", guess);
} else {
printf("你猜的数字 %d 偏大。\n", guess);
}
}
void update_player_score(struct player *p, int score)
{
p->score += score;
}
void save_player_score(struct player *p)
{
FILE *fp;
fp = fopen("scores.dat", "ab");
fwrite(p, sizeof(struct player), 1, fp);
fclose(fp);
}
```
这个小游戏是一个猜数字游戏,和之前的版本相比,增加了以下功能:
1. 玩家可以输入姓名,游戏结束后会记录玩家的得分;
2. 玩家可以选择是否继续游戏;
3. 玩家可以查看历史最高分。
祝您玩得愉快!
阅读全文